1 定義と基本概念

1.1 バッチサイズの定義

バッチサイズとは、機械学習および深層学習におけるモデルのパラメータ更新を1回行う際に使用する訓練データサンプル数を指すハイパーパラメータである。この値は、最適化アルゴリズム損失関数勾配を計算するために一度に処理するデータ点の個数を決定する。バッチサイズは、学習プロセス全体の設計において重要な役割を果たし、収束特性、計算効率メモリ使用量に直接影響を与える。

1.2 バッチ、ミニバッチオンライン学習の違い

バッチサイズの選択によって、以下の3つの学習方式が区別される。

  • バッチ勾配降下法(Batch Gradient Descent):データセット全体を一度に処理する。バッチサイズは全サンプル数Nに等しい。勾配の推定が正確だが、大規模データセットでは計算負荷とメモリ消費が大きい。
  • 確率的勾配降下法(Stochastic Gradient Descent, SGD):1サンプルずつ更新する。バッチサイズは1。勾配推定のノイズが大きく、収束が不安定になりやすいが、オンライン学習に適している。
  • ミニバッチ勾配降下法(Mini-batch Gradient Descent):その中間であり、バッチサイズは1より大きくNより小さい。現在の深層学習で最も一般的に用いられる方式で、計算効率と収束安定性のバランスが取れている。

1.3 表記と数学的定式化

訓練データ全体を\( \mathcal{D} = \{(x_i, y_i)\}_{i=1}^N \)とし、損失関数を\( L(\theta) \)とする。パラメータ\(\theta\)の更新は、勾配\( \nabla L(\theta) \)を用いて行われる。バッチサイズ\(B\)のミニバッチ\( \mathcal{B} \)に対して、勾配は次式で近似される。 \[ \nabla L_B(\theta) = \frac{1}{B} \sum_{i \in \mathcal{B}} \nabla \ell(x_i, y_i; \theta) \] ここで\(\ell\)は個別のサンプル損失である。この近似勾配を用いて、学習率\(\eta\)でパラメータを更新する。 \[ \theta \leftarrow \theta - \eta \nabla L_B(\theta) \]

2 バッチサイズが学習に与える影響

2.1 勾配推定の精度とノイズ

バッチサイズは勾配推定の精度を直接決定する。大バッチほど分散の小さい推定値が得られるが、計算コストが増大する。小バッチは推定にノイズが含まれるが、そのノイズが学習過程で有益に働く場合がある。

2.1.1 小バッチサイズにおけるノイズの役割

小バッチサイズ(例:32以下)では、勾配推定に含まれるノイズが、モデルを鋭い極小値から逃れさせ、より平坦な極小値へ誘導する効果がある。このノイズは一種の正則化として機能し、一般化性能の向上に寄与することが知られている。また、学習率を高く設定した場合でも、ノイズによって更新が安定しやすい。

2.1.2 大バッチサイズにおける勾配の平滑化

大バッチサイズ(例:1024以上)では、多数のサンプルから平均化された勾配が得られるため、推定の分散が小さく、更新方向が安定する。しかし、ノイズが少なすぎることで、鋭い極小値にトラップされやすくなり、一般化性能が低下するリスクがある。このため、大バッチ学習では学習率や正則化の調整が重要になる。

2.2 収束速度と学習率の調整

バッチサイズを大きくすると、1回の更新あたりの計算量は増えるが、反復回数は減少する。収束速度を維持するためには学習率の調整が必要となる。

2.2.1 線形スケーリングルール

線形スケーリングルールは、バッチサイズを\(k\)倍にした場合、学習率も\(k\)倍にすることで、勾配の期待値の更新量を維持する手法である。例えば、バッチサイズを256から2048に増やす場合、学習率も8倍にする。このルールは、初期の訓練段階で特に有効だが、極端に大きなバッチサイズでは限界がある。

2.2.2 ウォームアップ戦略

大バッチ学習の初期段階では、急激な学習率の増加が不安定を招くため、ウォームアップ戦略が用いられる。これは、訓練開始時に小さな学習率からスタートし、徐々に目標の学習率まで線形または非線形に増加させる手法である。これにより、モデルが大きな更新に適応する時間を得られる。

2.3 一般化性能への影響

バッチサイズの選択は、モデルの最終的なテスト精度(一般化性能)に直接影響する。経験的に、小バッチで訓練されたモデルは大バッチで訓練されたモデルよりも高い一般化性能を示すことが多い。

2.3.1 平坦な極小値と鋭い極小値の仮説

一般的な仮説として、小バッチで訓練されたモデルは損失関数の「平坦な極小値」に収束しやすく、大バッチでは「鋭い極小値」に収束しやすいとされる。平坦な極小値はテスト時の損失変動に対してロバストであり、一般化性能が高い。一方、鋭い極小値は訓練損失は低いがテストデータでは性能が劣ることがある。

2.3.2 ランドスケープとバッチサイズの関係

損失関数のランドスケープ(地形)とバッチサイズの関係は、現在も活発に研究されている。大バッチ学習では、勾配のノイズが小さいため、ランドスケープ上の浅い極小値に収束しやすい。一方、小バッチのノイズは、モデルを深いが平坦な谷へと導く可能性がある。ただし、この関係はモデル構造やデータセットに依存する。

3 バッチサイズの選択と実践

3.1 メモリ制約とハードウェアの考慮

バッチサイズの上限は、主に使用するハードウェア(特にGPU)のメモリ容量によって制約される。各サンプルの中間活性化値や勾配を記憶するためにメモリが必要であり、バッチサイズが大きいほど消費メモリが増加する。

3.1.1 GPUメモリとバッチサイズの上限

GPUメモリの容量は、バッチサイズとモデルのサイズの積に比例する。例えば、ResNet-50のような標準的な画像分類モデルでは、1サンプルあたり数百MBのメモリを消費する。そのため、一般的なGPU(例:NVIDIA V100、32GB)では、バッチサイズは256~1024程度が上限となることが多い。モデルが大きいほど、許容できるバッチサイズは小さくなる。

3.1.2 分散学習におけるバッチサイズの分割

複数のGPUを用いた分散学習では、全体のバッチサイズ(グローバルバッチサイズ)を各GPUに分割する。例えば、8台のGPUでグローバルバッチサイズ256を設定する場合、各GPUはローカルバッチサイズ32で計算し、勾配を集約する。この際、グローバルバッチサイズが大きくなりすぎると、前述の一般化問題が顕在化する。

3.2 一般的な経験則と推奨値

実務では、バッチサイズの選択はタスクやモデルアーキテクチャに応じた慣習が存在する。

3.2.1 画像分類・物体検出での典型値

画像分類タスク(例:ImageNet)では、バッチサイズ256~512が広く使われる。物体検出(例:YOLO、Faster R-CNN)では、メモリ制約から32~128が一般的である。特に、バッチ正規化層を使用する場合、バッチサイズが小さいとバッチ統計量が不安定になるため、32以上が推奨される。

3.2.2 自然言語処理・Transformerでの典型値

自然言語処理(NLP)では、Transformerベースのモデル(例:BERT、GPT)において、バッチサイズは32~512程度が一般的だが、大規模事前学習では数千(例:4096、8192)に達することもある。NLPでは系列長が長いため、メモリ制約が厳しく、勾配蓄積(後述)を用いて疑似的に大バッチを実現することが多い。

3.3 動的バッチサイズと適応的手法

訓練中にバッチサイズを動的に変更する手法も提案されている。例えば、初期は小バッチでノイズを活用し、収束が進んだら大バッチに切り替えて安定化させる。また、勾配のノルムや分散に基づいてバッチサイズを自動調整する適応的手法も研究されているが、実用化は限定的である。

4 大規模バッチ学習の課題と対策

4.1 勾配の分散と更新の不安定性

大バッチサイズでは、勾配推定の分散が小さくなる一方、更新のステップサイズが大きくなりすぎると不安定になる。また、バッチ内のサンプル間の相関が高まることで、勾配の偏りが生じるリスクがある。

4.1.1 バッチ正規化との相互作用

バッチ正規化層は、ミニバッチ内の統計量(平均と分散)を用いて活性化を正規化する。バッチサイズが小さいと、これらの統計量がノイズを含み、それが正則化として機能する。一方、大バッチでは統計量が安定しすぎて正則化効果が弱まり、過学習を引き起こす可能性がある。この問題に対処するため、バッチ正規化の代わりにグループ正規化やレイヤー正規化が用いられることがある。

4.1.2 学習率の再調整手法

大バッチ学習に特化した学習率調整手法として、以下が挙げられる。

  • LARS(Layer-wise Adaptive Rate Scaling):各層のパラメータのノルムと勾配のノルムの比に基づいて、層ごとに学習率を調整する。
  • LAMB(Layer-wise Adaptive Moments optimizer for Batch training):AdamにLARSの考え方を組み合わせた手法で、大バッチ学習で高い性能を示す。

4.2 分散並列学習との関係

分散学習では、バッチサイズの扱いが訓練の効率と精度に直結する。

4.2.1 データ並列化におけるグローバルバッチサイズ

データ並列化では、各ワーカーがローカルバッチを処理し、勾配を同期する。グローバルバッチサイズは「ワーカー数×ローカルバッチサイズ」となる。同期勾配降下法では、実効的なバッチサイズが増大するため、学習率の調整が必須である。非同期更新では、バッチサイズの概念が曖昧になるが、勾配の古さ(staleness)による問題が生じる。

4.2.2 勾配蓄積による疑似的な大バッチ

単一GPUで大バッチを扱う手法として、勾配蓄積がある。これは、複数のミニバッチの勾配を逐次計算し、蓄積した後に1度にパラメータを更新する方法である。例えば、ローカルバッチサイズ32で4回蓄積すれば、実効バッチサイズ128となる。メモリ使用量はローカルバッチサイズに依存するため、メモリ制約を回避しつつ大バッチ効果を得られる。

4.3 最先端の研究動向

4.3.1 レイヤーごとのバッチサイズ適応

モデル内の層によって適切なバッチサイズが異なるという観察に基づき、層ごとに異なるバッチサイズを用いる手法が研究されている。例えば、低層(特徴抽出層)では小さなバッチサイズでノイズを加え、高層(分類層)では大きなバッチサイズで安定した更新を行う。実装が複雑であり、現状では広く普及していない。

4.3.2 大規模事前学習モデルにおけるバッチサイズ戦略

GPT-3やPaLMのような大規模言語モデルでは、数万から数十万という巨大なバッチサイズが用いられる。これにより、訓練の高速化が図られるが、同時に学習率の調整と一般化性能の維持が課題となる。近年では、大バッチ学習に特化した最適化手法(例:Adafactor、Shampoo)や、学習率スケジューリングの研究が進んでいる。

5 特殊なケースと応用

5.1 オンライン学習とストリーミングデータ

オンライン学習では、データが逐次的に到着するため、バッチサイズは基本的に1(または極めて小さな値)となる。この設定では、勾配のノイズが大きく、学習率の減衰や適応的学習率が重要になる。また、データの分布が時間とともに変化する場合(concept drift)、バッチサイズの調整がモデルの追従性に影響を与える。

5.2 転移学習・ファインチューニングでの考慮

転移学習やファインチューニングでは、事前学習されたモデルの重みを初期値として使用するため、バッチサイズの選択は特に注意が必要である。一般に、ファインチューニングでは小バッチ(例:16~64)が推奨される。これは、事前学習済みの特徴表現を壊さないように、更新を穏やかにするためである。また、バッチ正規化層の統計量も、小さなバッチサイズで再計算する必要がある。

5.3 強化学習におけるバッチサイズの扱い

強化学習では、エージェントが環境と相互作用して収集した経験を用いて学習する。この経験をリプレイバッファに蓄積し、そこからランダムにサンプリングしてミニバッチを作成する。バッチサイズは通常32~256程度が使われ、サンプリングの効率と更新の安定性のバランスを取る。また、オンラインとオフラインの設定によって、適切なバッチサイズが異なる。オフライン強化学習では、データセット全体を扱うことが多いため、大バッチが有効な場合もある。