banner
Fight4354

Fight4354

AI,Chem,Science,Study,Share,Hobby,LLM,Life,Sport

梯度最適化器

下面写一篇结构清晰、逻辑严谨,涵盖:

  • 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):

θ=θηθL(全ての訓練データ)\theta = \theta - \eta \cdot \nabla_\theta L(\text{全ての訓練データ})

欠点は非常に明白です:

  • 毎回全データセットを遍歴しなければならない(遅すぎる)

  • 大規模データセットには不向き

そこで、確率的勾配降下法 SGDを導入します。

SGD の考え方:

毎回一つのサンプルの勾配を使ってパラメータを更新し、全データを使わない。

更新方法:

θ=θηθL(xi)\theta = \theta - \eta \cdot \nabla_\theta L(x_i)

1.2 SGD の利点#

  • 更新速度が非常に速い(全データを遍歴する必要がない)

  • ノイズが大きく、モデルが局所最適から脱出するのに役立つ可能性がある

1.3 SGD の欠点#

  • ノイズが大きすぎて、勾配の揺れが激しい

  • 毎回一つのサンプルだけを見るため、最適化の軌跡が非常に不安定

  • 深層ネットワークや大規模モデルには不向き

そのため、現在はより一般的に使用されているのは ——ミニバッチ SGDです。


2. ミニバッチ SGD:現代深層学習のデフォルト方式#

実際の訓練ではバッチ = 1(SGD)を使用せず、フルバッチも使用せず、代わりに:

毎回小さなバッチのサンプル (batch_size = 32/64/128...) を使って勾配を推定します。

ミニバッチ勾配:

g=1Bi=1BθL(xi)g = \frac{1}{B} \sum_{i=1}^{B} \nabla_\theta L(x_i)

パラメータ更新:

θ=θηg\theta = \theta - \eta g

2.1 なぜミニバッチが最適なのか?#

ミニバッチは完璧な折衷です:

方法ノイズ速度安定性実際の使用
SGD(batch=1)ノイズが大きすぎる速い悪いあまり使用されない
フルバッチ GDノイズなし遅い良い不可能
ミニバッチ SGD適度なノイズ速い安定最も一般的

ミニバッチの利点:

  • GPU の並列能力を十分に活用

  • 適度な勾配ノイズがあり、一般化に役立つ

  • 訓練が安定し、更新速度が速い

したがって、深層学習において「SGD」と言うと、通常は:

ミニバッチ SGD を指し、バッチ = 1 の元の SGD ではありません。


3. Adam:適応的モーメント推定オプティマイザ(Adaptive Moment Estimation)#

Adam は以下の二つの組み合わせと見なすことができます:

  • Momentum(モーメント) —— 勾配方向を平滑化

  • RMSProp —— 適応的次元学習率

3.1 Adam の核心思想#

Adam は各パラメータに対して二つの値を維持します:

  1. 一階モーメント(モーメント):勾配の指数平均
mt=β1mt1+(1β1)gtm_t = \beta_1 m_{t-1} + (1-\beta_1) g_t

重要なポイント:

  • gtg_t現在のバッチの勾配

  • mt1m_{t-1}以前の全バッチ勾配の「圧縮メモリ」
    なぜ β\betaの値は約 0.9 と大きいのか?

なぜ β₁をこんなに大きく(例えば 0.9)設定するのか?

1️⃣ ミニバッチ勾配自体が「ノイズが大きい」からです。

あなたはすでに知っています:

  • gtg_t はただのミニバッチの勾配です。

  • 異なるバッチ間で、勾配方向が揺れます。

もし私たちが現在のバッチを過信すると

  • パラメータは「左に行ったり、右に行ったり」します。

  • 収束が遅く、さらには不安定になります。

だから私たちは:

「現在のバッチを少し聞き、歴史的なトレンドを多く聞く」

これが β₁を大きく設定する根本的な理由です。


2️⃣ β₁ = 0.9 は実際に何を意味するのか?

mt=0.9mt1+0.1gtm_t = 0.9 m_{t-1} + 0.1 g_t

説明:

  • 現在のバッチの勾配は **10%** しか占めない。

  • 歴史的トレンドは **90%** を占める。

しかし注意:
この 90% は「前のバッチ」ではなく、全ての歴史的バッチの総合結果です。


3️⃣ 「記憶の長さ」はどれくらいですか?

指数平均には直感的な「有効な記憶の長さ」があります:

memory length11β1\text{memory length} \approx \frac{1}{1-\beta_1}

したがって:

  • β₁ = 0.9 → 約10 バッチを記憶する。

  • β₁ = 0.99 → 約100 バッチを記憶する。

  • β₁ = 0.5 → 約2 バッチを記憶する。

これも説明します:

β₁が大きいほど、記憶が長く、更新が滑らかになる;
β₁が小さいほど、反応が速くなるが、よりノイズが多くなる。

  1. 二階モーメント:勾配の二乗の指数平均
vt=β2vt1+(1β2)gt2v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2

その後、バイアス補正を行います:

m^t=mt1β1t,v^t=vt1β2t\hat{m}_t = \frac{m_t}{1-\beta_1^t}, \qquad \hat{v}_t = \frac{v_t}{1-\beta_2^t}

最終的な更新:

θ=θηm^tv^t+ε\theta = \theta - \eta \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \varepsilon}

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 をパラメータに直接作用させます:

θ=θη(m^tv^t+ε+λθ)\theta = \theta - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \varepsilon} + \lambda\theta \right)

こうすることで:

  • 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 のデフォルトオプティマイザ。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。