最適化アルゴリズムの系統:SGD から Adam・AdamW まで
学習率を手で詰める前に系譜を押さえれば設定が一気に楽になる。SGD・モメンタム・RMSProp・Adam・AdamW を更新式で結び、なぜ AdamW が標準なのかまで一本道で理解する。
- 1.系譜は一直線。SGD に「慣性」を足すとモメンタム、勾配の大きさで学習率を割るとRMSProp、両者を1次・2次モーメントとして統合したのがAdam。
- 2.Adam は勾配の指数移動平均(1次モーメント)と二乗の移動平均(2次モーメント)を持ち、初期バイアス補正を掛けてパラメータごとに実効学習率を自動調整する。
- 3.AdamW は weight decay を勾配ではなく更新の最後に直接引く「分離(decoupled)」型。L2正則化を勾配に混ぜる従来Adamと数学的に等価でないため、現在の事実上の標準。
出発点:SGD は「勾配の逆向きに一歩」だけ
最適化アルゴリズムの仕事は、損失 L を下げる方向へパラメータ θ を更新し続けることです。最も素朴な 確率的勾配降下法(SGD) は、ミニバッチで推定した勾配 g_t = ∇L(θ_t) を使い、
θ_{t+1} = θ_t - η · g_t (η は学習率)
と更新するだけです。基礎の考え方は 勾配降下法 に譲りますが、SGD の弱点は明確です。(1) 損失曲面が方向によって急峻さの違う「谷」だと、急な軸でジグザグに振動し、緩い軸ではなかなか進まない。(2) 全パラメータに同じ η を使うため、勾配の大きさが桁違いの層があると一律の歩幅が合わない。(3) 勾配のノイズや鞍点付近で停滞しやすい。これらを順に潰していった結果が Adam 系です。
SGD →(慣性を足す)→ モメンタム →(勾配の大きさで割る)→ RMSProp →(両者を統合)→ Adam →(weight decay を分離)→ AdamW。各段が前段の特定の弱点を1つずつ解消する、という見方で読むと系譜が一本につながります。
モメンタム:過去の更新を「慣性」として引き継ぐ
弱点 (1) と (3) に効くのが モメンタム(Momentum) です。坂を転がるボールのように、過去の勾配を指数的に蓄えた速度 v を持ち、それで更新します。
v_t = β · v_{t-1} + (1 - β) · g_t (β ≈ 0.9 が定番)
θ_{t+1} = θ_t - η · v_t
v は直近の勾配の 指数移動平均(EMA) です。同じ向きの勾配が続く軸では速度が積み上がって加速し、符号が反転して振動する軸では正負が打ち消し合って減速します。結果としてジグザグが抑えられ、緩い谷を速く下れます。これが後に 1次モーメント と呼ばれる量の原型です。
RMSProp:勾配の大きさで学習率を「割って」揃える
次に弱点 (2)。パラメータごとに勾配のスケールが違うなら、各パラメータの実効学習率をその勾配の大きさで正規化すればよい。これが RMSProp で、勾配の 二乗 の EMA s を蓄え、更新時に √s で割ります(⊙ は要素ごとの積、割り算も要素ごと)。
s_t = β2 · s_{t-1} + (1 - β2) · (g_t ⊙ g_t)
θ_{t+1} = θ_t - η · g_t / (√s_t + ε) (ε は0割り防止、例: 1e-8)
勾配が大きく暴れる軸は √s が大きくなって歩幅が自動的に縮み、勾配が小さく停滞しがちな軸は歩幅が相対的に伸びます。この s が後の 2次モーメント です。重要なのは、RMSProp は 方向(1次)には関与せず、大きさ(2次)でスケールを調整するだけ という点です。
ここでの「モーメント」は統計の積率。1次モーメント = 勾配 g の平均(向きを表す v)、2次モーメント = 勾配の二乗 g² の平均(大きさ・分散の代理である s)。Adam の m/v がまさにこの2つで、「向きはモメンタムで、歩幅はRMSPropで」を1つの式に同居させたものだと捉えると腑に落ちます。
Adam:1次と2次を統合し、初期バイアスまで補正する
Adam(Adaptive Moment Estimation) は、モメンタムの「向き」と RMSProp の「大きさ調整」を両方持ちます。1次モーメント m(向き)と2次モーメント v(大きさ)を別々の係数 β1/β2 で蓄えます。
m_t = β1 · m_{t-1} + (1 - β1) · g_t # 1次モーメント(向き)
v_t = β2 · v_{t-1} + (1 - β2) · (g_t ⊙ g_t) # 2次モーメント(大きさ)
ただし m も v も初期値 0 から始めるため、学習の序盤は 0 に引っ張られて過小評価 されます。これを直すのが バイアス補正で、β の累乗で割って初期の縮みを打ち消します。
m̂_t = m_t / (1 - β1^t) # t が小さいほど補正が強く効く
v̂_t = v_t / (1 - β2^t)
θ_{t+1} = θ_t - η · m̂_t / (√v̂_t + ε)
最終的に各パラメータは「慣性で均した向き m̂ を、そのパラメータの勾配の暴れ具合 √v̂ で割った歩幅」で動きます。デフォルトは β1=0.9, β2=0.999, ε=1e-8 が広く使われ、初期学習率に対する感度が SGD より低く、追加調整が少なく済むのが普及理由です。
- バイアス補正がなぜ必要か:
m,vを 0 で初期化するため序盤に過小評価が生じ、(1 - β^t)で割って打ち消す。tが大きくなるとβ^t → 0で補正係数 → 1 となり影響が消える。 β1とβ2の役割の違い:β1は 向き(1次) の平滑化、β2は 大きさ(2次) の平滑化。β2の方が 1 に近い=より長期で平均する。- Adam は「RMSProp + モメンタム + バイアス補正」と一言で言える。
AdamW:weight decay を「分離」して正則化を正す
ここが上級の核心です。多くの実装で長く使われてきた「Adam + L2正則化」には、見落とされがちな欠陥がありました。
L2正則化 は損失に (λ/2)·‖θ‖² を足す手法で、勾配に λ·θ が加算されます。SGD ならこれは「重みを毎ステップ η·λ だけ縮める」weight decay と数学的に等価です。ところが Adam では、この λ·θ 項も g と一緒に √v̂ で割られてしまいます。つまり 勾配が大きいパラメータほど正則化が弱まる という、意図しない歪みが生じます。正則化の狙い(正則化 参照)が、適応的スケーリングによって台無しになるわけです。
AdamW は weight decay を勾配経路から切り離し(decoupled)、適応更新を済ませた後に重みを直接縮めます。
# 従来 Adam + L2: g に λ·θ を混ぜてから割る(歪む)
g_t = ∇L(θ_t) + λ · θ_t
... Adam の更新 ...
# AdamW: weight decay を更新式の末尾で分離して引く(歪まない)
m_t = β1·m_{t-1} + (1-β1)·g_t
v_t = β2·v_{t-1} + (1-β2)·(g_t ⊙ g_t)
m̂_t = m_t / (1 - β1^t); v̂_t = v_t / (1 - β2^t)
θ_{t+1} = θ_t - η · ( m̂_t / (√v̂_t + ε) + λ · θ_t )
decay 項 λ·θ_t が √v̂ の外にあるため、全パラメータが一様に縮み、正則化が勾配の大きさに依存しなくなります。この一見小さな違いが汎化性能に効くため、AdamW は Transformer をはじめ現在の大規模学習の事実上の標準です(LLM と Transformer の学習にも標準採用)。
AdamW の λ(weight decay)は、従来 Adam の L2係数とは意味も最適値も異なります。AdamW では decay が学習率と分離されているため、η を変えても λ を再調整し直す必要が生じる実装が多く、設定値の流用は危険です。また λ が更新式上 η と掛かる形か独立かはフレームワークごとに差があるため、PyTorch などの weight_decay 引数の定義を必ず確認してください。
一覧で押さえる:何を蓄え、何で割るか
各手法が「向き(1次)」と「大きさ(2次)」をどう扱うかを並べると、系譜が一望できます。
| 手法 | 1次モーメント(向き) | 2次モーメント(大きさで割る) | weight decay の扱い |
|---|---|---|---|
| SGD | なし(生の勾配) | なし(学習率は一律) | L2を勾配に加算(=decayと等価) |
| モメンタム | あり(勾配のEMA) | なし | L2を勾配に加算 |
| RMSProp | なし | あり(勾配²のEMAで正規化) | L2を勾配に加算 |
| Adam | あり+バイアス補正 | あり+バイアス補正 | L2を勾配に混ぜる→適応で歪む |
| AdamW | あり+バイアス補正 | あり+バイアス補正 | 分離して更新の最後に直接減衰 |
まとめ:系譜で覚えれば設定も迷わない
最適化器の進化は「SGD の欠点を1つずつ埋める」物語でした。慣性で振動と停滞を抑えたのがモメンタム、勾配の大きさで割って学習率をパラメータ別に揃えたのが RMSProp、その両方を 1次・2次モーメント+バイアス補正 で統合したのが Adam。そして weight decay を適応スケールから分離して正則化を正したのが AdamW です。
実務の出発点としては、まず AdamW(β1=0.9, β2=0.999, ε=1e-8)に学習率と λ を合わせるのが堅実で、計算資源に余裕があり最終精度を詰めたい画像系などでは SGD +モメンタムが上回る場面も残ります。「向きは1次で、歩幅は2次で、正則化は分離して」——この三要素で各アルゴリズムを分解できれば、新しい派生(NAdam, RAdam, Lion 等)が出ても同じ軸で読み解けます。土台のネットワークと学習の流れは ニューラルネットワーク を合わせて確認してください。
AI/機械学習 Article
最適化アルゴリズムの系統:SGD から Adam・AdamW までを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
最適化
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
Adam は勾配の指数移動平均(1次モーメント)と二乗の移動平均(2次モーメント)を持ち、初期バイアス補正を掛けてパラメータごとに実効学習率を自動調整する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「最適化 / Adam」に近いか確認する。
- 強みである「系譜は一直線。SGD に「慣性」を足すとモメンタム、勾配の大きさで学習率を割るとRMSProp、両者を1次・2次モーメントとして統合したのがAdam。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。