Was ist der Unterschied zwischen einem auf Impulsen basierenden Gefälle und einem beschleunigten Gefälle nach Nesterov?


48

So funktioniert der momentumbasierte Gradientenabstieg wie folgt:

v=self.momentummlrg

wobei die vorherigen Gewichtungsaktualisierungs sind, und g ist die aktuelle Gradient in bezug auf die Parameter p , l r ist die Lernrate und s e l f . m o m e n t u m ist eine Konstante.mgplrself.momentum

pnew=p+v=p+self.momentummlrg

und Nesterovs beschleunigter Gradientenabstieg funktioniert wie folgt:

pnew=p+self.momentumvlrg

was äquivalent ist zu:

pnew=p+self.momentum(self.momentummlrg)lrg

oder

pnew=p+self.momentum2m(1+self.momentum)lrg

Quelle: https://github.com/fchollet/keras/blob/master/keras/optimizers.py

Für mich scheint es, dass Nesterovs beschleunigter Gradientenabstieg dem lr * g-Term mehr Gewicht verleiht als dem durchlässigen Gewichtsänderungsterm m (im Vergleich zum normalen alten Impuls). Ist diese Interpretation richtig?


7
Ich würde Sie bitten, zu viel fragen? LATEX
Rodrigo de Azevedo

Antworten:


35

Arechs Antwort zu Nesterovs Dynamik ist richtig, aber der Code macht im Wesentlichen dasselbe. In dieser Hinsicht gibt die Nesterov-Methode dem -Term mehr Gewicht und dem v -Term weniger Gewicht .lrgv

Um zu veranschaulichen, warum die Implementierung von Keras korrekt ist, werde ich das Beispiel von Geoffrey Hinton ausleihen .
Bildbeschreibung hier eingeben


v=mvlr(w+mv)
w=w+v
mvlr(w+mv)mvlr(w+mv)()

(w+mv)=:g(w)

  1. (10)
  2. (02)
  3. (23)

p=p+m(mvlrg)lrg

p=pmv+mv+m(mvlrg)lrg=pmv+mvlrg+m(mvlrg)=pmv+(mvlrg)+m(mvlrg)

1023123

pmvp


2
@youkaichao versuchen Sie dieses youtube.com/watch?v=LdkkZglLZ0Q
dontloo

13

Es scheint mir, dass die Frage des OP bereits beantwortet wurde, aber ich würde versuchen, eine andere (hoffentlich intuitive) Erklärung über den Impuls und den Unterschied zwischen dem klassischen Impuls (CM) und dem beschleunigten Gradienten (NAG) von Nesterov zu geben.


tl; dr Springe
einfach zum Bild am Ende.
Die Argumentation von NAG_ball ist ein weiterer wichtiger Teil, aber ich bin nicht sicher, ob es ohne den Rest einfach zu verstehen wäre.



θf(θ)

In anderen Nachrichten erschienen kürzlich diese zwei wilden fühlenden Kugeln:
CM_ball NAG_ball

Es stellt sich heraus (nach dem beobachteten Verhalten der Kugeln, und an das Papier nach Auf der Bedeutung der Initialisierung und Impulses in tiefen Lernen , beschreibt , dass sowohl CM und NAG in Abschnitt 2) , dass jede Kugel verhält sich genau wie eine dieser Methoden , und so würden wir sie "CM_ball" und "NAG_ball" nennen:
(NAG_ball lächelt, weil er kürzlich das Ende von Vorlesung 6c - Die Impulsmethode von Geoffrey Hinton mit Nitish Srivastava und Kevin Swersky gesehen hat und deshalb mehr denn je daran glaubt sein Verhalten führt dazu, dass man schneller ein Minimum findet.)

So verhalten sich die Bälle:


  • θttvttθt=θt1+vt
  • vt
    • vt1
      vt1
      μ0.9μ<1μvt1
      μ


    • ϵϵ>0
      ϵ
      gϵg
  • vt=μvt1ϵg

  • vt=μvt1ϵf(θt1)

  • vt=μvt1ϵf(θt1+μvt1)

    Die Argumentation von NAG_ball

    • Welcher Sprung auch immer zuerst kommt, mein Momentum Jump wäre der gleiche.
      Daher sollte ich die Situation so betrachten, als hätte ich meinen Momentum Jump bereits gemacht, und ich bin kurz davor, meinen Slope Jump zu machen.
    • Nun, mein Slope Jump wird konzeptionell von hier aus beginnen, aber ich kann wählen, ob ich berechnen möchte, wie mein Slope Jump vor dem Momentum Jump oder wie er hier begonnen hat.
    • θθθ



θ
f(θ)7

CM_ball vs NAG_ball Beispiel


Anhang 1 - Eine Demonstration der Argumentation von NAG_ball

In diesem hypnotisierenden Gif von Alec Radford sehen Sie, wie NAG wohl besser abschneidet als CM ("Momentum" im Gif).
(Das Minimum ist, wo sich der Stern befindet, und die Kurven sind Konturlinien . Eine Erklärung der Konturlinien und warum sie senkrecht zum Farbverlauf verlaufen, finden Sie in den Videos 1 und 2 des legendären 3Blue1Brown .)

NAG besser als CM (Momentum)

Eine Analyse eines bestimmten Moments zeigt die Argumentation von NAG_ball:

CM vs NAG in einem bestimmten Moment

  • Der (lange) violette Pfeil ist der Impulsunterschritt.
  • Der transparente rote Pfeil ist der Gradiententeilschritt, wenn er vor dem Momententeilschritt beginnt.
  • Der schwarze Pfeil ist der Gradiententeilschritt, wenn er nach dem Impulsteilschritt beginnt.
  • CM würde im Ziel des dunkelroten Pfeils enden.
  • NAG würde im Ziel des schwarzen Pfeils enden.

Anhang 2 - Dinge / Begriffe, die ich erfunden habe (der Intuition halber)

  • CM_ball
  • NAG_ball
  • Doppelsprung
  • Momentum Jump
  • Impulsverlust durch Reibung mit der Luft
  • Hangsprung
  • Wahnsinn eines Balls
  • Ich habe gestern die Bälle beobachtet

Anhang 3 - Begriffe, die ich nicht erfunden habe


1
Ich finde den Teil von "So verhalten sich die Kugeln: ..." bis "um Sie in die Richtung von θ auf ein Minimum (mit der relativ richtigen Größe) zu lenken." ausgezeichnet als Erklärung für den Unterschied.
Poete Maudit

12

Ich glaube nicht.

Eine gute Beschreibung der Eigenschaften von Nesterov Momentum (auch bekannt als Nesterov Accelerated Gradient) finden Sie beispielsweise bei Sutskever, Martens et al. "Über die Bedeutung der Initialisierung und des Impulses beim vertieften Lernen" 2013 .

Der Hauptunterschied besteht darin, dass Sie im klassischen Moment zuerst Ihre Geschwindigkeit korrigieren und dann einen großen Schritt entsprechend dieser Geschwindigkeit machen (und dann wiederholen). Im Nesterov-Moment machen Sie jedoch zuerst einen Schritt in die Richtung der Geschwindigkeit und korrigieren dann einen Geschwindigkeitsvektor an neuer Stelle (dann wiederholen).

dh klassische Dynamik:

vW(t+1) = momentum.*Vw(t) - scaling .* gradient_F( W(t) )
W(t+1) = W(t) + vW(t+1)

Während Nesterov Impuls ist dies:

vW(t+1) = momentum.*Vw(t) - scaling .* gradient_F( W(t) + momentum.*vW(t) )
W(t+1) = W(t) + vW(t+1)

Eigentlich macht das einen großen Unterschied in der Praxis ...


5

Hinzugefügt: Ein Stanford-Kurs über neuronale Netze, cs231n , bietet noch eine andere Form der Schritte:

v = mu * v_prev - learning_rate * gradient(x)   # GD + momentum
v_nesterov = v + mu * (v - v_prev)              # keep going, extrapolate
x += v_nesterov

Hier vist die Geschwindigkeit oder der Schritt oder der Zustand und muein Impulsfaktor, typischerweise 0,9 oder so. ( v, xUnd learning_ratekann sehr lang sein , Vektoren, mit numpy, wird der Code das gleiche ist.)

vin der ersten Zeile ist die Gefälleabnahme mit Impuls; v_nesterovextrapoliert, macht weiter. Zum Beispiel mit mu = 0.9,

v_prev  v   --> v_nesterov
---------------
 0  10  -->  19
10   0  -->  -9
10  10  -->  10
10  20  -->  29

Die folgende Beschreibung hat 3 Terme:
Term 1 allein ist ein einfacher Gradientenabstieg (GD),
1 + 2 ergeben GD + Impuls,
1 + 2 + 3 ergeben Nesterov GD.

xtytytxt+1

yt=xt+m(xtxt1) - Impuls, Prädiktor
xt+1=yt+h g(yt) - Gefälle

gtf(yt)h

yt

yt+1=yt
+ h gt - Gefälle
+ m (ytyt1) - Schritt Schwung
+ m h (gtgt1) - Gradientenimpuls

Der letzte Term ist der Unterschied zwischen GD mit normalem Impuls und GD mit Nesterov-Impuls.


mmgrad
+ m (ytyt1) - Schritt Schwung
+ mgrad h (gtgt1) - Gradientenimpuls

mgrad=0mgrad=m
mgrad>0
mgrad.1

mtht



(x/[cond,1]100)+ripple×sin(πx)

Bildbeschreibung hier eingeben

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.