Batch Normalizationとは
バッチ正規化
ミニバッチ単位で各層の出力を平均0・分散1に正規化し、深層学習の学習を安定させる手法
ひとことで言うと
AIの各層を通るデータのばらつきを、ミニバッチごとに整えて学習を安定させる工夫。
概要
Batch Normalizationは、ニューラルネットワークのある層の出力を、同じミニバッチ内の全サンプルにわたって平均0・分散1になるよう正規化したうえで、学習可能なスケール・シフトパラメータで調整する手法。 層を重ねるごとに各層への入力の分布が学習の進行とともに変化してしまう内部共変量シフト(Internal Covariate Shift)と呼ばれる現象を緩和し、より大きな学習率でも安定して学習を進められるようにする。 CNNを中心とする画像認識モデルで特に効果を発揮し、学習の収束を速めるだけでなく、ある程度の正則化効果(過学習の抑制)も持つことが知られている。 一方、ミニバッチ内の統計量に依存するため、バッチサイズが小さい場合や系列長が可変なRNN・Transformerでは不安定になりやすい。 そうした場面ではLayer Normalizationを使うことが多い。
背景
深い層を持つニューラルネットワークでは、学習の進行に伴って各層への入力の分布が変化し続け、後続の層が常に変化する入力分布に適応し直す必要があるため、学習が不安定になりやすかった。 Batch Normalizationは、各層の入力分布をミニバッチ単位で正規化することで、この分布の変化を抑え、学習を安定させる目的で考案された。
歴史
2015年: IoffeとSzegedyが論文「Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift」を発表。 2015年以降: 画像認識向けCNNの学習を高速化・安定化する標準的な手法として急速に普及。 2020年代: 自然言語処理分野ではLayer Normalizationが主流になる一方、画像認識分野では引き続き広く使われている。
アーキテクチャ
ミニバッチ内の各特徴量について、そのミニバッチ全体での平均と分散を計算する。 各サンプルの値から平均を引き標準偏差で割って正規化したのち、学習可能なスケールパラメータを掛け、シフトパラメータを加える。 推論時には、学習中に蓄積した移動平均の平均・分散を使って正規化することで、バッチサイズに依存しない安定した推論を可能にする。
ワークフロー
順伝播時、ミニバッチ内の各特徴量についてバッチ全体の平均と分散を計算し、その値を使って各サンプルを正規化する。 正規化した値に学習可能なスケールパラメータを掛け、シフトパラメータを加えて次の層へ出力する。 学習中は同時に、平均と分散の移動平均を蓄積しておく。 推論時には、蓄積しておいた移動平均の統計量を使って正規化を行い、バッチサイズに依存しない一貫した出力を得る。
コード例
PyTorchでのBatch Normalization
import torch.nn as nn
model = nn.Sequential(
nn.Conv2d(3, 64, kernel_size=3),
nn.BatchNorm2d(64),
nn.ReLU(),
)利点
欠点
- ミニバッチ内の統計量に依存するため、バッチサイズが小さいと正規化が不安定になりやすい
- 系列長が可変なRNNやTransformerとは相性が悪く、その場合はLayer Normalizationを使うことが多い
- 学習時と推論時で異なる統計量(バッチ統計と移動平均統計)を使うため、実装や挙動の違いに注意が必要
比較
- Layer Normalization — Batch Normalizationはバッチ方向に統計量を計算するのに対し、Layer Normalizationは特徴量方向に統計量を計算する
- ドロップアウト — Batch NormalizationとDropoutはいずれも学習の安定化・過学習抑制に使われるが、仕組みは異なる
- CNN — Batch Normalizationは、CNNを中心とする画像認識モデルの学習で特に広く使われている
関連用語
よくある質問
Batch NormalizationとLayer Normalizationの違いは?
Batch Normalizationはミニバッチ内の複数サンプルにまたがって統計量を計算するのに対し、Layer Normalizationは1サンプル内の特徴量方向で統計量を計算する。系列長が可変なTransformerではLayer Normalizationが主に使われる。
推論時のBatch Normalizationはどう動作する?
推論時にはミニバッチが1件だけの場合もあるため、学習中に計算した移動平均の平均・分散を固定値として使い、バッチサイズに依存しない安定した正規化を行う。