【ゼロつく学習記録】Batch Normalizationを理解する

DeepLearning

Batch Normalizationとは

Batch Normalizationとは各層のアクティベーションの文を適度な広がりを持つように調整する手法です。

特徴として大きく以下の3点があります。

①学習を早く進行させることが可能(学習率を大きくすることが可能)
②パラメータのスケールや初期値にそれほど依存しない
③過学習を抑制することができる(Dropoutの必要性を減らすことができる)

Batch Normalizationの挿入位置は活性化関数の前か後になります。言論では活性化関数の前に挿入されています。

アルゴリズム

Batch Normalizationのアルゴリズムは次のとおりです。

ミニバッチごとの平均と分散を計算

まず最初にミニバッチごとに平均と分散を計算します。

次の式はミニバッチ数がmの場合の平均の計算になります。

$$\mu_\beta=\frac{1}{m}\sum^{m}_{i=1}x_i$$

ミニバッチ数がmの場合の分散は以下のとおりです。

$$\sigma^2_\beta=\frac{1}{m}\sum^{m}_{i=1}(x_i-\mu_\beta)^2$$

正規化

平均と分散を計算後、次の式で入力データが平均0、分散1の標準正規分布になるように正規化します。

$$\widehat{x}_i=\frac{x_i-\mu_\beta}{\sqrt{\sigma^2_\beta+\epsilon}}$$

固有のスケールとシフトで変換

標準正規分布で正規化した\(\widehat{x}_i\)に対して固有のスケールと市渕で変換を行います。

$$y_i=\gamma\widehat{x}_i+\beta$$

\(\widehat{x}_i\)をそのまま使用せず変換を行う理由は、レイヤが持つ非線形の表現力を失わないようにするためです。

sigmoid関数は-1~1の範囲ではほぼ線形になっているため\(\widehat{x}_i\)が-1~1の範囲の場合、非線形性が失われてしまいます。

表現力を豊かにするためには非線形の処理が入ったほうが良いと考えられます。

また上記の式の\(\gamma\)と\(\beta\)は学習によって適した値に調整されていきます。

まとめ

Batch Normalizationは仕組みはそこまで難しくありませんが学習の進行をスムーズにしたり、重みの初期値にそこまで気を使わなくて良くなるため多くの場面で役に立つ手法です。

参考文献

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

コメント

タイトルとURLをコピーしました