最適化アルゴリズム — 損失の谷の下り方を競わせる

同じ損失地形でも「どう下るか」で速さも安定性も激変します。素朴なSGDから、慣性を持つMomentum、軸ごとに歩幅を変えるRMSProp、その合体であるAdamまで — 4人のランナーを同じコースで競走させながら、それぞれの改良ポイントを見抜きます。

1. まず競走を見る — 4つのオプティマイザ

前レッスンの誤差逆伝播で勾配 ∇L が手に入りました。あとは「勾配の逆方向に少し進む」を繰り返すだけ…のはずですが、現実の損失地形は細長い谷、鞍点、凸凹の局所解だらけ。素朴な勾配降下(SGD)はすぐつまずきます。

下のデモでは、同じ地点からスタートした4手法が損失の谷(等高線が明るいほど高い)を下ります。コースを切り替え、学習率を動かして、どの手法がどこで強いか観察してください。

オプティマイザレース — 同じ谷、違う下り方
S=スタート、★=最小値。右のバーは各手法の現在の損失(短いほど良い)。細長い谷では学習率を上げていくと SGD → Momentum の順に発散(✕)し、適応学習率組だけが生き残ります。鞍点では中央の平坦部でどれだけ足踏みするか、凸凹では小さな谷に捕まらず抜けられるかに注目。
POINT — 改良の系譜は2本立て オプティマイザの歴史は ①慣性(過去の勾配の向きを覚える)と②適応学習率(軸ごとに歩幅を変える)という2つの改良の積み重ね。Momentum が①、AdaGrad/RMSProp が②、そして Adam は①+②の合流点。

2. Momentum — ボールに慣性を与える

SGD は「いまの勾配」しか見ないので、勾配が小さい平坦部ではノロノロ、谷の壁では行ったり来たりします。Momentum は勾配の指数移動平均を速度 v として持ち、坂を転がるボールのように速度を蓄積します。

v ← β v − η ∇L , θ ← θ + v β は慣性の強さ(0.9 が定番)。β=0 なら普通の SGD に戻る
Momentum の物理 — βで挙動が激変する1次元の谷
緑の矢印=速度 v。β=0(=SGD)は手前の小さなくぼみでジグザグして動けなくなります。βを上げると速度が乗って凸凹を突き抜け一気に加速 — ただし最小値(旗)を行き過ぎて反対側へ登り、何往復かしてから落ち着きます。βを変えて収束までのステップ数を比べてみてください。
注意 — 慣性は諸刃の剣 βを大きくするほど平坦部は速くなるが、行き過ぎ(オーバーシュート)と振動も大きくなる。β=0.99 で旗の周りを何度も往復する様子がまさにそれ。実務で β=0.9 前後が定番なのは、この加速と振動のバランス点だから。

3. 適応学習率 — 軸ごとに歩幅を変える(AdaGrad / RMSProp)

パラメータが何百万個もあると、勾配のスケールは軸ごとにバラバラです。急な軸に合わせて学習率を小さくすると、なだらかな軸はほとんど進めません。そこで AdaGrad は「これまでの勾配の2乗和」で軸ごとに学習率を割る、というアイデアを出しました。RMSProp はその2乗和を指数移動平均に置き換え、学習率が下がりきってしまう欠点を直したものです。

s ← ρ s + (1−ρ)(∇L)² , θ ← θ − η ∇L ⁄ (√s + ε) RMSProp。割り算は要素ごと。勾配が大きい軸ほど実効学習率 η/√s が自動で小さくなる
適応学習率の直感 — 超細長い谷で SGD と Adam を対決させる
横方向(x)は勾配が160倍急な谷。SGD は急な x 方向に合わせて学習率を絞るしかないため、壁の間をジグザグした後、なだらかな y 方向をのろのろ這うことしかできません。Adam は軸ごとに歩幅を正規化するので、勾配の大小に関係なくほぼ対角線に最短距離で降りていきます。左下のバーは現在地の勾配の大きさ(対数目盛)。

4. Adam — 慣性 × 適応学習率

Momentum の「勾配の平均 m(1次モーメント)」と RMSProp の「勾配の2乗の平均 s(2次モーメント)」を両方持ち、さらに学習初期に平均が0に偏る問題をバイアス補正で直したのが Adam(2014)です。

m ← β₁m + (1−β₁)∇L , s ← β₂s + (1−β₂)(∇L)²
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乗の移動平均 sAdaGrad の学習率枯れを修正。非定常な問題にも追従慣性がないので方向のノイズには揺れやすい
Adam (2014)m と s の両方+バイアス補正ほぼ無調整でだいたい速い。現代のデフォルトまれに汎化で SGD+Momentum に負ける報告。正則化は AdamW で

5. 学習率スケジュール — ηは一定でなくていい

どの手法を使うにせよ、いちばん重要なハイパーパラメータは学習率 η です。さらに η を学習の進行に合わせて変える「スケジュール」で、序盤の速さと終盤の精度を両立できます。

学習率スケジュール — ηの形と損失の下がり方
上=学習率の推移、下=対応する損失(対数目盛)。一定は序盤速いが、ηが大きいままなので最小値の周りで揺れ続けて下げ止まる。ステップ減衰はηを落とすたびに損失がガクッと下がる。コサイン+ウォームアップは序盤を小さなηで慎重に始め(ウォームアップ)、なめらかに絞って最も低くまで到達する。
一歩先へ — なぜウォームアップ?と AdamW 学習初期は Adam の2次モーメント ŝ の推定がまだ当てにならず、いきなり大きなηを使うと大暴れしやすい。そこで序盤だけηを小さくするウォームアップが特に Transformer 系の学習で必須になっている。また、Adam に L2 正則化を素朴に混ぜると適応学習率に食われて効きが歪むため、weight decay を更新式から分離した AdamW が現在の実質的な標準になっている。

6. まとめ