Adam-Optimierer mit exponentiellem Zerfall


53

In den meisten Tensorflow-Codes, die ich gesehen habe, wird Adam Optimizer mit einer konstanten Lernrate von 1e-4(dh 0,0001) verwendet. Der Code sieht normalerweise so aus:

...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

Ich frage mich, ob es nützlich ist, exponentiellen Zerfall zu verwenden, wenn Sie den Adam-Optimierer verwenden, dh verwenden Sie den folgenden Code:

...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

Normalerweise verwenden die Leute eine Art Lernratenverfall, für Adam scheint es ungewöhnlich. Gibt es dafür einen theoretischen Grund? Kann es nützlich sein, den Adam-Optimierer mit dem Zerfall zu kombinieren?


Wie erhält man den Schritt Variable, der bei jeder Iteration aktualisiert wird?
perrohunter

@perrohunter: Benutze den global_stepParameter von minimize. Siehe Bearbeiten.
Charles Staats

9
Hinweis: 1e-4= 0.0001nicht 0.0004.
Cliff AB

Ich sehe, dass Sie "global_step = step" zuweisen, aber ich sehe nicht, wie die Variable "step" aktualisiert wird ... Können Sie das bitte klären?
Diego

@Diego: späte Antwort, aber: Übergeben der Schrittvariablen zum Minimieren als global_step-Parameter bewirkt, dass die Minimierungsfunktion den global_step-Parameter bei jedem Aufruf von minim erhöht. Informationen zum Minimieren finden Sie in der Dokumentation. Beachten Sie, dass dies bedeutet, dass bei Minibatches die Schrittvariable für jeden Minibatch aktualisiert wird, nicht nur für jede Epoche.
dimpol

Antworten:


37

Empirisch ausgedrückt: Probieren Sie es auf jeden Fall aus, vielleicht finden Sie einige sehr nützliche Trainingsheuristiken. In diesem Fall teilen Sie diese bitte mit!

Normalerweise verwenden die Leute eine Art Zerfall, für Adam scheint es ungewöhnlich. Gibt es dafür einen theoretischen Grund? Kann es nützlich sein, den Adam-Optimierer mit dem Zerfall zu kombinieren?

Ich habe mit dem ADAM-Optimierer nicht genug Leute gesehen, um zu sagen, ob dies zutrifft oder nicht. Wenn dies zutrifft, liegt dies möglicherweise daran, dass ADAM relativ neu ist und noch keine "Best Practices" für den Zerfall der Lernrate etabliert wurden.

Ich möchte jedoch darauf hinweisen, dass der Lernratenabfall tatsächlich Teil der theoretischen Garantie für ADAM ist. Insbesondere in Satz 4.1 ihres ICLR-Artikels lautet eine ihrer Hypothesen, dass die Lernrate einen Quadratwurzelzerfall aufweist: . Darüber hinaus verwenden sie für ihre logistischen Regressionsexperimente auch den Quadratwurzelzerfall.αt=α/t

Einfach ausgedrückt: Ich glaube, dass nichts in der Theorie davon abhält, mit ADAM Regeln für den Abfall der Lernrate zu verwenden. Ich habe gesehen, dass Leute mit ADAM einige gute Ergebnisse gemeldet haben, und es wäre unglaublich wertvoll, einige gute Trainingsheuristiken zu finden.


12

Der Grund, warum die meisten Menschen den Lernratenabfall bei Adam nicht verwenden, ist, dass der Algorithmus selbst einen Lernratenabfall auf folgende Weise ausführt:

t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

Wo t0ist der erste Zeitschritt und lr_twird die neue Lernrate verwendet ?


4
Ich bin mir nicht sicher, ob dies der Fall ist. Der Faktor sqrt(1 - beta2^t) / (1 - beta1^t)zerfällt nicht. Es scheint die Initialisierung der ersten und zweiten Momentschätzung zu kompensieren.
Thijs

25
Diese Antwort ist falsch. Dieser Faktor nähert sich 1,0, wenn t gegen unendlich geht. Randnotiz: learning_rate hier ist fest . Es ist nicht die Lernrate zum Zeitpunkt t-1.
Rd11

8

Adam verwendet die anfängliche Lernrate oder Schrittgröße gemäß der Terminologie des Originalpapiers, während er Aktualisierungen adaptiv berechnet. Die Schrittgröße gibt auch eine ungefähre Grenze für Aktualisierungen an. In dieser Hinsicht halte ich es für eine gute Idee, die Schrittweite gegen Ende des Trainings zu reduzieren. Dies wird auch durch eine kürzlich erschienene Arbeit aus dem NIPS 2017 untermauert: Der Grenzwert adaptiver Gradientenmethoden beim maschinellen Lernen .

Die letzte Zeile in Abschnitt 4: Deep Learning Experiments lautet

Obwohl konventionelle Erkenntnisse darauf hindeuten, dass Adam keine Optimierung erfordert, stellen wir fest, dass die Optimierung der anfänglichen Lernrate und des Zerfallsschemas für Adam in allen Fällen signifikante Verbesserungen gegenüber den Standardeinstellungen erbringt.

Last but not least schlägt das Papier vor, dass wir sowieso SGD verwenden.


2

Ich stimme der Meinung von @Indie AI zu, hier gebe ich einige andere Informationen:

Von CS231n :

... Viele dieser Methoden erfordern möglicherweise noch andere Hyperparametereinstellungen, das Argument ist jedoch, dass sie sich für einen breiteren Bereich von Hyperparameterwerten als die rohe Lernrate gut verhalten. ...

Und auch aus dem Aufsatz Überdenken der Inception-Architektur für Computer Vision, Abschnitt 8:

... während unsere besten Modelle mit RMSProp [21] mit einem Zerfall von 0.9 und ε = 1.0 erzielt wurden. Wir verwendeten eine Lernrate von 0,045, die alle zwei Epochen mit einer Exponentialrate von 0,94 abfiel. ...


2

Ich habe einen Datensatz mit wirklich einfachen Daten trainiert, ob eine Person als fett gilt oder nicht, Größe und Gewicht - Erstellen von Daten zur Berechnung von BMI, und wenn die Person über 27 Jahre alt ist, ist sie fett. Also ganz einfach grunddaten. Bei Verwendung von Adam als Optimierer und einer Lernrate von 0,001 liegt die Genauigkeit bei 5 Epocs nur bei 85% und bei über 100 getesteten Epocs bei maximal 90%.

Beim erneuten Laden mit möglicherweise 85% und einer Lernrate von 0,0001 beträgt die Genauigkeit über 3 Epocs jedoch 95% und 10 weitere Epocs 98-99%. Wir sind uns nicht sicher, ob die Lernrate unter 4 Stellen von 0,0001 liegen kann. Wenn Sie das Modell jedoch erneut laden und 0,00001 verwenden, bewegt sich der Akku zwischen 99,20 und 100% und wird nicht darunter liegen. Auch hier bin ich mir nicht sicher, ob die Lernrate 0 ist, aber das ist es, was ich habe ...

All dies unter Verwendung von categorical_crossentropy, aber mean_square bringt es bei dieser Methode ebenfalls auf 99-100%. AdaDelta, AdaGrad, Nesterov konnten nur für eine Notiz eine Genauigkeit von 65% nicht erreichen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.