Edited at

dying ReLU について学ぶ

More than 1 year has passed since last update.

シンプルなNNを実装し 重みの変化 を可視化した所、無反応になるパーセプトロンを観測しました。dying ReLU と呼ばれている現象の様です。


dying ReLU

・活性化関数ReLUは負の領域では値が0=勾配がない。

・学習時に大きく負側に重みが更新された場合、ReLU関数で活性化する事がなくなる可能性がある。


現象の画像


Weight の Epoch 毎の変化画像


  • 画像上に256個ある四角形それぞれが パーセプトロンの重み を示しています。

  • 映像下段の Cnt はminibatch回数を示してます。 600cnt = 1epoch です。


dW の Epoch 毎の変化画像


  • 映像下段の B は、2epoch期間以上 $dw$の値がフラット(最大値=最小値)のまま変化なしのパーセプトロン の数です。

  • 画像上に白四角でB の位置を示してます。


NNの構成

全結合 隠れ層1層 のシンプルなNNです。

01_NN.PNG


  • 上図の赤枠の Waight と 赤矢印の dw を可視化したものが、先の動画です。

  • ガウス分布に用いる乱数の種値 は 先の映像のKで示しています。


正解率

NNL2_L1P256_AF0_20170523-161328-96.png


  • 先の映像での測定データです。

  • グラフ上側は 学習時とテスト時の正解率の推移です。

  • グラフ下側は 先の画像での B の数の推移です。


Wの初期値 ガウス分布に用いる乱数の種値を変えた場合

Matome_RandKey.png


  • 先の映像の種値は 20170523 です。

  • グラフ上側は テスト時の正解率の推移、グラフ下側は B の推移です。

  • 種値を変えると B の推移は変化します。 発生してない場合もあります。


考察


  • B としてカウントするパーセプトロンは、dwがフラット化し、Wが変化しなくなっており、dying ReLU と解釈しています。

  • ReLUが1段のシンプルなNNでも、データや乱数種値によって発生するのですね...。

  • MiniBatchSize で変化するか、LeakyReLU を用いるとどうなるかも 後日みてみます。→dying ReLU について学ぶ (その2) Leaky ReLU


おまけ: 種値を変えた場合の dw の推移映像


種値 20100705

NNL2_L1P256_AF0_20170523-145854-69.png


種値 20120424

NNL2_L1P256_AF0_20170523-142547-134.png