Edited at

dying ReLU について学ぶ (その3) Batch Normalization

More than 1 year has passed since last update.

dying ReLU の発生が Batch Normarization を用いると どう変わるかが気になり調査しました。結果をここにまとめます。参考になれば幸いです。

「dying ReLU について学ぶ」 と 「dying ReLU について学ぶ(その2)」 の続きです。

「Batch Normalization の理解」 も参考になれば幸いです。

以下、本文中では Batch Normalization を BN と略します。


BNありで MiniBatchSize を変化させた場合


NNの構成 と 測定内容

04_BN_MiniBatch.PNG


測定結果

Matome_MiniBatchSize.png


  • グラフ上側は 横軸がepoch数、縦軸が正解率

  • グラフ下側は 横軸がepoch数、縦軸はdying ReLU発生数

  • 乱数初期値は前回同様 20170523 固定。


dying ReLU 発生数


  • MiniBatchSize がいずれの場合でも 発生しなかった。


正解率


  • MiniBatchSize 10 が他と比べ 1~1.5%程 正解率が低い。

  •  BN で 正規化するには、MiniBatchSize 10 は少なく、正規化が機能しなく、正解率を下げてると解釈してます。


dW 変化動画


  • 画像は四角一つが1パーセプトロンの重みの変化(dW)を示してます。

  • パーセプトロンの四角は、一辺が28ピクセルの計784(=MNIST)

  • 各パーセプトロン内の max~min を 輝度255~0 と変換し表示してます。

  • 変換式
      $xはdwの各値$
      $yは変換後の輝度値$
      $iは1~784$

y_i = \frac{x_i - min}{max-min+ 0.0001} × 255 


  • 0.0001 は0除算防止。 

  • max-min が 0.0255未満になると、max値でも 輝度255にならないが、max-minが小さい事が見た目でわかるのでそれはそれで。


  • 動画容量の都合で、100epochまでの尺がなく、60epoch まで位しかありません...。



miniBatchSiza 100にて BN の有無での比較


BN あり 動画


  • どのパーセプトロンのも、まんべんなく変化している。 = dWが存在 = 重みが変化している。

  •  (真っ黒なまま変化なしのパーセプトロンが 発生してない)

  • 背景部分(文字部分でない場所)が 中間値のグレーになっている。
     


BN なし 動画


  • BNなしでは、背景部分は 白(最大値) または 黒(最小値) が目立つ。

  • Weight に 白(最大値) または 黒(最小値) での 更新が続くと、初期値によっては、ReLUが反応しなくなる……のかな。


BN あり 正解率 推移グラフ

NNL2_L1P256_AF0_20170526-143350-101.png


BN なし 正解率 推移グラフ

NNL2_L1P256_AF0_20170523-161328-96.png


  • BNなしは学習時に正解率が100%に張りつくのが目立つ。

  • BNありは学習時に100枚中1~2枚の誤判定が目立つ。

  • その影響か、BNありは、テスト時の正解率も、「BNなし」よりも低くなってる。


  • 入力画像の使用順は、epoch毎にシャッフルしているのも要因の一つと想像。


  •  「BNなし」の時は、シャッフル済みでも、すでに覚えていて順番関係なく、判別できる……と想像。


  •  「BNあり」では、シャッフルによってMiniBatch内の画像の組み合わせが変わると、平均・分散が変わり、出力値も変動するため、学習データを覚えきるには至らなく、学習データでも誤る……と想像。


以下の MiniBatchSize 500,200,50,10 は BN のみです。


MiniBatchSize 500

NNL2_L1P256_AF0_20170526-193825-793.png


MiniBatchSize 200

NNL2_L1P256_AF0_20170526-192346-798.png


MiniBatchSize 50

NNL2_L1P256_AF0_20170526-184002-817.png


MiniBatchSize 10


  • MiniBatchSize 10 にても、まんべんなくdWが伝達さてきているように見える。

NNL2_L1P256_AF0_20170526-145935-674.png


  • グラフが真っ青...。 MiniBatchSize 10 では 学習時に1枚を誤ると 正解率90% ですものね...。


BN と LeakyReLU を併用した場合


NNの構成 と 測定内容

05_BN_LeakyReLU.PNG


測定結果

Matome_Leaky.png


  • 20 epoch 以降では 、0.001 0.01 0.18 0.5 のどれも 正解率はほぼ同じように見える。

  • dying ReLUは発生していない。

  • 先の ReLU の場合と比べても、正解率はほぼ同じように見える。


dW 変化動画


Leaky ReLU 負側傾き 0.001 BNの有無で比較


BN あり 動画


BN なし 動画


  • BN なしでは、dying ReLU判定とはなってないが、真っ黒のまま無反応になっているパーセプトロンが存在するように見える。

  • BN ありでは、上記のようなパーセプトロンは発生していないように見える。


BN あり グラフ

NNL2_L1P256_AF1_20170526-201339-837.png


BN なし グラフ

NNL2_L1P256_AF1_20170523-180754-496.png


  • ReLUと同様に、LeakyReLUでも、BN なしの方が、正解率が高い。


Leaky ReLU 負側傾き 0.01

NNL2_L1P256_AF1_20170526-211126-466.png


Leaky ReLU 負側傾き 0.18

NNL2_L1P256_AF1_20170526-204206-63.png


Leaky ReLU 負側傾き 0.5

NNL2_L1P256_AF1_20170526-213941-908.png


考察


  • dyingReLU よりも BNの効果を見た感あるけども、これはこれで。

  • MNISTでは 隠れ層1のシンプルなNNでも、98%程の正解率がでている。残りの2%の誤る要因は、BNを入れる事で解消できる性質のものではなさそう。

  • 今回は、Adamを用いたが、SGDでの挙動もみてみたくなってきた。


  • BNの効果は、CIFAR-10, CIFAR-100 で CNNを用いてのもう少し深いネットワークで見てみます。