52
37

More than 5 years have passed since last update.

シンプルなNNで SeLU と eLU と ReLU を見比べてみる

Last updated at Posted at 2017-06-16

先日 twitter にて SeLU がホットな話題として交わされていたので 関心がわき、シンプルなNN で 見てみました。
結果をここにまとめ公開します。参考になれば幸いです。

背景・経緯

  • 深層学習の理解を深めようと、自前で実装を行ってます。
  • 先日(2017/6 上旬) にて、twitter の TL で SeLU がホットな話題として交わされてるの見て、関心わきました。
  • SeLU と eLU は 似てるらしい。
  • SeLU と eLU と ReLU とで見比べます。

eLU

def eLU(x):
    alpha = 1.0
    return np.where(x>=0.0, x, alpha*np.exp(x)-alpha)

eLU.png

SeLU

def SeLU(x):
    alpha = 1.6732632423543772848170429916717
    scale = 1.0507009873554804934193349852946
    return scale*np.where(x>=0.0, x, alpha*np.exp(x)-alpha)

SeLU.png

  • $X=0$ にエッジがあるんですね。

MNIST 300epoch での比較

C01__xeLU.PNG

  • 300 epoch までのテスト画像での正解率の推移
  • 乱数種値は 20170523 で固定
  • SGD の学習率は 0.001 で固定
  • LeakyReLU の負側の傾きは 0.01

300epoch_test_correct.png

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

  • LeakyReLU が 正解率 98.1% で健闘してます。
  • eLU は ReLU と 同等、LeakyReLUから だいたい 0.1% 位下がる。
  •  負側の傾きの有無の差が 0.1%位の差と出ている様に見える。
  • SeLU と BN+ReLU は 97.9%位 で だいたい同じ。
  •  (もっと際立った特徴でるかと期待してました...)

学習率を大きくした場合での比較

先日の記事シンプルなNNで 学習失敗時の挙動と Batch Normalization の効果を見る と同様に、学習率が大きく学習失敗した時と、学習が進む場合で、重みとバイアスの推移を比較しました。

C02__xeLU_64.PNG

  • 乱数種値は 20170523 固定
  • 学習率2つで比較。「学習が失敗する場合」と 「順調に進む場合」 で比較する。
  • ミニバッチ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の値。

eLU

学習率 0.01 0.001
備考 学習失敗 順調
①学習時正解率 NNL2_L1P64_AF3_20170614-233636-977_01_correct.png NNL2_L1P64_AF3_20170614-232749-995_01_correct.png
②層2Weight NNL2_L1P64_AF3_20170614-233636-977_02_W_Mean.png NNL2_L1P64_AF3_20170614-232749-995_02_W_Mean.png
③層2Bias NNL2_L1P64_AF3_20170614-233636-977_03_Bias.png NNL2_L1P64_AF3_20170614-232749-995_03_Bias.png
④層1Weight NNL2_L1P64_AF3_20170614-233636-977_L1_0_9_W_Mean.png NNL2_L1P64_AF3_20170614-232749-995_L1_0_9_W_Mean.png
⑤層1Bias NNL2_L1P64_AF3_20170614-233636-977_L1_0_9_Bias.png NNL2_L1P64_AF3_20170614-232749-995_L1_0_9_Bias.png

SeLU

学習率 0.01 0.001
備考 学習失敗 順調
①学習時正解率 NNL2_L1P64_AF2_20170614-233607-753_01_correct.png NNL2_L1P64_AF2_20170614-232049-267_01_correct.png
②層2Weight NNL2_L1P64_AF2_20170614-233607-753_02_W_Mean.png NNL2_L1P64_AF2_20170614-232049-267_02_W_Mean.png
③層2Bias NNL2_L1P64_AF2_20170614-233607-753_03_Bias.png NNL2_L1P64_AF2_20170614-232049-267_03_Bias.png
④層1Weight NNL2_L1P64_AF2_20170614-233607-753_L1_0_9_W_Mean.png NNL2_L1P64_AF2_20170614-232049-267_L1_0_9_W_Mean.png
⑤層1Bias NNL2_L1P64_AF2_20170614-233607-753_L1_0_9_Bias.png NNL2_L1P64_AF2_20170614-232049-267_L1_0_9_Bias.png

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

  • 学習率 0.01 では、eLU と SeLU ともに学習失敗している。
  •  ReLU と LeakyReLU も 0.01 の学習率にて、一応学習は進んでいた。 →先日の記事
  • 層1のWeightとBiasをみるに、負側に大きく振れた場合に、横線で反応がなくなる状態(dying)が目立つ。
  •  発散よりも、負側の傾きがなくなるところで無反応な状態になりやすそう。

まとめ

  • eLU SeLU の良さは シンプルはNNでは目立たず、もっと多層や、複雑なデータを扱うときに発揮されるのでしょうか......
52
37
1

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
52
37