深層学習の最適化アルゴリズム。SGD、Momentum、Adam、AdamW、学習率スケジューリング。なぜAdamWが標準なのか、ウォームアップの必要性。
最終更新:2025年11月
※画像は生成AIによるイメージです。
深層学習の訓練は以下の最適化問題:
$$\min_{\theta} \mathcal{L}(\theta) = \frac{1}{N} \sum_{i=1}^{N} \ell(f_\theta(x_i), y_i)$$
$\theta$:モデルパラメータ、$\mathcal{L}$:損失関数、$N$:データ数
基本的な更新則:
$$\theta_{t+1} = \theta_t - \eta \nabla_\theta \mathcal{L}(\theta_t)$$
$\eta$:学習率(Learning Rate)
全データではなく、ミニバッチ $B$ での勾配推定:
$$\theta_{t+1} = \theta_t - \eta \cdot \frac{1}{|B|} \sum_{i \in B} \nabla_\theta \ell(f_\theta(x_i), y_i)$$
利点:
過去の勾配を指数移動平均で蓄積:
$$v_t = \beta v_{t-1} + \nabla_\theta \mathcal{L}(\theta_t)$$
$$\theta_{t+1} = \theta_t - \eta v_t$$
$\beta$:モーメンタム係数(通常0.9)
効果:
「先読み」による改良:
$$v_t = \beta v_{t-1} + \nabla_\theta \mathcal{L}(\theta_t - \eta \beta v_{t-1})$$
$$\theta_{t+1} = \theta_t - \eta v_t$$
将来位置での勾配を使用し、オーバーシュートを抑制。
Momentumは「慣性」を持つボールの運動に対応:
過去の勾配の二乗和で学習率を調整:
$$G_t = G_{t-1} + (\nabla_\theta \mathcal{L})^2$$
$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \nabla_\theta \mathcal{L}$$
特徴:
AdaGradの改良。指数移動平均で直近の勾配を重視:
$$v_t = \beta v_{t-1} + (1-\beta)(\nabla_\theta \mathcal{L})^2$$
$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{v_t + \epsilon}} \nabla_\theta \mathcal{L}$$
$\beta$:通常0.9(過去の影響を指数減衰)
パラメータごとに「適切な」学習率を自動調整:
Adam(Adaptive Moment Estimation、Kingma & Ba 2015):
MomentumとRMSpropの組み合わせ。
更新則:
$$m_t = \beta_1 m_{t-1} + (1-\beta_1) \nabla_\theta \mathcal{L}$$
$$v_t = \beta_2 v_{t-1} + (1-\beta_2) (\nabla_\theta \mathcal{L})^2$$
バイアス補正:
$$\hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t}$$
パラメータ更新:
$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t$$
| パラメータ | 典型値 | 意味 |
|---|---|---|
| $\eta$(学習率) | 1e-4 〜 1e-3 | ステップサイズ |
| $\beta_1$ | 0.9 | 1次モーメントの減衰率 |
| $\beta_2$ | 0.999 | 2次モーメントの減衰率 |
| $\epsilon$ | 1e-8 | 数値安定性 |
問題:AdamでのL2正則化は期待どおりに機能しない。
L2正則化(Adam):
$$\nabla_\theta (\mathcal{L} + \frac{\lambda}{2}\|\theta\|^2) = \nabla_\theta \mathcal{L} + \lambda \theta$$
→ 適応的学習率により、正則化効果が不均一になる。
AdamW(Decoupled Weight Decay):
$$\theta_{t+1} = \theta_t - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_t \right)$$
Weight Decayを勾配更新から分離。
効果:
訓練初期に学習率を徐々に上げる:
$$\eta_t = \eta_{max} \cdot \frac{t}{T_{warmup}}, \quad t \leq T_{warmup}$$
なぜ必要か:
典型値:全ステップの1-5%、または1,000-10,000ステップ
Step Decay:
一定ステップごとに学習率を減衰:
$$\eta_t = \eta_0 \cdot \gamma^{\lfloor t/T \rfloor}$$
Cosine Annealing:
余弦曲線に従って滑らかに減衰:
$$\eta_t = \eta_{min} + \frac{1}{2}(\eta_{max} - \eta_{min})(1 + \cos(\frac{\pi t}{T}))$$
LLM訓練で最も一般的。滑らかな減衰が安定した訓練に寄与。
Linear Decay:
$$\eta_t = \eta_{max} \cdot (1 - \frac{t}{T})$$
Inverse Square Root:
$$\eta_t = \eta_0 \cdot \frac{1}{\sqrt{t}}$$
元のTransformer論文で使用。
LLM訓練の標準的なスケジュール:
典型的な設定:Warmup 2,000ステップ、$\eta_{min} = 0.1 \cdot \eta_{max}$
| タスク | 推奨 | 備考 |
|---|---|---|
| LLM事前訓練 | AdamW | 標準、安定 |
| LLMファインチューニング | AdamW / AdaFactor | 低学習率 |
| 画像分類(CNN) | SGD + Momentum | 汎化に優れる場合も |
| 大バッチ訓練 | LAMB / LARS | Layer-wise適応 |
| メモリ制約 | AdaFactor | 8-bit Adam |
勾配爆発を防止:
$$\text{if } \|\nabla\| > \tau: \quad \nabla \leftarrow \frac{\tau}{\|\nabla\|} \nabla$$