Додано: курс Стенфорда по нейронних мережах,
cs231n , дає ще одну форму кроків:
v = mu * v_prev - learning_rate * gradient(x) # GD + momentum
v_nesterov = v + mu * (v - v_prev) # keep going, extrapolate
x += v_nesterov
Ось v
швидкість ака-стан ака стану, і mu
це коефіцієнт імпульсу, як правило, 0,9 або близько того. ( v
, x
і learning_rate
може бути дуже довгими векторами; з numpy код той самий.)
v
у першому рядку - градієнтне спуск із моментом;
v_nesterov
екстраполяти, продовжує. Наприклад, при mu = 0,9,
v_prev v --> v_nesterov
---------------
0 10 --> 19
10 0 --> -9
10 10 --> 10
10 20 --> 29
У наступному описі є 3 терміни: один
термін 1 - це похилий градієнт (GD),
1 + 2 дає імпульс GD +,
1 + 2 + 3 дає Nesterov GD.
xt→ytyt→xt+1
yt=xt+m(xt−xt−1) - імпульс, предиктор
xt+1=yt+h g(yt) - градієнт
gt≡−∇f(yt)h
yt
yt+1=yt
+ h gt - градієнт
+ m (yt−yt−1) - імпульс кроку
+ m h (gt−gt−1) - імпульс градієнта
Останній член - це різниця між GD з рівним імпульсом, і GD з імпульсом Нестерова.
mmgrad
+ m (yt−yt−1) - імпульс кроку
+ mgrad h (gt−gt−1) - імпульс градієнта
mgrad=0mgrad=m
mgrad>0
mgrad∼−.1
mtht
(x/[cond,1]−100)+ripple×sin(πx)