Adam Optimizer
ディープラーニング向けのAdamオプティマイザーについて解説します。運動量とRMSPropを組み合わせて、Ultralytics YOLO26などのモデルで収束を高速化する仕組みを学びます。
Adamオプティマイザーは、Adaptive Moment Estimationの略称であり、ディープラーニングモデルのトレーニングに広く使用されている高度な最適化アルゴリズムです。Adamは、他の2つの代表的な確率的勾配降下法 (SGD)の拡張手法であるAdaptive Gradient Algorithm(AdaGrad)とRoot Mean Square Propagation(RMSProp)の利点を組み合わせることで、この分野に革新をもたらしました。勾配の1次モーメントと2次モーメントの推定値から、パラメーターごとに適応的な学習率を計算することで、Adamはニューラルネットワークを従来の手法よりも大幅に速く収束させます。その堅牢性とチューニングの必要性の低さから、新しい機械学習 (ML)プロジェクトを始める多くの実務者にとって、デフォルトの選択肢となっています。
Adamの仕組み#
モデルのトレーニングの中心となるのは、モデルの予測と実際のデータとの差を測定する損失関数を最小化することです。標準的なアルゴリズムでは通常、一定のステップ幅(学習率)を使用して「損失地形」を降下し、誤差が最小となる地点を目指します。しかし、この地形は複雑なことが多く、単純なアルゴリズムが停滞する谷や平坦な領域が存在します。
Adamは、各パラメーターについて次の2つの履歴バッファーを保持することで、この問題に対処します。
-
モメンタム(1次モーメント): 重いボールが坂を転がり落ちるのと同様に、過去の勾配の移動平均を追跡し、関連する方向への速度を維持します。
-
分散(2次モーメント): 勾配の二乗の移動平均を追跡し、学習率をスケーリングします。
この組み合わせにより、オプティマイザーは地形の平坦な領域では大きなステップを取り、急峻な領域やノイズの多い領域では、より小さく慎重なステップを取れるようになります。具体的な仕組みについては、さまざまなディープラーニング (DL)タスクでの実証的な優位性を示した、KingmaとBaによる基礎的なAdamの研究論文で詳しく説明されています。
実世界での利用例#
Adamオプティマイザーの汎用性により、人工知能 (AI)のほぼすべての分野で採用されています。
- 自然言語処理 (NLP):Generative Pre-trained Transformers (GPT)などの大規模言語モデルは、トレーニングにAdam(またはその派生版であるAdamW)を大きく利用しています。このアルゴリズムは、膨大な語彙と大規模なデータセットに伴うスパースな勾配を効率的に処理できるため、高性能なチャットボットや翻訳システムの開発を可能にします。
- ヘルスケアにおけるコンピュータービジョン:医用画像解析では、モデルがMRIスキャンから腫瘍などの微細な異常を検出する必要があります。Adamは畳み込みニューラルネットワーク (CNNs)を高精度な解に迅速に収束させるため、ヘルスケアにおけるAI向けの診断ツールを開発する際に重要です。
AdamとSGDの比較#
Adamは一般的により速く収束しますが、**確率的勾配降下法 (SGD)**とは区別して理解することが重要です。SGDは固定された学習率を使用してモデルの重みを更新します。また、テストデータに対してわずかに優れた汎化性能(最終的な精度)を達成できる場合があるため、最先端の物体検出モデルのトレーニングの最終段階で好まれることが多くあります。
一方、Adamは「適応的」であり、学習率の調整を自動的に処理します。そのため、初期実験や、SGDのチューニングが難しい複雑なアーキテクチャーにおいて、はるかに使いやすくなっています。Ultralytics Platformで実験を管理するユーザーにとって、性能を比較するためにこれらのオプティマイザーを切り替えることは、ハイパーパラメーター調整における重要なステップとなることがよくあります。
Ultralyticsを使用した実装#
PyTorchなどの最新のフレームワークやUltralyticsライブラリでは、Adamを簡単に利用できます。AdamW(重み減衰を伴うAdam)と呼ばれる代表的な派生版は、元のAdamアルゴリズムにおける正則化の問題を修正するため、よく推奨されています。これは、AdamWが提供する安定性の恩恵を受けるYOLO26などの最新アーキテクチャーで特に効果的です。
次の例では、AdamWオプティマイザーを使用してUltralytics YOLO26モデルをトレーニングする方法を示します。
from ultralytics import YOLO
# Load the cutting-edge YOLO26n model
model = YOLO("yolo26n.pt")
# Train the model using the 'AdamW' optimizer
# The 'optimizer' argument allows easy switching between SGD, Adam, AdamW, etc.
results = model.train(data="coco8.yaml", epochs=5, optimizer="AdamW")より深い理論的背景に関心のある開発者には、Stanford CS231n Optimization Notesなどの資料が、AdamとRMSPropやAdaGradなどの他のアルゴリズムを比較した優れた可視化を提供しています。さらに、PyTorch Optimizer Documentationでは、カスタマイズ可能な引数や実装の詳細に関する技術情報を確認できます。









