下面写一篇结构清晰、逻辑严谨,涵盖:
-
SGD(確率的勾配降下法)
-
ミニバッチ SGD(小バッチ確率的勾配降下法)
-
Adam オプティマイザ
-
AdamW オプティマイザ
-
三者の関係と違い
-
計算の直感 + 数学公式 + 実践経験
深層学習オプティマイザの包括的理解:SGD、ミニバッチ SGD、Adam、AdamW
深層学習の訓練において、オプティマイザ(Optimizer)はモデルパラメータの更新方法を制御する核心コンポーネントです。
異なるオプティマイザはモデルの学習速度、安定性、最終的な効果に大きな影響を与えます。
この記事では深く理解します:
-
SGD とは?
-
ミニバッチはなぜ深層学習の標準なのか?
-
Adam はどのように Momentum + RMSProp を組み合わせているのか?
-
AdamW はなぜ現在最も主流の大規模モデルオプティマイザなのか?
SGD とミニバッチの一つのバッチ内の勾配は、このバッチの平均値を取ります
1. SGD:確率的勾配降下法(Stochastic Gradient Descent)#
1.1 基本思想#
標準勾配降下法(Full-batch Gradient Descent):
欠点は非常に明白です:
-
毎回全データセットを遍歴しなければならない(遅すぎる)
-
大規模データセットには不向き
そこで、確率的勾配降下法 SGDを導入します。
SGD の考え方:
毎回一つのサンプルの勾配を使ってパラメータを更新し、全データを使わない。
更新方法:
1.2 SGD の利点#
-
更新速度が非常に速い(全データを遍歴する必要がない)
-
ノイズが大きく、モデルが局所最適から脱出するのに役立つ可能性がある
1.3 SGD の欠点#
-
ノイズが大きすぎて、勾配の揺れが激しい
-
毎回一つのサンプルだけを見るため、最適化の軌跡が非常に不安定
-
深層ネットワークや大規模モデルには不向き
そのため、現在はより一般的に使用されているのは ——ミニバッチ SGDです。
2. ミニバッチ SGD:現代深層学習のデフォルト方式#
実際の訓練ではバッチ = 1(SGD)を使用せず、フルバッチも使用せず、代わりに:
毎回小さなバッチのサンプル (batch_size = 32/64/128...) を使って勾配を推定します。
ミニバッチ勾配:
パラメータ更新:
2.1 なぜミニバッチが最適なのか?#
ミニバッチは完璧な折衷です:
| 方法 | ノイズ | 速度 | 安定性 | 実際の使用 |
|---|---|---|---|---|
| SGD(batch=1) | ノイズが大きすぎる | 速い | 悪い | あまり使用されない |
| フルバッチ GD | ノイズなし | 遅い | 良い | 不可能 |
| ミニバッチ SGD | 適度なノイズ | 速い | 安定 | 最も一般的 |
ミニバッチの利点:
-
GPU の並列能力を十分に活用
-
適度な勾配ノイズがあり、一般化に役立つ
-
訓練が安定し、更新速度が速い
したがって、深層学習において「SGD」と言うと、通常は:
ミニバッチ SGD を指し、バッチ = 1 の元の SGD ではありません。
3. Adam:適応的モーメント推定オプティマイザ(Adaptive Moment Estimation)#
Adam は以下の二つの組み合わせと見なすことができます:
-
Momentum(モーメント) —— 勾配方向を平滑化
-
RMSProp —— 適応的次元学習率
3.1 Adam の核心思想#
Adam は各パラメータに対して二つの値を維持します:
- 一階モーメント(モーメント):勾配の指数平均
重要なポイント:
-
:現在のバッチの勾配
-
:以前の全バッチ勾配の「圧縮メモリ」
なぜ の値は約 0.9 と大きいのか?
なぜ β₁をこんなに大きく(例えば 0.9)設定するのか?
1️⃣ ミニバッチ勾配自体が「ノイズが大きい」からです。
あなたはすでに知っています:
-
各 はただのミニバッチの勾配です。
-
異なるバッチ間で、勾配方向が揺れます。
もし私たちが現在のバッチを過信すると:
-
パラメータは「左に行ったり、右に行ったり」します。
-
収束が遅く、さらには不安定になります。
だから私たちは:
「現在のバッチを少し聞き、歴史的なトレンドを多く聞く」
これが β₁を大きく設定する根本的な理由です。
2️⃣ β₁ = 0.9 は実際に何を意味するのか?
説明:
-
現在のバッチの勾配は **10%** しか占めない。
-
歴史的トレンドは **90%** を占める。
しかし注意:
この 90% は「前のバッチ」ではなく、全ての歴史的バッチの総合結果です。
3️⃣ 「記憶の長さ」はどれくらいですか?
指数平均には直感的な「有効な記憶の長さ」があります:
したがって:
-
β₁ = 0.9 → 約10 バッチを記憶する。
-
β₁ = 0.99 → 約100 バッチを記憶する。
-
β₁ = 0.5 → 約2 バッチを記憶する。
これも説明します:
β₁が大きいほど、記憶が長く、更新が滑らかになる;
β₁が小さいほど、反応が速くなるが、よりノイズが多くなる。
- 二階モーメント:勾配の二乗の指数平均
その後、バイアス補正を行います:
最終的な更新:
3.2 Adam の直感的理解#
-
$\hat {m}_t$:平滑な勾配で、最適化方向をより安定にします。
-
$\hat {v}_t$:勾配の大きさを測定し、大きな勾配→ステップサイズ小、 小さな勾配→ステップサイズ大。
-
各次元パラメータは独立した学習率を持つ:適応的学習率。
3.3 Adam の利点#
-
収束速度が速い(特に訓練初期)。
-
学習率に敏感でない。
-
勾配スケールに適応し、深層ネットワークに非常に適している。
-
NLP、Transformer などの大規模モデル訓練の主力。
3.4 Adam の欠点#
-
時々、一般化性能が SGD + Momentum より劣る。
-
元の Adam の L2 正則化は厳密に weight decay と等価ではない。
この欠点がAdamWを引き起こしました。
4. AdamW:Transformer などの大規模モデルの標準オプティマイザ#
AdamW = Adam + 正しい重み減衰(Weight Decay)
元の Adam の L2 正則化と適応的学習率が結合されており、効果が悪化しました。
AdamW は weight decay をパラメータに直接作用させます:
こうすることで:
-
weight decay はパラメータの大きさにのみ影響し、勾配推定には影響しない。
-
理論的にもより安定です。
AdamW は以下のモデルのデフォルトオプティマイザです:#
-
BERT
-
GPT-2 / GPT-3 / GPT-4
-
PaLM / LLaMA
-
Megatron-LM
-
Stable Diffusion
ほぼすべての現代の大規模モデルは AdamW で訓練されています。
5. SGD vs ミニバッチ SGD vs Adam vs AdamW のまとめと比較#
| オプティマイザ | 自適応か | 方向を平滑化するか | weight decay の正しい実装があるか | 収束速度 | 一般化能力 | 使用シーン |
|---|---|---|---|---|---|---|
| SGD | いいえ | いいえ | いいえ | 遅い | 強い(画像タスク) | CNN、小モデル |
| SGD+Momentum | いいえ | はい | いいえ | 中程度 | 非常に強い | 大部分の伝統的タスク |
| ミニバッチ SGD | いいえ | いいえ | いいえ | 中程度 | 強い | 全ての深層学習 |
| Adam | はい | はい | いいえ | 速い | 一般的 | NLP、大規模モデル |
| AdamW | はい | はい | はい | 速くて安定 | 強い | Transformer、大規模モデルの標準 |
6. 最終まとめ(一文記憶版)#
-
SGD:一つのサンプルでパラメータを更新するが、ノイズが大きすぎる。
-
ミニバッチ SGD:一批のサンプルの平均勾配で更新し、訓練の標準。
-
Adam:モーメント + 適応的学習率で、訓練が速く、安定。
-
AdamW:Adam の weight decay 問題を修正し、Transformer/GPT のデフォルトオプティマイザ。