Opadanie gradientu na podstawie pędu działa więc następująco:
gdzie jest poprzednią aktualizacją masy, a g jest bieżącym gradientem w odniesieniu do parametrów p , l r jest szybkością uczenia się, a s e l f . m o m e n t u m jest stałą.
a przyspieszone opadanie gradientu Niestierowa działa w następujący sposób:
co jest równoważne z:
lub
źródło: https://github.com/fchollet/keras/blob/master/keras/optimizers.py
Wydaje mi się więc, że przyspieszone opadanie gradientu Niestierowa po prostu nadaje większą wagę warunkowi lr * g w stosunku do przepuszczalnego składnika zmiany masy m (w porównaniu do zwykłego starego pędu). Czy ta interpretacja jest poprawna?
Odpowiedzi:
Odpowiedź Arecha na temat pędu Niestierowa jest poprawna, ale kod zasadniczo robi to samo. W związku z tym metoda Nesterowa nadaje większą wagę składnikowi , a mniejszemu ciężarowi elementu v .l r ⋅ g v
Aby zilustrować, dlaczego implementacja Keras jest poprawna, pożyczę przykład Geoffreya Hintona .
Metoda Niestierowa przyjmuje podejście „gamble-> korekta”.v′= m ⋅ v - l r ⋅ ∇ ( w + m ⋅ v )
w′= w + v′
m⋅v −lr⋅∇(w+m⋅v) (dokąd powinniśmy się przenieść). ∇ ( ⋅ ) to funkcja gradientu.m⋅v−lr⋅∇(w+m⋅v) ∇(⋅)
w ′ = w + v ′ Brązowy wektor to m ⋅ v (hazard / skok), czerwony wektor to - l r ⋅ ∇ ( w + m ⋅ v ) (korekta), a zielony wektor to m ⋅ v - l r ⋅
Kod wygląda inaczej, ponieważ porusza się o brązowy wektor zamiast zielonego , ponieważ metoda Nesterowa wymaga jedynie oceny zamiast ∇ ( w ) . Dlatego na każdym kroku chcemy∇(w+m⋅v)=:g ∇(w)
Kod Keras napisany w skrócie to , i robimy matematykęp′=p+m⋅(m⋅v−lr⋅g)−lr⋅g
i to dokładnie . W rzeczywistości oryginalny kod ma krótszą ścieżkę 1 → 2 → 3 .1→0→2→3 1→2→3
Rzeczywista wartość szacunkowa (zielony wektor) powinna wynosić , która powinna być zbliżona do p, gdy nauka się zbiega.p−m⋅v p
źródło
Wydaje mi się, że odpowiedź na pytanie PO została już udzielona, ale postaram się udzielić innego (mam nadzieję intuicyjnego) wyjaśnienia na temat pędu i różnicy między Klasycznym Momentum (CM) a Nesterovem Accelerated Gradient (NAG).
tl; dr
Wystarczy przejść do obrazu na końcu.
Rozumowanie NAG_ball to kolejna ważna część, ale nie jestem pewien, czy zrozumienie byłoby łatwe bez reszty.
W innych wiadomościach ostatnio pojawiły się te dwie dzikie, czujące kule:
Okazuje się (zgodnie z obserwowanym zachowaniem kulek i zgodnie z artykułem dotyczącym znaczenia inicjalizacji i pędu w głębokim uczeniu się , który opisuje zarówno CM, jak i NAG w sekcji 2), że każda piłka zachowuje się dokładnie tak, jak jedna z tych metod , dlatego nazwalibyśmy je „CM_ball” i „NAG_ball”:
(NAG_ball się uśmiecha, ponieważ ostatnio oglądał koniec wykładu 6c - Metoda pędu, autorstwa Geoffrey'a Hintona z Nitish Srivastava i Kevinem Swerskim , i dlatego wierzy bardziej niż kiedykolwiek w to, że jego zachowanie prowadzi do znalezienia minimum szybciej).
Oto jak zachowują się kule:
Rozumowanie NAG_ball
Powinienem więc wziąć pod uwagę sytuację, jakbym już wykonał skok pędu i mam zamiar wykonać skok skoku.
Dodatek 1 - Demonstracja rozumowania NAG_ball
W tym hipnotyzującym gifie Aleca Radforda możesz zobaczyć, że NAG działa zdecydowanie lepiej niż CM („Momentum” w gifie).
(Minimum to miejsce, w którym znajduje się gwiazda, a krzywe są liniami konturowymi . Aby uzyskać wyjaśnienie dotyczące linii konturowych i dlaczego są one prostopadłe do gradientu, zobacz wideo 1 i 2 legendarnego 3Blue1Brown .)
Analiza określonego momentu pokazuje rozumowanie NAG_ball:
Załącznik 2 - rzeczy / warunki, które wymyśliłem (dla intuicji)
Załącznik 3 - warunki, których nie wymyśliłem
źródło
Nie wydaje mi się
Dobry opis właściwości Nesterov Momentum (aka Nesterov Accelerated Gradient) znajduje się na przykład w Sutskever, Martens i wsp. „O znaczeniu inicjalizacji i pędu w głębokim uczeniu się” 2013 .
Główna różnica polega na tym, że w pędzie klasycznym najpierw korygujesz prędkość, a następnie robisz duży krok zgodnie z tą prędkością (a następnie powtarzasz), ale w pędu Niestierowa najpierw robisz krok w kierunku prędkości, a następnie korygujesz wektor prędkości w nowej lokalizacji (następnie powtórz).
tzn. pęd klasyczny:
Podczas gdy pęd Nesterowa jest następujący:
W rzeczywistości robi to ogromną różnicę w praktyce ...
źródło
Dodano: kurs Stanford na temat sieci neuronowych, cs231n , daje jeszcze jedną formę kroków:
Oto
v
prędkość, czyli krok, czyli stan, imu
jest czynnikiem pędu, zwykle około 0,9. (v
,x
Ilearning_rate
może być bardzo długi wektory, z numpy kod jest taki sam).v
w pierwszym wierszu jest nachylenie gradientu z pędem;v_nesterov
ekstrapoluje, kontynuuje. Na przykład przy mu = 0,9Poniższy opis składa się z 3 terminów:
sam termin 1 oznacza zwykły spadek gradientu (GD),
1 + 2 daje pęd GD +,
1 + 2 + 3 daje Nesterov GD.
Ostatni termin to różnica między GD z pędem zwykłym, a GD z pędem Niestierowa.
źródło