シンプルなNNを実装し 重みの変化 を可視化した所、無反応になるパーセプトロンを観測しました。dying ReLU と呼ばれている現象の様です。
dying ReLU
・活性化関数ReLUは負の領域では値が0=勾配がない。
・学習時に大きく負側に重みが更新された場合、ReLU関数で活性化する事がなくなる可能性がある。
#現象の画像
Weight の Epoch 毎の変化画像
MNIST 重み 可視化 100epoch 動画 pic.twitter.com/7bs35SEKa1
— t-tkd3a (@t_tkd3a) 2017年5月24日
- 画像上に256個ある四角形それぞれが パーセプトロンの重み を示しています。
- 映像下段の Cnt はminibatch回数を示してます。 600cnt = 1epoch です。
dW の Epoch 毎の変化画像
MNIST DW 可視化 100epoch pic.twitter.com/Guy62oA3lH
— t-tkd3a (@t_tkd3a) 2017年5月24日
- 映像下段の B は、2epoch期間以上 $dw$の値がフラット(最大値=最小値)のまま変化なしのパーセプトロン の数です。
- 画像上に白四角でB の位置を示してます。
NNの構成
- 上図の赤枠の Waight と 赤矢印の dw を可視化したものが、先の動画です。
- ガウス分布に用いる乱数の種値 は 先の映像のKで示しています。
正解率
- 先の映像での測定データです。
- グラフ上側は 学習時とテスト時の正解率の推移です。
- グラフ下側は 先の画像での B の数の推移です。
Wの初期値 ガウス分布に用いる乱数の種値を変えた場合
- 先の映像の種値は 20170523 です。
- グラフ上側は テスト時の正解率の推移、グラフ下側は B の推移です。
- 種値を変えると B の推移は変化します。 発生してない場合もあります。
考察
- B としてカウントするパーセプトロンは、dwがフラット化し、Wが変化しなくなっており、dying ReLU と解釈しています。
- ReLUが1段のシンプルなNNでも、データや乱数種値によって発生するのですね...。
- MiniBatchSize で変化するか、LeakyReLU を用いるとどうなるかも 後日みてみます。→dying ReLU について学ぶ (その2) Leaky ReLU
おまけ: 種値を変えた場合の dw の推移映像
種値 20100705
種値 20100705 pic.twitter.com/IhVY8Zw5du
— t-tkd3a (@t_tkd3a) 2017年5月24日
種値 20120424
種値 20120424 pic.twitter.com/XqK9W3Rctn
— t-tkd3a (@t_tkd3a) 2017年5月24日