Ich bin mit grundlegenden Algorithmen für die Gradientenabsenkung zum Trainieren neuronaler Netze vertraut. Ich habe die Zeitung gelesen, in der Adam vorgeschlagen wird: ADAM: EINE METHODE ZUR STOCHASTISCHEN OPTIMIERUNG .
Obwohl ich (zumindest) definitiv einige Einsichten habe , scheint mir das Papier insgesamt zu hoch zu sein. Beispielsweise ist eine Kostenfunktion oft eine Summe vieler verschiedener Funktionen, weshalb eine große Menge von Berechnungen durchgeführt werden müssen, um ihren Wert zu optimieren; stochastische Gradientenabfahrten berechnen - soweit ich das Thema verstehe - die Optimierung nur für eine Teilmenge dieser Funktionen. Für mich ist unklar, wie Adam dies tut und warum dies zu einem verringerten Trainingsfehler für die Gesamtheit von J ( θ ) führt .
Ich denke, Adam aktualisiert seinen Verlauf, indem er den vorherigen Verlauf berücksichtigt. Sie nennen es so etwas wie den Schwung nutzen? Was genau ist dieser Schwung? Nach dem Algorithmus auf Seite zwei im Artikel handelt es sich um eine Art gleitenden Durchschnitt, etwa um Schätzungen des ersten und zweiten Moments des "regulären" Gradienten?
Praktisch würde ich vermuten, dass Adam es ermöglicht, größere effektive Schrittgrößen zur Verringerung des Gradienten und damit des Trainingsfehlers in Kombination mit der stochastischen Approximation zu verwenden. Daher sollte der resultierende Aktualisierungsvektor mehr in räumlichen Dimensionen "springen", anstatt eine Kurve zu beschreiben, wie es normale Algorithmen für den Gradientenabstieg tun würden.
Kann jemand enträtseln, wie Adam arbeitet? Besonders wie es konvergiert, speziell warum Adams Methode funktioniert und was genau der Vorteil ist?
quelle
Antworten:
Das Adam-Paper sagt: "... viele objektive Funktionen setzen sich aus einer Summe von Teilfunktionen zusammen, die bei verschiedenen Teilproben von Daten ausgewertet werden. In diesem Fall kann die Optimierung effizienter gemacht werden, indem Gradientenschritte für einzelne Teilfunktionen vorgenommen werden ..." bedeutet, dass die Zielfunktion eine Summe von Fehlern über Trainingsbeispielen ist und das Training an einzelnen Beispielen oder Minibatches durchgeführt werden kann. Dies ist dasselbe wie beim stochastischen Gradientenabstieg (SGD), der bei großen Problemen effizienter ist als beim Batch-Training, da Parameteraktualisierungen häufiger sind.
Adam arbeitet mit ein paar Tricks.
Einer dieser Tricks ist der Schwung, der zu einer schnelleren Konvergenz führen kann. Stellen Sie sich eine objektive Funktion vor, die wie ein langer, schmaler Canyon geformt ist, der allmählich auf ein Minimum abfällt. Nehmen wir an, wir möchten diese Funktion mit Gradientenabstieg minimieren. Wenn wir irgendwann an der Wand des Canyons beginnen, zeigt das negative Gefälle in Richtung des steilsten Gefälles, dh hauptsächlich in Richtung des Canyon-Bodens. Dies liegt daran, dass die Wände des Canyons viel steiler sind als die allmähliche Neigung des Canyons zum Minimum. Wenn die Lernrate (dh die Schrittgröße) gering ist, können wir zum Boden des Canyons hinuntersteigen und dann dem Minimum folgen. Aber der Fortschritt würde langsam sein. Wir könnten die Lernrate erhöhen, aber dies würde die Richtung der Schritte nicht ändern. In diesem Fall würden wir den Boden der Schlucht überschießen und an der gegenüberliegenden Wand landen. Wir würden dann dieses Muster wiederholen und von Wand zu Wand oszillieren, während wir langsam in Richtung Minimum voranschreiten. Momentum kann in dieser Situation helfen.
Momentum bedeutet einfach, dass ein Teil des vorherigen Updates zum aktuellen Update hinzugefügt wird, so dass sich wiederholende Updates in eine bestimmte Richtung ergeben. Wir bauen Schwung auf und bewegen uns immer schneller in diese Richtung. Im Fall des Canyons würden wir eine Dynamik in Richtung des Minimums aufbauen, da alle Aktualisierungen eine Komponente in diese Richtung haben. Im Gegensatz dazu erfordert das Hin- und Herbewegen über die Wände des Canyons eine ständige Richtungsumkehr, sodass der Impuls dazu beitragen würde, die Schwingungen in diesen Richtungen zu dämpfen.
Ein weiterer Trick, den Adam verwendet, ist die adaptive Auswahl einer separaten Lernrate für jeden Parameter. Parameter, die normalerweise kleinere oder weniger häufige Aktualisierungen erhalten, erhalten größere Aktualisierungen mit Adam (das Gegenteil ist auch der Fall). Dies beschleunigt das Lernen in Fällen, in denen die entsprechenden Lernraten je nach Parameter variieren. Beispielsweise können in tiefen Netzwerken die Gradienten in frühen Schichten klein werden, und es ist sinnvoll, die Lernraten für die entsprechenden Parameter zu erhöhen. Ein weiterer Vorteil dieses Ansatzes besteht darin, dass die manuelle Abstimmung an Bedeutung verliert, da die Lernraten automatisch angepasst werden. Standard-SGD erfordert eine sorgfältige Abstimmung (und möglicherweise Online-Anpassung) der Lernraten, dies gilt jedoch weniger für Adam und verwandte Methoden. Es ist immer noch notwendig, Hyperparameter auszuwählen,
Verwandte Methoden :
Momentum wird häufig mit Standard-SGD verwendet. Eine verbesserte Version heißt Nesterov-Impuls oder Nesterov-beschleunigter Gradient. Andere Methoden, die automatisch eingestellte Lernraten für jeden Parameter verwenden, sind: Adagrad, RMSprop und Adadelta. RMSprop und Adadelta lösen ein Problem mit Adagrad, das dazu führen kann, dass das Lernen gestoppt wird. Adam ähnelt RMSprop mit Momentum. Nadam modifiziert Adam, um den Nesterov-Impuls anstelle des klassischen Impulses zu verwenden.
Referenzen :
Kingma und Ba (2014) . Adam: Eine Methode zur stochastischen Optimierung.
Goodfellow et al. (2016) . Tiefes Lernen, Kapitel 8.
Folien von Geoff Hinton Kurs
Dozat (2016) . Einbeziehung von Nesterov Momentum in Adam.
quelle