読者です 読者をやめる 読者になる 読者になる

BatchNormalizationの初出論文メモ

Internal Covariance Shiftの問題

ニューラルネットワークでは,入力となるデータの分布が白色化されていると学習が早く進む. 特徴を無相関化し,平均0,分散1とすることは画像処理では特によく行う.

しかし,階層的なニューラルネットでは,入力層での入力データが白色化されていたとしても, 重みパラメータは更新されていくため,後層では常に分布が変化する入力をもとに学習することになる.
せっかくパラメータを学習しても、新たな入力分布に合わせて再適応させなければならず、無駄となってしまう。 この現象を著者らは, internal covariance shift と呼んでいる.

分布をコントロールしないこのような場合には、勾配消失問題も起きやすくなる。
このときには,

  • 学習率を小さく設定する
  • 重みの初期化を注意深く行う

などの処置を行う必要がある。
そこでこの論文では上記の問題を回避する、Batch Normalizationを提案している。
Batch Normalizationでは以下のように, ミニバッチ内で平均を0に,分散を1にする操作を行う.

f:id:yusuke_ujitoko:20170616154548p:plain:w400

上図の最後の行を見ると, gamma と beta を掛けて細かい調整ができるようになっている. たとえば,Batch Normalizationの効果をキャンセルすることもできる (gamma を標準偏差に設定し,betaを平均に設定する)

BatchNormalizationには、

  • ミニバッチ単位で平均・分散を正規化するため計算量が小さい
  • ミニバッチ単位で微分可能

という特徴がある。 アルゴリズムはどのようになるかというと

訓練時はミニバッチごとに正規化し、
一方、テスト(inference)時は、全訓練データから学習した情報で正規化したいため、 分散は訓練データの平均、不偏分散を使う。

どこにBatch Norm層を挿入するかというと, 普通は全結合層や畳み込み層の直後で,活性化関数の直前.

MNISTの結果

論文の図をそのままのせる。

f:id:yusuke_ujitoko:20170616154645p:plain

収束が早く、また入力分布は安定しているのがわかる。