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を用いてのもう少し深いネットワークで見てみます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.