Nerds N' Computers

ソフトウェア技術や思ったことについて書きます.

ソフトウェア技術や思ったことについていろいろと書きます.

Batch Normalizationについてのメモ

概要

Batch Normalizationとは,2015年にGoogleの社員2人が提案したパラメータの最適化手法の1つである.

問題

ニューラルネットワークを用いて学習をする際,データに何かしらの前処理を施すことが一般的である.これは,以下の理由などで行うことが多い:

  • sigmoid関数などで引き起こされる,早い段階での勾配消失を無くす
  • 全てのデータが一定の範囲内に収まるようにする
  • etc.

しかし,問題は前処理だけで解決されない. 入力データの分布と推定データの分布が異なる現象をCovariate Shiftという. 例えば,学習データとして黒猫のみを用いると,黒い猫を判定できるモデルが生成される.そこに,三毛猫を判定させようとすると,うまくいかない,という原理である.

そして,同じような現象が,層が深いネットワーク内でも発生する.これをInternal Covariate Shift という.これは,層の入力データの分布と出力データの分布が違うことで発生する.各層は,データの分布に適応しようと学習を行う.しかし,層が深くなるにつれ,データの分布は初期状態から違うものになってしまう.これは,イテレーションが増す毎に酷くなる.

そこで,全てのレイヤーにおいて,データがほぼ同じ分布になるように強制的に変えてしまう,というのがBatch Normalizationである.

解決手法

上記のInternal covariate shiftを無くすための手法としてBatch Normalizationが提案された. 学習中,以下の手法によって,正規化を行う:

  1. レイヤーの入力値の平均と分散を計算
  2. 1の値を用いてレイヤーの入力値の正規化を行う
  3. レイヤーの出力値を得るために,シフトを行う

既存の層に対して,2つのパラメタのみ追加することでBatch Normalizationは実装ができる.

利点

  • 学習が早く進む
  • learning rateを比較的大きく設定ができる
    • Batch Normalizationによって,活性化されても大きすぎたり,小さすぎる出力が得られないようになる
  • 過学習を防ぐ
    • Dropoutと似ており,隠れ層にノイズを含めることができる
  • Dropout回数を減らすことができる

考察

BNはネットワーク内部の活性化の正規化をすることによって,結果に大きな違いを生み出すことができるようになった.

参照