バッチ正規化

Batch Normalization

バッチ正規化(Batch Normalization)とは、ニューラルネットワークの各層の入力をミニバッチ単位で正規化(平均0、分散1に変換)する手法です。2015年にIoffeとSzegedyにより提案され、深層学習の学習を安定・高速化する標準的な技術となりました。

仕組み

各ミニバッチの平均と分散を計算し、各活性化を正規化します。さらに学習可能なスケールパラメータγとシフトパラメータβを導入し、必要に応じて正規化の効果を調整します。

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

効果

内部共変量シフト(層の入力分布が学習中に変化する問題)を軽減し、より大きな学習率の使用が可能になります。正則化効果もあり、ドロップアウトの必要性を減らすことができます。

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

注意点と代替手法

バッチサイズが小さい場合やシーケンスデータでは統計量の推定が不安定になります。Layer Normalization(TransformerではLNが標準)、Group Normalization、Instance Normalizationなどの代替手法もあります。