機械学習、特にディープラーニングモデルを学習する場合、バッチサイズとは、1回の反復で処理する学習例の数を指す。コンピュータ・ビジョンなどの分野で一般的な、膨大なデータセットに対する大規模なモデルのトレーニングでは、メモリの制限により、データセット全体を一度に処理することが計算上不可能になることが多い。その代わりに、データは管理しやすい小さなグループや "バッチ "に分割される。各バッチの処理後にモデルの内部パラメータを更新することで、学習プロセスをより効率的でスケーラブルなものにする。
バッチサイズの重要性
バッチサイズは、トレーニングダイナミクス、リソース使用率、そして最終的には最終モデルの性能に大きく影響する重要なハイパーパラメータである。その効果は以下の通りです:
- トレーニング速度:バッチサイズが大きいほど、GPUのようなハードウェアの並列処理能力をより効果的に利用できるため、1エポック(学習データのフルパス)を完了するのに必要な時間を短縮できる可能性がある。これは、ハードウェアの利用率が向上し、1エポックあたりのパラメータ更新が少なくなるためです。並列コンピューティングの概念についてはこちらをご覧ください。
- メモリ使用量:バッチサイズは必要なメモリCPU RAMまたはGPU VRAM)の量に直接影響します。バッチサイズが大きくなると、トレーニング中のデータ、アクティベーション、グラジエントを保存するために、より多くのメモリが必要になります。大きなバッチサイズや限られたハードウェアで作業する場合、メモリ使用量を最適化するテクニックは非常に重要です。
- モデルの一般化:バッチサイズの選択は、最適化プロセスとモデルの汎化に影響します。バッチサイズが小さいと、確率的勾配 降下法(SGD)のようなアルゴリズムで使用される勾配推定値 に、より多くのノイズが導入されます。このノイズは時に正則化の一形態として機能し、モデルが急激なローカル・ミニマムから脱出するのを助け、未知のデータに対する汎化能力を向上させる可能性があるため、オーバーフィッティングを減らすことができます。逆に、より大きなバッチは、データセット全体の勾配のより正確な推定を提供するが、より鋭い極小値に収束する可能性があり、"On Large-Batch Training for Deep Learning"などの研究で議論されているように、汎化の妨げになることがある。
- 学習率の相互作用:バッチサイズはしばしば学習率と相互作用する。一般的に、バッチサイズが大きいと、より高い学習率が可能になり、その恩恵を受けることが多い。アダムのようなオプティマイザーは、このような相互作用を管理するのに役立つ。
適切なバッチサイズの選択
最適なバッチサイズを選択するには、計算効率、メモリ制約、モデルの汎化のバランスを取る必要がある。普遍的な「最適」バッチサイズは存在せず、特定のデータセット(COCOデータセットなど)、モデルアーキテクチャ(Ultralyticsで使用されているような)に大きく依存する。 Ultralytics YOLOなど)、利用可能なハードウェアリソースに大きく依存する。一般的な選択は、ハードウェアメモリアライメントの最適化により、2の累乗(16、32、64、128など)に収まることが多い。通常、実験とハイパーパラメータチューニングのようなテクニックが必要です。フレームワーク PyTorchや TensorFlowのようなフレームワークは、バッチサイズを柔軟に設定できる。
バッチサイズとその他の関連用語
バッチサイズを関連概念と区別することは重要だ:
- 反復/ステップ:データの1バッチ処理に基づくモデルのパラメータの1回の更新。これには、フォワードパス、損失計算、バックワードパス(バックプロパゲーション)が含まれる。
- エポック:学習データセット全体を1回完全に通過すること。データセットが1000サンプルでバッチサイズが100の場合、1エポックは10回の反復で構成される(1000 / 100 = 10)。
- ミニバッチ勾配降下法:最も一般的な学習手法で、バッチサイズは1より大きく、全データセットサイズより小さい。これはバッチ勾配降下法(データセット全体を使用、バッチサイズ=N)や確率的勾配降下法(単一サンプルを使用、バッチサイズ=1)と対照的である。バッチサイズ」とは通常、ミニバッチ勾配降下で使用されるサイズを指す。勾配降下のバリエーションについてはこちらをご覧ください。
実世界での応用
- 物体検出:をトレーニングするとき Ultralytics YOLOモデルをオブジェクト検出タスクでトレーニングする場合、バッチサイズは同時に処理される画像の数を決定します。ImageNetのような大規模なデータセットでYOLO11 トレーニングするには、GPU メモリに基づいてバッチサイズを調整する必要があるかもしれません。バッチサイズを大きくすれば(例えば64)、ハイエンドのGPUではエポックあたりのトレーニングを高速化できますが、小さいサイズ(例えば16)は、メモリが少ないデバイスでは必要かもしれませんし、汎化を改善できる可能性もあります。Ultralytics HUBのようなプラットフォームは、これらのトレーニング実験の管理と追跡を支援することができます。
- 自然言語処理(NLP):BERT のような大規模な言語モデルの訓練には、テキストのシーケンスの処理が含まれる。バッチサイズは、いくつのシーケンスが一緒に処理されるかに影響する。シーケンスの長さはさまざまであり、モデルも大きいため、メモリ使用量は重大な懸念事項です。勾配累積(パラメータを更新する前に、より小さなミニバッチを順次処理する)のような技法は、メモリが限られている場合に、より大きなバッチサイズをシミュレートするためによく使用されます。NLPコースのコンセプトを探る
バッチサイズを理解し、慎重に選択することは、ディープラーニングモデルを効果的にトレーニングするための基本です。さらなる学習については、ディープラーニングの専門分野のようなリソースや、バッチサイズに対する感度を軽減できるバッチ正規化のようなテクニックを検討してください。