運動量ベースの勾配降下とNesterovの加速勾配降下の違いは何ですか?


48

したがって、運動量ベースの勾配降下は次のように機能します。

v=self.momentummlrg

ここで、は以前の重みの更新、はパラメーターに関する現在の勾配、は学習率、は定数です。g p l r s e l f M O のM E N T U Mmgplrself.momentum

pnew=p+v=p+self.momentummlrg

また、Nesterovの加速勾配降下は次のように機能します。

pnew=p+self.momentumvlrg

次と同等です:

pnew=p+self.momentum(self.momentummlrg)lrg

または

pnew=p+self.momentum2m(1+self.momentum)lrg

ソース:https : //github.com/fchollet/keras/blob/master/keras/optimizers.py

したがって、私にとっては、Nesterovの加速勾配降下法は、以前の重量変化項mに比べてlr * g項により大きな重みを与えているように見えます(従来の勢いに比べて)。この解釈は正しいですか?


7
\ LaTeXを入力するLATEXように頼むことは、あまりに頼みますか?
ロドリゴデアゼベド

回答:


35

Nesterovの勢いについてのArechの答えは正しいですが、コードは本質的に同じことを行います。 この点で、Nesterov法は項により大きな重みを与え、項により小さい重みを与えます。Vlrgv

Kerasの実装が正しい理由を説明するために、Geoffrey Hintonの例を借ります。
ここに画像の説明を入力してください

ネステロフ法は、「ギャンブル->修正」アプローチを採用しています。 茶色のベクトルは(ギャンブル/ジャンプ)、赤いベクトルは(修正)、緑のベクトルは(実際に移動する場所)です。は勾配関数です。
v=mvlr(w+mv)
w=w+v
mvlr(w+mv)mvlr(w+mv)()

Nesterovメソッドはではなく評価のみを必要とするためコードは緑のベクトルではなく茶色のベクトルで移動するためコードは異なって見えます。したがって、各ステップで(w+mv)=:g(w)

  1. 元の場所に戻る(10)
  2. 緑色のベクトルをたどります(02)
  3. 別のギャンブルを作る(23)

略して書かれたKerasのコードはであり、いくつかの数学を行いますp=p+m(mvlrg)lrg

p=pmv+mv+m(mvlrg)lrg=pmv+mvlrg+m(mvlrg)=pmv+(mvlrg)+m(mvlrg)

それはちょうどです。実際には、元のコードは短いパス取ります。 1023123

実際の推定値(緑のベクトル)はである必要があり、学習が収束するときにに近くなります。pmvp



13

OPの質問はすでに答えられているようですが、運動量と古典運動量(CM)とNesterovの加速勾配(NAG)の違いについて別の(願わくは直感的な)説明をしようと思います。


tl; dr
最後の画像にスキップします。
NAG_ballの推論は別の重要な部分ですが、残りのすべてがなければ理解しやすいとは思いません。



CMとNAGは、関数最小値を見つけるために、パラメーター空間で次のベクトルを選択する方法です。θf(θ)

他のニュースでは、最近、これらの2つの野生の知覚ボールが登場しました。
CM_ball NAG_ball

これは、(ボールの観察された行動に応じて、紙によると判明深い学習における初期化と運動量の重要性に関するセクション2にCMとNAGの両方を記述し、)というそれぞれのボールは、まさにこれらの方法のいずれかのように振る舞い、そして、私たちはそれらを「CM_ball」および「NAG_ball」と呼びます:
(NAG_ballは最近講義6cの終わりを見たので微笑んでいます-運動量法、Geoffrey HintonによるNitish SrivastavaおよびKevin Swersky、そしてこれまで以上に信じています彼の行動は、最小値をより速く見つけることにつながります。)

ボールの動作は次のとおりです。

  • 通常のボールのように転がる代わりに、パラメータ空間のポイント間をジャンプします。
    してみましょうボールのことパラメータ空間における番目の位置、および聞かせボールのこと番目のジャンプ。次に、パラメータ空間内のポイント間のジャンプは、ます。θttvttθt=θt1+vt
  • ロールの代わりにジャンプするだけでなく、ジャンプも特別です。各ジャンプは実際にはダブルジャンプであり、2つのジャンプの構成です。 vt
    • 運動量ジャンプ- 最後のダブルジャンプである運動量を使用するジャンプ。 の運動量のごく一部は、空気との摩擦により失われます。してみましょう残っている運動量の割合も(、ボールはかなり空力ているので、通常)。すると、運動量ジャンプは等しくなります。 (CMとNAGの両方で、は「運動量係数」と呼ばれるハイパーパラメーターです。)vt1
      vt1
      μ0.9μ<1μvt1
      μ
    • スロープジャンプ-通常のボールを地面に置いた結果を思い出させるジャンプ-ボールは最も急な斜面の方向に下向きに転がり始めますが、急な斜面ほど加速が大きくなります。
      同様に、スロープジャンプは、最も急なスロープの方向(勾配とは反対の方向)にあり、勾配が大きいほど、ジャンプが進みます。
      スロープジャンプは、ボールの熱意のレベルであるも依存します(当然、)。ボールが熱心になるほど、スロープジャンプはさらにボールを取ります。 (CMとNAGの両方で、「学習率」と呼ばれるハイパーです。) レッツϵϵ>0
      ϵ
      g勾配ジャンプの開始位置の勾配になります。この場合、勾配ジャンプは等しくなります。ϵg
  • したがって、両方のボールのダブルジャンプは次のようになります ボール間の唯一の違いは、ダブルジャンプでの2つのジャンプの順序です。
    vt=μvt1ϵg
  • CM_ballはそれが重要だとは思わなかったので、彼は常にスロープジャンプから始めることにしました。
    したがって、CM_ballのダブルジャンプは次のとおりです。v_
    vt=μvt1ϵf(θt1)
  • 対照的に、NAG_ballはしばらくの間それについて考え、その後、常に運動量ジャンプから開始することにしました。
    したがって、NAG_ballのダブルジャンプは、

    vt=μvt1ϵf(θt1+μvt1)

    NAG_ballの推論

    • 最初にジャンプが何であれ、私の運動量ジャンプは同じです。
      だから、あたかもすでに運動量ジャンプをしたかのように状況を考えるべきであり、スロープジャンプをしようとしています。
    • これで、概念的にはここからスロープジャンプが開始されますが、スロープジャンプが運動量ジャンプの前に開始したかのように計算するか、ここから開始したかのように計算するかを選択できます。
    • このように考えると、後者の方が優れていることが非常に明確になります。一般に、ある点勾配は、から最小(比較的正しい大きさ)の方向に大まかに指しますが、他のポイントは、から最小の方向に(比較的正しい大きさで)指し示す可能性が低くなります。θθθ

最後に、昨日、1次元のパラメーター空間で飛び回る各ボールを観察できるほど幸運でした。
パラメータ空間での変化する位置を見ても、このパラメータ空間は直線であるため、直感を得るのにあまり役に立たないと思います。
その代わりに、各ボールについて、水平軸がである2次元グラフをスケッチしました。 次に、黒のブラシを使用してを描き、最初のつの位置にある各ボールを、位置の時系列を示す数字とともに描きました。 最後に、緑の矢印を描いて、各運動量ジャンプと勾配ジャンプのパラメーター空間での距離(グラフの水平距離)を示しました。θF θ 7
f(θ)7

CM_ballとNAG_ballの例


付録1-NAG_ballの推論のデモンストレーション

Alec Radfordによるこの魅惑的なgif では、NAGのパフォーマンスがCM(gifの「Momentum」)よりも間違いなく優れていることがわかります。
(最小値は星のある場所で、曲線は等高線です。等高線とグラデーションに垂直である理由の説明については、伝説の3Blue1Brownのビデオ12を参照してください。)

CM(モメンタム)よりも良いNAG

特定の瞬間の分析は、NAG_ballの推論を示しています。

特定の瞬間のCM対NAG

  • (長い)紫色の矢印は、運動量のサブステップです。
  • 透明な赤い矢印は、運動量サブステップの前に開始される場合、勾配サブステップです。
  • 黒い矢印は、運動量サブステップの後に開始する場合の勾配サブステップです。
  • CMは、暗い赤色の矢印のターゲットになります。
  • NAGは黒い矢印のターゲットに到達します。

付録2-私が作成したもの/用語(直観のため)

  • CM_ball
  • NAG_ball
  • ダブルジャンプ
  • 運動量ジャンプ
  • 空気との摩擦により失われた運動量
  • スロープジャンプ
  • ボールの熱意
  • 私は昨日ボールを観察しました

付録3-作成しなかった用語


1
「ここにボールの振る舞い:...」から「θから最小の方向に(比較的正しい大きさで)を指すように」という部分があります。違いの説明として優れています。
Poete Maudit

12

そうは思いません。

Nutsov Momentum(別名Nesterov Accelerated Gradient)の特性については、たとえばSutskever、Martens et al。「ディープラーニングにおける初期化と運動量の重要性について」詳しく説明されています。

主な違いは、古典的な運動量では最初に速度を修正し、次にその速度に応じて大きなステップを実行します(その後繰り返します)が、ネステロフの運動量では最初に速度方向にステップを作成し、次に速度ベクトルに基づいて補正を行います新しい場所で(その後繰り返します)。

すなわち、古典的な勢い:

vW(t+1) = momentum.*Vw(t) - scaling .* gradient_F( W(t) )
W(t+1) = W(t) + vW(t+1)

ネステロフの勢いは次のとおりです。

vW(t+1) = momentum.*Vw(t) - scaling .* gradient_F( W(t) + momentum.*vW(t) )
W(t+1) = W(t) + vW(t+1)

実際、これは実際に大きな違いをもたらします...


5

追加:ニューラルネットワークに関するスタンフォードコース 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程度です。(vxそして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は通常、運動量ステップと勾配ステップを交互に繰り返すと説明されます。xtytytxt+1

yt=xt+m(xtxt1) 運動量、予測子 勾配
xt+1=yt+h g(yt)

ここで、は負の勾配で、はステップサイズ(学習率)です。gtf(yt)h

これらの2つの方程式を、2番目の方程式を最初の方程式に差し込んで、勾配が評価されるポイントのみの1つに結合し、項を再配置します。yt

yt+1=yt
+ h gt -勾配 -ステップ運動量 勾配運動量
+ m (ytyt1)
+ m h (gtgt1)

最後の項は、単純な運動量を持つGDと、ネステロフ運動量を持つGDの違いです。


とような別々の運動量項を使用できます: ステップ運動量 勾配運動量mmgrad
+ m (ytyt1)
+ mgrad h (gtgt1)

次に、は単純な運動量、 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)

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.