Ajouté: un cours de Stanford sur les réseaux de neurones,
cs231n , donne encore une autre forme d'étapes:
v = mu * v_prev - learning_rate * gradient(x) # GD + momentum
v_nesterov = v + mu * (v - v_prev) # keep going, extrapolate
x += v_nesterov
Voici la v
vélocité aka step aka state, et mu
est un facteur de quantité de mouvement, typiquement 0,9 ou plus. ( v
, x
et learning_rate
peuvent être de très longs vecteurs; avec numpy, le code est le même.)
v
dans la première ligne est gradient descente avec élan;
v_nesterov
extrapole, continue. Par exemple, avec mu = 0.9,
v_prev v --> v_nesterov
---------------
0 10 --> 19
10 0 --> -9
10 10 --> 10
10 20 --> 29
La description suivante comporte 3 termes: le
terme 1 seul correspond à une descente de pente simple (GD),
1 + 2 correspondant à GD + quantité de mouvement,
1 + 2 + 3 à Nesterov GD.
Nesterov GD est généralement décrit comme une alternance des étapes de mouvement et des étapes de gradient :xt→ytyt→xt+1
yt=xt+m(xt−xt−1) - moment, prédicteur - gradient
xt+1=yt+h g(yt)
où est le gradient négatif et est stepize, ou taux d'apprentissage.gt≡−∇f(yt)h
Combinez ces deux équations en une seule fois en , les points auxquels les gradients sont évalués, en branchant la deuxième équation dans la première, et réorganisez les termes:yt
yt+1=yt
+ h gt - gradient - pas de moment - moment de gradient
+ m (yt−yt−1)
+ m h (gt−gt−1)
Le dernier terme est la différence entre GD avec un élan simple et GD avec un élan Nesterov.
On pourrait utiliser des termes de moment distincts, par exemple et : - le moment de pas - moment de gradientmmgrad
+ m (yt−yt−1)
+ mgrad h (gt−gt−1)
Puis donne l’élan clair, Nesterov. amplifie le bruit (les gradients peuvent être très bruyants), est un filtre de lissage IIR.mgrad=0mgrad=m
mgrad>0
mgrad∼−.1
Soit dit en passant, la quantité de mouvement et le pas peuvent varier avec le temps, et , ou par composant (descente de coordonnées ada *), ou les deux, davantage de méthodes que de cas de test.mtht
Un complot comparant l’élan clair avec l’impulsion Nesterov sur un cas de test 2d simple, :
(x/[cond,1]−100)+ripple×sin(πx)