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?
global_step
Parameter vonminimize
. Siehe Bearbeiten.1e-4
=0.0001
nicht0.0004
.Antworten:
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!
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.
quelle
Der Grund, warum die meisten Menschen den Lernratenabfall bei Adam nicht verwenden, ist, dass der Algorithmus selbst einen Lernratenabfall auf folgende Weise ausführt:
Wo
t0
ist der erste Zeitschritt undlr_t
wird die neue Lernrate verwendet ?quelle
sqrt(1 - beta2^t) / (1 - beta1^t)
zerfällt nicht. Es scheint die Initialisierung der ersten und zweiten Momentschätzung zu kompensieren.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
Last but not least schlägt das Papier vor, dass wir sowieso SGD verwenden.
quelle
Ich stimme der Meinung von @Indie AI zu, hier gebe ich einige andere Informationen:
Von CS231n :
Und auch aus dem Aufsatz Überdenken der Inception-Architektur für Computer Vision, Abschnitt 8:
quelle
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.
quelle