バッチ正規化(Batch Normalization)

Batch Normalization

ディープラーニング手法 重要度:高

概要

バッチ正規化(Batch Normalization、略してBN)とは、ニューラルネットワークの各層の入力を正規化することで、学習の安定化と高速化を実現する手法です。2015年にGoogleのSergey IoffeとChristian Szegedyによって提案されました。

バッチ正規化は、ミニバッチ内のデータの平均を0、分散を1に正規化した後、学習可能なスケールパラメータ(γ)とシフトパラメータ(β)を適用します。これにより、各層の入力分布が安定し、より大きな学習率を使用できるようになるため、学習が高速化されます。現在のディープラーニングでは、ほぼ標準的に使用される重要な技術となっています。

詳細解説

内部共変量シフト(Internal Covariate Shift)

バッチ正規化が解決しようとした問題は「内部共変量シフト」です。ニューラルネットワークの学習では、各層のパラメータが更新されるたびに、その後の層が受け取る入力の分布が変化します。この現象を内部共変量シフトと呼びます。分布が常に変化することで、各層は変動する入力に適応し続ける必要があり、学習が不安定になったり、遅くなったりする原因となっていました。

ただし、近年の研究では、バッチ正規化の効果は内部共変量シフトの解消だけでは十分に説明できないとする意見もあります。損失関数の地形(Loss Landscape)を滑らかにする効果や、学習率の感度を低下させる効果なども指摘されています。

バッチ正規化の処理手順

バッチ正規化は以下の手順で行われます。まず、ミニバッチ内のデータについて平均(μ_B)と分散(σ_B^2)を計算します。次に、各データポイントからミニバッチ平均を引き、ミニバッチの標準偏差で割ることで正規化を行います(ゼロ除算を避けるため小さな定数εを加えます)。最後に、学習可能なパラメータであるスケール(γ)とシフト(β)を適用して出力を得ます。このγとβは逆伝播により学習されます。

なぜスケールとシフトが必要か

単に正規化するだけでは、各層の表現力が制限されてしまいます。例えば、sigmoid関数の前で正規化すると、入力が常に原点付近に集中し、sigmoid関数のほぼ線形な領域のみが使われてしまいます。γとβにより、ネットワークが最適な分布を学習できるようになります。極端な場合、γ = σ_B、β = μ_B とすれば元の分布に戻すことも可能であり、正規化が不要な場合にはネットワーク自身がそれを学習できます。

学習時と推論時の違い

バッチ正規化は学習時と推論時で異なる統計量を使用します。学習時にはミニバッチの平均と分散を使用しますが、推論時にはミニバッチが存在しない場合があるため、学習中に計算した移動平均(Running Mean)と移動分散(Running Variance)を使用します。この違いはG検定でも問われることがあります。

バッチ正規化の効果

バッチ正規化には以下のような効果があります。学習の高速化(より大きな学習率を使用できる)、初期値への依存性の軽減、勾配消失・勾配爆発の緩和、正則化効果による過学習の抑制(ドロップアウトの代替として機能する場合もある)などです。これらの効果により、深いネットワークの学習が格段に容易になりました。

バッチ正規化の変種

バッチ正規化にはいくつかの変種があります。Layer Normalization(LN)は、バッチ方向ではなく特徴量方向で正規化を行い、バッチサイズに依存しません。Transformerなどで主に使用されています。Instance Normalization(IN)は、各サンプルの各チャネルごとに正規化を行い、スタイル変換などで使われます。Group Normalization(GN)は、チャネルをグループに分けて正規化を行い、バッチサイズが小さい場合にも安定した性能を発揮します。

歴史・背景

バッチ正規化は2015年にGoogleのSergey IoffeとChristian Szegedyによる論文で提案されました。当時、ディープラーニングのモデルは層を深くするほど学習が困難になるという問題を抱えていました。バッチ正規化の登場により、以前は学習が難しかった深いネットワークの訓練が安定して行えるようになりました。

同年開催されたILSVRC 2015では、バッチ正規化を採用したGoogLeNet(Inception v2)が優れた成績を収めました。また、ResNet(2015年)もバッチ正規化を使用しており、152層という当時としては非常に深いネットワークの学習を可能にしました。以降、バッチ正規化はディープラーニングの標準的なコンポーネントとして定着しました。

2016年にはLayer Normalization、2018年にはGroup Normalizationが提案され、バッチ正規化の適用が困難な場面(バッチサイズが小さい場合や逐次的な処理が必要な場合)への対応策が拡充されました。

具体的な事例

  • ResNet(2015年):各畳み込み層の後にバッチ正規化を適用することで、152層の深いネットワークの安定した学習を実現しました。Conv → BN → ReLU の順序が標準的な構成です。
  • Inception(GoogLeNet v2以降):バッチ正規化の導入により、学習速度が大幅に向上し、正則化効果によりドロップアウトを削減しても同等以上の精度が得られました。
  • 自然言語処理(Transformer):TransformerではLayer Normalizationが使用されています。これはバッチサイズに依存しない正規化が求められるためです。BERTやGPTなどのモデルでもLayer Normalizationが標準です。
  • 画像生成(GAN):生成器にバッチ正規化を使用することで学習が安定します。ただし、識別器にはSpectral Normalizationなどの別の正規化手法が使われることもあります。
  • 物体検出:YOLOシリーズなどの物体検出モデルでも、バッチ正規化はバックボーンネットワークの各層で使用されています。

G検定での出題ポイント

G検定では、バッチ正規化に関して以下のような内容が出題される傾向があります。

  • バッチ正規化がミニバッチの平均と分散を使って正規化を行うこと
  • 内部共変量シフトの解消が提案時の目的であったこと
  • 学習の高速化(大きな学習率が使える)と安定化の効果
  • 学習時はミニバッチの統計量、推論時は移動平均を使用すること
  • 2015年にIoffe & Szegedyが提案したこと
  • 正則化効果があり、場合によりドロップアウトの代替となること
試験対策のポイント
  • バッチ正規化は「ミニバッチの平均・分散で正規化」する手法であることを理解する
  • 内部共変量シフトの概念(各層の入力分布が学習中に変化する問題)を押さえる
  • 学習時と推論時で使用する統計量が異なること(学習時: ミニバッチ、推論時: 移動平均)を覚える
  • バッチ正規化により「大きな学習率が使える」「初期値への依存が減る」「正則化効果がある」ことを理解する
  • Layer NormalizationやGroup Normalizationなどの変種との違いを概要レベルで把握する