Batch Size
バッチサイズが機械学習のトレーニング速度と精度にどのように影響するかを学びます。ハードウェアの制約を探求し、AutoBatchを使用してUltralytics YOLO26を最適化しましょう。
In the realm of machine learning and particularly deep learning, Batch Size refers to the number of training examples utilized in one iteration of model training. Rather than feeding the entire training data into the neural network at once—which is often computationally impossible due to memory constraints—the dataset is divided into smaller subsets called batches. The model processes one batch, calculates the error, and updates its internal model weights via backpropagation before moving on to the next batch. This hyperparameter plays a pivotal role in determining both the speed of training and the stability of the learning process.
Link to this sectionバッチを用いたトレーニングのダイナミクス#
バッチサイズの選択は、通常確率的勾配降下法(SGD)のバリエーションである最適化アルゴリズムが、どのように損失の地形を移動するかを根本から変化させます。
- 小さいバッチサイズ: 8や16といった小さな数値を使用すると、「ノイズ」の多い更新が行われます。データセット全体に対する勾配の推定精度は下がりますが、このノイズによってモデルが局所最適解から脱出しやすくなり、結果として汎化性能が向上する場合があります。ただし、バッチサイズが小さいとエポックあたりの更新回数が増えるため、オーバーヘッドにより実時間(ウォールクロックタイム)で見るとトレーニングが遅くなる可能性があります。
- 大きいバッチサイズ: 128や256といった大きなバッチは、より正確な勾配推定を可能にし、損失関数の収束を滑らかにします。これにより現代のハードウェア上で大規模な並列化が可能となり、計算速度が大幅に向上します。ただし、バッチサイズが大きすぎると、モデルが鋭い最適解に留まってしまい、過学習を引き起こし、新しいデータに対する汎化能力が低下する恐れがあります。
Link to this sectionハードウェアとメモリへの影響#
実務担当者は多くの場合、純粋な理論的選好ではなくハードウェアの制限に基づいてバッチサイズを選択しなければなりません。ディープラーニングモデル、特にTransformerや高度な畳み込みニューラルネットワークのような大規模なアーキテクチャは、GPUのVRAMに格納されるためです。
加速のためにNVIDIA CUDAを利用する場合、VRAMにはモデルパラメータ、入力データのバッチ、および勾配計算に必要な中間アクティベーション出力が保持される必要があります。バッチサイズが使用可能なメモリ容量を超えると、トレーニングは「Out of Memory」(OOM)エラーで停止します。混合精度トレーニングなどの技術はメモリ使用量を抑えるためによく採用され、同じハードウェア上でより大きなバッチサイズの使用を可能にします。
Link to this section関連概念の区別#
トレーニングを効果的に構成するためには、バッチサイズとトレーニングループにおける他の時間的用語を区別することが不可欠です。
- Batch Size vs. エポック: エポックとは、トレーニングデータセット全体に対する1回の完全なパスを指します。バッチサイズは、そのエポック内でデータが何個のチャンクに分割されるかを決定します。例えば、1,000枚の画像がありバッチサイズが100であれば、1エポックを完了するために10回の反復が必要となります。
- Batch Size vs. 反復回数: 反復回数(ステップ数)とは、1つのバッチを処理してウェイトを更新する動作を指します。トレーニングにおける反復回数の合計は、1エポックあたりのバッチ数にエポック総数を掛けた値です。
- Batch Size vs. バッチ正規化: 名前は似ていますが、バッチ正規化(Batch Normalization)は現在のバッチの平均と分散に基づいて層への入力を正規化する特定の層タイプです。この技術はバッチサイズに大きく依存しており、バッチサイズが小さすぎる(例: 2)場合、統計的な推定値の信頼性が低くなり、性能が低下する可能性があります。
Link to this section実社会での応用#
バッチサイズの調整は、さまざまな業界でコンピュータビジョンソリューションを展開する際の日常的な必要事項です。
-
高精細な医療画像: ヘルスケアにおけるAIの分野では、MRIやCTスキャンといった3Dボリュームデータがよく扱われます。これらのファイルは非常に高密度でメモリ集約的です。医療画像解析や複雑な画像セグメンテーションといったタスクをシステムクラッシュなしに実行するために、エンジニアはバッチサイズを非常に小さく、時にはバッチサイズ1まで減らすことがあります。ここでは、純粋なトレーニング速度よりも高解像度の詳細処理が優先されます。
-
産業品質管理: 一方で、製造業におけるAIでは速度が最優先されます。ベルトコンベア上の製品を検査する自動システムは、1時間あたり数千枚の画像を処理する必要があります。推論時、エンジニアはエッジAIデバイスの利用率を最大化するためにカメラからの入力フィードを大きなバッチに集約し、リアルタイムでの欠陥検出のための高いスループットを確保することがあります。
Link to this sectionPythonでのバッチサイズの設定#
Ultralytics Pythonパッケージを使用する場合、バッチサイズの設定は非常に簡単です。固定の整数を指定することも、動的な batch=-1 設定を使用することもできます。これを利用すると、AutoBatch機能によってハードウェアが安全に処理できる最大バッチサイズが自動的に計算されます。
The following example demonstrates how to train a YOLO26 model—the latest standard for speed and accuracy—using a specific batch setting.
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のようなツールが、実行結果のログ記録と比較のための包括的な環境を提供します。適切なバッチサイズのハイパーパラメータチューニングは、モデルから最高の性能を引き出すための最終ステップとなることがよくあります。






