Stochastic Gradient Descent (SGD)
確率的勾配降下法(SGD)による機械学習モデルの最適化方法を学びます。SGDがUltralytics YOLO26を動かし、AIトレーニングを高速かつ効率的にする仕組みをご覧ください。
Stochastic Gradient Descent (SGD) は、機械学習においてモデルを効率的に学習させるために広く利用されている強力な最適化アルゴリズムであり、特に大規模なデータセットを扱う際に有効です。本質的に SGD は標準的な勾配降下法のバリエーションであり、モデルのパラメータをより頻繁に更新することで学習プロセスを加速させるよう設計されています。従来のバッチ勾配降下法のようにデータセット全体に対して誤差を計算してから一度だけ更新を行うのではなく、SGD は一度に1つのランダムに選択された学習例を使用してモデルの重みを更新します。この「確率的 (stochastic)」すなわちランダムな性質が最適化パスにノイズをもたらしますが、これはモデルが局所最適解に陥るのを回避し、全データを一度に処理することが計算上困難な膨大なデータセットにおいて、より高速に収束させるのに役立ちます。
Link to this sectionStochastic Gradient Descent の仕組み#
学習プロセスの主な目的は、モデルの予測と実際のターゲット値との差を定量化する 損失関数 を最小化することです。SGD は反復サイクルを通じてこれを実現します。まず、アルゴリズムは 学習データ からランダムにデータ点を1つ選択します。次に、フォワードパスを実行して予測値を生成し、誤差を計算します。 バックプロパゲーション を使用して、その単一のデータ例に基づいた勾配(本質的には誤差地形の傾斜)を計算します。最後に、誤差を減らすために勾配とは逆の方向に モデルの重み を更新します。
このプロセスは、モデルの性能が安定するまで、エポック ごとにまとめられて何度も繰り返されます。これらの更新の大きさは、学習率 と呼ばれるハイパーパラメータによって制御されます。各ステップは1つのサンプルのみに基づくため、バッチ勾配降下法の滑らかな軌跡と比較して、最小値へのパスはジグザグになったりノイズを含んだりすることがよくあります。しかし、このノイズはディープラーニングにおいて有利に働くことが多く、モデルが局所最小値に留まるのを防ぎ、結果としてより優れた大域的解につながる可能性があります。
Link to this sectionSGD と他の最適化アルゴリズムの比較#
適切な学習戦略を選択するには、SGD と関連する 最適化アルゴリズム との違いを理解することが重要です。
- バッチ勾配降下法: この伝統的な手法は、更新ごとにデータセット全体を使用して勾配を計算します。安定した直接的な最小値への道筋を提供しますが、大規模な 機械学習 (ML) タスクでは非常に低速でメモリを大量に消費します。
- ミニバッチ勾配降下法: 実際には、PyTorch を含むほとんどの最新のディープラーニングフレームワークでは、しばしば SGD と呼ばれるものの、技術的には厳密に「ミニバッチ SGD」であるハイブリッドアプローチが実装されています。この手法は、単一のサンプルではなく、少数のサンプル(バッチ)を使用してパラメータを更新します。純粋な SGD の計算効率とバッチ勾配降下法の安定性のバランスを取っており、YOLO26 のようなモデルを学習させる際の標準となっています。
- Adam オプティマイザ: Adam は、SGD をベースにした適応型学習率最適化アルゴリズムです。モーメント推定に基づいて各パラメータの学習率を個別に調整します。Adam は収束が速いことが多い一方で、コンピュータビジョン (CV) 分野では、特定のシナリオにおいてより汎用性の高い解を見つける能力があるため、モメンタム付き SGD も頻繁に使用されます。
Link to this section実社会での応用#
SGD とそのバリエーションは、今日利用されている多くの革新的な AI 技術を支えるエンジンです。
-
自動運転車: 自動運転車 の開発において、モデルは歩行者、交通標識、障害物を識別するために膨大な視覚データのストリームを処理しなければなりません。こうした洗練された 物体検出 ネットワークの学習には、何百万もの道路画像を処理するための効率的な最適化が必要です。SGD はエンジニアがモデルの精度を反復的に改善することを可能にし、AI in automotive における安全性が重視されるシステムで信頼性の高いリアルタイムな意思決定を保証します。
-
医療診断: 医療画像解析 の分野では、MRI スキャンや X 線写真における腫瘍などの異常を検出するためにディープラーニングに大きく依存しています。医療データセットは非常に巨大で高解像度である可能性があるため、SGD はメモリリソースを過剰に消費することなく、複雑な 畳み込みニューラルネットワーク (CNN) の学習を可能にします。これにより、医師を支援する高精度な診断ツールの開発が AI in healthcare において促進されます。
Link to this sectionPythonコードの例#
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.")Link to this section課題と解決策#
普及している一方で、SGD には課題があります。主な問題は勾配ステップにおけるノイズであり、これにより損失がスムーズに収束せず激しく変動する可能性があります。これを軽減するために、実務者は「丘を転がり落ちる重いボール」のように、適切な方向への加速を助け振動を抑える技術である モメンタム を頻繁に使用します。さらに、適切な学習率を見つけることも重要です。学習率が高すぎるとモデルは最小値を飛び越えてしまい(勾配爆発)、低すぎると学習が非常に遅くなります。Ultralytics Platform のようなツールは、ハイパーパラメータ調整 を管理し、学習メトリクスの可視化を提供することでこのプロセスを自動化するのに役立ちます。Adam オプティマイザ のような進歩は、学習率の調整を実質的に自動化し、SGD 本来の困難さに対処しています。






