DNN_前編 2 (演習結果と考察)

#深層学習2-5 Jupyter演習　（Section1:勾配消失問題について）
[2_2_1_vanishing_gradient]
#####【演習実施結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/fbed5718-d48f-e7d7-6e76-f202f5aef6ce.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/93f84251-d794-30c8-92b9-0aa9e3429478.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/c8538db4-53a6-6ccc-0802-6a5f5f43cd10.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/8d77b5e8-3cec-652e-791f-4dccbc08dcb9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/157633d6-e012-f1e1-df01-cbb0b9172830.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/5adc00e6-e971-f936-0780-6c48de1c9868.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/00767936-345a-7b13-99d9-0e96bae510a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/ff4aed25-5d99-8c61-6d9a-016cc4de88ae.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/b2f166cd-f71a-ab64-f0c2-23510f92a50c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/9b67ce4a-9783-cd40-82e5-bd88b8954189.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/0402c503-6f96-d2e6-d8e5-7f881a2a1e59.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/6669314d-78f5-7952-0575-101324bbe80e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/b2fe7e7b-055f-79d9-e68c-1bd153bcda5f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/29acfa91-4054-a2be-a7e9-fc85b5539ab7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/604414b4-9b4e-e508-5996-f7253c39b801.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/2ca591cd-956e-4fc9-e9c0-42d61d3d9ce1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/246eed0a-7f61-b4d1-9295-377bd3663dfd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/5212b280-7f5e-632d-7466-6e0f37da2d02.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/e3705177-7c52-77b2-0a8d-5ff3198328a2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/bb6e5702-a89a-4a43-4284-7eccc5d7266b.png)

#####【考察】
・初期値ランダムで、シグモイド関数を使った場合、ノード数や学習率を変えてみても、学習が上手く進まなかった。
・初期値Heで、セオリー通りのReLU関数ではなく、シグモイド関数を使った場合、学習が上手く進まなかった。
・初期値ランダムで、RELU関数を使った場合、最初は学習が進まなかったが、繰り返し回数500回目あたりから、学習が上手く進んだ。活性化関数を変えるだけで、学習が上手く進む事があることが分かった。
・Xavierの初期値を使った場合、シグモイド関数でもRELU関数でも、学習が上手く進んだ。
・Heの初期値で、セオリー通りRELU関数を使った場合は、学習が上手く進んだ。上にも書いた通り、活性化関数をシグモイド関数にした場合は、学習が上手く進まなかった。
ただし、必ずセオリー通りに行くとは限らず、Heの初期値で、シグモイド関数を使って上手く行く場合もある。


#深層学習2-8 Jupyter演習　（Section2: 学習率最適化手法について）
[2_4_optimizer]
#####【演習実施結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/ee76f16e-b6ba-ccb9-82ca-2e30d6d230ba.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/9407d896-5c17-6452-c680-915d6a9080e8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/ccc4c154-2efe-cda6-d783-384951029394.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/aec3d39b-b5be-7df2-918d-18cff3fda1d1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/53251573-b7f9-1c51-c9a9-7fbbb8085aea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/dcff8e63-bedb-2484-970a-55e0e37f0b36.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/7652e285-79a2-1a0d-64bc-65ff571b3070.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/2a9189f3-80d0-e362-2932-590c19d5e85c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/7c88f3a1-a933-43e9-fbe4-ec512cb1ddb3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/b1208ecc-5dc0-4451-97a5-a59047f173ac.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/417f7e29-212d-b239-f76d-2b4a2f73bc3b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/ea0b965f-3302-5fd1-d2c6-f3c19437ea36.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/de23c33f-b32a-1d96-a5e8-26dc2dd6b9b1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/a378d7bc-434e-0a8b-4ae7-f06a09fe8caf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/4fb926b0-6db6-a83d-b564-9077a2c97dc9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/8d2ad0cf-0bf5-3693-6567-2eaa589a0712.png)

#####【考察】
・Momentum：モメンタムの値をゼロにした時（モメンタムなしと同じ状態）と、0.8や0.9とで比較してみると、学習が収束するまでの時間が、大きく違った(0.8や0.9を入れた時の方が収束が早い)。
・Momentumのコードをもとに、AdaGradを作成した。hの値については、数式通りで、繰り返しがゼロかゼロ以上の時とで、場合分けを行ってコーディングした。
・RSMProp：最終的には、最適値に収束するが、学習率μや、α（decay_ｒate）の値を少し変えるだけで、収束するまでの時間が大きく変わる事が分かった。
・バッチ正規化を行わない場合でも、最終的に学習が収束はしたが、学習は緩やかに行われた。バッチ正規化を行うと、収束までの時間が早くなった。


#深層学習2-13 Jupyter演習　（Section3:過学習について）
[2_5_overfiting]
#####【演習実施結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/43245765-a47c-f103-bcb5-7997b68e63ae.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/1a721e11-5cb6-b6da-1860-6cd9ea2b8a38.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/57bb9e37-247a-7551-9fa7-406854b313ac.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/e8e45dbe-f947-c2f2-8546-9869122bf837.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/323598ac-b124-403a-5f4b-ccfdc28ede5f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/2a8d6e61-b1e8-30a4-d071-8787d1a24821.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/2ed3bee7-9e88-d418-dcff-933111cd059c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/8cf5ae5b-340b-080f-2624-378df95deaa0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/8f7615a2-92f3-c9e0-a68a-f6bb599c2a3d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/a20bab0f-bb3a-143e-d7bd-a50aae21fa5d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/4c70cc8f-5578-9976-0bba-cd41df4b1fc8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/ad320caa-e9df-9d50-e9da-ff1f464c5250.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/3e48325e-3fb9-6428-8e35-c56553927733.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/90906d5a-8408-2bfe-0a47-673da7cb1739.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/41d00738-966d-950d-540f-e75749db5555.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/ff6d97cf-814f-b0bb-554a-a9a38690fc84.png)

#####【考察】
・L1,L2正則化を行う事で、何も対策をしない場合よりも、過学習が抑制される事が確認出来た。
・L1、L2正則化を行う際、weight_decay_lambdaの値が小さ過ぎると、何も処理しないのと同じ状態になり（過学習を抑制しない）、大き過ぎるとそもそも学習が進まないなど、weight_decay_lambdaの値も調整が必要である事が分かった。
・L1,L2,ドロップアウトの正則化とそれぞれのハイパーパラメータ、最適化でモメンタムAdaGrad,Adamなど、どれを使うのかなど、同じネットワークを組み立てても、色々な組み合わせが考えられるので、実際にテストしてみて、どの組み合わせと相性が良いのかを、データごとに見極める必要がある。
・L1＆ドロップアウトと、正則化を2つ組み合わせて使う事もあり、実際に試してみたところ、今回のデータでは、組み合わせた事で成果があった。

#深層学習2-17,19 Jupyter演習　（Section4: 畳み込みニューラルネットワークの概念）
[2_6_simple_convolution_network]
#####【演習実施結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/36415447-e522-11c1-1579-1f80e7c90aee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/6e93eb6f-51ed-a217-bf49-7719cfb75194.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/558915a4-212a-6804-b6bc-7234bf3c8a44.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/fea9c5d7-a28b-723a-1ba2-557d225095ce.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/15933fc8-24ee-7c49-cc23-053a87b9eaeb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/b64149e4-4f19-0733-0964-07f4424b2d76.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/c7888f4b-3131-8a31-fb61-3ed9ac14f3fe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/0ec0151c-563a-d596-2b4a-9343d3a23f53.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/9968d7f9-3377-7ac6-064f-dfd956262698.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/494427f0-7cba-c08e-c6bb-b392624df94b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/335bbe9c-52b1-a7c9-420e-2260f06d3597.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/59b42f8c-0963-cc30-2fd3-a3dabef81ebd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/65ac4516-1bd2-6d8e-51f4-7560704921b9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/dd0fa0fc-6344-2b72-e10d-c7f47622b363.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/6b43cb4d-19e8-b459-82b1-6962f1a19139.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/9d18babc-8db6-86bc-4df7-5888d7a5a6bf.png)

#####【考察】
・im2col：画像処理で多用されるメソッド。主に、画像のような多次元データを2次元配列にする処理。
・im2colのtransposeをコメントアウトしたり、input_dataの画像サイズやフィルタサイズ、ストライドやパッドを変えてみて、出力を確認する事で、im2colでどのような処理がされているのかが理解出来た。
・im2colで2次元配列にする理由は、行列計算に落とし込む事で、多くのライブラリを活用出来るため。
・逆にcol2imは、im2colで2次元配列になったものを、元の画像に戻す処理になる。
・ConvolutionClass, pooling classについては、畳み込み層、プーリング層の処理が、コードを通して改めて理解が出来た。
・CNNで実際に動かしてみると、層数が少ないシンプルなCNNだが、これまで演習で行ってきたニューラルネットワークと違い、顕著に処理速度が遅くなった。これまで話としてPCのスペックや、GPUについて聞いてきたが、それらが実感として感じ取れた。
・MNISTのデータセットで試してみたところ、前回までの演習でやった通常のNNに比べて、精度が格段に向上したのが確認出来た。