Metody gradientowe zwykle działają lepiej, optymalizując niż ponieważ gradient jest ogólnie lepiej skalowany . Oznacza to, że ma rozmiar, który konsekwentnie i pomocnie odzwierciedla geometrię funkcji celu, co ułatwia wybranie odpowiedniego rozmiaru kroku i osiągnięcie optymalnej w mniejszej liczbie kroków.p ( x ) log p ( x )logp(x)p(x)logp(x)
Aby sprawdzić, co znaczy, porównaj proces optymalizacji Gradient i . W dowolnym punkcie gradient wynosiJeśli pomnożymy to przez , otrzymamy dokładny rozmiar kroku potrzebny do osiągnięcia globalnego optimum przy początku, bez względu naf ( x ) = log p ( x ) = - x 2 xp(x)=exp(−x2)f(x)=logp(x)=−x2xf(x)
f′(x)=−2x.
1/2xjest. Oznacza to, że nie musimy zbyt ciężko pracować, aby uzyskać dobry rozmiar kroku (lub „szybkość uczenia się” w żargonie ML). Bez względu na to, gdzie jest nasz punkt początkowy, po prostu ustawiliśmy nasz krok na połowę gradientu i będziemy w jednym punkcie na początku. A jeśli nie znamy dokładnego wymaganego współczynnika, możemy po prostu wybrać rozmiar kroku wokół 1, przeprowadzić trochę wyszukiwania linii i szybko znajdziemy duży rozmiar kroku, taki, który działa dobrze bez względu na to, gdzie jest. Ta właściwość jest odporna na translację i skalowanie . Podczas gdy skalowanie spowoduje, że optymalne skalowanie kroków będzie różnić się od 1/2, przynajmniej skalowanie kroków będzie takie samo bez względu na , więc musimy tylko znaleźć jeden parametr, aby uzyskać skuteczną optymalizację opartą na gradiencie schemat.
xf(x)f(x)x
Natomiast gradient ma bardzo słabe globalne właściwości do optymalizacji. MamyMnoży to idealnie ładny, dobrze zachowujący się gradient przez współczynnik który zanika (szybciej niż) wykładniczo wraz ze wzrostem . Przy mamy już , więc krok wzdłuż wektora gradientu jest około razy za mały. Aby uzyskać rozsądny rozmiar kroku w kierunku optymalnego, musielibyśmy przeskalować gradient przez odwrotność tego, ogromną stałąp(x)
p′(x)=f′(x)p(x)=−2xexp(−x2).
−2xexp(−x2)xx=5exp(−x2)=1.4⋅10−1110−11∼1011. Taki źle wyskalowany gradient jest gorszy niż bezużyteczny dla celów optymalizacji - lepiej byłoby po prostu spróbować wykonać krok jednostkowy w górę, niż ustawić nasz krok skalując względem ! (W wielu zmiennych staje się nieco bardziej użyteczny, ponieważ przynajmniej otrzymujemy informacje kierunkowe z gradientu, ale problem skalowania pozostaje.)
p′(x)p′(x)
Zasadniczo nie ma gwarancji, że będzie miał tak świetne właściwości skalowania gradientu, jak ten przykład zabawki, szczególnie gdy mamy więcej niż jedną zmienną. Jednak w przypadku niemal nietrywialnych problemów będzie znacznie lepszy niż . Wynika to z faktu, że prawdopodobieństwo jest dużym produktem z wieloma warunkami, a dziennik zamienia ten produkt w sumę, jak zauważono w kilku innych odpowiedziach. Pod warunkiem, że terminy z prawdopodobieństwem są dobrze zachowane z punktu widzenia optymalizacji, ich log jest ogólnie dobrze zachowany, a suma dobrze zachowanych funkcji jest dobrze zachowana. Przez dobrze wychowany mam na myślilogp(x)logp(x)p(x)f′′(x)nie zmienia się zbyt szybko ani zbyt szybko, co prowadzi do niemal kwadratowej funkcji, którą można łatwo zoptymalizować metodami gradientowymi. Suma pochodnego jest pochodną sumy, bez względu na kolejność pochodnych, co pomaga zapewnić, że ten duży stos sum sum ma bardzo rozsądną drugą pochodną!