深層学習day2

#深層学習


##### 確認テスト
連鎖律の原理を使い、dz/dxを求めよ。

 ```math
z = t^2\\
t = x + y
```
回答
$$\frac{dz}{dx}= \frac{dz}{dt}\frac{dt}{dx}=2t *1=2(x + y)$$

##### 確認テスト
シグモイド関数を微分した時、入力値が0の時に最大値をとる。その値として正しいものを選択肢から選べ。
（1）0.15（2）0.25（3）0.35（4）0.45
回答
(sigmoid(0))'=(1-sigmoid(0))sigmoid(0)=(1-0.5)0.5=0.25
よって（2）0.25



## Section1 勾配消失問題
誤差逆伝播法が下位層に進んでいくに連れて、勾配がどんどん緩やかになっていく。そのため、勾配降下法による、更新では下位層のパラメータはほとんど変わらず、訓練は最適値に収束しなくなる。シグモイド関数などは大きな値では出力の変化が微小なため、勾配消失問題を引き起こす事があった。

##### 確認テスト
重みの初期値に0を設定すると、どのような問題が発生するか。簡潔に説明せよ。
回答
全ての値が同じ値で伝わるためパラメータのチューニングが行われなくなる。

##### 確認テスト
一般的に考えられるバッチ正規化の効果を2点挙げよ。
回答
まとめて計算することで計算が早くなる。
勾配消失が起こりにくくなる。

### 実装演習
mnistデータで活性化関数、初期値、バッチ正規化によるaccuracyの変化の違いを見る。
##### sigmoid - gauss
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/05db7016-c7c0-b855-a6bd-8aaee8a1cf2e.png)
全く学習できていない

##### ReLU - gauss
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/61980e33-7cc1-7833-de94-3060806c909c.png)
初期値が悪いため最初はaccuracyが上がりにくい

##### ReLU - Xavier
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/45707ecf-b8f0-829a-453c-98200c4440f5.png)
accuracyは上がっているが0.8程度で止まっている。

##### ReLU - He
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/c9339f95-84c1-53e7-e2bc-d202e5aab8fe.png)
とてもよく学習できている。

reluとHeの初期値が最もよく学習し、sigmoidとgaussの初期値は全く学習できなかった。

##### バッチ正規化
![スクリーンショット 2020-12-19 15.18.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/5aa41f07-8645-5922-7a67-f585c3599d7e.png)
ReLU - Xavierの時と同じような結果になった。


## Section2 学習率最適化手法
学習率の値が大きい場合、最適値にいつまでもたどり着かず発散してしまう。
学習率の値が小さい場合、発散することはないが、小さすぎると収束するまでに時間がかかってしまう。また大域局所最適値に収束しづらくなる
→学習最適化手法を利用して学習率を最適化する

##### 確認テスト
モメンタム・AdaGrad・RMSPropの特徴をそれぞれ簡潔に説明せよ。

- モメンタム 
 局所的最適解にはならず、大域的最適解となる。谷間についてから最も低い位置(最適値)にいくまでの時間が早い。
- AdaGrad
勾配の緩やかな斜面に対して、最適値に近づける
- RMSProp
誤差をパラメータで微分したものと再定義した学習率の積を減算する

### 実装演習
mnistデータで最適化関数によるaccuracyの変化の違いを見る。
##### SGD
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/9cf2a59f-2809-c7d0-d700-63ed2e36c7ef.png)
全く学習できていない。

##### Momentum
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/ddb9f8e2-8f51-207d-1d27-d2a4eaeff405.png)
学習できているがaccuracyが上がるのが遅い。

##### AdaGrad
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/ec4093fe-47f2-ac83-8a68-532a0ca37525.png)
Momentumと同じように学習できている。

##### RMSprop
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/bc969393-7b3a-c868-4ad8-4dbc75f4914e.png)
Momentum、AdaGradよりも早く学習できている。

##### Adam
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/b42a1c65-8501-e266-5829-621d00dacc93.png)
最も早く学習できた。



## Section3 過学習
テスト誤差と訓練誤差とで学習曲線が乖離すること
特定の訓練サンプルに対して、特化して学習してしまうことでテスト誤差が大きくなってしまう。
→正則化、ドロップアウトを利用して過学習を抑制する

##### 確認テスト
 機械学習で使われる線形モデル(線形回帰,主成分分析…etc)の正則化は、 モデルの重みを制限することで可能となる。
 前述の線形モデルの正則化手法の中にリッジ回帰という手法があり、 その特徴として正しいものを選択しなさい。 
(a)ハイパーパラメータを大きな値に設定すると、すべての重みが限りなくOに近づく 
(b)ハイパーパラメータを0に設定すると、非線形回帰となる。 
(c)バイアス項についても、正則化される 
(d) リッジ回帰の場合、隠れ層に対して正則化項を加える 
回答
（a)

##### 確認テスト
下図について、L1正則化を表しているグラフはどちらか答えよ。
![スクリーンショット 2020-12-17 17.08.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/6457dab4-2b6e-2e54-fc1f-e17a9f522c9e.png)

回答
右図のLasso推定の図がL1正則化を表している。

### 実装演習
mnistでoverfittingに関して検証する。
##### overfitting
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/c8504d69-559e-74be-330b-1978c690cf74.png)
学習データでのaccuracyとテストデータのaccuracyが大きく離れている。

##### weight decay
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/c7c1d0f8-31ce-3926-1eb0-19fe86b58837.png)
少し学習データでのaccuracyとテストデータのaccuracyの差が小さい。

##### L1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/577688f4-5718-ad29-2faa-8a2b400a73d3.png)
accuracyが上下している。

##### Dropout
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/9e1abaa5-a4dd-90ca-506c-cfec57113121.png)
学習は遅くなったが学習データでのaccuracyとテストデータのaccuracyの差が小さい。

##### Dropout + L1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/0a1244d9-8077-4ae2-33b2-ab7a221c0ed2.png)
Dropoutのみの場合に比べ精度が上がった。

## Section4 畳み込みニューラルネットワークの概念

- CNNは畳み込み層とプーリング層を組み合わせて画像を処理するニューラルネットワーク
- 畳み込み層では、フィルタを利用して変換する。 
- プーリング層ではデータを小さくし、より抽象的にする。
- プーリングにはmax poolingや平均 poolingがある。

##### 確認テスト
サイズ6×6の入力画像を、サイズ2×2のフィルタで畳み込んだ時の出力画像のサイズを答えよ。なおストライドとパディングは1とする。
回答
7*7

### 実装演習
conv - relu - conv - relu - pool - affine - relu - affine - softmaxのCNNでmnistを分類
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/d296b87c-628a-a6d7-e9d7-b67e74c23ada.png)
層が少ないため、精度は0.842であまり高くない。


## Section5 最新のCNN

AlexNet

- 2012年の画像分類チャレンジコンテスト（ILSVRC）で優勝した。
- 3つの畳み込み層、2 つのプーリング層および 3 つの全結合層から構成されている。
- 過学習を防ぐために dropout を用いている。

### 実装演習
conv - relu - conv- relu - pool -
    conv - relu - conv- relu - pool -
    conv - relu - conv- relu - pool -
    affine - relu - dropout - affine - dropout - softmaxのCNNでmnist画像を分類する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118594/30541e2e-2bc9-574a-ee8e-017c3edbb7ea.png)
層の数が少ないCNNに比べて時間はかかったがaccuracyが上がった。（テストデータのaccuracyが0.978）