Adam あだむ
Adam最適化適応的学習率モメンタムニューラルネットワーク深層学習
Adamについて教えて
Adamとは
Adam(Adaptive Moment Estimation) は、2014年にDiederik KingmaとJimmy Baが提案した深層学習の定番最適化アルゴリズムです。SGDにモメンタム(慣性)と学習率の自動調整を組み合わせたもので、「最初に試すべき最適化手法」として広く使われています。
Adamの特徴は2つの統計量を管理する点にあります。一つは勾配の1次モーメント(平均)、もう一つは勾配の2次モーメント(二乗平均)です。前者がモメンタムの役割を、後者が各パラメータへの適応的な学習率調整の役割を果たします。
その結果、学習率の手動チューニングが少なくて済み、様々なタスクで安定した学習ができるため、画像認識・自然言語処理・強化学習など幅広い分野で標準的に採用されています。
Adamの計算ステップ
| ステップ | 計算内容 |
|---|---|
| 勾配計算 | 現在のパラメータで勾配 g を計算 |
| 1次モーメント更新 | m ← β₁·m + (1−β₁)·g(勾配の指数移動平均) |
| 2次モーメント更新 | v ← β₂·v + (1−β₂)·g²(勾配二乗の指数移動平均) |
| バイアス補正 | m̂ = m/(1−β₁ᵗ)、v̂ = v/(1−β₂ᵗ) |
| パラメータ更新 | θ ← θ − η·m̂/(√v̂+ε) |
# PyTorchでのAdam使用例
import torch.optim as optim
optimizer = optim.Adam(
model.parameters(),
lr=0.001, # 学習率(デフォルト0.001が多くの場合有効)
betas=(0.9, 0.999), # β₁, β₂(通常デフォルトのまま)
eps=1e-8 # ゼロ除算防止の小定数
)
歴史と背景
- 2014年:KingmaとBaがAdamを提案(論文「Adam: A Method for Stochastic Optimization」)
- 2015年:Batch Normalizationと組み合わせて深層学習の学習を安定化
- 2017年以降:Transformerの登場とともにAdamWが標準最適化器として普及
- 現在:GPT・BERTなど大規模言語モデルの事前学習にもAdamW(重み減衰付きAdam)が広く使用
Adam系の最適化アルゴリズム比較
| アルゴリズム | 特徴 | 主な用途 |
|---|---|---|
| Adam | バランスが良く汎用的 | 多くのDLタスク全般 |
| AdamW | 重み減衰を正しく分離 | Transformer系(GPT、BERTなど) |
| RAdam | 初期学習を安定化 | 学習率ウォームアップ不要 |
| Nadam | Adamにネステロフの加速を追加 | RNN系タスク |
| AdaGrad | 過去の勾配を累積 | スパースな特徴が多い場合 |
関連用語
- SGD(確率的勾配降下法) — Adamの前身となる基本最適化手法
- AdaGrad / RMSProp — Adamに組み込まれた技術の祖先
- 学習率スケジューリング — Adamと組み合わせる学習率制御
- ウォームアップ(学習率) — Adam使用時に合わせて使う技法
- ハイパーパラメータ — 学習率などAdamの設定値