Stochastic Gradient Descent (SGD)
確率的勾配降下法(SGD)が機械学習モデルを最適化する仕組みを解説します。SGDがUltralytics YOLO26を支え、より高速で効率的なAIトレーニングを実現する方法を紹介します。
確率的勾配降下 (SGD) は、モデルを効率的に学習させるために機械学習で広く使用されている強力な最適化アルゴリズムであり、特に大規模なデータセットを扱う場合に有効です。SGD の中核は標準的な勾配降下法の一種であり、モデルパラメーターをより頻繁に更新することで学習プロセスを高速化するよう設計されています。従来のバッチ勾配降下法のように、1回の更新を行う前にデータセット全体の誤差を計算するのではなく、SGD はランダムに選択した1つの学習例だけを使用して、モデルの重みを一度に更新します。この「確率的」またはランダムな性質によって最適化経路にノイズが生じますが、これによりモデルが準最適な解から抜け出しやすくなり、すべてのデータを一度に処理することが計算上困難な巨大なデータセットでも、より速く収束できる場合があります。
確率的勾配降下法の仕組み#
あらゆる学習プロセスの主な目標は、モデルの予測と実際の目標値との差を定量化する 損失関数 を最小化することです。SGD は反復的なサイクルによってこれを実現します。まず、アルゴリズムは 学習データ からランダムにデータポイントを1つ選択します。次に、フォワードパスを実行して予測を生成し、誤差を計算します。バックプロパゲーション を使用して、アルゴリズムはその1つの例に基づいて勾配、つまり誤差地形の傾きを計算します。最後に、誤差を減らすため、勾配とは反対の方向に モデルの重み を更新します。
このプロセスは、多くの反復処理にわたって繰り返され、多くの場合 エポック としてまとめられます。その後、モデルの性能が安定するまで続けられます。これらの更新の大きさは、学習率 と呼ばれるハイパーパラメーターによって制御されます。各ステップが1つのサンプルだけに基づくため、最小値に到達する経路は、バッチ勾配降下法の滑らかな軌道と比べて、ジグザグになったりノイズが多くなったりすることがよくあります。しかし、このノイズはディープラーニングにおいて有利に働くことが多く、モデルが局所最小値に陥るのを防ぎ、より良い大域的解につながる可能性があります。
SGD と他の最適化アルゴリズムの比較#
SGD と関連する 最適化アルゴリズム の違いを理解することは、適切な学習戦略を選択するうえで重要です。
- バッチ勾配降下法: この従来の手法では、更新するたびにデータセット全体を使用して勾配を計算します。最小値に向かう安定した直接的な経路を提供する一方で、大規模な 機械学習 (ML) タスクでは非常に低速で、メモリを大量に消費します。
- ミニバッチ勾配降下法: 実際には、PyTorch を含む最新のディープラーニングフレームワークの多くが、一般に SGD と呼ばれますが、技術的には厳密には「ミニバッチ SGD」と呼ばれるハイブリッドアプローチを実装しています。この手法では、1つのサンプルだけでなく、少数のサンプルのグループ(バッチ)を使用してパラメーターを更新します。純粋な SGD の計算効率とバッチ勾配降下法の安定性のバランスが取れているため、YOLO26 などのモデルの学習における標準となっています。
- Adam オプティマイザー: Adam は、SGD を基盤とする適応型学習率最適化アルゴリズムです。モーメント推定に基づいて、各パラメーターの学習率を個別に調整します。Adam はより速く収束することが多い一方で、特定の状況でより汎化性能の高い解を見つけられるため、モメンタム付き SGD は現在も コンピュータービジョン (CV) で頻繁に使用されています。
実世界での利用例#
SGD とその派生手法は、現在利用されている多くの革新的な AI テクノロジーを支える原動力です。
-
自動運転車: 自動運転車 の開発では、モデルが膨大な量の視覚データを処理し、歩行者、交通標識、障害物を識別する必要があります。こうした高度な 物体検出 ネットワークの学習には、数百万枚の道路画像を処理するための効率的な最適化が必要です。SGD によってエンジニアはモデルの精度を反復的に改善できるため、自動車分野の AI における安全性が重要なシステムが、信頼性の高いリアルタイム判断を行えるようになります。
-
医療診断: 医用画像解析 の分野では、MRI スキャンや X 線画像から腫瘍などの異常を検出するために、ディープラーニングが広く利用されています。医療データセットは大規模かつ高解像度になる場合があるため、SGD を使用すると、メモリリソースに過度な負荷をかけずに複雑な 畳み込みニューラルネットワーク (CNN) を学習できます。これにより、ヘルスケア分野の AI で医師を支援する高精度な診断ツールの作成が可能になります。
Pythonコードの例#
ultralytics などの高レベルライブラリは、train() コマンドの実行中に最適化を内部で処理しますが、低レベルの PyTorch ワークフローで SGD オプティマイザーを初期化して使用する方法を確認できます。このスニペットでは、テンソル用のシンプルな SGD オプティマイザーを定義します。
import torch
import torch.nn as nn
import torch.optim as optim
# Define a simple linear model
model = nn.Linear(10, 1)
# Initialize Stochastic Gradient Descent (SGD) optimizer
# 'lr' is the learning rate, and 'momentum' helps accelerate gradients in the right direction
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
# Create a dummy input and target
data = torch.randn(1, 10)
target = torch.randn(1, 1)
# Forward pass
output = model(data)
loss = nn.MSELoss()(output, target)
# Backward pass and optimization step
optimizer.zero_grad() # Clear previous gradients
loss.backward() # Calculate gradients
optimizer.step() # Update model parameters
print("Model parameters updated using SGD.")課題と解決策#
SGD は広く利用されていますが、いくつかの課題があります。主な問題は勾配ステップに含まれるノイズであり、滑らかに収束するのではなく、損失が大きく変動する可能性があります。これを軽減するため、実務では モメンタム がよく使用されます。これは、坂道を転がる重いボールのように、SGD を適切な方向へ加速し、振動を抑える手法です。さらに、適切な学習率を見つけることも重要です。学習率が高すぎるとモデルが最小値を通り越してしまい(勾配爆発)、低すぎると学習が非常に遅くなります。Ultralytics Platform などのツールは、ハイパーパラメーター調整 を管理し、学習メトリクスを可視化することで、このプロセスの自動化を支援します。Adam オプティマイザー などの進歩により、学習率の調整が実質的に自動化され、SGD に本来備わる難しさの一部に対処できます。









