深層学習 day1

### ニューラルネットワーク全体像
ニューラルネットワークは入力層、中間層、出力層からなる。

#### 確認テスト P.5
ディープラーニングは、結局何をやろうとしているか2行以内で述べよ。また、次の中のどの値の最適化が最終目的か。全て選べ。

回答①） 与えられたデータから特徴量を自ら学習して、学習結果に基づき予測や分類といったタスクを実行する。
回答②）重み[W]やバイアス[b]を最適化する。

#### 確認テスト P.7
次のネットワークを紙にかけ。入力層︓2ノード1層、中間層︓3ノード2層、出力層︓1ノード1層

![DNN.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/963d48c2-0a39-24b9-bc7c-d94fe72daf15.png)

### 機械学習で行うタスク
#### 回帰
連続する実数値を取る関数の近似
手法：
線形回帰、回帰木、ランダムフォレスト、ニューラルネットワーク

#### 分類
性別（男あるいは女）や動物の種類など離散的な結果を予想するための分析
手法：
ロジスティック回帰、決定木、ランダムフォレスト、ニューラルネットワーク

### セクション1: 入力層〜中間層

#### 確認テスト P.13
この図式に動物分類の実例を入れてみよう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/55dcaa39-84a6-2811-3a9b-c2e99794e441.png)

#### 確認テスト P.15
この数式をPythonで書け。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/8f70948b-eeca-3439-5637-745465c30f6f.png)

#### 確認テスト P.17
1-1のファイルから中間層の出力を定義しているソースを抜き出せ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/bfc11bc9-2797-f6e3-1ece-9b54c8c1f707.png)


### セクション2: 活性化関数
ニューラルネットワークにおいて、次の層への出力の大きさを決める非線形の関数。
入力値の値によって、次の層への信号のON/OFFや強弱を定める働きをもつ。

#### 線形性
以下の2つの条件を満たすとき、その関数は線形であるという。
加法性：任意の x, y に対して f(x + y) = f(x) + f(y)
斉次性：（作用との可換性）: 任意の x, α に対して f (αx) = αf(x)


#### 確認テスト P.20
線形と非線形の違いを図にかいて簡易に説明せよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/53bbe39a-58ee-3f6d-0cfc-ba0d61837608.png)

#### 活性化関数
ステップ関数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/3f4c133e-7ef6-970a-6285-092b784dc77b.png)
シグモイド関数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/c99b0d09-90aa-6008-ce01-7c0b34d74361.png)
ReLU関数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/bdf5d392-4b5a-78be-6940-4302522f2cda.png)
各活性化関数のグラフ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/95ea1cb0-3bce-2a90-22bc-3defb30aaff1.png)

#### 確認テスト P.27
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/ab12f488-81f6-1bc1-0a92-49733dbef788.png)

### セクション3: 出力層
タスクが分類の場合、出力層は分類したい種類分だけノードを用意してやる。
例えば、犬、猫、ねずみの3種類に分類する場合には、出力層のノードは3つである。
出力層の正解値のベクトルで$\boldsymbol{y}=(y_{dog}, y_{cat}, y_{mouse})$のように表す。それぞれの要素は0または1の値をとる。これをOne-hot表現という。$(1, 0, 0)$の場合、正解が「犬」であることを意味する。
ニューラルネットワークの正解ベクトルと推測値ベクトル$\boldsymbol{\hat{y}}$の誤差が小さくなるよう重みやバイアスの値を最適化(学習)する。

正解ベクトルと推測値ベクトルの誤差を表す関数を誤差関数という。
誤差関数の代表的なものには二乗和平均誤差と交差エントロピー誤差がある。

#### 二乗和平均誤差
$E=\frac{1}{2} \sum_{j} (y_j - \hat{y}_j)^2$

#### 交差エントロピー誤差
$E=- \sum_j y_j \log \hat{y}_j$


#### 確認テスト P.38
・なぜ、引き算でなく二乗するか述べよ
➡二乗をしないと各要素同士の和が0になり、誤差を表現できない可能性がある

・二乗和平均誤差の1/2はどういう意味を持つか述べよ
➡特に意味はない。二乗和平均誤差を微分する際に、1/2と打ち消しあわせ式をシンプルにするため。

分類問題の場合、出力層の出力は0 ~ 1 の範囲に限定し総和を１とするために、ソフトマックス関数を使う。
出力層で主に使われる活性化関数は以下の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/8da970a7-7cd6-a95d-b5fe-ffa096bd3958.png)

#### 確認テスト P.45
数式に該当するソースコードを示し、一行づつ処理の説明をせよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/87e9a28a-d5f0-da56-71af-9aac636b81da.png)

#### 確認テスト P.47
数式に該当するソースコードを示し、一行づつ処理の説明をせよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/9fee488b-7da4-4bf1-06b3-a30a4942225d.png)


### セクション4: 勾配降下法
勾配降下法により、誤差が最小となる重みとバイアスを見つける。
誤差関数の微分値に学習率を乗算したもので、重み・バイアスを何度も更新していく。
学習率が大きいほど早く収束するが、学習率があまりに大きいと発散してしまい最小値にたどり着かない。
一方、学習率が小さいと、収束までに時間がかかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/80d3f14e-4025-f099-d2c1-9a15025b5eb7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/54487c9b-0f43-6a25-94c3-6bcea5974755.png)


#### 確認テスト P.50
該当するコードを探してみよう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/27b8d236-8494-9752-3cf3-f7aeaf405113.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/75d30087-9246-79d7-c724-c536436a511f.png)

勾配降下法には以下の2種類がある。
・勾配降下法
・ミニバッチ勾配降下法
・確率的勾配降下法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/b1dbc094-fbc5-b872-cbd5-01305f99f7ab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/44fe95d1-c69a-df91-872c-fe3b95c5b273.png)


確率的勾配降下法のメリット
•データが冗⻑な場合の計算コストの軽減
•望まない局所極小解に収束するリスクの軽減
•オンライン学習ができる
[オンライン学習 参考サイト](https://www.ms.u-tokyo.ac.jp/~yasuyuki/Taki7_4.pdf)


ミニバッチ勾配降下法のメリット
•確率的勾配降下法のメリットを損なわず、計算機の計算資源を有効利用できる
•CPUを利用したスレッド並列化やGPUを利用したSIMD並列化


#### 確認テスト P.59
オンライン学習とは何か2行でまとめよ
訓練データの一つを取り出してパラメータを更新
局所界に陥りにくいが外れ値にも過敏に反応

#### 確認テスト P.62
この数式の意味を図に書いて説明せよ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/2b788365-0ec3-4fff-2fef-fe8441dffc6a.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/d95e090f-6f11-c775-71a5-e61f0d94ac2a.png)


### セクション5: 誤差逆伝播法

#### 数値微分
プログラムで微小な数値を生成し擬似的に微分を計算する一般的な手法
誤差勾配の計算は数値微分を使うと実装が簡単。
一方で、計算負荷が高く、計算に時間を要する ➡ 誤差逆伝播法の出番
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/76aaceef-c371-6298-dbe4-cb7d6566a3a2.png)
※hは極微小な値

微分の連鎖律を生かして、算出された誤差を出力層側から順に微分し、前の層前の層へと伝播。
最小限の計算で各パラメータでの微分値を解析的に計算する手法。
不要な再帰的計算を避けて微分を算出できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/13f316c2-cbe7-b6c8-7b44-368c30990c20.png)

#### 確認テスト P.71
誤差逆伝播法では不要な再帰的処理を避ける事が出来る。既に行った計算結果を保持しているソースコードを抽出せよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/9ab77adc-0c7f-bcf9-70c1-7c93cf64c414.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/39427376-aa33-b187-bc32-b8e4f7ab62a2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/602dd8d3-8a7a-5b36-08d9-2015db8da5b5.png)


#### 確認テスト P.76
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/65ce20ee-f8d5-f28e-b2c4-96454521ebac.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/760b9e82-2d1f-1ec3-b3ff-0799ae808a1f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/5c192c0b-d49d-9b01-7a3f-c051e03a9400.png)