- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
- arXiv:https://arxiv.org/abs/1502.03167
Internal Covariance Shiftの問題
ニューラルネットワークでは,入力となるデータの分布が白色化されていると学習が早く進む. 特徴を無相関化し,平均0,分散1とすることは画像処理では特によく行う.
しかし,階層的なニューラルネットでは,入力層での入力データが白色化されていたとしても,
重みパラメータは更新されていくため,後層では常に分布が変化する入力をもとに学習することになる.
せっかくパラメータを学習しても、新たな入力分布に合わせて再適応させなければならず、無駄となってしまう。
この現象を著者らは, internal covariance shift と呼んでいる.
分布をコントロールしないこのような場合には、勾配消失問題も起きやすくなる。
このときには,
- 学習率を小さく設定する
- 重みの初期化を注意深く行う
などの処置を行う必要がある。
そこでこの論文では上記の問題を回避する、Batch Normalizationを提案している。
Batch Normalizationでは以下のように,
ミニバッチ内で平均を0に,分散を1にする操作を行う.
上図の最後の行を見ると, gamma と beta を掛けて細かい調整ができるようになっている. たとえば,Batch Normalizationの効果をキャンセルすることもできる (gamma を標準偏差に設定し,betaを平均に設定する)
BatchNormalizationには、
- ミニバッチ単位で平均・分散を正規化するため計算量が小さい
- ミニバッチ単位で微分可能
という特徴がある。 アルゴリズムはどのようになるかというと
訓練時はミニバッチごとに正規化し、
一方、テスト(inference)時は、全訓練データから学習した情報で正規化したいため、
分散は訓練データの平均、不偏分散を使う。
どこにBatch Norm層を挿入するかというと, 普通は全結合層や畳み込み層の直後で,活性化関数の直前.
MNISTの結果
論文の図をそのままのせる。
収束が早く、また入力分布は安定しているのがわかる。