dying ReLU について学ぶ (その２) Leaky ReLU

dying ReLU の発生が MiniBatchSize, LeakyReLU でどう変わるかが気になり調査しました。結果をここでまとめます。参考になれば幸いです。

前回の[「dying ReLU について学ぶ」](http://qiita.com/t-tkd3a/items/243b523f962f26281037)からの続きです。

#MiniBatchSizeを変化させた場合 
## NNの構成 と 測定内容

![02_MiniBatch.PNG](https://qiita-image-store.s3.amazonaws.com/0/169589/ca9aadc0-9db1-710e-011b-2df309bf3944.png)


* 注目するのは、無反応になるパーセプトロン(dying ReLU)の数。
* 前回の測定では MiniBatchSize を 100 固定とし、Weightの初期値の乱数の種値を振り、発生数の違いを見ました。
* 今回は乱数の種値を 20170523 に固定。（前回の測定内で最多発生の値）
* MiniBatchSizeの値を振り、無反応になるパーセプトロンの数がどう変わるかを見ます。

## 測定結果
![Matome_MiniBatchSize.png](https://qiita-image-store.s3.amazonaws.com/0/169589/f637a897-011d-b70d-133f-ec7657fc76a9.png)
* 上側グラフは 横軸epoch数 縦軸「正解率」 
* 下側グラフは 横軸epoch数 縦軸「dyingReLUの発生数」

### 正解率
* MiniBatchSizeが大きいほど、正解率が低いように見える。

### dyingReLU の発生数
* どの MiniBatchSizeの値でも発生はしている。
* MiniBatchSize 10 の時が 最多6 となったが、以後の 50,100,200,500 と発生数に相関はないように見える。（比例や反比例のような関係を期待してました）
* MiniBacheSizeを大きくしても、dyingReLUの抑制には効かなさそう。(大きくするメリットはなさそう）


## dW 変化動画
* 画像は四角一つが１パーセプトロンの重みの変化（dW）を示してます。
* パーセプトロンの四角は、一辺が28ピクセルの計784（＝MNIST）
* 各パーセプトロン内の max～min を 輝度255～0 と変換し表示してます。
* 変換式
　　$xはdwの各値$
　　$yは変換後の輝度値$
　　$iは1～784$

```math
y_i = \frac{x_i - min}{max-min+ 0.0001} × 255 
```

* 0.0001 は0除算防止。　
* max-min が 0.0255未満になると、max値でも 輝度255にならないが、max-minが小さい事が見た目でわかるのでそれはそれで。

* 動画容量の都合で、100epochまでの尺がなく、60epoch まで位しかありません...。



### MiniBatchSize 500
<!--  NNL2_L1P256_AF0_20170524-114123-963 -->
<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">K:20170523  MiniBatchSize:500 <a href="https://t.co/yaiJKMTYjK">pic.twitter.com/yaiJKMTYjK</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/868393504992407553">2017年5月27日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF0_20170524-114123-963.png](https://qiita-image-store.s3.amazonaws.com/0/169589/ac0daf36-a159-0ca8-f820-253f47596b2e.png)


### MiniBatchSize 200
<!-- NNL2_L1P256_AF0_20170524-112557-807.png -->
<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">K20170523 ,  MiniBatchSize 200 <a href="https://t.co/oeTuJEprCQ">pic.twitter.com/oeTuJEprCQ</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/868354028643602432">2017年5月27日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF0_20170524-112557-807.png](https://qiita-image-store.s3.amazonaws.com/0/169589/fb0527ff-ad3b-9d55-4371-29fdf729e2dc.png)


### MiniBatchSize 50
<!-- NNL2_L1P256_AF0_20170523-233738-976.png -->
<blockquote class="twitter-tweet" data-lang="ja"><p lang="und" dir="ltr">K:20170523 mb:50 <a href="https://t.co/ckMyUBknO5">pic.twitter.com/ckMyUBknO5</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/868395120839622656">2017年5月27日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF0_20170523-233738-976.png](https://qiita-image-store.s3.amazonaws.com/0/169589/91b2ac91-8b45-9ed0-f35d-5b81244ba799.png)


### MiniBatchSize 10
<!-- NNL2_L1P256_AF0_20170523-192048-149.png -->
<blockquote class="twitter-tweet" data-lang="ja"><p lang="und" dir="ltr">K:20170523 MB:10 <a href="https://t.co/E32m9DD3Ru">pic.twitter.com/E32m9DD3Ru</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/868395690983964672">2017年5月27日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF0_20170523-192048-149.png](https://qiita-image-store.s3.amazonaws.com/0/169589/3d579a6e-bb8b-eea8-987a-5869486d528b.png)

* グラフ真っ青...。　MiniBatchSize 10ですから 10枚中の1枚を外すと、正解率90%になりますね...。

#LeakyReLU を用いた場合
## NNの構成 と 測定内容

![03_LeakyReLU.PNG](https://qiita-image-store.s3.amazonaws.com/0/169589/f56cc4e4-6642-bee3-ba4c-6a0de971a033.png)

* 負側にも傾きがある LeakyReLUを用いて、dyingReLU の 発生数を見ます。
* 負側の傾きによって、正解率に違いがでるか見ます。
* MiniBatchSize は 100で固定。　乱数種値は20170523で固定。

## 測定結果

![Matome_Leaky.png](https://qiita-image-store.s3.amazonaws.com/0/169589/4b67af30-6da2-5d4f-1b42-61d34f507061.png)

* 上側グラフは 横軸epoch数 縦軸「正解率」 
* 下側グラフは 横軸epoch数 縦軸「dyingReLUの発生数」

### 正解率
* 0.5 でも 学習は進み 他とだいたい同じか 0.003 位低い値になっている（もっと極端に差がでるかと思ってました）

### dyingReLU の発生数
* dyingReLU は 発生してない。

## dW 変化動画
### Leaky ReLU 負側傾き: 0.001
<!-- NNL2_L1P256_AF1_20170523-180754-496 -->
<blockquote class="twitter-tweet" data-lang="ja"><p lang="lt" dir="ltr">K:20170523 mb:100 LeakyReLU:0.01 <a href="https://t.co/uJaSY5D5HH">pic.twitter.com/uJaSY5D5HH</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/868398533040234496">2017年5月27日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF1_20170523-180754-496.png](https://qiita-image-store.s3.amazonaws.com/0/169589/19cd8c63-53d6-c24e-d0bd-75a5f919c0c0.png)

### Leaky ReLU 負側傾き: 0.01
<!-- NNL2_L1P256_AF1_20170524-002329-792 -->
<blockquote class="twitter-tweet" data-lang="ja"><p lang="lt" dir="ltr">K:20170523 mb:100 LeakyReLU:0.01 <a href="https://t.co/uJaSY5D5HH">pic.twitter.com/uJaSY5D5HH</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/868398533040234496">2017年5月27日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF1_20170524-002329-792.png](https://qiita-image-store.s3.amazonaws.com/0/169589/e0bfa33d-71ad-fbd8-bea9-dbf410448fe2.png)


### Leaky ReLU 負側傾き: 0.18
<!-- NNL2_L1P256_AF1_20170524-005222-228 -->
<blockquote class="twitter-tweet" data-lang="ja"><p lang="lt" dir="ltr">K:20170523 mb:100 LeakyReLU:0.18 <a href="https://t.co/2gDZAiV9R3">pic.twitter.com/2gDZAiV9R3</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/868398908375916544">2017年5月27日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF1_20170524-005222-228.png](https://qiita-image-store.s3.amazonaws.com/0/169589/affaf8a0-7618-16f8-a58e-3dfbd86dfed1.png)


### Leaky ReLU 負側傾き: 0.5
<!-- NNL2_L1P256_AF1_20170524-015716-348 -->
<blockquote class="twitter-tweet" data-lang="ja"><p lang="lt" dir="ltr">K:20170523 mb:100 LeakyReLU:0.5 <a href="https://t.co/absoRFxy31">pic.twitter.com/absoRFxy31</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/868399456965623808">2017年5月27日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF1_20170524-015716-348.png](https://qiita-image-store.s3.amazonaws.com/0/169589/a748a11c-c770-bef9-4120-dcb1a143f189.png)

# 考察
* LeakyReLU では、dyingReLUは発生しなかったが、dwの推移動画をみると 変化がなくなったようなパーセプトロンが存在しているようにも見える。
* 後日、Batch Normalization を入れた場合にどうなるかを試してみます。