バッチ正規化とは
バッチ正規化(Batch Normalization、バッチノーム)は、2015年にIoffeとSzegedyによって提案された、ニューラルネットワークの学習を安定化・高速化するための正規化手法です。各ミニバッチ内で各層の入力の平均を0、分散を1に正規化し、さらに学習可能なスケーリングパラメータとシフトパラメータで変換を行います。
| ひとことで言うと | 層を通った値のばらつきをミニバッチごとにそろえて、学習を安定・高速にする手法。 |
|---|---|
| 何がうれしいか | 学習率を大きくでき、収束が速くなる。過学習を抑える効果もある。 |
| 注意点 | バッチサイズが小さいと統計が不安定になる。その場合はレイヤー正規化を使う。 |
内部共変量シフトの軽減
ディープラーニングでは、前の層のパラメータが更新されるたびに次の層への入力分布が変化する「内部共変量シフト」が学習を困難にします。バッチ正規化は各層の入力分布を安定させることで、この問題を軽減します。これにより、より大きな学習率の使用が可能になり、収束速度が向上します。
1層の出力を集めるミニバッチ分まとめて
▶
2平均と分散を計算バッチ内での統計
▶
3平均0・分散1にばらつきをそろえる
▶
4拡大・平行移動学習可能な係数で調整
▶
5次の層へ安定した値が流れる
バッチ正規化の実装
訓練時には、ミニバッチの平均と分散を用いて正規化を行います。推論時には訓練中に計算された移動平均と移動分散を使用します。正規化後にスケールパラメータγとシフトパラメータβを適用し、ネットワークが最適な出力分布を学習できるようにします。これらのパラメータにより、必要であれば正規化の効果を元に戻すことも可能です。
バッチ正規化の注意点と代替手法
バッチ正規化はバッチサイズに依存するため、小さなバッチサイズでは統計量の推定が不安定になります。この問題に対処するため、レイヤー正規化、インスタンス正規化、グループ正規化などの代替手法が提案されています。特にTransformerではレイヤー正規化が標準的に使用されています。