【ラビットチャレンジ（E資格）】深層学習Day1

#はじめに
本記事は、E資格の受験資格の取得を目的としたラビットチャレンジを
受講した際の勉強記録およびレポート記事である。
##ニューラルネットワークでできること
□回帰
　・結果予想＿売上予測、株価予想
　・ランキング＿競馬順位予想、人気順位予想

□分類
　・猫写真の判別
　・手書き文字認識
　・花の種類分類
##Section1)入力層～中間層
■確認テスト
入力層から中間層への情報の伝播を動物の例に合わせて図示せよ。

解答：
![IMG_20201205_213051.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/ec102c7b-ac82-98aa-bd18-8fdd3c9c1377.jpeg)

■確認テスト
下記の数式をPythonで書け。
　　$ u = w\_{1}x\_{1} + w\_{2}x\_{2} + w\_{3}x\_{3} + w\_{4}x\_{4} + b = Wx + b $

解答：u1 = np.dot(x, W1) + b1
・実習演習結果
![スクリーンショット (138).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/16bf4036-af8c-1cb1-2a77-cce0292d99fc.png)


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

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

解答：
![IMG_20201205_214857.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/e4ea864b-9284-e789-aa6a-527047771d3a.jpeg)

□ステップ関数
閾値を超えたら発火する関数であり、出力は常に1か0。
パーセプトロン（ニューラルネットワークの前身）で利用された関数。
課題：0~1間を表現できず、線形分離可能なものしか学習できない。

$f(x) = \biggl\\{
\begin{array}{ll}
1 & (x \geqq 0) \\\\
0 & (x \lt 0)
\end{array}$

・実習演習結果
![スクリーンショット (139).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/db4ceb68-26a5-ff84-ae65-983cc52e669f.png)


□シグモイド関数
0~1間を緩やかに変化する関数。
信号の強弱を伝えられるようになり、予想ニューラルネットワーク普及の
きっかけとなった。
課題：大きな値では出力の変化な微小なため、勾配消失問題を引き起こす
ことがあった。
　
$ \smash{ f(x) = \dfrac{1}{1 + e^{-x}} }$

・実習演習結果
![スクリーンショット (140).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/7bd5cc46-0778-ed84-ed83-a50a36e1f29d.png)


□ReLU関数
今最も使われている活性化関数。
勾配消失問題の回避とスパース化に貢献することで良い成果をもたらしている。

$f(x) = \biggl\\{
\begin{array}{ll}
x & (x \geqq 0) \\\\
0 & (x \lt 0)
\end{array}$

・実習演習結果
![スクリーンショット (141).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/c1ebc6aa-ce46-5b7b-ff95-466ebe777360.png)


##Section3)出力層
■確認テスト
平均二乗誤差においてなぜ、引き算でなく二乗するか？
1/2はどういう意味を持つか述べよ。

解答
・2乗する理由
　引き算をを行うだけでは、各ラベルでの誤差で正負両方の値が発生し
　全体の誤差を正しく表すのに都合が悪い。2乗してそれぞれのラベルでの
　誤差を正の値になるようにする。

・1/2する理由
　実際にネットワークを学習するときに行う誤差逆伝搬の計算で誤差関数の
　微分を用いるが、その際の計算式を簡単にするため。
　本質的な意味はない。

■確認テスト
![スクリーンショット (142).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/9261435e-fcae-edea-16e5-448dd5b3f92b.png)

解答
①return y.T
②np.exp(x)
③np.sum(np.exp(x),axis=0)

□2乗和誤差
$\smash { E(y) = \dfrac{1}{2}\sum\_{j=1}^{J}(y_{j}-d_{j})^{2} = \dfrac{1}{2}||y - d||^{2} }$　

・コード
![スクリーンショット (143).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/5a83391e-519a-5b04-1b22-8b1f5efb8eaa.png)

■確認テスト
![スクリーンショット (144).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/5ff0ef83-af1c-6274-0c53-2f2e8ab69adb.png)

解答
①、②：return -np.sum(np.log(y[np.arange(batch_size), d] + 1e-7)) / batch_size

##Section4)勾配降下法
■確認テスト
オンライン学習とは何か。

解答：学習データが入ってくるたびに都度パラメータを更新し、学習を
　　　進めていく方法。

■確認テスト
下記の数式の意味を図に書いて説明せよ。
　$w^{t+1} = w^{t} - \varepsilon \times \nabla E\_{t}$

![IMG_20201205_225507.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/791052/a30554d0-1106-c463-c9f4-0468d7d00870.jpeg)

##Section5)誤差逆伝搬法
微分の連鎖律を用いて誤差勾配の計算を行う。

$\smash { E(y) = \dfrac{1}{2}\sum\_{j=1}^{J}(y_{j}-d_{j})^{2} = \dfrac{1}{2}||y - d||^{2} }$　：誤差関数 = 二乗誤差関数
$y = u^{(L)}$　：出力層の活性化関数 = 恒等写像
$u^{(l)} = w^{(l)}z^{(l-1)} + b^{(l)}$　：総入力の計算

```math
\frac{\partial E)}{\partial w_{ji}^{(2)}}=\frac{\partial E}{\partial y}\frac{\partial y}{\partial u}\frac{\partial u}{\partial w_{ji}^{(2)}}=
(y-d)
\left[
\begin{array}{r}
0 \\
\vdots \\
z_{j} \\
\vdots \\
0 \\
\end{array}
\right]
=(y_{i}-d_{i})z_{i}
```