Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

先日 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では目立たず、もっと多層や、複雑なデータを扱うときに発揮されるのでしょうか......
t-tkd3a
機械学習 について実装できる位の理解を目指します。学ぶ過程の資料・成果を公開していきます。 また Linux での 開発環境・ツール類についても忘備録かねて記載していきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした