【もめんたむ】

モメンタム(最適化手法) とは?

最終更新:
💡 前の勢いも引き継いで、学習の一歩を決める

過去の勾配を減衰させながら蓄積し、パラメータの更新に使う最適化の工夫。毎回の勾配だけで更新する方法に、以前の方向を引き継ぐ「慣性」に似た働きを加える。

📌 このページのポイント
モメンタム:前の勢いを引き継ぐ今回の勾配だけ過去の勾配も使う更新の向きを決める振動を抑える場合も基本形の例:v ← βv + g、θ ← θ − ηv効果は学習率・係数・問題に合わせて確かめる
細長い谷で進む方向のイメージ。経路は説明用で、性能比較の測定値ではありません。
ひよこ ひよこ
普通の勾配降下法と、どう違う?
ペンギン先生 ペンギン先生
毎回の勾配だけで更新する代わりに、過去の勾配も減衰させながら蓄積するよ。その蓄積を速度と呼ぶことがある。以前の方向を引き継ぐので、坂を転がるボールの慣性にたとえられるんだ。
ひよこ ひよこ
計算を、少し見てみたい!
ペンギン先生 ペンギン先生
基本形の一例は、v ← βv + g、θ ← θ − ηvだよ。gは今の勾配、vは蓄積した速度、βは過去を残す係数、ηは学習率、θは更新するパラメータ。実装には細かな違いがあるので、使うツールの定義も確認しよう。
ひよこ ひよこ
勢いがあると、何が変わる?
ペンギン先生 ペンギン先生
同じ方向の勾配が続くと蓄積し、逆向きの成分は打ち消し合うことがある。細長い谷での振動を抑え、進みやすくなる場合があるね。ただし、どんな損失でも速く最良の解に到達する、という仕組みではないよ。
ひよこ ひよこ
係数は、0.9で決まり?
ペンギン先生 ペンギン先生
0.9は設定例で見かける値だけれど、必ず使う値ではないよ。例えばPyTorchのSGDは、momentumの既定値が0なので、有効にするなら設定する。係数だけでなく学習率も合わせて調整し、損失や評価結果を比べよう。
ひよこ ひよこ
ネステロフ版も、同じもの?
ペンギン先生 ペンギン先生
関連する方法だけれど、勾配を更新に取り込む方法が違うよ。PyTorchのSGDではnesterovで選べる。先の位置を考慮する方法として説明されるけれど、どの問題でも通常版よりよいとは限らない。実装の式と条件を確認して使おう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「モメンタム」って出てきたら「過去の勾配の勢いも使って、学習の更新を決める工夫」と思えばだいたいOK!
📖 おまけ:英語の意味
「Momentum」 = 運動量
💬 過去の方向を引き継ぐ働きを、物理の運動量になぞらえた名前だよ。実際には勾配を使った計算で更新する。

参考資料

← 用語集にもどる