バッチ正規化 (Batch Normalization)
「Transformer」を学ぶための「Layer Normalization」を学ぶための「Batch Normalization」についてまとめていきます。
1. バッチ正規化とは
端的に言えばミニバッチ内の全データに対してチャンネル方向に正規化する手法。
2. 利点
-
学習の高速化
データが正規化されるため各層で安定した出力が得られる。これにより最適化アルゴリズムで局所最適解を避けることがき、学習を効率的に行えるような高い学習率を設定することが可能になる。
-
初期化の柔軟性
バッチ正規化によりパラメータ初期化の依存度を減らせる。
-
正則化
データを正規化させることにより過学習を防げる。原論文ではドロップアウトの必要性を低減させられるともある。
他にも内部共変量シフトの低減や勾配消失問題の緩和などがあげられる
3. 欠点
-
ミニバッチのサイズへの依存性
バッチサイズを小さく設定すると正規化によって出力される統計量にノイズが多く含まれる可能性がある。これにより、訓練が不安定になる場合がある。
-
訓練時と推論時とのギャップ
訓練時はミニバッチの統計(平均値、分散)を使用して正規化を行うが、推論時は全体の統計を使用する。データの分布が訓練時と推論時によって大きく異なる場合、正規化に使用される統計も大きな差が発生し、期待しない動作になることがある。
-
正規化の計算コスト
正規化層をモデルに含めることで追加の計算コストがかかる。ネットワークが深くなるほどそのコストも大きくなる。
-
データ数が少ない場合での正規化
訓練データ少ないときはバッチ正規化の恩恵が制限され、逆に過学習を起こす可能性がある。
バッチ正規化の利点を生かすためには、十分な量のデータセットを用意し、小さすぎない最適なバッチサイズを選択することが最も効果的かと思う。
4.「Batch Normalization」の原論文