深層学習：前編2、後編1、2（いずれも講義動画と実装演習）



###【活性化関数の微分値】
####シグモイド関数
```math
f(u) = \frac{1}{1+e^{-u}} \\
f'(u)= \bigl(1-f(u)\bigr)
```

####ReLU関数
```math
f(x) = \left\{
\begin{array}{ll}
x & (x \geq 0) \\
0 & (x \lt 0) \\
\end{array}
\right.\\

f'(x) = \left\{
\begin{array}{ll}
1 & (x \geq 0) \\
0 & (x \lt 0)
\end{array}
\right.
```
#深層学習の学習テクニック
##Section1) 勾配消失問題について
###全体像：勾配消失問題のビジョン
 +活性化関数の選択
 +重みの初期値設定
 +バッチ正規化
#####1-1 活性化関数：ReLU関数
今最も使われている活性化関数。勾配消失の回避とスパース化に貢献

```math
f(x) = \left\{
\begin{array}{ll}
x & (x \geq 0) \\
0 & (x \lt 0) \\
\end{array}
\right.\\
```
![スクリーンショット 2019-12-30 11.27.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/eb09c117-e839-a5ab-7d21-9684ecc91378.png)

#####1-2 初期値の設定方法：
**重みの初期値＜Xavier＞**
設定する際の活性化関数

+ ReLU関数：
+ シグモイド関数（ロジスティック）関数
+ 双曲線正接関数

初期値の設定

 * 重みの要素を、前の層のノード数の平方根で徐算した値

**重みの初期値設定　＜He＞**
設定する際の活性化関数

+ ReLU関数

初期値の設定方法

 + 重みの要素を、前の層のノード数の平方根で助産した値に$\sqrt{2}$を掛け合わせた値

#####1-3 バッチ正規化(2015年あたり提唱。)：
ミニバッチ単位で、入力値のデータの偏りを抑制する手法
使い所：活性化函数に値を渡す前後に、バッチ正規化の処置を孕んだ層を加える
バッチ正規化層への入力値は
$\boldsymbol{U}^{l}=\boldsymbol{w}^{l}\boldsymbol{z}^{l-1}+\boldsymbol{b}$またはz

 * 順伝播正規化・・・

```math
\begin{align}
1. & \;\mu_{t} = \frac{1}{N_{t}}\sum_{i=1}^{N_{t}}x_{ni} \\
2. & \;\sigma_{t}^{2} = \frac{1}{N_{t}}\sum_{i=1}^{N_{t}}(x_{ni}-\mu_{t})^{2}\\
3. & \;\hat{x_{ni}} = \frac{x_{ni}-\mu_{t}}{\sqrt{\sigma_{t}^{2}+\theta}}\\
4. & \;y_{ni} = \gamma x_{ni} + \beta
\end{align}
```
```math
\begin{align}
& \;\mu_{t}：ミニバッチt全体の平均\\
& \;\sigma_{t}^{2}：ミニバッチt全体の標準偏差\\
& \;N_{t}：ミニバッチのインデックス\\
& \;\hat{x_{ni}}：０に近づける計算（０を中心とするセンタリング）と正規化を施した値\\
& \;\gamma：スケーリングパラメータ\\
& \;\beta：シフトパラメータ\\
& \;y_{ni}：ミニバッチのインデックス値とスケーリングの積にシフトを加算した値（バッチ正規化オペレーションの出力）\\
\end{align}
```


##Section2) 学習最適化手法について
###全体像：課題全体像のビジョン
誤差を最小にするパラメータ$\boldsymbol{w}$を発見する→勾配降下方を利用してパラメータを最適化。

```math
\begin{align}\\
\boldsymbol{w}^{t+1}&=\boldsymbol{w}^t-\epsilon \nabla \boldsymbol{E}\\
\nabla E &= \frac{\partial E}{\partial \boldsymbol{w}} = 
\Biggl(
\frac{\partial E}{\partial \boldsymbol{w}_1}\cdots \frac{\partial E}{\partial \boldsymbol{w}_M}
\Biggr)\\
\epsilon：学習率
\end{align}
```

学習率の値が小さすぎる

 + 発散することはないが、小さすぎると収束するまでに時間がかかってしまう。
 + 帯域的最適値に収束しづらくなる。局所解に収束してしまう。

学習率の値が大きすぎる

 + 最適値にいつまでも辿りつかず発散してしまう。

####学習率の決め方

+ 初期の学習率を大きく設定し、徐々に学習率を小さくしていく
+ パラメータ毎に学習率を可変させる
+ 学習率最適化手法を利用して学習率を最適化

**モメンタム**：局所的最適解にはならず、大域的最適解。傾きが緩くなっても最適解までにたどり着く時間が早い。

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

**AdaGrad**：勾配の緩やかな斜面に対して、最適値に近づける。しかし、学習率が小さくなるので、鞍点（ｱﾝﾃﾝ）問題を引き起こす事があった。

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

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

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

**Adam**：モメンタム及びRMSPropのメリットを孕んだアルゴリズム

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

###全体像()：シンギュラリティーについて〜現在のロボットには欲が無い〜

##Section3) 過学習について
テスト誤差と訓練誤差とで学習曲線が乖離する。
$\Longrightarrow$特定の訓練サンプルに対して、特化して学習する。

+ 正則化手法
 + L1正則化、L2正則化
 + ドロップアウト：特にCNNで使用できる。

## Weight decay （荷重減衰）
過学習の原因
　■重みが大きい値を取る事で、過学習が発生することがある。
$\Longrightarrow$学習させていくと、重みにばらつきが発生する。 重みが大きい値は、学習において重要な値であり、 重みが大きいと過学習が起こる

過学習の解決策
　■誤差に対して、正則化項を加算する事で、重みを抑制する。
$\Longrightarrow$過学習がおこりそうな重みの大きさ以下で重みをコントロー ルし、かつ重みの大きさにばらつきを出す必要がある。

##L1、L2正則化

```math
E_{n}(\boldsymbol{w})+\frac{1}{p}\lambda||x||_p\\
||x||_p=\bigl(|x_1|^p+\cdots+|x_p|^p\bigr)^{\frac{1}{p}}\\
p=1の場合、L1正則化と呼ぶ。\\
p=2の場合、L2正則かと呼ぶ。\\
```

![スクリーンショット 2020-01-05 16.26.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/8cb7b56f-e160-6d31-4e6b-ce685aa7eb95.png)

##ドロップアウト
ランダムにノードを削除して学習させる事
![スクリーンショット 2020-01-05 16.37.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/5520863c-8b62-22b8-eb79-3f7efdff69c5.png)
メリット：データ量を変化させずに、異なるモデルを学習させていると解釈できる。

#畳み込みニューラルネットワークについて
##Section4) 畳み込みニューラルネットワークの概念
###全体像 
cnnの構造図
<img width="728" alt="100.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/1a2a99b9-639d-fcee-10ef-744a58dc7eb2.jpeg">

#####4-1 畳み込み層
######4-1-1 バイオス
![スクリーンショット 2020-01-08 20.50.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/cccfe04e-1143-fa95-5e4a-dba1ad626e2f.png)

######4-1-2 パディング
![スクリーンショット 2020-01-08 20.53.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/5a2a772d-18fb-e6c7-f879-90fedc0d4f7d.png)

######4-1-3 ストライド
![スクリーンショット 2020-01-08 20.54.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/0b92d14c-4877-5f4b-d5d2-ed3524c7d7f5.png)

######4-1-4 チャンネル
![スクリーンショット 2020-01-08 20.54.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/a6cb1677-53b7-f0af-4e5f-ca7e9129d1c4.png)

#####4-2 プーリング層
![max_pooling.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/65a6a5ef-5f89-52f3-248e-281a9444657a.jpeg)

##Section5) 最新のCNN
#####5-1 AlexNet

##全体像
 + データを集める。日本の法整備が遅れている。IoTプロダクトなどを利用することでデータの集める可能性が広がる。

#確認テスト

**重みの初期値に０を設定すると、どの様な問題が発生するか。簡潔に説明せよ。**
・模範解答：全ての値が同じ値で伝わるためパラメータのチューニングが行われなくなる。

**一般的に考えられるパッチ正規化の効果を２点あげよ。**
①ミニバッチ利用による計算量の削減（計算精度の向上）→計算の高速化
②勾配消失が起きづらくなる

**モメンタム・AdaGrad・RMSPropの特徴をそれぞれ簡潔に説明せよ。**

* モメンタム：局所的最適解にはならずに、大域的最適解になる
* AdaGrad：傾きが緩やかな場面でも、大域的最適値解に近づきやすい
* RMSProp：パラメータの調整が少なくて済む

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

**下図について、L1正則化を表しているグラフはどちらか答えよ。**
![スクリーンショット 2020-01-05 14.00.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/7ce3056e-930f-764b-6793-71500487e100.png)
答えは右側。![スクリーンショット 2020-01-05 14.00.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/2a4076bf-ed20-4115-58e7-ef76ae5cb4d1.png)

**サイズ６×６の入力画像を、サイズ２×２のフィルタで畳み込んだ時の出力画像のサイズを答えよ。なおストライドとパディングは１とする。**
答え：出力画像のサイズは７×７
（公式）

```math
アウトプットハイト(OH)＝\frac{ハイト(H)＋２×パディング(P)-フィルターハイト(FH)}{スライド(S)}+1\\
アウトプットワイド(OW)＝\frac{ワイド(W)＋２×パディング(P)-フィルターワイド(FW)}{スライド(S)}+1\\
H=W=6\\
P=1\\
S=1\\
FH=FW=2\\
```

#例台チャレンジ
![スクリーンショット 2020-01-05 16.19.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/78da7b32-60f6-2f50-8a3b-309c093f5322.png)
正解は(4)

![スクリーンショット 2020-01-05 16.23.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/ac8b0d16-b10e-fe0b-043c-40cbc041d5ed.png)
正解は(3)：絶対値の微分。

![スクリーンショット 2020-01-05 16.30.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/09a883ca-1bbb-dc95-a6c4-a0db43a3f805.png)
正解は(4)：imageの形式が（縦幅、横幅、チャンネル）である。

#Jupyter演習
**前編２ ２−５**
■勾配消失　（vanishiment gradient）
　sigmoid関数、ReLu関数、He関数
https://drive.google.com/open?id=1hFv-c7WAG_IL3c9K2spxBfQrurDWD5A0

**前編２ ２−８**
■勾配消失への対策（Momentum,AdaGrad,RMSProp,Adam）・バッチ正規化・学習率の初期値の設定
　○SIGMOID関数を使い、初期値を定数。
https://drive.google.com/open?id=1kbV00vuBq0WEcH7aIOU1M2xhEmdGpxMv
　○ReLu関数を使い、初期値をHeなどを利用
https://drive.google.com/open?id=1yE1VCt5wf2_sHSGLo6cFPXP1iOD1e7Em

**前編２　2-13**
■過学習対策（正則化：L1,L2、ドロップアウト）
https://drive.google.com/open?id=1QXttURP5TROmKbY4XIav9ULmrvGECKpc

**前編２　2-19**
■プーリング層（CNN）　：CPUのみのため、時間がかかる
　〇シンプルRNN
https://drive.google.com/open?id=1okKaCgVhWt_l7QtaGEpha4IQo8noDD5Q
https://drive.google.com/open?id=1vJZaOvucJxJtxEScVs_ylc1aKxo1608b
　〇ダブルRNN
https://drive.google.com/open?id=1IUz9PpMz_ZHvJ_VpcSq2GZhCMC2q_AZM
https://drive.google.com/open?id=1jbnqPWdURISahRVQviXBHZIl250CvuRY
　〇ディープコンボリューションネット
https://drive.google.com/open?id=1ob62solHzE_jcGLO1KRX6EvpsCYl1iuk


#再帰型ニューラルネットワーク
##再帰型ニューラルネットワーク概念
#####RNN
$\cdots$時系列データに対応可能な、ニューラルネットワークである。
#####時系列データ
$\cdots$時間的順序を追って一定間隔ごとに観察され，しかも 相互に統計的依存関係が認められるようなデータの系列
#####RNNの特徴
$\cdots$時系列モデルを扱うには、初期の状態と過去の時 間t-1の状態を保持し、そこから次の時間でのtを再 帰的に求める再帰構造が必要になる。
![17_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/bed8100f-e5ec-5b97-4fd7-938915e7bfee.png)
![スクリーンショット 2020-01-08 19.55.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/44bdf750-37ca-23c7-81d7-0c7f62283e85.png)


####BPTT
$\cdots$RNNにおいてのパラメータ調整方法の一種 つまり　誤差逆伝播の一種

##LSTM
$実線\cdots$現在の時間tに対する信号の経路
$波線\cdots$現在の時間t-1に対する信号の経路
![スクリーンショット 2020-01-09 20.00.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/1a6bc184-bc83-5eab-09c4-0510ace6c5e7.png)

####双方向RNN
過去の情報だけでなく、未来の情報を加味することで、精度を向上させるためのモデル
$実用例 \cdots$文章の推敲や、機械翻訳等
![スクリーンショット 2020-01-13 13.47.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/f5575600-3540-3749-00e4-cdf9546e96c1.png)

#RNNでの自然言語処理
$Seq2seq \cdots$Encoder-Decoderモデルの一種を指します。
$Seq2seqの具体的な用途 \cdots$機械対話や、機械翻訳などに使用されている。
$Seq2seqの課題　\cdots$一問一答しかできない。問に対して文脈も何もなく、ただ応答が行われる続ける。

$Encoder RNN　\cdots$ユーザーがインプットしたテキストデータを、 単語等のトークンに区切って渡す構造。
![スクリーンショット 2020-01-13 14.33.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/febee655-91a9-5efc-2cca-131f276a2ba8.png)

$Decoder RNN　\cdots$システムがアウトプットデータを、 単語等のトークンごとに生成する構造。
![スクリーンショット 2020-01-13 14.35.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/a16645c1-da9d-0f17-b071-8f38c505f23e.png)

###HREDでRNNの課題（１問１答以上へ）
$HRED　\cdots$過去 n-1 個の発話から次の発話を生成する。Seq2seqでは、会話の文脈無視で、 応答がなされたが、HREDでは、 前の単語の流れに即して応答されるため、 より人間らしい文章が生成される。単語の意味＋文脈を変換して過去の発話の履歴を加味した返答をできる様にする。
**しかし、同じコンテキスト(発話リスト)を与えられても、答えの内容が毎回会話の流れとしては同じものしか出せない。**
**しかも、HRED は短く情報量に乏しい答え（はい。いいえ。うん。など）をしがち**

###VHRED
 HREDの課題(同じ答え。繰り返す課題)をVAE(意味の確率変数を導入し、同じ意味を持つ単語を選抜できるため)を利用し、解決へ

###VAE
$VAE　\cdots$文脈に則している、様々な単語を利用している。
![スクリーンショット 2020-01-13 14.47.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/e71f94ce-2d1e-ca9e-2006-55b5d1f60908.png)

###word2vec
ボキャブラリ数×単語ベクトルの次元数の重み行列に変換できる。つまり、意味を持った状態で、少ないメモリ量でも計算できる様にした。
大規模データの分散表現の学習が、 現実的な計算速度とメモリ量で実現可能にした。

#確認テスト
**サイズ５×５の入力画像を、サイズ３×３のフィルタで畳み込んだ時の出力画像のサイズを答えよ。尚ストライドは２、パディングは１とする。**
(答え)３×３

```math
（公式）\\
\begin{align}
アウトプットハイト(OH)&＝\frac{ハイト(H)＋２×パディング(P)-フィルターハイト(FH)}{スライド(S)}+1\\
アウトプットワイド(OW)&＝\frac{ワイド(W)＋２×パディング(P)-フィルターワイド(FW)}{スライド(S)}+1\\
H=W=&５\\
P=&1\\
S=&２\\
FH=FW=&３\\
\end{align}
```

**RNNのネットワークには大きくわけて3つの重みがある。1つは入力から現在の中間層を定義する際にかけられる重み、1つは中間層から出力を定義する際にかけられる重みである。残り1つの重みについて説明せよ。**
(答え)中間層から中間層への重み

**連鎖律の原理を使い、dz/dxを求めよ。**

```math
z=t^2\\
t=x+y\\
```
（答え）

```math 
\begin{align}
\frac{dz}{dt}&=\frac{dz}{dt}\times\frac{dt}{dx}　　　　　　\\
&=2t\times1\\
&=2(x+y)
\end{align}
```

**下図のy1をx・s0・s1・win・w・woutを用いて数式で表せ。 ※バイアスは任意の文字で定義せよ。 ※また中間層の出力にシグモイド関数g(x)を作用させよ。**
![スクリーンショット 2020-01-08 21.21.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/479ab3c0-7d78-918f-1db1-a804e2191e02.png)
（答え）

```math 
\begin{align}
y_1&=sigmoid(Z_1\times W_{(out)}+b_1)\\
S_1&=sigmoid(S_0\times W+x_1\times W_{(in)}+b_0)\\
\end{align}
```

**下記の選択肢から、seq2seqについて説明しているものを選べ。**
**(1)時刻に関して順方向と逆方向のRNNを構成し、それら2つの中間層表現を特徴量として利用 するものである。**
**(2)RNNを用いたEncoder-Decoderモデルの一種であり、機械翻訳などのモデルに使われる。**
**(3)構文木などの木構造に対して、隣接単語から表現ベクトル(フレーズ)を作るという演算を再 帰的に行い(重みは共通)、文全体の表現ベクトルを得るニューラルネットワークである。**
**(4)RNNの一種であり、単純なRNNにおいて問題となる勾配消失問題をCECとゲートの概念を 導入することで解決したものである。**
（答え）(2)

**seq2seqとHRED、HREDとVHREDの違いを簡潔に述べよ。**
seq2seqは、単語の意味だけを捉えていたので、１問１答しかできなかったが、
HREDは、前の単語の流れまで意味をもつものの、毎回全く同じ回答しかできなかったが、
VHREDは、HREDにさらにVAE（文脈の潜在的概念）を導入し、毎回回答が変化する様になったもの。

 **VAEに関する下記の説明文中の空欄に当てはまる言葉を答えよ。**
自己符号化器の潜在変数に____を導入したもの。
（答え）確率分布

**RNNとword2vec、seq2seqとAttentionの違いを簡潔に述べよ。**
$RNNとword2vec \cdots$ word2vecがRNNと比較して、単語の量が多くなればなるほど、大規模なメモリ量の削減、計算量の削減を達成した。
$seq2seqとAttention \cdots$ Attentionでは、関連度の高い単語に集中しているので、seq2seqでは、長い文章への対応が難しかったが、Attentionでは解決できる。

#演習チャレンジ
**以下は再帰型ニューラルネットワークにおいて構文木を入力として再帰的に文全体の表現ベクトルを得るプログラム である。ただし、ニューラルネットワークの重みパラメータはグローバル変数として定義してあるものとし、_activation関数はなんらかの活性化関数であるとする。木構造は再帰的な辞書で定義してあり、rootが最も外側の辞書であると 仮定する。
(く)にあてはまるのはどれか。**
![スクリーンショット 2020-01-09 10.12.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/1141b2c5-97cb-ffea-cbb5-2c724600ff92.png)
（答え）（２）配列の足し算なので、concatenate

**以下は双方向RNNの順伝播を行うプログラムである。順方向については、入力から中間層への重みW_f, 一ステッ プ前の中間層出力から中間層への重みをU_f、逆方向に関しては同様にパラメータW_b, U_bを持ち、両者の中 間層表現を合わせた特徴から出力層への重みはVである。_rnn関数はRNNの順伝播を表し中間層の系列を返 す関数であるとする。(か)にあてはまるのはどれか**
![スクリーンショット 2020-01-13 13.45.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/45f95d73-c3b5-0200-aa39-f857b5716940.png)
（答え）４　順方向と逆方向の配列を合わせる。

**機械翻訳タスクにおいて、入力は複数の単語から成る文(文章)であり、それぞれの単語はone-hotベクトルで表 現されている。Encoderにおいて、それらの単語は単語埋め込みにより特徴量に変換され、そこからRNNによって (一般にはLSTMを使うことが多い)時系列の情報をもつ特徴へとエンコードされる。以下は、入力である文(文 章)を時系列の情報をもつ特徴量へとエンコードする関数である。ただし_activation関数はなんらかの活性化関 数を表すとする。
(き)にあてはまるのはどれか。**
![スクリーンショット 2020-01-13 14.05.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/1f2c6685-a679-83c8-91da-172e8497180f.png)
（答え）１

**VGG、 GoogLeNet、ResNetの特徴をそれぞれ簡潔にのべよ。**
（答え）
$VGG\cdots$Conv-Conv-Poolingという単純なネットワークの積み重ねによってできている。パラメータはGoogLeNetやResNetと比べて多くなっている。
$GoogLeNe\cdots$inception moduleを使っているのが特徴。1×1の畳み込みを使った次元削減や様々なフィルターサイズを使うことによるスパースなものが特徴。
$ResNet\cdots$スキップコネクションアイデンティティモジュールを使うことにより残差接続をおこなう。より深い学習が行える。

#Jupyter演習
**シンプルRNN**
https://drive.google.com/open?id=1j60QPTalVTHeL2qTZprktWcUUXFX8MEl
https://drive.google.com/open?id=19-NpTLUf6XzTr6z_zdCMVOYNnCyi6SAn

**Predict SIN**
https://drive.google.com/open?id=1Orq_kV5C6e_SPNn5ZXjNd5BXjMbhNFsJ


#TensorFlow
#強化学習
###強化学習とは
長期的に報酬を最大化できるように環境のなかで行動を選択 できるエージェントを作ることを目標とする機械学習の一分野
###強化学習の応用例
メーケティングの例：キャンペーンの￥メールを送る顧客を決めるソフトウェア
ゲーム：将棋
###探索と利用のトレードオフ

* 環境について事前に完璧な知識があれば、 最適な行動を予測し決定することは可能。

$\cdots$強化学習の場合、最適な行動の予測は出来ないとする。 不完全な知識を元に行動しながら、データを収集。 最適な行動を見つけていく。

つまり、以下の(a)と(b)はトレードオフの関係
* (a)過去のデータで、ベストとされる行動のみを常に取り続ければ他にもっとベストな行動を見つけることはできない。

* (b)未知の行動のみを常に取り続ければ、過去の経験が活かせない。

###強化学習のイメージ
![スクリーンショット 2020-01-09 20.45.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/534bce55-0378-a14a-4a97-7fbabf0b8b19.png)

###強化学習の差分
 **強化学習と通常の教師あり、教師なし学習との違い**
* 教師なし、あり学習では、データに含まれるパターンを見つけ出す およびそのデータから予測することが目標 
* 強化学習では、優れた方策を見つけることが目標
###行動価値関数
$\cdots$価値を表す関数としては、**状態価値関数**と**行動価値関数**の2種類がある
**状態価値関数**：ある状態の価値に注目する場合
**行動価値関数**：状態と価値を組み合わせた価値に注目する場合
###方策関数
方策ベースの強化学習手法において、ある状態でどのような行動を採るのかの確率を与える関数のことです。
###方策勾配
方策を最適化する手法
JC(方策の良さ) を定義する必要がある。
![スクリーンショット 2020-01-19 17.03.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/d3798eb3-a8b9-f090-f9fe-eb93b3697f0f.png)
* 平均報酬
* 割引報酬（未来の報酬は割り引いて計算する）
###方策勾配定理
* 状態価値関数
* ベルマン方程式

#確認テスト
 **強化学習に応用できそうな事例を考え環境・エージェント・行動・報酬を具体的に挙げよ。**
(答え)
バーチャル空間上でのゲーム（例）グランツーリスモ
$環境\cdots$グランツーリスモなどのゲーム
$エージェント\cdots$コース上の位置、速度、横g
$行動\cdots$ハンドル、アクセル、ブレーキ
$報酬\cdots$より短時間で、より脱出速度が早い

#例題開設
![スクリーンショット 2020-01-19 16.56.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182169/94a84ee4-2286-a24f-4301-9c5d978e5b2d.png)
（答え）a 方策勾配定理により。

#Jupyter演習
**Tensorflow**
https://drive.google.com/open?id=1fR6mmFm2RrZHM-gfHr8NdlAtKPWPYau8