Eklendi: sinir ağları üzerinde bir Stanford kursu,
cs231n , adımların başka bir şeklini veriyor:
v = mu * v_prev - learning_rate * gradient(x) # GD + momentum
v_nesterov = v + mu * (v - v_prev) # keep going, extrapolate
x += v_nesterov
İşte v
hız aka adım aka durum ve mu
tipik olarak 0.9 ya da öylesine bir momentum faktörüdür. ( v
, x
ve learning_rate
çok uzun vektörler olabilir; numpy ile kod aynıdır.)
v
ilk satırda momentum ile gradyan iniş;
v_nesterov
tahmin ediyor, devam ediyor. Örneğin, mu = 0.9 ile
v_prev v --> v_nesterov
---------------
0 10 --> 19
10 0 --> -9
10 10 --> 10
10 20 --> 29
Aşağıdaki tarifin 3 terimi vardır:
yalnız terim 1 düz gradyan iniş (GD),
1 + 2 GD + momentum verir,
1 + 2 + 3 Nesterov GD verir.
xt→ytyt→xt+1
yt=xt+m(xt−xt−1) - momentum, yordayıcı
xt+1=yt+h g(yt) - gradyan
gt≡−∇f(yt)h
yt
yt+1=yt
+ h gt - gradyan
+ m (yt−yt−1) - adım momentumu
+ m h (gt−gt−1) - gradyan momentumu
Son terim, düz momentumlu GD ve Nesterov momentumlu GD arasındaki farktır.
mmgrad
+ m (yt−yt−1) - adım momentumu
+ mgrad h (gt−gt−1) - gradyan momentumu
mgrad=0mgrad=m
mgrad>0
mgrad∼−.1
mtht
(x/[cond,1]−100)+ripple×sin(πx)