G検定(ジェネラリスト検定)
もーめんたむ
モーメンタム
Momentum
SGDの更新量に、1ステップ前の更新量の一定割合γ(通常0.9前後)を加える最適化手法。勾配の向きがそろう方向には加速し、向きが入れ替わる方向の振動を抑える。
詳しい説明
SGDが苦手とする谷状の地形
損失関数の曲面には、ある次元では急に曲がり、別の次元ではなだらかな、谷(ravine)のような領域があります。こうした地形は局所最適解の周辺によく現れます。SGDはこのような谷に入ると、谷の斜面を横切る方向に行ったり来たりして振動し、谷底に沿った本来進みたい方向へは、ためらうように少しずつしか進めません。
過去の更新量を足し込む仕組み
モーメンタムは、SGDを進むべき方向へ加速させ、振動を抑える手法です。現在の更新量に、1ステップ前の更新量の一定割合γを加えます。
v_t = γ*v_(t-1) + η*∇J(θ)
θ = θ - v_t
ηは学習率、∇J(θ)は現在のパラメータθにおける損失関数Jの勾配です。γはモーメンタム項と呼ばれ、通常0.9前後に設定されます。なお、実装によっては式の符号を入れ替えて書くものもあります。
ボールが坂を転がり落ちるイメージ
モーメンタムは、坂の上からボールを転がすことにたとえられます。ボールは転がり落ちながら勢いをため、どんどん速くなります。空気抵抗があれば終端速度で頭打ちになり、これがγ<1に相当します。パラメータの更新でも同じことが起こります。勾配が毎回同じ向きを指す次元では更新量が積み重なって大きくなり、勾配の向きが入れ替わる次元では前回と今回が打ち消し合って更新が小さくなります。その結果、谷底の方向には速く進み、斜面を横切る振動は抑えられ、収束が速くなります。
Nesterov accelerated gradient(NAG)との違い
モーメンタムに先読みの考え方を加えた手法がNesterov accelerated gradient(NAG)です。通常のモーメンタムは、現在の位置θで勾配を計算してから、蓄積した勾配の方向へ大きく進みます。一方NAGは、これからγ*v_(t-1)だけ動くことを見越し、おおよその次の位置θ - γ*v_(t-1)で勾配を計算します。
v_t = γ*v_(t-1) + η*∇J(θ - γ*v_(t-1))
θ = θ - v_t
先に大きく跳んでから勾配を測り、補正する流れです。坂が再び上り始める前に減速できる賢いボールにたとえられ、この先読みが進みすぎを防いで反応性を高めます。根拠とした解説では、多くのタスクでRNNの性能を大きく高めたとされています。
補足: 鞍点
深いネットワークの最適化が難しい原因は、局所最適解ではなく鞍点(ある次元では上り、別の次元では下る点)にあると主張する研究者もいます。鞍点の周りは誤差がほぼ同じ平坦な領域に囲まれていることが多く、全次元で勾配が0に近くなるため、SGDが抜け出しにくいとされます。
試験で問われること
G検定
- モーメンタムは、1ステップ前の更新量v_(t-1)に係数γを掛けて現在の勾配による更新量に加え、v_t = γ*v_(t-1) + η*∇J(θ)、θ = θ - v_t の形でパラメータを更新する手法である。
- モーメンタム項γは通常0.9前後に設定される。γ<1であることは、坂を転がり落ちるボールが空気抵抗によって終端速度で頭打ちになることに対応している。
- 勾配の向きが同じ次元では更新が大きくなり、勾配の向きが入れ替わる次元では更新が小さくなるため、振動が抑えられ、SGDよりも速く収束する。
- SGDは、ある次元だけ急に曲がる谷(ravine)で斜面を横切るように振動し、谷底に沿った方向へはゆっくりとしか進めない。モーメンタムはこの問題への対策である。
- NAGは現在の位置θではなく、γ*v_(t-1)だけ進んだ先の近似位置θ - γ*v_(t-1)で勾配を計算する点が通常のモーメンタムと異なり、先読みによって進みすぎを防ぐ。
最終更新日: 2026/09/23