追加:ニューラルネットワークに関するスタンフォードコース
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を示します。
Nesterov GDは通常、運動量ステップと勾配ステップを交互に繰り返すと説明されます。xt→ytyt→xt+1
yt=xt+m(xt−xt−1) 運動量、予測子 勾配
xt+1=yt+h g(yt)
ここで、は負の勾配で、はステップサイズ(学習率)です。gt≡−∇f(yt)h
これらの2つの方程式を、2番目の方程式を最初の方程式に差し込んで、勾配が評価されるポイントのみの1つに結合し、項を再配置します。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)
次に、は単純な運動量、 Nesterovを与えます。ノイズを増幅します(勾配は非常にノイズが多い場合があります)、はIIR平滑化フィルターです。、M 、G 、R 、D = M 、M 、G 、R 、D > 0 M G R D〜- .1mgrad=0mgrad=m
mgrad>0
mgrad∼−.1
ところで、運動量とステップサイズは、時間、、、コンポーネントごと(ada *座標降下)、またはその両方で変化する可能性があります-テストケースよりも多くのメソッドです。h tmtht
単純な2次元テストケースプレーン運動量とネステロフ運動量を比較するプロット:
(x/[cond,1]−100)+ripple×sin(πx)