深層学習DAY２

####自分用メモ

####Section1 勾配消失問題

誤差+=逆伝播法が下位置に進んでいくにつれて、勾配がどんどん緩やかになっていく。
そのため、勾配降下法による更新では下位置のパラメータはほとんど変わらず、訓練は最適値に収束しなくなる。

シグモイド関数は勾配消失問題を起こす代表的な関数
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/55b6f13f-1d9a-397b-b8e0-a52f5be54fc4.png)

活性化関数を微分したとき
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/e61b9cd0-1f08-38d4-ee31-55265eb0ddbf.png" width=80%>

最大でも0.25となり、入力層側の値がどんどん小さくなってしまう。

- 確認テスト
Q：シグモイド関数を微分したとき、入力値が０の時に最大値をとる。その値として正しいものを選べ。

A：0.25

######勾配消失の解決法

- 活性化関数の選択

解決してくれる関数にRelu関数がある。

```math
f(x) = \left\{
\begin{array}{ll}
x & (x > 0) \\
0 & (x \leqq
 0)
\end{array}
\right.
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/0cf5ad72-03dd-7b35-f7d0-b0e649105352.png" width=80%>


xが１の場合、重みは積極的に使われる。
xが０以下の場合、微分値が０の場合は必要な部分の重みしか残らず、モデルの効果的な動きを自力で見つけられるようになる。



- 重みの初期値設定
逆伝播の値が0に近いと重みの更新量が小さくなり、重みが停滞してしまい、学習が進まなくなってしまうことを指す。
この原因の一つが重みの初期値によるものである。
そのため、適切な初期値の設定が求められる。

Xaiver（ザビエル）の初期値
→重みの要素を、前の層のノード数の平方根で除算した値
使える活性化関数シグモイド関数

Xavierの初期化を行うと、各レイヤーを通ったあとの値はどれもある程度のバラツキを持ちつつ、０や１に値が偏ることもない。活性化関数の表現力を保ったまま、勾配消失への対策が取れている。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/3de2e381-a110-961f-3968-c869370a48d8.png)

Heの初期値
→正規分布の重みを√2/√nで割る
使える活性化関数Relu

ある程度の表現力を保った状態となる。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/cec3e68c-e337-de82-d2a1-b80186f1bb2f.png)

- 確認テスト
Q:重みの初期値に０を設定すると、どのような問題が発生するか。

A:重みを０に初期化すると正しい学習が行えない。
→すべての重みの値が均一に更新されるため、多数の重みを持つ意味がなくなる。


- バッチ正規化

ミニバッチ単位で入力値のデータの偏りを抑制する手法。

バッチ正規化の使い所とは？
活性化関数に値を渡す前後に、バッチ正規化の処理を孕んだ層を加える。

学習の安定化。過学習を抑えることができる。


- 数学的記述

ミニバッチの平均

```math
\mu_t=\frac{1}{N_t}\sum_{i=1}^{N_t}x_{ni}
```

ミニバッチの分散

```math
\sigma_t^{2}=\frac{1}{N_t}\sum_{i=1}^{N_t}(x_{ni}-\mu_t)^2
```

ミニバッチの正規化

```math
\hat {x}_{ni}= \frac{x_{ni}-\mu_t}{\sqrt{{\sigma_t}^2+\theta}}

```

変倍・移動

```math
y_{ni}=\gamma x_{ni}+\beta


```
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/63b74f42-a93c-a85b-f07b-0b85859c466e.png)

- 例題チャレンジ

Q:

```mathematica
def train(data_x, data_t, n_epoch, batch_size):
    """
    data_x: training data (features)
    data_t: training data (labels)
    n_epoch: number of epochs
    batch_size: mini batch size
    """
    N = len(data_x)
    for epoch in range(n_epoch):
        shuffle_indx = np.random.permutation(N)
        for i in range(0, N, batch_size):
            i_end = i + batch_size
            batch_x, batch_t = (き) あ
            _update(batch_x, batch_t)
```
（き）に入るプログラムは？

A: data_x[i:i_end],data[i:i_end]


####Section2　学習率最適化問題

勾配降下法を利用してパラメータを最適化

```math
w^{(t+1)} = w^{(t)} - \epsilon\nabla{E} \\
\nabla E= \frac{\partial E}{\partial w}= \biggl[\frac{\partial E}{\partial w_1} ... \frac{\partial E}{\partial w_M}\biggr]

```

#####モメンタム

```math
V_t =\mu V_{t-1} -\epsilon \nabla E \\
w^{(t+1)} = w^{(t)} +V_t \\
慣性:\mu

```

誤差をパラメータで微分したものと学習率の積を減算した後ｗ，現在の重みに前回の重みを減算した値と慣性の積を加算する。

- メリット

局所的最適解にはならず、大域的最適解となる。
谷間についてから最も低い位置（最適解）にいくまでの時間が早い。

#####AdaGrad


```math
h_0= \theta\\
h_t=h_{t-1}+(\nabla E)^2\\
w^{(t+1)}=w^{(t)}-\epsilon\frac{1}{\sqrt{h_t}+\theta}\nabla E
```

誤差をパラメータで微分したものと再定義した学習率の積を減算する。

- メリット

勾配の緩やかな斜面に対して、最適値に近づける

課題

学習率が徐々に小さくなるので、鞍点問題を引き起こすことがあった。

#####RMSProp

```math
h_t=\alpha h_{t-1}+(1-\alpha)(\nabla E)^2 \\

w^{(t+1)}=w^{(t)}-\epsilon\frac{1}{\sqrt{h_t}+\theta}\nabla E

```
誤差をパラメータで微分したものと再定義した学習率の積を減算する

- メリット

局所的最適解にはならず、大域的最適解となる。
ハイパーパラメータの調整が必要な場合が少ない。


#####Adam

- モメンタムの過去の勾配の指数関数的減衰平均
- RMSPropの過去の勾配の２乗の指数関数的減衰平均

上記をそれぞれ孕んだ最適化アルゴリズムである。

- メリット

モメンタムおよびRMSPropのメリットを孕んだアルゴリズムである。



####Section3　過学習


テスト誤差と訓練誤差とで学習曲線が乖離すること。

- 原因

パラメータの数が多い
パラメータの値が適切でない
ノードが多い

→ネットワークの自由度（層数、ノード数、パラメータの値etc...)が高い。

#####正則化

ネットワークの自由度（層数、ノード数、パラメータの値etc...)を制約すること

- Weight decay（荷重減衰）

過学習の原因
重みが大きい値を取ることで、過学習が発生することがある。

→学習させていくと、重みにばらつきが発生する。

解決策
誤差に対して、正則化項を加算することで、重みを抑制

→過学習がおこりそうな重みの大きさ以下で重みをコントロールし、かつ重みの大きさにばらつきを出す必要がある。

#####L1,L2正則化

```math

E_n(w)=\frac{1}{p}\lambda ||x||_p :誤差関数にｐノルムを加える\\
||x||_p=(|x_1|^p+...+|x_p|^p)^{\frac{1}{p}}　：ｐノルムの計算

```

p=1の場合、L１正則化
p=2の場合、L２正則化と呼ぶ。

誤差関数に正則化項を加えることにより、重みの最小化する場所を操作できる。

- 確認テスト

Q: L1正則化を表しているグラフはどれか。

A: 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/60d3ff67-561f-7793-9c2d-f262e29450f4.png" width=30%>

- 例題チャレンジ

Q:
深層学習において、過学習の抑制。汎化性能の向上のために正則化が用いられる。そのひとつにL2ノルム正則化（Ridge,Weigh Decay)がある。以下はL2正則化を適用した場合にパラメータの更新を行うプログラムである。あるパラメータparamと正則化がないときに伝播される誤差の勾配gradが与えられたとする。
最終的な勾配を計算する（え）にあてはまるのはどれか。ただしrateはL2正則化の係数を表すとする。

```mathematica
def ridge(param, grad, rate):
    """
    param: target parameter
    grad: gradients to param
    rate: ridge coefficient
    """
    grad += rate *（え）

```
A:
sign(param)

L1ノルムは|param|なのでその勾配が誤差の勾配に加えられる。
つまり、sigh|param|である。signは符号関数である。

#####ドロップアウト

ランダムにノードを削除して学習させること。

- メリット

データ量を変化させずに、異なるモデルを学習させていると解釈できる。


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

CNNの構造図（例）

入力層→畳み込み層→プーリング層→畳み込み層→プーリング層→全結合層→出力層

主に画像で使われる。

#####LeNetの構造


![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/4b93ad03-e857-8973-5bfc-9226cad4c9f0.png)


(32,32)　(28,28,6)　(14,14,6)  　　　(10,10,16) 　　(5,5,16)　　　(120)   (84)  　(10)
1024個   　4704個     　1176個       　 1600個  　　 400個     120個  　 84個  　10個

#####畳み込み層の全体像


![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/80964ec1-e554-04dd-110f-a5c7bb4e52f6.png)


#####畳み込み層

画像の場合、縦、横、チャンネルの３次元のデータをそのまま学習し、次に伝えることができる。


#####畳み込み演算概念（バイアス）

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/56528b2b-4644-9459-6484-65faca4b8cd1.png)


#####畳み込み演算概念（パディング）

出力画像を入力画像の大きさに揃える。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/9d525094-47d2-6515-cd9e-87951a5c7f4b.png)

#####畳み込み演算概念（ストライド）

出力画像を小さくする
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/d825ba97-9366-3819-b994-36cb81e5cb09.png)

#####畳み込み演算概念（チャンネル）
フィルターの数

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/0f1267de-341a-0714-12c3-cdb7eff1b973.png)

- 全結合層のデメリット

画像の場合、縦、横、チャンネルの３次元データだが、１次元のデータとして処理される。

→RGBの各チャンネル間の関連性が、学習に反映されないということ。

- 確認テスト
Q:
サイズ6x6の入力画像を、サイズ2x2のフィルタで畳み込んだ時の出力画像のサイズを答えよ。
なおスライドとパディングは１とする。

A:
7x7

####Section5　最新のCNN

#####AlexNet
モデルの構造
５層の畳み込み層およびプーリング層など、それに続く３層の全結合層から構成される。

過学習を防ぐ施策
サイズ4096の全結合層の出力にドロップアウトを使用している。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/13d5f3cd-b096-d2a7-f75d-ae80727794cd.png" width=80%>