Ultralytics YOLO27: ウェイトリストに登録する
YOLOのライセンス
Ultralytics用語集に戻る

Momentum (Optimization)

モメンタム最適化は、過去の勾配を利用してモデルのトレーニングを加速し、ノイズの多い更新を平滑化して、学習率とのバランスを取りながら収束を改善します。

モメンタムは、勾配ベースのトレーニングに過去の更新の情報を持たせる最適化手法です。現在の勾配と、減衰する過去の勾配の履歴を組み合わせることで、一貫した方向への進行を加速し、前後に揺れ動く動きを抑えます。これにより、機械学習モデルはトレーニングの目的関数をより効率的に最小化できます。検索エンジン最適化はウェブサイトの可視性に関するものであり、モメンタムはモデルパラメーターの数値更新に関するものです。

モメンタムの仕組み#

勾配降下法では、モデルは勾配、つまり損失関数が最も急速に増加する方向とは逆向きに重みを更新します。古典的なモメンタムは、ポリアクのモメンタムまたはヘビーボール法とも呼ばれ、この更新に慣性を加えます。ボリス・ポリアクは、反復法の高速化に関する1964年の研究でこの手法を提案しました。

オプティマイザーは速度バッファーを保持し、各パラメーターについて値を1つずつ蓄積します。各更新では、古いバッファーにモメンタム係数を掛け、現在の勾配を加算し、得られたバッファーに学習率を掛けた値を重みから差し引きます。ニューラルネットワークでは、誤差逆伝播法によって勾配が計算され、オプティマイザーは更新のたびにバッファーを保持します。

モメンタムは、谷を横切る方向の曲率が急で、谷底に沿う方向の曲率が緩やかな、細長い損失曲面で特に役立ちます。谷に沿う方向を繰り返し指す勾配は蓄積され、谷を横切る方向の交互の成分は部分的に相殺されます。確率的勾配降下法では、この履歴によってミニバッチ間の変動も平滑化されます。モメンタムを用いた二次損失のダイナミクスは、モメンタムによる加速と、最小値の近くで生じる可能性がある振動の両方を説明します。

モメンタム係数は一般にベータまたはミューと表記され、通常は0から1の間の値を取ります。0にすると通常の勾配降下法になり、値が1に近いほど古い勾配が長く保持されます。0.9は一般的な初期値です。正規化されていない速度バッファーを使い、勾配が一定の場合、0.9では蓄積された速度はその勾配の10倍に近づきますが、0.99では100倍に近づきます。そのため、ハイパーパラメーター調整では、モメンタムと学習率が強く相互作用します。

組み合わせが過度に強いとオーバーシュートが発生し、更新が最小値を何度も通り越すことで、損失が振動したり発散したりします。これは滑らかな二次目的関数でも起こります。学習率スケジュールはトレーニング中に更新の大きさを変化させ、モメンタムは方向の履歴がどの程度保持されるかを決定します。

密接に関連する2つの最適化アルゴリズムは、この履歴を異なる方法で利用します。

  • ネステロフ・モメンタムは、保持された速度を使って先読みした位置で勾配を評価し、予測された移動を勾配によって修正できるようにします。
  • Adamは、指数加重された勾配の平均と、パラメーターごとに更新を個別にスケーリングする二乗勾配の平均を組み合わせます。そのbeta1は勾配の履歴を制御します。

PyTorchの最小限の例#

このPyTorchの例では、細長い二次目的関数に対し、開始点と学習率を同一にして比較します。公式のSGD実装がモメンタムバッファーを自動的に管理します。

import torch

# Curvature is 50 times greater along the second coordinate.
scale = torch.tensor([1.0, 50.0])

for momentum in (0.0, 0.9):
    weights = torch.tensor([5.0, 1.0], requires_grad=True)
    optimizer = torch.optim.SGD([weights], lr=0.015, momentum=momentum)

    for step in range(100):
        optimizer.zero_grad()
        loss = (scale * weights.square()).sum()
        loss.backward()
        optimizer.step()

    final_loss = (scale * weights.square()).sum().item()
    print(f"Momentum {momentum}: loss = {final_loss:.6f}")

100回更新した後の損失は、モメンタムなしでは約0.056531、モメンタムありでは約0.000216です。方向の履歴が蓄積されることで、曲率が緩やかな座標に沿った進行が加速します。

コンピュータービジョンのトレーニングでの用途#

モメンタムは、画像分類や物体検出向けの畳み込みニューラルネットワークのトレーニングを支援します。Ultralytics YOLOのトレーニングでは、optimizer="SGD"が選択されている場合にネステロフ・モメンタムが有効になり、momentum設定で保持する更新履歴を制御します。トレーナーの実装は、その係数をnesterov=Trueとともにオプティマイザーに渡します。

代表的な適用例は、ImageNet向けの初期のResNetトレーニング手順です。これらのモデルでは、モメンタムを0.9に設定したSGD、256のバッチサイズ、重み減衰0.0001、および誤差が頭打ちになった際に10分の1にする初期学習率0.1が使われました。

ソリューションを見る

スポーツにおけるコンピュータービジョン

スポーツにおけるコンピュータービジョン

Ultralytics YOLOが、選手やボールの追跡、パフォーマンス分析、コーチングへの知見、アスリートのリハビリを通じて、スポーツビジョンをどのように支えるかをご紹介します。
詳しく見る
航空画像向けコンピュータービジョン

航空画像向けコンピュータービジョン

Ultralytics YOLOを使用して、ドローンや航空画像をリアルタイムの知見に変換し、農業、水産養殖、自然保護、地理空間分析に活用できます。
詳しく見る
航空宇宙分野のコンピュータービジョン

航空宇宙分野のコンピュータービジョン

Ultralytics YOLOを活用して航空宇宙分野でコンピュータビジョンを導入し、航空機検査、滑走路上のFOD検出、空港の地上業務、複合材の欠陥検出に活用できます。
詳しく見る
セキュリティ分野のコンピュータービジョン

セキュリティ分野のコンピュータービジョン

Ultralytics YOLOモデルであらゆる施設を保護しましょう。ビジョンAIは、周辺監視、脅威検知、ナンバープレート認識、職場の安全管理を支援します。
詳しく見る
ロボティクス分野のコンピュータービジョン

ロボティクス分野のコンピュータービジョン

Ultralytics YOLOモデルで、よりスマートなマシンを実現しましょう。ロボティクスにおけるビジョンAIは、自律ナビゲーション、認識、物体追跡、リアルタイム制御を支援します。
詳しく見る
物流におけるコンピュータービジョン

物流におけるコンピュータービジョン

Ultralytics YOLOモデルで物流を効率化しましょう。ビジョンAIにより、荷物検査、仕分け、車両追跡、倉庫のリアルタイム安全監視を実現します。
詳しく見る
小売業におけるコンピュータービジョン

小売業におけるコンピュータービジョン

Ultralytics YOLOモデルで小売のあり方を変革しましょう。ビジョンAIにより、在庫追跡、棚の監視、行列管理、より高度な顧客インサイトを実現します。
詳しく見る
医療分野におけるコンピュータービジョン

医療分野におけるコンピュータービジョン

Ultralytics YOLOモデルで医療ソリューションを構築しましょう。医療分野のビジョンAIは、医用画像処理の高速化、より高度な診断、患者モニタリングを実現します。
詳しく見る
製造業におけるコンピュータービジョン

製造業におけるコンピュータービジョン

Ultralytics YOLOモデルで製造を最適化しましょう。ビジョンAIは、品質管理、欠陥検出、PPE準拠、組立ラインの自動化を推進します。
詳しく見る
自動車分野におけるコンピュータービジョン

自動車分野におけるコンピュータービジョン

Ultralytics YOLOモデルで自動車分野にコンピュータービジョンを導入しましょう。ビジョンAIは、道路の安全性、運転支援、車両の自動化を向上させ、よりスマートな道路を実現します。
詳しく見る
農業におけるコンピュータービジョン

農業におけるコンピュータービジョン

Ultralytics YOLOモデルでスマート農業にビジョンAIを導入しましょう。作物のモニタリング、家畜の追跡、精密農業を支援し、より高く効率的な収量を実現します。
詳しく見る

AIの未来を一緒に築きましょう!

機械学習の未来に向けた歩みを始めましょう