BrainScript SGD-Block
Der SGD-Konfigurationsblock steuert das Verhalten des SGD -Algorithmus (Stochastic Gradient Descent) in CNTK. Wenn Sie mit anderen Toolkits vertraut sind, sollten Sie sich unbedingt auschecken.
- How is the minibatch size defined in CNTK
- How is the epoch size defined in CNTK
- Wie können Sie Lernraten- und Dynamikparameter aus anderen Toolkits konvertieren?
Der SGD-Konfigurationsblock weist die folgende Struktur und Standardwerte auf:
SGD = {
# Training process control
modelPath = ...
trainCriterionNodeName = ...
evalCriterionNodeName = ...
maxEpochs = ...
epochSize = 0
minibatchSize = 256
truncated = false
dropoutRate = 0
maxTempMemSizeInSamplesForCNN = 0
keepCheckPointFiles = false
disableWkInBatchNormal = false
# Learning rate and momentum control
learningRatesPerSample = ...
learningRatesPerMB = ...
minLearningRatePerSample = ...
momentumAsTimeConstant = ...
momentumPerMB = ...
useNAG = false
autoAdjust = {
autoAdjustLR = "none" # | "searchBeforeEpoch" | "adjustAfterEpoch"
autoAdjustMinibatch = false
# for autoAdjustLR = "adjustAfterEpoch":
reduceLearnRateIfImproveLessThan = 0
learnRateDecreaseFactor = 0.618
increaseLearnRateIfImproveMoreThan = infinity
learnRateIncreaseFactor = 1.382
loadBestModel = true
learnRateAdjustInterval = 1
useCVSetControlLRIfCVExists = true
useEvalCriterionControlLR = false
# for autoAdjustLR = "searchBeforeEpoch":
numMiniBatch4LRSearch = 500
numPrevLearnRates = 5
numBestSearchEpoch = 1
# for autoAdjustMinibatch = true:
numMiniBatch4LRSearch = 500
minibatchSizeTuningFrequency = 1
minibatchSizeTuningMax = 1048576
minibatchSearchCriterionErrorMargin = 1
}
parallelTrain = {
parallelizationMethod = "none" # | "dataParallelSGD" | "blockMomentumSGD" | "modelAveragingSGD"
parallelizationStartEpoch = 1
distributedMBReading = false
syncPerfStats = 0
# for parallelizationMethod = "dataParallelSGD"
dataParallelSGD =
{
gradientBits = (8*sizeof(precision)) # | 1 | 2
useBufferedAsyncGradientAggregation= false
}
# for parallelizationMethod = "blockMomentumSGD"
blockMomentumSGD = {
blockSize = (120000 * #workers)
blockMomentumAsTimeConstant = (-blockSize / log(1 - 1/#workers))
resetSGDMomentum = true;
useNesterovMomentum = true;
blockLearningRate = 1.0
}
# for parallelizationMethod = "modelAveragingSGD"
modelAveragingSGD = {
blockSize = (40000 * #workers)
}
}
# Gradient control
gradientClippingWithTruncation = true
clippingThresholdPerSample = (infinity)
L2RegWeight = 0
L1RegWeight = 0
gaussianNoiseInjectStd = 0
gradUpdateType = "" # "" | "adagrad" | "rmsProp" | "fsAdaGrad"
# for gradUpdateType = "adaGrad" or "rmsProp":
normWithAveMultiplier = true
# for gradUpdateType = "rmsProp":
rms_wgt_inc = 1.2
rms_wgt_dec = 0.75
rms_wgt_max = 10.0
rms_wgt_min = 0.1
rms_gamma = 0.99
# Information display
traceLevel = 0
firstMBsToShowResult = 10
numMBsToShowResult = 10
numMBsToCUDAProfile = 0
# Precompute
useAllDataForPreComputedNode = true
# Gradient check
gradientCheck = false
sigFigs = 6
}
Parameter
Schulungsprozesssteuerung
trainCriterionNodeName
: der Name des Schulungskriteriumsknotens. Wenn nicht der Standardschulungskriteriumknoten im Netzwerk verwendet wird.evalCriterionNodeName
: der Name des Bewertungskriteriumsknotens. Wenn nicht der Standardbewertungskriteriumknoten im Netzwerk verwendet wird.epochSize
: Klicken Sie hier, um mehr über die EpocheNgröße zu erfahren.keepCheckPointFiles
: ob Sie die Häkchendatei nach Beginn einer neuen Epoche beibehalten möchten. Gültige Werte sindtrue
undfalse
(Standard).disableWkInBatchNormal
: ob der Gewichtsverwesungsbegriff der Batch normalisierung während der SGD-Updates aktiviert werden soll. Gültige Werte sindtrue
undfalse
(Standard).maxEpochs
: maximale Anzahl der zu ausführenden Epochen.minibatchSize
: Klicken Sie hier, um mehr über minibatchSize zu erfahrendropoutRate
: Abbruchrate während des Schulungsvorgangs. Der Standardwert ist0.0
. Kann Syntax wie 0,5*10:0.2 verwenden, was bedeutet, dass die Dropoutrate 0,5 für 10 Epochen und dann 0,2 für den Rest verwendet wird.maxTempMemSizeInSamplesForCNN
: Maximale temporäre Speicherverwendung (in Anzahl von Beispielen) beim Verpacken und Entpacken von Eingabefeatures. Standard ist 0, was bedeutet, dass jeder Wert nach Bedarf verwendet wird. Nützlich zum Steuern des Speicherfußdrucks esp. Beim Ausführen unter GPU.saveBestModelPerCriterion
: Option, das beste Modell für jedes Kriterium zu speichern, das bei Kreuzüberprüfungsdaten gemessen wird. Wenn Schulungen enden, werden Modelle benannt<modelName>_<criterionName>
. Gültige Werte sindtrue
undfalse
(Standard).
Learning Rate- und Dynamiksteuerung
Beachten Sie, dass CNTK Die Möglichkeit der Angabe von Lernraten und Dynamik von anderen Toolkits unterscheidet. Hier finden Sie eine detaillierte Beschreibung.
learningRatesPerSample
: die Lernraten pro Epoche, mit denen der Farbverlauf jedes Beispiels das Modell aktualisiert. Sie können verschiedene Werte für verschiedene Epochen verwenden, z. B. 0.025*10:0.00625 bedeutet, dass die Lernrate 0,025 für die ersten 10 Epochen und dann 0,00625 für den Rest verwendet wird. Dies ist die bevorzugte Methode zum Angeben in CNTK, da sie die Lernraten agnostisch an die Minibatchgröße angibt, die beim Einsatz der automatischen Minibatch-Größe wichtig ist. Andere Toolkits geben häufig Lernraten in einer Minibatch-averaging-Mode an. Um diese Notation zu konvertieren, verwenden Sie die Lernrate pro Beispiel = Lernrate pro MB /minibatchSize
(siehe hier , weitere Details).learningRatesPerMB
: alternative Methode zum Angeben von Lernraten , die auf den Durchschnitt der Proben im Minibatch angewendet werden sollen. Dies ist die am häufigsten verwendete Methode zum Angeben von Lernraten in anderen Toolkits, ist aber in CNTK problematisch, wo daten parallele Schulung, die die Minibatchgröße ändert. Intern wird dies konvertiert, indem die Werte durch die angegebene "minibatchSize" unterteilt werdenlearningRatesPerSample
. Gegenseitig ausschließen mitlearningRatesPerSample
.minLearningRatePerSample
: Minimale Lernrate pro Beispiel. Wenn die Lernrate pro Beispiel kleiner ist als dieser Wert, wird der Schulungsvorgang beendet. Dies wird häufig verwendet, um den frühen Stopp zu steuern, wenn die automatische Anpassung der Lernrate aktiviert ist. Standard ist 1e-9.momentumAsTimeConstant
: ähnlichlearningratesPerSample
wie , CNTK gibt Schwung in einer Minibatch-Größe agnostische Weise als Zeitkonstante (in Beispielen) eines 1st-Order IIR-Filters an. Der Wert gibt die Anzahl der Beispiele an, nach denen ein Farbverlauf einen Effekt von 1/e=37 % hat. Andere Toolkits geben häufig Schwung als Pro-Minibatch-Gewicht (z. B. 0,9) an. Um von diesem Zu konvertieren, verwenden SiemomentumAsTimeConstant = -minibatchSize / ln (momentumPerMB)
. Sie können Syntax wie 20000*10:2500 verwenden, was bedeutet, dass die Momentzeitkonstante 2000 für 10 Epochen und dann 2500 für den Rest verwendet wird.momentumPerMB
: diese alternative Methode zum Angeben von Dynamik imitiert das Verhalten gemeinsamer Toolkits. Die Angabe von 0,9 bedeutet z. B., dass der vorherige Farbverlauf mit einer Gewichtung von 0,9 beibehalten wird. Beachten Sie jedoch, dass CNTK im Gegensatz zu einigen anderen Toolkits weiterhin einen Einheitsgewinnfilter verwendet, d. h. der neue Farbverlauf wird mit(1-momentumPerMB)
multipliziert. Intern wird dies inmomentumAsTimeConstant = -minibatchSize / ln (momentumPerMB)
konvertiert.autoAdjust
: enthält die Informationen im Zusammenhang mit dem automatischen Lernrate-Steuerelement. Standardwert ist leer ("") und bedeutet kein automatisches Lernrate-Steuerelement. Innerhalb des Blocks können folgende Werte vorhanden sein:autoAdjustLR
: der zu verwendende Algorithmus zur automatischen Anpassung der Lernrate. Gültige Werte sindNone
(Standard, nicht automatisch anpassen Lernrate),AdjustAfterEpoch
(überprüfen Sie das Schulungskriterium nach jeder Epoche, indem Sie den Entwicklungssatz des Schulungssatzes verwenden und entscheiden, ob sie die Lernrate anpassen möchten), undSearchBeforeEpoch
(durchsuchen Sie die Lernrate basierend auf einem kleinen Teil des Schulungssatzes, bevor jede Epoche beginnt).Wenn Sie im
AdjustAfterEpoch
Modus verwendet werden:reduceLearnRateIfImproveLessThan
: verringern Sie die Lernrate, wenn die Verbesserung kleiner als dieser Wert ist. Der Standardwert ist0
.learnRateDecreaseFactor
: Der Lernrate verringert den Faktor. Der Standardwert ist0.618
sein.increaseLearnRateIfImproveMoreThan
: erhöhen Sie die Lernrate, wenn die Verbesserung größer als dieser Wert ist. Standardwert ist (Unendlichkeit), was bedeutet, dass sie nie erhöht wird1#INF
.learnRateIncreaseFactor
: der Lernrate erhöhen faktor. Der Standardwert ist1.382
sein.loadBestModel
: Ob das beste Modell geladen werden soll, wenn das aktuelle Modell die Leistung verringert. Gültige Werte sindtrue
(Standard) undfalse
.learnRateAdjustInterval
: bestimmen Sie die Häufigkeit der Anwendung der Lernrateanpassungsprüfung. Standard ist1
Eine Epoche. Wenn dieser Wert auf einen Wert festgelegt wird, der größer als 1 ist, basiert die Anpassung der Lernrate auf dem von den letztenlearnRateAdjustInterval
Epochen berechneten Mittelwert.useEvalCriterionControlLR
: Verwenden Sie das Bewertungskriterium anstelle des Schulungskriteriums, um die Lernrate zu steuern. Der Parameter ist standardmäßig auf „false“ festgelegt.
Wenn Sie
SearchBeforeEpoch
im Modus verwendet werden.numMiniBatch4LRSearch
: die Anzahl der Minibatches, die zum Durchsuchen der Lernrate verwendet wurden. Der Standardwert ist500
sein. Es ist in der Regel auf 10-20 % der gesamten Minibatches in einer Epoche festgelegt.numPrevLearnRate
: Anzahl der vorherigen Lernraten, die als Hinweis zum Suchbereich verwendet werden. Der Standardwert ist5
sein.numBestSearchEpoch
: Anzahl der Epochen, in denen wir die beste Lernrate anstelle der ausreichenden Lernrate verwenden. Der Standardwert ist1
sein.
Wird im Modus "AdaptiveMinibatchSizing" verwendet.
numMiniBatch4LRSearch
: die Anzahl der Minibatches, die zum Durchsuchen der Minibatchgröße verwendet werden, wenn im adaptiven Minibatch-Größenmodus. Der Standardwert ist500
sein. Es ist in der Regel auf 10-20 % der gesamten Minibatches in einer Epoche festgelegt, die mit der Suche nach Lernrate imSearchBeforeEpoch
Modus geteilt wird.autoAdjustMinibatch
: Aktivieren oder Deaktivieren, ob die Minibatchgröße adaptive angepasst wird. Der Standardwert istfalse
sein. Adaptive Minibatch-Größe beginnt bei Epochen, die beginnen, nachdem die explizit angegebenen Minibatchgrößen des Benutzers abgeschlossen sind. Wenn der Benutzer z. B. minibatchSize=256:1024 angegeben hat, werden dann 256 und 1024 in den ersten 2 Epochen und adaptiven Minibatchsgröße danach verwendet.minibatchSizeTuningFrequency
: Die Anzahl der Epochen, die regelmäßig übersprungen werden sollen, bevor sie die Minibatchgröße dynamisch anpassen. Der Standardwert ist1
sein.minibatchSizeTuningMax
: Die maximale Größe, die für eine adaptive angepasste Minibatchgröße zulässig ist. Der Standardwert ist1048576
sein.
Farbverlaufssteuerelement
gradientClippingWithTruncation
: Ob sie die abschneidende basierte Farbverlaufsclipping verwenden möchten, um Farbverlaufsexplosion zu steuern. Gültige Werte sindtrue
(Standard) undfalse
. Wenn es falsch ist, wird stattdessen die normbasierte Clipping verwendet, was teurer ist.clippingThresholdPerSample
: der Clippingschwellenwert für jedes Beispiel. Standardwert ist1#INF
dies die Unendlichkeit (d. h., Clipping ist deaktiviert).L2RegWeight
(Standard 0): die L2-Regularisierungsgewichtung pro Stichprobe. Die Frobenius-Norm des lernbaren Parameters wird dem Ziel mit dieser Gewichtung hinzugefügt. Dies wird pro Stichprobe angegeben, d. h. die Frobenius-Norm wird durch die Anzahl der Proben im Minibatch multipliziert.L1RegWeight
(Standard 0): die L1-Regularisierungsgewichtung pro Stichprobe.gradUpdateType
: Farbverlaufsaktualisierungstyp. Gültige Werte sindNone
(Standard, keine spezielle Behandlung für den Farbverlauf),AdaGrad
undRmsProp
.- Wenn
gradUpdateType
sie gleich oderRmsProp
, können Sie das Verhalten des FarbverlaufsupdatesAdaGrad
mithilfe der folgenden Parameter steuern:normWithAveMultiplier
: Normalisieren Sie den Farbverlauf mit den durchschnittlichen Multiplizierern, die auf die Farbverläufe durch den AdaGrad/RmsProp-Algorithmus angewendet werden. Der Standardwert isttrue
(Standard).
- Wenn
gradUpdateType
dies gleich ist, können Sie das Verhalten des FarbverlaufsupdatesRmsProp
mithilfe der folgenden Parameter steuern:rms_wgt_inc
: Multiplicative Inkrementierung der Lernratesskala. Der Standardwert ist1.2
.rms_wgt_dec
: Multiplicative Decrement of the learning rate scale. Der Standardwert ist0.75
.rms_wgt_max
: Maximale Zulässige Lernrate. Ein Wert näher an 1 macht die Anpassung der Lernrate stabiler, aber langsamer. Der Standardwert ist10
.rms_wgt_min
: Mindestlernratenskala zulässig. Ein Wert näher an 1 macht die Anpassung der Lernrate stabiler, aber langsamer. Der Standardwert ist0.1
.rms_gamma
: Glättungsfaktor, der verwendet wird, um den gleitenden Mittelwert der Varianz zu schätzen. Je kleiner der Wert ist, desto schneller vergessen sie die letzten Informationen. Der Standardwert ist0.99
.
- Wenn
gaussianNoiseInjectStd
: die Standardabweichung des gaussischen Rauschens, der bei Verwendung desAdaGrad
Ansatzes hinzugefügt wird. Der Standardwert ist0
.
Informationsanzeige
traceLevel
: Ablaufverfolgungsebene, um zu entscheiden, welche Informationen im Stderr gedruckt werden sollen. Gültige Werte sind0
(Standard) und1
.numMBsToShowResult
: Zeigt Schulungsstatistiken nach der Anzahl der Minibatches an. Der Standardwert ist10
.
TensorBoard
tensorBoardNumMBsToLogResult
: Anzahl der Minibatches zwischen protokollierungsergebnissen in TensorBoard.
Farbverlaufsprüfung
gradientCheck
: bestimmt, ob die Farbverlaufsprüfung verwendet werden soll. Standardwert:false
. Wenn Sie die Farbverlaufsprüfung verwenden, müssen Sie eine Minibatchgröße verwenden, die größer als die Sequenzlänge für RNNs ist, aufgrund des abgeschnittenen Backpropagation-Algorithmus (BPTT), der zum Trainieren von RNNs verwendet wird, und eine kleinere Lernrate, um numerische Probleme zu verhindern, die durch Divergenz verursacht werden. Darüber hinaus sollte die Genauigkeit auf doppelt festgelegt werden.
BESCHREIBUNG
Das Verhalten des SGD-Algorithmus (Stochastic Gradient Descent Learner) wird vom SGD-Block der Optionen gesteuert. Wenn eine Option nicht angegeben wird, wird der Standardwert angenommen.
Parameter, die nicht explizit angegeben werden, sind den Standardwerten überlassen.
Angeben von Datengrößen
Konvertieren von Learning-Rate- und Momentumparametern aus anderen Toolkits
CNTK Modellaktualisierungsformeln unterscheiden sich etwas von einigen anderen Toolkits und von der Literatur, da in CNTK die Parameter auf eine Weise angegeben werden, die agnostisch der Minibatchgröße ist. Dies ist im Zusammenhang mit daten parallelen Schulungen wichtig, wobei CNTK selbst die Minibatchgröße ändern kann. Durch die Angabe von Lernrate und Dynamik auf agnostische Weise werden komplexe Anpassungen dieser Werte bei Änderungen der Minibatchgröße vermieden.
Dies sind CNTK Modellaktualisierungsformel für SGD mit Dynamik:
G(t) = (1-mu) sum { g(t-minibatchSize+1) ... g(t) } + mu * G(t-minibatchSize)
mu = exp (-minibatchSize/momentumAsTimeConstant)
M(t) = M(t-minibatchSize) + learningRatePerSample G(t)
durch
G(t)
: Geglätteter Farbverlauf nacht
Probeng(t')
: roher Farbverlauf der Probe zur Zeitt'
M(t)
: Modell, das nach dem Anzeigen vont
Beispielen verwendet wird.t
Inkrementierung in SchrittenminibatchSize
(Hinweis: Bei Verwendung von Sequenzen mit variabler Länge wird es leicht schwanken, minibathSize
da Sequenzlängen in einem Minibatch im Allgemeinen nicht genau auf die angeforderte minibathSize
summen .)
Sie bemerken Folgendes:
- Der Dynamikfilter ist einheitsverwendigend
G(t)
. Der Farbverlauf jedes Beispiels wird über die Zeit verteilt, sodass seine Summe 1 beträgt. - Die Lernrate wird pro Beispiel angegeben, anstatt w.r.t. einen Mittelwert über Beispiele.
Die spezifikation, die in anderen Toolkits und neural-netzwerk-literatur verwendet wird, ist häufig dies:
G'(t) = average { g(t-minibatchSize+1) ... g(t) } + mu * G'(t-minibatchSize)
M(t) = M(t-minibatchSize) + eta G'(t)
durch
G'
: Farbverlauf definiert auf alternative Weise als Mittelwert pro Minibatch und ohne(1-mu)
mu
: Impulsparameter, z. B. 0,9, eines Nicht-Unit-Gain IIR-Filters, angewendet pro Minibatcheta
: Lernrate mit minibatch-durchschnittlichen Farbverlauf
Auf diese Weise angegebene Parameter können mithilfe dieser Formeln CNTK Parametern zugeordnet werden:
learningRatePerSample = eta / minibatchSize / (1-mu)
momentumAsTimeConstant = -minibatchSize / ln (mu)
Sie erhalten dies mithilfe learningRatePerMB
und momentumPerMB
, die wie folgt zugeordnet werden (beachten Sie, dass die Abwesenheit von / (1-mu)
:learningRatePerSample
learningRatePerSample = learningRatePerMB / minibatchSize
momentumAsTimeConstant = -minibatchSize / ln (momentumPerMB)
Beispiel
Konfiguration, die vom ImageHandsOn-Lernprogramm mit Daten parallelismus und automatischer Minibatchskalierung verwendet wird:
SGD = {
epochSize = 50000
maxEpochs = 160 ; minibatchSize = 128
learningRatesPerSample = 0.0078125*80:0.00078125*40:0.000078125
momentumAsTimeConstant = 1200
L2RegWeight = 0.0001
firstMBsToShowResult = 10 ; numMBsToShowResult = 500
parallelTrain = {
parallelizationMethod = "dataParallelSGD"
parallelizationStartEpoch = 1
distributedMBReading = true
dataParallelSGD = { gradientBits = 2 }
}
autoAdjust = {
autoAdjustMinibatch = true # enable automatic growing of minibatch size
minibatchSizeTuningFrequency = 10 # try to enlarge after this many epochs
numMiniBatch4LRSearch = 200
minibatchSizeTuningMax = 15000 # out of memory above this
}
}