Batch Size
バッチサイズが機械学習の学習速度と精度に及ぼす影響を学びます。ハードウェアの制約を確認し、AutoBatchを使用してUltralytics YOLO26を最適化します。
機械学習、特にディープラーニングの分野では、バッチサイズとは、モデルのトレーニングにおける1回のイテレーションで使用するトレーニング例の数を指します。ニューラルネットワークにトレーニングデータ全体を一度に入力するのは、メモリ制約により計算上不可能なことが多いため、データセットはバッチと呼ばれる小さなサブセットに分割されます。モデルは1つのバッチを処理して誤差を計算し、次のバッチに進む前に逆伝播によって内部のモデル重みを更新します。このハイパーパラメーターは、トレーニング速度と学習プロセスの安定性の両方を決定するうえで重要な役割を果たします。
バッチを使用したトレーニングのダイナミクス#
バッチサイズの選択は、通常は確率的勾配降下法の一種である最適化アルゴリズムが、損失地形をどのように探索するかを根本的に変化させます。
- 小さいバッチサイズ: 少ない数(例: 8または16)を使用すると、「ノイズの多い」更新になります。データセット全体に対する勾配の推定精度は低くなりますが、このノイズによってモデルが局所最小値から抜け出しやすくなり、結果として汎化性能が向上する場合があります。ただし、小さいバッチではエポックあたりの更新回数が増えるため、オーバーヘッドにより実時間でのトレーニングが遅くなる可能性があります。
- 大きいバッチサイズ: 大きいバッチ(例: 128または256)では勾配をより正確に推定できるため、損失関数の収束が滑らかになります。最新のハードウェア上で大規模な並列化が可能になり、計算速度も大幅に向上します。ただし、バッチが大きすぎると、モデルが鋭く最適でない最小値に収束し、過学習や新しいデータへの汎化能力の低下につながる可能性があります。
ハードウェアとメモリに関する影響#
実務者は、理論上の好みだけでなく、ハードウェアの制限に基づいてバッチサイズを選択しなければならないことがよくあります。ディープラーニングモデル、特にTransformerや高度な畳み込みネットワークのような大規模アーキテクチャは、GPUのVRAMに格納されます。
高速化のためにNVIDIA CUDAを使用する場合、VRAMにはモデルパラメーター、入力データのバッチ、勾配計算に必要な中間アクティベーション出力を格納する必要があります。バッチサイズが使用可能なメモリ容量を超えると、トレーニングは「メモリ不足」(OOM)エラーで停止します。混合精度トレーニングなどの手法は、メモリ使用量を削減するためによく用いられ、同じハードウェアでより大きなバッチサイズを使用できるようにします。
関連する概念との違い#
トレーニングを効果的に設定するには、トレーニングループにおけるバッチサイズと、その他の時間に関する用語を区別することが重要です。
- バッチサイズとエポックの違い: エポックは、トレーニングデータセット全体を1回完全に処理することを表します。バッチサイズは、そのエポックの内部でデータをいくつのチャンクに分割するかを決定します。たとえば、画像が1,000枚あり、バッチサイズが100の場合、1エポックを完了するには10回のイテレーションが必要です。
- バッチサイズとイテレーションの違い: イテレーション(またはステップ)とは、1つのバッチを処理して重みを更新する処理です。トレーニング全体のイテレーション数は、1エポックあたりのバッチ数に総エポック数を乗じた値です。
- バッチサイズとバッチ正規化の違い: 名前は共通していますが、バッチ正規化は、現在のバッチの平均と分散に基づいてレイヤー入力を正規化する特定のレイヤータイプです。この手法はバッチサイズに大きく依存するため、バッチサイズが小さすぎる場合(例: 2)、統計的推定の信頼性が低下し、性能が悪化する可能性があります。
実世界での利用例#
さまざまな業界でコンピュータービジョンソリューションを展開する際、バッチサイズの調整は日常的に必要となります。
-
高精細な医用画像: ヘルスケアにおけるAIの分野では、MRIやCTスキャンなどの3Dボリュームデータを扱うことがよくあります。これらのファイルは非常に高密度で、メモリを大量に消費します。システムをクラッシュさせずに医用画像解析や複雑な画像セグメンテーションなどのタスクを実行するため、エンジニアはバッチサイズを非常に小さくし、場合によってはバッチサイズを1にすることもあります。ここでは、トレーニング速度そのものよりも、高解像度の細部を処理することが優先されます。
-
産業用品質管理: 一方、製造業におけるAIでは、速度が最も重視されます。ベルトコンベア上の製品を検査する自動システムでは、1時間あたり数千枚の画像を処理する必要があります。推論時には、エンジニアが入力されるカメラ映像をより大きなバッチにまとめ、エッジAIデバイスの利用率を最大化することで、リアルタイムの欠陥検出に必要な高スループットを確保する場合があります。
Pythonでのバッチサイズの設定#
Ultralytics Pythonパッケージを使用する場合、バッチサイズの設定は簡単です。固定の整数を指定するか、AutoBatch機能を使用してハードウェアが安全に処理できる最大バッチサイズを自動的に計算する動的なbatch=-1設定を使用できます。
次の例では、特定のバッチ設定を使用して、速度と精度の最新の標準であるYOLO26モデルをトレーニングする方法を示します。
from ultralytics import YOLO
# Load the YOLO26n model (nano version for speed)
model = YOLO("yolo26n.pt")
# Train on the COCO8 dataset
# batch=16 is manually set.
# Alternatively, use batch=-1 for auto-tuning based on available GPU memory.
results = model.train(data="coco8.yaml", epochs=5, batch=16)大規模な実験を管理し、異なるバッチサイズがトレーニングメトリクスに与える影響を可視化するには、Ultralytics Platformなどのツールが、実行結果の記録と比較のための包括的な環境を提供します。バッチサイズの適切なハイパーパラメーターチューニングは、モデルから最高の性能を引き出すための最後のステップになることがよくあります。









