LoginSignup
49
32

More than 5 years have passed since last update.

シンプルなNNで 学習失敗時の挙動と Batch Normalization の効果を見る

Last updated at Posted at 2017-06-14

正解率が 1/クラス数 のままでロスも下がらない状況(学習失敗)になる挙動を見ました。
結果をここにまとめ公開します。参考になれば幸いです。

背景・経緯

  • 深層学習の理解を深めようと、自前で実装を行っています。
  • 学習開始直後に、正解率が 1/クラス数 のまま ロスも下がらない 学習失敗になる状況に遭遇しました。
  • バグを疑い涙目になる。
  • 勘で与えた 学習率の値 が大きかったのが原因。(学習率の値 を小さくすると学習が進む)
  • 学習失敗と 学習が進む場合で、重みとバイアスの推移がどう違うのか関心がわき、グラフ化し、見比べました。
  • MNIST 、隠れ層1の全結合NN のシンプルなNNで見比べました。

得た知見(結論)

  • ReLU と LeakyReLU で、異なる 学習失敗経緯 を見れた。
  •  ReLU にて、全てのパーセプトロンが 負の領域で反応しなくなる推移 を見れた。
  •  Leaky ReLUにて、正負を行き来しながら発散し無効な数値(nan)化する推移を 見れた。
  •   学習率が大きいと、Bias と Weight がともにバタつき 収集つかなくなる。
  • Batch Normalization (以後 BN)すごい。
  •  BNなしで学習失敗した学習率より一桁大きい値でも、BNありだと学習が進む。

ReLU での挙動

NNの構成とパラメータ

B01__ReLU.PNG

  • 乱数種値は 20170523 固定
  • 学習率3つで比較。「学習が失敗する場合」と 「順調に進む場合」 と その中間 「なんか調子悪い」 とで比較する。
  • ミニバッチ600回 (1 epoche) 期間での測定。
  • 「①学習時正解率」は、学習時の正解率。 横軸はミニバッチ回数、縦軸は正解率。グラフは上に行くほど良く正解率が高い。
  • 「②層2 Weight」は、層2の10個のパーセプトロンへのweight(10個) の平均値の推移のグラフ。横軸はミニバッチ回数、縦軸はWeight値。振動していれば学習の進行中で、横線(振動がない)状態はdying 状態。 
  • 「③層2 Bias」は、層2の10個のパーセプトロンへの Bias 値の推移のグラフ。横軸はミニバッチ回数、縦軸はBiasの値。
  • 「④層1 Weight]は、層1の64個のパーセプトロン中の10個に注目し、各注目パーセプトロンへのWeight(768個)の平均値の推移のグラフ。横軸はミニバッチ回数、縦軸はWeight値。振動していれば学習の進行中で、横線(振動がない)状態はdying 状態。
  • 「⑤層1 Bias」は、④で注目したパーセプトロンへの Bias 値の推移のグラフ。横軸はミニバッチ回数、縦軸はBiasの値。

グラフ

(クリックすると拡大します)

学習率 0.05 0.01 0.001
備考 全滅 約半数がdying 順調
①学習時正解率 NNL2_L1P64_AF0_20170614-133836-225_01_correct.png NNL2_L1P64_AF0_20170613-011603-394_01_correct.png NNL2_L1P64_AF0_20170613-011842-720_01_correct.png
②層2 Weight NNL2_L1P64_AF0_20170614-133836-225_02_W_Mean.png NNL2_L1P64_AF0_20170613-011603-394_02_W_Mean.png NNL2_L1P64_AF0_20170613-011842-720_02_W_Mean.png
③層2 Bias NNL2_L1P64_AF0_20170614-133836-225_03_Bias.png NNL2_L1P64_AF0_20170613-011603-394_03_Bias.png NNL2_L1P64_AF0_20170613-011842-720_L1_0_9_Bias.png
④層1 Weight NNL2_L1P64_AF0_20170614-133836-225_L1_0_9_W_Mean.png NNL2_L1P64_AF0_20170613-011603-394_L1_0_9_W_Mean.png NNL2_L1P64_AF0_20170613-011842-720_L1_0_9_W_Mean.png
⑤層1 Bias NNL2_L1P64_AF0_20170614-133836-225_L1_0_9_Bias.png NNL2_L1P64_AF0_20170613-011603-394_L1_0_9_Bias.png NNL2_L1P64_AF0_20170613-011842-720_L1_0_9_Bias.png

グラフから読み取ったこと

  • 学習率 0.05 の時には 全数が、学習率 0.01 の時には半数が、無反応のパーセプトロン(dying ReLU)と化している。
  • Bias と Weight がともに負に振れる→ReLUでの活性化がなくなる→逆伝播もなくなる→変化がなくなる(dying)。の過程が見えた。

Leaky ReLU

NNの構成とパラメータ

B02__LeakyReLU.PNG

  • 乱数種値は 20170523 固定
  • 学習率3つで比較。「値が発散して失敗する場合」と その近傍で「ギリギリ発散しない値」 と 「順調に学習が進む」 とで比較する。
  • ミニバッチ600回 (1 epoche) 期間での測定。
  • ②と④ の 学習率 0.057 のグラフの縦軸は 対数。(対数グラフには絶対値をプロット)
  • 他は ReLU の場合と同じ。

グラフ

学習率 0.057 0.056 0.001
備考 発散   きわどい  順調
①学習時正解率 NNL2_L1P64_AF1_20170612-223219-179_01_correct.png NNL2_L1P64_AF1_20170612-223148-128_01_correct.png NNL2_L1P64_AF1_20170614-133901-570_01_correct.png
②層2 Weight NNL2_L1P64_AF1_20170612-223219-179_02_W_Mean.png NNL2_L1P64_AF1_20170612-223148-128_02_W_Mean.png NNL2_L1P64_AF1_20170614-133901-570_02_W_Mean.png
③層2 Bias NNL2_L1P64_AF1_20170612-223219-179_03_Bias.png NNL2_L1P64_AF1_20170612-223148-128_03_Bias.png NNL2_L1P64_AF1_20170614-133901-570_03_Bias.png
④層1 Weight NNL2_L1P64_AF1_20170612-223219-179_L1_0_9_W_Mean.png NNL2_L1P64_AF1_20170612-223148-128_L1_0_9_W_Mean.png NNL2_L1P64_AF1_20170614-133901-570_L1_0_9_W_Mean.png
⑤層1 Bias NNL2_L1P64_AF1_20170612-223219-179_L1_0_9_Bias.png NNL2_L1P64_AF1_20170612-223148-128_L1_0_9_Bias.png NNL2_L1P64_AF1_20170614-133901-570_L1_0_9_Bias.png
  • 学習率0.057 は、ミニバッチ回数350以降は 無効数値(nan)化し、無意味な計算をおこなっている。

グラフから読み取ったこと

  • Bias と Weight が負に振れた後も、負側でも逆伝播はあり、値は変化していっている。
  • 学習率0.057 の層1にて、Bias と Weight が 正負を繰り返しながら発散する状況が見れた。
  • あるパーセプトロンで発散が始まると、他のパーセプトロンにも影響あたえ発散させていく。

Batch Normalization + ReLU

NNの構成とパラメータ

B03_BN_ReLU.PNG

  • 乱数種値は 20170523 固定
  • 学習率3つで比較。「ReLUで学習失敗した値」と それより10倍大きい「無茶そうな値」 と 「順調に学習が進みそうな値」を用いる。
  • 他は、ReLUの時と同様。

グラフ

学習率 0.5 0.05 0.01
①学習時正解率 NNL2_L1P64_AF0_20170613-181233-465_01_correct.png NNL2_L1P64_AF0_20170613-181202-354_01_correct.png NNL2_L1P64_AF0_20170613-181131-294_01_correct.png
②層2 Weight NNL2_L1P64_AF0_20170613-181233-465_02_W_Mean.png NNL2_L1P64_AF0_20170613-181202-354_02_W_Mean.png NNL2_L1P64_AF0_20170613-181131-294_02_W_Mean.png
③層2 Bias NNL2_L1P64_AF0_20170613-181233-465_03_Bias.png NNL2_L1P64_AF0_20170613-181202-354_03_Bias.png NNL2_L1P64_AF0_20170613-181131-294_03_Bias.png
④層1 Weight NNL2_L1P64_AF0_20170613-181233-465_L1_0_9_W_Mean.png NNL2_L1P64_AF0_20170613-181202-354_L1_0_9_W_Mean.png NNL2_L1P64_AF0_20170613-181131-294_L1_0_9_W_Mean.png
⑤層1 Bias NNL2_L1P64_AF0_20170613-181233-465_L1_0_9_Bias.png NNL2_L1P64_AF0_20170613-181202-354_L1_0_9_Bias.png NNL2_L1P64_AF0_20170613-181131-294_L1_0_9_Bias.png

グラフから読み取ったこと

(Batch Normarizationについては このリンク先の記事も参考になれば幸いです

  • 学習率 0.5 (ReLU で 学習失敗を確認した値の10倍)でも、学習は進んでいるように見える。
  •  BN は順伝播時には、正規化した値を次層に伝達する。  
  •  BNは逆伝播も平均を0にする→ ΔBiasは逆伝播の合計のため0になる → Bias 変動なし。
  •  ↑の特性により、発散しにくく、WeightとBiasがそろって負に偏ることもなりにくく、大きい学習率でも、学習が進むみたい。       
49
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
32