バッチ正規化(Batch Normalization)とは、ニューラルネットワークの各層の入力をミニバッチ単位で正規化(平均0、分散1に変換)する手法です。2015年にIoffeとSzegedyにより提案され、深層学習の学習を安定・高速化する標準的な技術となりました。
仕組み
各ミニバッチの平均と分散を計算し、各活性化を正規化します。さらに学習可能なスケールパラメータγとシフトパラメータβを導入し、必要に応じて正規化の効果を調整します。
| ひとことで言うと | 層を通った値のばらつきをバッチごとにそろえ、学習を速く安定させる手法。 |
|---|---|
| 何がうれしいか | 大きな学習率が使えて収束が速い。軽い正則化効果もある。 |
| 注意点 | バッチサイズが小さいと統計が不安定になる。系列モデルではレイヤー正規化を使う。 |
効果
内部共変量シフト(層の入力分布が学習中に変化する問題)を軽減し、より大きな学習率の使用が可能になります。正則化効果もあり、ドロップアウトの必要性を減らすことができます。
1層の出力を集めるミニバッチ分まとめて
▶
2平均と分散を計算バッチ内の統計
▶
3平均0・分散1にばらつきをそろえる
▶
4拡大・平行移動学習可能な係数で調整
▶
5次の層へ安定した値が流れる
注意点と代替手法
バッチサイズが小さい場合やシーケンスデータでは統計量の推定が不安定になります。Layer Normalization(TransformerではLNが標準)、Group Normalization、Instance Normalizationなどの代替手法もあります。