シンプルな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

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