Tensorflow: Verwirrung in Bezug auf die adam-Optimierer
Ich bin verwirrt in Bezug darauf, wie die adam optimizer funktioniert tatsächlich in tensorflow.
Dem Weg, ich lese die docs, es sagt, dass die learning-rate geändert wird jedem gradient-descent-iteration.
Aber wenn ich die Funktion aufrufen ich ihm eine Lern-rate. Und ich glaube nicht, rufen Sie die Funktion sagen wir mal, eine Epoche (implizit aufrufen # Iterationen so durch meine Daten training). Rufe ich die Funktion für jeden batch explizit wie
for epoch in epochs
for batch in data
sess.run(train_adam_step, feed_dict={eta:1e-3})
Also mein eta kann nicht verändert werden. Und ich bin nicht durch eine Zeit-variable in. Oder ist dies eine Art generator geben, was wo auf der Sitzung Schöpfung t
jedes mal erhöht wird, nenne ich den optimizer?
Vorausgesetzt, es ist einige generator-Typ-Sache und die learning-rate wird unsichtbar, reduziert: Wie bekomme ich die zum ausführen der adam-Optimierer, ohne verfallende die learning-rate? Es scheint mir, wie RMSProp ist im Grunde das gleiche, das einzige, was ich würde tun müssen, um es gleich (learning rate ignoriert) ist die änderung der hyperparameters momentum
und decay
passend beta1
und beta2
beziehungsweise. Ist das richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich finde die Dokumentation ziemlich klar, ich werde hier einfügen, den Algorithmus in pseudo-code:
Ihre Parameter:
learning_rate
: zwischen 1e-4 und 1e-2 ist standardbeta1
: 0.9 standardmäßigbeta2
: 0.999 standardmäßigepsilon
: 1e-08 standardmäßigInitialisierung:
m_t
undv_t
wird verfolgen eine gleitenden Durchschnitt des Verlaufs und seinen Platz, für jeden Parameter des Netzes. (Also, wenn Sie 1M Parameter, Adam in Erinnerung behalten 2M mehr Parameter)Bei jeder iteration
t
, und für jeden parameter des Modells:Hier
lr_t
ein bisschen anders auslearning_rate
weil für die ersten Iterationen, die gleitenden Durchschnitte nicht konvergierte doch so haben wir zu normalisieren, indem die Multiplikation durchsqrt(1 - beta2^t) /(1 - beta1^t)
. Wennt
hoch ist (t > 1./(1.-beta2)
),lr_t
ist fast gleichlearning_rate
Ihre Frage zu beantworten, die Sie gerade brauchen, um passieren eine festen learning rate, halten
beta1
undbeta2
default-Werte, vielleicht ändernepsilon
, und Adam wird die Magie 🙂Link mit RMSProp
Adam mit
beta1=1
entspricht RMSProp mitmomentum=0
. Das argumentbeta2
von Adam und das argumentdecay
von RMSProp sind die gleichen.Jedoch RMSProp nicht halten einen gleitenden Durchschnitt der Steigung. Aber kann es halten eine Dynamik, wie MomentumOptimizer.
Eine detaillierte Beschreibung der rmsprop.
Hier ist der pseudo-code:
sqrt(1 - beta1^t) / (1 - beta2^t)
?gradient
ist konstant bei allen Iterationen, das update zuvariable
ist auch konstant.RMS_PROP und ADAM haben beide adaptive Lern-Preisen .
Die grundlegenden RMS_PROP
Können Sie sehen, ursprünglich war diese hat zwei Parameter decay_rate & eps
Dann können wir hinzufügen, ein Schwung, um unseren gradient mehr stabil, Dann können wir schreiben
Jetzt Sie sehen können hier, wenn wir weiter beta1 = o, Dann ist es rms_prop ohne Schwung .
Dann Grundlagen der ADAM
In cs-231 Andrej Karpathy hat, beschrieb zunächst den adam, wie dieser
Also ja ! Was macht dann diesen Unterschied aus der rms_prop mit Schwung ?
Er wieder erwähnt Sie in der Update-Gleichung m , v sind mehr glatt .
Also der Unterschied von der rms_prop ist das update weniger laut .
Was macht dieses Geräusch ?
Gut in der Initialisierungs-Prozedur initialisieren wir m und v als null .
m=v=0
Um diese zu senken initialisieren der Effekt-es ist immer einige warm-up . So dann Gleichung ist wie
Nun führen wir diese für einige Iterationen . Klar achten Sie auf den Fett dargestellten Linien können Sie sehen, wenn t zunimmt (iteration Nummer) folgende Sache passiert mit der mt ,
mt = m