最適化アルゴリズム — 損失の谷の下り方を競わせる
同じ損失地形でも「どう下るか」で速さも安定性も激変します。素朴なSGDから、慣性を持つMomentum、軸ごとに歩幅を変えるRMSProp、その合体であるAdamまで — 4人のランナーを同じコースで競走させながら、それぞれの改良ポイントを見抜きます。
1. まず競走を見る — 4つのオプティマイザ
前レッスンの誤差逆伝播で勾配 ∇L が手に入りました。あとは「勾配の逆方向に少し進む」を繰り返すだけ…のはずですが、現実の損失地形は細長い谷、鞍点、凸凹の局所解だらけ。素朴な勾配降下(SGD)はすぐつまずきます。
下のデモでは、同じ地点からスタートした4手法が損失の谷(等高線が明るいほど高い)を下ります。コースを切り替え、学習率を動かして、どの手法がどこで強いか観察してください。
2. Momentum — ボールに慣性を与える
SGD は「いまの勾配」しか見ないので、勾配が小さい平坦部ではノロノロ、谷の壁では行ったり来たりします。Momentum は勾配の指数移動平均を速度 v として持ち、坂を転がるボールのように速度を蓄積します。
3. 適応学習率 — 軸ごとに歩幅を変える(AdaGrad / RMSProp)
パラメータが何百万個もあると、勾配のスケールは軸ごとにバラバラです。急な軸に合わせて学習率を小さくすると、なだらかな軸はほとんど進めません。そこで AdaGrad は「これまでの勾配の2乗和」で軸ごとに学習率を割る、というアイデアを出しました。RMSProp はその2乗和を指数移動平均に置き換え、学習率が下がりきってしまう欠点を直したものです。
4. Adam — 慣性 × 適応学習率
Momentum の「勾配の平均 m(1次モーメント)」と RMSProp の「勾配の2乗の平均 s(2次モーメント)」を両方持ち、さらに学習初期に平均が0に偏る問題をバイアス補正で直したのが Adam(2014)です。
m̂ = m ⁄ (1−β₁ᵗ) , ŝ = s ⁄ (1−β₂ᵗ) , θ ← θ − η m̂ ⁄ (√ŝ + ε) 既定値 β₁=0.9, β₂=0.999, ε=10⁻⁸。m̂, ŝ が学習初期(t が小さいとき)の過小推定を補正する
| 手法 | 持っている記憶 | 効くところ | 弱点 |
|---|---|---|---|
| SGD | なし(いまの勾配だけ) | シンプル。チューニング次第で最終精度は最強クラス | 細長い谷でジグザグ、平坦部で停滞。学習率に敏感 |
| Momentum (1964/1986) | 速度 v(勾配の平均) | 谷の振動を打ち消して加速。鞍点も勢いで通過 | 行き過ぎ(オーバーシュート)。軸ごとのスケール差は解決しない |
| AdaGrad (2011) | 勾配2乗の累積和 | スパースな特徴(まれにしか勾配が来ない軸)に強い | 累積和が増える一方で、学習率がやがてほぼ0になる |
| RMSProp (2012) | 勾配2乗の移動平均 s | AdaGrad の学習率枯れを修正。非定常な問題にも追従 | 慣性がないので方向のノイズには揺れやすい |
| Adam (2014) | m と s の両方+バイアス補正 | ほぼ無調整でだいたい速い。現代のデフォルト | まれに汎化で SGD+Momentum に負ける報告。正則化は AdamW で |
5. 学習率スケジュール — ηは一定でなくていい
どの手法を使うにせよ、いちばん重要なハイパーパラメータは学習率 η です。さらに η を学習の進行に合わせて変える「スケジュール」で、序盤の速さと終盤の精度を両立できます。
6. まとめ
- SGD:いまの勾配だけで下る。細長い谷・鞍点・凸凹が苦手で、学習率に敏感。
- Momentum:速度 v に勾配を貯める慣性で、振動を打ち消しつつ加速。ただし行き過ぎる。
- RMSProp:勾配2乗の移動平均で割り、軸ごとに実効学習率を自動調整。
- Adam=Momentum+RMSProp+バイアス補正。まず Adam(W)、詰めたければ SGD+Momentum も試す、が実務の定石。
- そして何より、学習率とそのスケジュールが結果を最も大きく左右する。