Dodano: kurs Stanford na temat sieci neuronowych,
cs231n , daje jeszcze jedną formę kroków:
v = mu * v_prev - learning_rate * gradient(x) # GD + momentum
v_nesterov = v + mu * (v - v_prev) # keep going, extrapolate
x += v_nesterov
Oto vprędkość, czyli krok, czyli stan, i mujest czynnikiem pędu, zwykle około 0,9. ( v, xI learning_ratemoże być bardzo długi wektory, z numpy kod jest taki sam).
vw pierwszym wierszu jest nachylenie gradientu z pędem;
v_nesterovekstrapoluje, kontynuuje. Na przykład przy mu = 0,9
v_prev v --> v_nesterov
---------------
0 10 --> 19
10 0 --> -9
10 10 --> 10
10 20 --> 29
Poniż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.
xt→ytyt→xt+1
yt=xt+m(xt−xt−1) - pęd, predyktor
xt+1=yt+h g(yt) - gradient
gt≡−∇f(yt)h
yt
yt+1=yt
+ h gt - gradient
+ m (yt−yt−1) - pęd kroku
+ m h (gt−gt−1) - pęd gradientu
Ostatni termin to różnica między GD z pędem zwykłym, a GD z pędem Niestierowa.
mmgrad
+ m (yt−yt−1) - pęd kroku
+ mgrad h (gt−gt−1) - pęd gradientu
mgrad=0mgrad=m
mgrad>0
mgrad∼−.1
mtht
(x/[cond,1]−100)+ripple×sin(πx)
