最適化アルゴリズムの派生系統図
新しい最適化器が出るたびに調べ直すのは終わり。SGD を根として派生を1本の系統樹に並べれば、各手法が「何を1つ足したか」で一望でき、未知の派生も同じ軸で読めます。
- 1.幹は2系統。SGDから「慣性(モメンタム→Nesterov)」が伸びる枝と、「勾配の大きさで割る適応学習率(AdaGrad→RMSProp/AdaDelta)」が伸びる枝があり、その合流点がAdam。
- 2.Adamの下流はバイアス補正・分離decay・分散補正で枝分かれ。AdamW(decay分離)、NAdam(Nesterov化)、RAdam(初期分散の修正)が代表で、現在の標準はAdamW。
- 3.Lion(2023)はモーメントを1つだけ持ち更新を符号関数で出す別系統。2次モーメントを捨てメモリを半減させつつ大規模学習でAdamWに匹敵し、適応学習率一辺倒からの分岐点。
系統図として読む理由:派生は「追加要素1つ」で説明できる
最適化アルゴリズムは数が多く、論文ごとに記号も違うため、列挙して暗記すると破綻します。しかし実際には、すべて SGD という1つの根から「前段に要素を1つ足す」操作の連鎖で生まれています。系統樹として並べれば、各手法は「親 + 追加要素」というラベルで一意に説明でき、新しい派生が出ても同じ軸で位置づけられます。本稿は更新式の導出よりも 分岐関係と各々の追加要素 の整理に焦点を当てます。式中心の解説は SGD から AdamW まで を併読してください。
根は SGD(1951年の確率近似に由来)。ここから幹が2本に分かれます。慣性の枝:SGD → モメンタム → Nesterov。適応学習率の枝:SGD → AdaGrad → RMSProp / AdaDelta。この2本の幹が Adam(2014) で合流し、その下流が AdamW・NAdam・RAdam へ枝分かれします。さらに合流系統から外れた 別系統として Lion(2023)が分岐します。
幹その1:慣性の枝(モメンタム → Nesterov)
SGD の更新は θ_{t+1} = θ_t - η · g_t で、生の勾配 g_t を歩幅 η で進むだけです。最初の分岐は 慣性(速度)の状態変数を1つ持つことでした。
- モメンタム(Momentum, 1964 / DL文脈では1986頃) = SGD +「過去勾配のEMA
v」。同符号の勾配が続く軸で加速し、振動軸で打ち消し合う。追加要素は 状態変数1つ(1次モーメントの原型)。 - Nesterov 加速勾配(NAG, 1983) = モメンタム +「先読み」。勾配を現在地ではなく「慣性で先に進んだ仮の位置」で評価する点だけが違います。
# モメンタム:現在地 θ_t で勾配を測る
v_t = β·v_{t-1} + g_t
θ_{t+1} = θ_t - η·v_t
# Nesterov:先に β·v だけ進んだ点で勾配を測る(先読み)
v_t = β·v_{t-1} + g(θ_t - η·β·v_{t-1})
θ_{t+1} = θ_t - η·v_t
Nesterov の追加要素は 勾配の評価点をずらすこと だけで、新しい状態変数は増えません。先読みにより「行き過ぎ」を1ステップ早く察知でき、凸問題では収束レートが理論上改善します。
幹その2:適応学習率の枝(AdaGrad → RMSProp / AdaDelta)
もう1本の幹は、慣性ではなく パラメータごとに学習率を変える 方向です。共通の発想は「過去の勾配の大きさを溜め、それで歩幅を割る」こと。
- AdaGrad(2011) = SGD +「勾配二乗の累積和
G」。θ_{t+1} = θ_t - η·g_t / (√G_t + ε)。よく動いた軸ほど歩幅が縮む。追加要素は 2次モーメントの原型。ただしGが単調増加するため、学習が進むと歩幅が0へ潰れる弱点があります。 - RMSProp(2012) = AdaGrad の「累積和」を「EMA」に置換。
s_t = β2·s_{t-1} + (1-β2)·g_t²。過去を指数的に忘れるので歩幅が0へ潰れない。追加要素は 減衰係数β2。 - AdaDelta(2012) = RMSProp +「学習率
ηの除去」。更新量自体の二乗EMAで分子を作り、ハイパーパラメータからηを消す試み。RMSProp と兄弟関係にある分岐です。
AdaGrad → RMSProp の分岐点は、二乗勾配を「ずっと足し続ける(累積和)」か「指数的に忘れる(EMA)」かの一点だけです。累積和は理論保証が強い反面、長時間学習で歩幅が消える。EMA は実用的に歩幅を維持する。この「忘却の導入」が、後の Adam が累積和ではなく EMA を採るうえでの直接の親になっています。
合流点:Adam は2本の幹を1つに束ねる
Adam(Adaptive Moment Estimation, 2014) は系統樹の最大の合流点です。慣性の枝から 1次モーメント m(向き)、適応学習率の枝から 2次モーメント v(大きさ) を受け継ぎ、両方を別々の係数で持ちます。Adam 固有の追加要素は バイアス補正 です。
m_t = β1·m_{t-1} + (1-β1)·g_t # 慣性の枝を継承(1次)
v_t = β2·v_{t-1} + (1-β2)·(g_t·g_t) # 適応の枝を継承(2次, EMA)
m̂_t = m_t / (1 - β1^t) # ← Adam固有:初期バイアス補正
v̂_t = v_t / (1 - β2^t)
θ_{t+1} = θ_t - η · m̂_t / (√v̂_t + ε)
m, v を0で初期化すると序盤に過小評価が生じるため、(1 - β^t) で割って打ち消すのがバイアス補正です。t が大きくなると β^t → 0 となり補正は消えます。デフォルトは β1=0.9, β2=0.999, ε=1e-8。
Adam の下流:3つの枝分かれ
Adam を親として、さらに「要素1つ追加」の派生が複数生まれました。互いに独立した改良なので、横並びの枝として捉えます。
| 派生 | 年 | 親 | 追加した要素1つ | 解決する問題 |
|---|---|---|---|---|
| AdamW | 2017 | Adam | weight decay を勾配から分離し更新の最後に直接減衰 | L2を勾配に混ぜると適応スケールで正則化が歪む点 |
| NAdam | 2016 | Adam | 1次モーメントを Nesterov の先読み型に置換 | 向きの推定をわずかに先取りし収束を改善 |
| RAdam | 2019 | Adam | 序盤の2次モーメント分散を見て適応項を整流(warmup代替) | 学習初期に v の分散が大きく更新が暴れる点 |
| AMSGrad | 2018 | Adam | v̂ に過去最大値の単調制約を課す | Adam が一部問題で収束しない理論的反例 |
このうち AdamW が事実上の標準です。理由は、weight decay 項 λ·θ を √v̂ で割らずに更新の末尾で直接引くため、全パラメータが一様に縮み、正則化 の効果が勾配の大きさに依存しなくなるからです。従来 Adam の「L2を勾配に加算」では、勾配が大きいパラメータほど正則化が弱まる歪みがありました。Transformer 系の大規模学習(LLM と Transformer)はほぼ AdamW を採用します。
名前の接頭辞・接尾辞が追加要素のヒントになります。W=weight decay の分離(AdamW)、N=Nesterov 化(NAdam)、R=Rectified=整流・分散補正(RAdam)、AMS=最大値制約(AMSGrad)。「Adam + 何か1つ」と分解する癖をつけると、未収載の派生(LAMB=層ごとの正規化、Adafactor=2次モーメントの因子分解でメモリ削減 など)も同じ枠で読めます。
別系統:Lion は適応学習率を捨てて分岐する
ここまでの主流は「2次モーメントで割る適応学習率」でしたが、Lion(EvoLved Sign Momentum, 2023) はその前提から外れる分岐です。Lion は 状態変数を1つ(モメンタムのみ) しか持たず、2次モーメント v を持ちません。更新の向きは勾配ではなく 符号関数 sign(·) で決めます。
# Lion:更新方向を sign で出す。状態は m ひとつだけ
c_t = sign( β1·m_{t-1} + (1-β1)·g_t ) # 更新方向(補間してから符号)
θ_{t+1} = θ_t - η·( c_t + λ·θ_t ) # weight decay は分離(AdamW流)
m_t = β2·m_{t-1} + (1-β2)·g_t # モメンタムの更新は別係数で
追加要素というより 削減が本質です。2次モーメントを捨てることでオプティマイザ状態のメモリが Adam 系の約半分になり、大規模モデルで効きます。符号更新は全パラメータの更新量を一律 η 程度に揃えるため、学習率と weight decay の最適値が Adam 系とは大きく異なる点に注意が必要です(一般に η はより小さく、λ はより大きく取る)。性能は画像・言語の大規模学習で AdamW に匹敵または上回る報告があり、適応学習率一辺倒だった系統樹に新しい幹を生やした位置づけです。
- Adam の2つの親は何か:慣性の枝(モメンタム)と適応の枝(RMSProp)。Adam=「モメンタム + RMSProp + バイアス補正」。
- AdaGrad と RMSProp の唯一の違い:二乗勾配を累積和で持つか EMA で持つか。
- AdamW が標準な理由:weight decay を適応スケールの外へ分離し、正則化が勾配の大きさに依存しないため。
- Lion が Adam 系と決定的に違う点:2次モーメントを持たず、更新を
signで出す(状態がメモリ半分)。
まとめ:根・2本の幹・合流・別系統で覚える
系統樹の骨格はこうです。根は SGD。そこから 慣性の枝(モメンタム→Nesterov) と 適応学習率の枝(AdaGrad→RMSProp/AdaDelta) の2本が伸び、両者が Adam で合流。Adam の下流に AdamW(decay分離)・NAdam(Nesterov化)・RAdam(分散整流)・AMSGrad(最大値制約) が枝分かれし、実務標準は AdamW。これらの適応系統から外れた 別系統として、2次モーメントを捨て符号更新を採る Lion がある——この5層で全体を保持できます。
重要なのは、各ノードを「親 + 追加(または削減)した要素1つ」で言えるようにしておくことです。そうすれば新しい派生が出ても、どの幹のどこに接ぐべきかを即座に判断できます。土台のネットワークと勾配の流れは ニューラルネットワーク を合わせて確認してください。
AI/機械学習 Article
最適化アルゴリズムの派生系統図を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
最適化
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
Adamの下流はバイアス補正・分離decay・分散補正で枝分かれ。AdamW(decay分離)、NAdam(Nesterov化)、RAdam(初期分散の修正)が代表で、現在の標準はAdamW。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「最適化 / Adam」に近いか確認する。
- 強みである「幹は2系統。SGDから「慣性(モメンタム→Nesterov)」が伸びる枝と、「勾配の大きさで割る適応学習率(AdaGrad→RMSProp/AdaDelta)」が伸びる枝があり、その合流点がAdam。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。