バッチ正規化 (Batch Normalization) は、各層への入力を正規化して学習を安定させる技術。2015年の登場以来、深層学習の標準装備になっています。超深層ネットワークを可能にした裏方のスターです。
補足すると、バッチ正規化はミニバッチ単位で中間層の出力を平均0・分散1に正規化して、さらに学習可能なスケーリング (γ) とシフト (β) を加える手法なんですよね。
正確ね。
各層に入るデータの分布が学習中に大きく変動すると、学習が不安定になるの。
これを『内部共変量シフト』と呼んで、バッチ正規化がこの変動を抑えるのよ。
内部共変量シフト? 名前がいかついなぁ……要は、層ごとの入力が毎回変わっちゃって混乱するってこと?
そのとおり。
毎回テストの点数を偏差値に直すみたいなもので、基準を揃えれば学習率を大きくでき、結果として学習が速くなるの。
ぽわわ、お菓子作りで材料の分量をちゃんと量るのと似てますぅ。
きちんと量らないと、毎回味が違っちゃいますもんね。
和菓子屋さんの娘らしい例えね。
さらにバッチ正規化には、軽い正則化効果もあって、過学習をある程度防ぐ副次的なメリットがあるのよ。
2015年のIoffeとSzegedyの論文で提案されて以来、ResNetをはじめ多くのCNNで標準採用されています。
学習の高速化、大きな学習率の許容、初期化への頑健性と、恩恵が多い技術ですね。
めっちゃ万能じゃん!
ただし万能ではないわね。
バッチサイズが小さいと統計量が不安定になる問題があって、その場合はLayer Normalizationなどの代替手法が使われるわ。
Transformer系モデルではバッチ正規化ではなくLayer Normalizationを使うのが標準ですね。
モデル構造に応じて使い分けます。
用途によって道具を変えるのは、お料理も深層学習も同じなんですねぇ。
『材料の分量を揃える』って例え、試験勉強でも使えそう!
他にも Group Normalization、Instance Normalization、RMSNorm などさまざまな正規化手法があるけれど、『入力分布を揃えることで学習を安定化させる』という基本思想は共通よ。
生成AIパスポート試験では『バッチ正規化 = 学習の安定化・高速化』というキーワードを押さえれば十分です。
ちなみにバッチ正規化は、学習時はミニバッチの統計量、推論時は学習全体の移動平均を使うというふうに、挙動が変わるのよ。
この切り替えがうまくいっていないと推論精度が落ちる、という落とし穴にも注意ね。
裏側は『入力の分布を揃える』っていうシンプルな発想なのに、こんなに効くんだ! シンプル is 最強じゃん!
確認クイズ
バッチ正規化の主な効果として最も適切なものはどれか?
- モデルのパラメータ数を削減する
- 学習を安定させ高速化する
- データの量を増やす
- 勾配消失問題を完全に解決する
こたえを見る
正解: 2. 学習を安定させ高速化する
バッチ正規化の主な効果は、各層への入力分布を正規化することで学習を安定させ、高速化することです。副次的に勾配消失の緩和や軽い正則化効果もありますが、完全解決ではありません。