Adamとは
Adam Optimizer / Adaptive Moment Estimation
勾配の1次・2次モーメントを推定し、パラメータごとに学習率を自動調整する適応的最適化アルゴリズム
ひとことで言うと
各パラメータごとに「どれくらいの歩幅で進めばいいか」を自動で調整してくれる、賢い学習の進め方。
概要
Adam(Adaptive Moment Estimation)は、勾配降下法を拡張した適応的最適化アルゴリズム。 各パラメータの勾配について、過去の勾配の指数移動平均(1次モーメント、モーメンタムに相当)と勾配の2乗の指数移動平均(2次モーメント、勾配のスケールに相当)の両方を推定する。 これらを組み合わせ、パラメータごとに実質的な学習率を自動調整しながら更新する。 勾配が大きく変動しやすいパラメータには小さい実効学習率を、変動が少なく安定しているパラメータには相対的に大きい実効学習率を割り当てることができ、パラメータごとに手動でスケールを調整する手間を減らせる。 学習初期にモーメント推定値が0に偏るバイアスを補正する項が組み込まれており、学習開始直後から安定した更新を行える。 ディープラーニングの多くの分野で標準的なデフォルトの最適化アルゴリズムとして扱われており、LLMの事前学習や指示チューニングでも、Adamやその改良版であるAdamWが広く使われている。
背景
通常の確率的勾配降下法(SGD)は全パラメータに同じ学習率を適用するため、パラメータごとに勾配のスケールが大きく異なる場合、収束が遅くなったり不安定になったりすることがあった。 Adamは、勾配のモーメンタムと2次モーメントの両方を推定して活用することで、パラメータごとに適応的な学習率を実現し、幅広いタスクで安定した収束を得られるようにする目的で考案された。
歴史
2014年: KingmaとBaが論文「Adam: A Method for Stochastic Optimization」を発表。 2017年: 重み減衰の扱いを改善したAdamWが提案され、Transformerベースのモデル学習で広く採用される。 2020年代: LLMの事前学習・指示チューニングにおける事実上標準的な最適化アルゴリズムとして定着。
アーキテクチャ
各パラメータについて、勾配の指数移動平均(1次モーメント m)と、勾配の2乗の指数移動平均(2次モーメント v)を、それぞれ異なる減衰率で更新する。 学習初期のバイアスを補正したモーメント推定値を使い、パラメータの更新量を m を v の平方根で割った値に比例させることで、勾配のスケールに応じた実効的な学習率をパラメータごとに自動調整する。
ワークフロー
各パラメータについて、現在の勾配を使って1次モーメント m(勾配の指数移動平均)と2次モーメント v(勾配の2乗の指数移動平均)を更新する。 学習初期に0へ偏るバイアスを補正した推定値を計算する。 補正後の m を、補正後の v の平方根に微小な値を加えたもので割り、学習率を掛けた値をパラメータから差し引いて更新する。 これをミニバッチごとに繰り返し、損失関数を最小化する方向へパラメータを最適化していく。
コード例
PyTorchでのAdamオプティマイザ
import torch.optim as optim
optimizer = optim.AdamW(model.parameters(), lr=1e-4, weight_decay=0.01)利点
欠点
- SGDと比べてパラメータごとに追加の統計量(m、v)を保持する必要があり、メモリ使用量が増える
- タスクによっては、適切にチューニングされたSGDの方が最終的な汎化性能で上回ることがある
- ハイパーパラメータ(学習率や減衰率)の初期値によって、収束の挙動は変わりやすい
比較
関連用語
よくある質問
AdamとAdamWの違いは?
AdamWは、Adamにおける重み減衰(L2正則化に相当)の扱いを、勾配の更新式から切り離して直接パラメータへ適用するよう改良したもの。Transformerベースのモデル学習でより安定した結果を示すとされ、広く使われている。
AdamはSGDより常に優れている?
多くの場合Adamは収束が速く扱いやすいが、画像認識など一部のタスクでは、適切にチューニングされたSGDの方が最終的な汎化性能で上回る場合があることも報告されている。
参考文献
- Research PaperAdam: A Method for Stochastic Optimization