Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Batch Normalizationについてのメモ

More than 1 year has passed since last update.

概要

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

参照

sff1019
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away