Ditambahkan: kursus Stanford pada jaringan saraf,
cs231n , memberikan bentuk lain dari langkah-langkah:
v = mu * v_prev - learning_rate * gradient(x) # GD + momentum
v_nesterov = v + mu * (v - v_prev) # keep going, extrapolate
x += v_nesterov
Inilah v
kecepatan alias langkah alias keadaan, dan mu
merupakan faktor momentum, biasanya 0,9 atau lebih. ( v
, x
dan learning_rate
bisa jadi vektor yang sangat panjang; dengan numpy, kodenya sama.)
v
pada baris pertama adalah gradient descent dengan momentum;
v_nesterov
ekstrapolasi, terus berjalan. Misalnya, dengan mu = 0,9,
v_prev v --> v_nesterov
---------------
0 10 --> 19
10 0 --> -9
10 10 --> 10
10 20 --> 29
Deskripsi berikut memiliki 3 istilah:
istilah 1 saja adalah keturunan gradien polos (GD),
1 + 2 memberi momentum GD +,
1 + 2 + 3 memberi Nesterov GD.
Nesterov GD biasanya digambarkan sebagai langkah momentum bergantian dan langkah gradien :xt→ytyt→xt+1
yt=xt+m(xt−xt−1) - momentum, prediktor - gradien
xt+1=yt+h g(yt)
di mana adalah gradien negatif, dan adalah stepsize alias tingkat pembelajaran.gt≡−∇f(yt)h
Gabungkan dua persamaan ini menjadi satu dalam saja, titik di mana gradien dievaluasi, dengan memasukkan persamaan kedua ke yang pertama, dan mengatur ulang istilah:yt
yt+1=yt
+ h gt - gradien - langkah momentum - momentum gradien
+ m (yt−yt−1)
+ m h (gt−gt−1)
Istilah terakhir adalah perbedaan antara GD dengan momentum biasa, dan GD dengan momentum Nesterov.
Seseorang dapat menggunakan istilah momentum terpisah, misal dan : - momentum langkah - momentum gradienmmgrad
+ m (yt−yt−1)
+ mgrad h (gt−gt−1)
Kemudian memberikan momentum yang jelas, Nesterov. menguatkan noise (gradien bisa sangat bising), adalah filter smoothing IIR.m g r a d = m m g r a d > 0 m g r a d ∼ - .1mgrad=0mgrad=m
mgrad>0
mgrad∼−.1
By the way, momentum dan stepsize dapat bervariasi dengan waktu, dan , atau per komponen (ADA * berkoordinasi keturunan), atau keduanya - lebih metode dari uji kasus.h tmtht
Plot yang membandingkan momentum polos dengan momentum Nesterov pada test case 2d sederhana, :
(x/[cond,1]−100)+ripple×sin(πx)