ニューラルネットワークの学習を困難にする現象の1つに、**内部共変量シフト(Internal Covariate Shift)**があります。これは、各層に入力されるデータの分布が、学習の途中で変わってしまうことを指します。
1. どうして起きるのか?
ニューラルネットワークでは、層ごとにパラメータが更新されるため、前の層が出力する特徴量の分布も変化します。すると、次の層にとっての「入力の分布」もどんどん変わることになり、
- 各層が安定して学習できない
- 勾配消失/勾配爆発が起こりやすくなる
- より多くのエポックが必要になる
といった問題が発生します。
2. 解決策:Batch Normalization
この問題を緩和するために開発されたのが、**Batch Normalization(バッチ正規化)**です。ミニバッチ単位で、各層の出力(= 次の層への入力)を正規化することで、
- 出力の平均を0、分散を1に近づける
- 各層の入力分布の変動を抑える
という効果があり、結果的に学習が早く安定するようになります。
3. 例え話でイメージしよう
内部共変量シフトを「授業の途中でテスト範囲がコロコロ変わる状況」に例えるとわかりやすいです。
- 生徒(= 各層)は、ある分布(= 出題傾向)に合わせて準備しているのに、
- 先生(= 前の層)が毎回テスト範囲を変えてしまうので、
- うまく成績(= 学習精度)が上がらない
BatchNorm は「毎回のテスト範囲を標準化するルール」のようなもので、学習の安定に貢献してくれます。
まとめ
- 内部共変量シフトとは「層ごとの入力分布が学習中に変化する現象」
- 学習の不安定化や遅延の原因になる
- 対策として Batch Normalization が有効
ニューラルネットワークの高速かつ安定した学習には、この“見えにくい敵”への対処が欠かせません。