バッチ正規化

Batch Normalization

バッチ正規化とは

バッチ正規化(Batch Normalization、バッチノーム)は、2015年にIoffeとSzegedyによって提案された、ニューラルネットワークの学習を安定化・高速化するための正規化手法です。各ミニバッチ内で各層の入力の平均を0、分散を1に正規化し、さらに学習可能なスケーリングパラメータとシフトパラメータで変換を行います。

表:バッチ正規化の要点まとめ
ひとことで言うと層を通った値のばらつきをミニバッチごとにそろえて、学習を安定・高速にする手法。
何がうれしいか学習率を大きくでき、収束が速くなる。過学習を抑える効果もある。
注意点バッチサイズが小さいと統計が不安定になる。その場合はレイヤー正規化を使う。

内部共変量シフトの軽減

ディープラーニングでは、前の層のパラメータが更新されるたびに次の層への入力分布が変化する「内部共変量シフト」が学習を困難にします。バッチ正規化は各層の入力分布を安定させることで、この問題を軽減します。これにより、より大きな学習率の使用が可能になり、収束速度が向上します。

図:バッチ正規化の手順
1層の出力を集めるミニバッチ分まとめて
▶
2平均と分散を計算バッチ内での統計
▶
3平均0・分散1にばらつきをそろえる
▶
4拡大・平行移動学習可能な係数で調整
▶
5次の層へ安定した値が流れる

バッチ正規化の実装

訓練時には、ミニバッチの平均と分散を用いて正規化を行います。推論時には訓練中に計算された移動平均と移動分散を使用します。正規化後にスケールパラメータγとシフトパラメータβを適用し、ネットワークが最適な出力分布を学習できるようにします。これらのパラメータにより、必要であれば正規化の効果を元に戻すことも可能です。

バッチ正規化の注意点と代替手法

バッチ正規化はバッチサイズに依存するため、小さなバッチサイズでは統計量の推定が不安定になります。この問題に対処するため、レイヤー正規化、インスタンス正規化、グループ正規化などの代替手法が提案されています。特にTransformerではレイヤー正規化が標準的に使用されています。