現場で潰しが効くディープラーニング講座


![output_0_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/ae6a56e4-7d6c-162a-1ddd-880c17d2c5c9.png)

# Day2
# ■ 深層モデルのための学習テクニック 
 **Section1)  勾配消失問題について 全体像**
 1-1 活性化関数
　　・ReLU関数 
　　・シグモイド（ロジスティック）関数
　　・双曲線正接関
 1-2 初期値の設定方法
　　　・Xavier－－重みの要素を前の層のノード数の平方根で除算した値
　　　　　⇒対象活性化関数：ReLU、シグモイド、双曲線正接関数

```
　　# Xavierの初期値
    network['W1'] = np.random.randn(input_layer_size, hidden_layer_1_size) / (np.sqrt(input_layer_size))
    network['W2'] = np.random.randn(hidden_layer_1_size, hidden_layer_2_size) / (np.sqrt(hidden_layer_1_size))
    network['W3'] = np.random.randn(hidden_layer_2_size, output_layer_size) / (np.sqrt(hidden_layer_2_size))
```

　　　・He－－重みの要素を前の層のノード数の平方根で除算した値に対し$
     \sqrt{2}
$をかけ合わせた値
　　　　　⇒対象活性化関数：ReLU

```
    # Heの初期値
    network['W1'] = np.random.randn(input_layer_size, hidden_layer_1_size) / np.sqrt(input_layer_size) * np.sqrt(2)
    network['W2'] = np.random.randn(hidden_layer_1_size, hidden_layer_2_size) / np.sqrt(hidden_layer_1_size) * np.sqrt(2)
    network['W3'] = np.random.randn(hidden_layer_2_size, output_layer_size) / np.sqrt(hidden_layer_2_size) * np.sqrt(2)
```  

 1-3 バッチ正規化 
　　　バッチ正規化は、ミニバッチ単位で、入力値のデータの偏りを抑制する手法である。
　　　バッチ正規化をするタイミング所、活性化関数に値を渡す前後に、バッチ正規化を加える。   
 
**Section2) 学習率最適化手法について**     
　　学習率の値が大きい場合、最適値にいつまでもたどり着かず発散してしまう。
　　学習率の値が小さい場合、発散することはないが、小さすぎると収束するまでに時間がかかっ てしまう。また、大域局所最適値に収束しづらくなる。
  　　◆学習率最適化方法：
　　 　・初期の学習率を大きく設定し、徐々に学習率を小さくしてい く
　 　　・パラメータ毎に学習率を可変させる       
　2-1 モメンタム
      誤差をパラメータで微分したものと学習率の積を減算した後（勾配降下法）、現在 の重みに前回の重みを減算した値と慣性の積を加算する。   
     　◆モメンタムのメリット
　　　・局所的最適解にはならず、大域的最適解となる。
　　　・谷間についてから最も低い位置(最適値)にいくまでの時間が早い。    
　2-2 AdaGrad
　　　誤差をパラメータで微分したものと再定義した学習率の積を減算する。　
　◆AdaGradのメリット
　  ・勾配の緩やかな斜面に対して、最適値に近づける。
　◆課題
　　・学習率が徐々に小さくなるので、鞍点問題を引き起こす事があった。

　2-3  RMSProp
　　　誤差をパラメータで微分したものと再定義した学習率の積を減算する。
　◆RMSPropのメリット
　　・局所的最適解にはならず、大域的最適解となる。
　　・ハイパーパラメータの調整が必要な場合が少ない。   
　2-4 Adam
　　　モメンタム（過去の勾配の指数関数的減衰平均）とRMSProp（過去の勾配の2乗の指数関数的減衰平均）を取り入れた最適化方法
　◆Adamのメリット
　　・モメンタムおよびRMSPropのメリットを孕んだ最適化アルゴリズムである
     
**Section3) 過学習について**
　　テスト誤差と訓練誤差とで学習曲線が乖離すること
　　　⇒下記の原因でネットワークの自由度(層数、ノード 数、パラメータの値など…)が高い、特定の訓練サンプルに対して、特化して学習してしまった。
　　　 • パラメータの数が多い
　　　 • パラメータの値が適切でない
　　　 • ノードが多いなど…

　3-1  L1正則化、 L2正則化
　　　　⇒Lasso、Ridge正則化

　3-2 ドロップア
　　　ランダムにノードを削除して学習させること
　　　◆メリットとして
　　　　・データ量を変化させずに、異なるモデルを学習させていると解釈できる。

# ■ 畳み込みニューラルネットワークについて   
**Section4) 畳み込みニューラルネットワークの概念 全体像（CNNの構造図）** 
　　4-1 畳み込み層
　　　フィルターごとに畳み込み演算された結果が出力される。
　　　　　◆メリットとして
　　　　　　・空間的な情報を維持することで全結合層の欠点を克服できる。
  　　※特徴マップのサイズ
　　　　　入力画像の高さ：Ih、幅Iw
　　　　　フィルタサイズの高さ：Fh、幅Fw
　　　　　パディング：P 、ストライド：S　とすると
　　　　　サイズの高さOh、幅Ow：
　　　　　　　Oh = (Ih + 2P - Fh) /S + 1
　　　　　　　Ow = (Iw + 2P - Fw) /S + 1
 
　4-2 プーリング層
  　　畳み込み層の後に適用される。入力データをより扱いやすい形に変形する。情報を圧縮し、down samplingする。
　　　　　◆メリットとして
　　　　　　・微小な位置変化に対して頑健となる
　　　　　　・ある程度過学習を抑制する
　　　　　　・計算コストを下げる

  4-3 その他の利用される層
  　　・全結合ネットワーク層
　　・Dropout層
　　・BatchNormalization層など

**Section5) 最新のCNN**
 5-1  AlexNet
　　　・モデルの構造
　　　　　⇒5層の畳み込み層およびプーリング層な ど、それに続く3層の全結合層から構成される
　　　・過学習を防ぐ施策
　　　　　⇒サイズ4096の全結合層の出力にドロップアウトを使用している。

# ◆Day2考察

【P20】連鎖律の原理を使い、dz/dxを求めよ 
　z = t2
　t = x + y
 
　**●考察：**  　　　
$
 \frac{dz}{dx}=\frac{dz}{dt}\frac{dt}{dx}　
$
$
　⇒　 \frac{dz}{dt} = 2t, \frac{dt}{dx} = 1　,t=x+y
$
上記式を代入結果：  　　　　　
$
 \frac{dz}{dx} = 2(x+y)
$  
  
【P12】シグモイド関数を微分した時、入力値が0の時に最大値をとる。その値 として正しいものを選択肢から選べ。
 （1）0.15 
 （2）0.25
 （3）0.35
 （4）0.4

　**●考察：** 　　　　　
$
 sigmoid'(x) = sigmoid(x)(1-sigmoid(x))
$　 　　　　
$
 sigmoid(0) = 0.5
$

上記式を代入結果：  　　
$
 sigmoid'(0) = 0.5*(1-0.5) = 0.25
$ 
よって、正解は、(2)
  
【P28】重みの初期値に0を設定すると、どのような問題が 発生するか。簡潔に説明せよ。

　**●考察：**
 　　重みの初期値に0を設定すると、重みと入力値と掛けわせると0になってしまい、すべての値が同値で下層に伝わるため、重みの値をチューニングできなくなる。


【P31】一般的に考えられるバッチ正規化の効果を2点挙げよ。  
　**●考察：**
  　　学習プロセスを全体的に安定化させる。
　　学習速度を高める。

【P47】モメンタム・AdaGrad・RMSPropの特徴を それぞれ簡潔に説明せよ。 <br>
　**●考察：** 
  　・モメンタムの特徴 　　
      　慣性を考慮して前回の更新量にα倍を加算することでパラメータの更新を行う。（実質は、学習率の自動調整）
  　・AdaGradの特徴 
　　　　過去の勾配情報を全て均等に考慮して学習率を自動調整する、学習を重ねていくごとに計算される学習率ηは小さくなっていく。
  　・RMSPropの特徴　
　　　　過去の勾配の2乗の指数移動平均を取るようにして、学習を重ねていくごとに計算される学習率ηは小さくなっていく。<br>      
      
【P68】下図について、L1正則化を表しているグラフは どちらか答えよ。   
　**●考察：**    
![output_5_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/b5becc19-8ef9-fc4c-7486-5aa937fa185c.png)
　　　
  
【P100】サイズ6×6の入力画像を、サイズ2×2のフィルタで 畳み込んだ時の出力画像のサイズを答えよ。 なおストライドとパディングは1とする。  
　**●考察：** 
　　　答え： 高さ：(6＋2*0 - 2)/2 + 1 = 3 
   　　　　　　幅：(6＋2*0 - 2)/2 + 1 = 3    

# ソースコードの演習_勾配消失問題の解決実装 
　勾配消失＜sigmoid guass＞の部分を削除、代わりにパラメータを変更したReLUーHeを入れています
![output_8_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/d6b7e030-93aa-ff7b-665a-32df15dd8ab5.png)



# ソースコードの演習_プログラムの実装 学習率最 適化手

![output_10_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/18b9adb9-b6a9-344c-0bfa-2d1d008ce45f.png)


# ソースコードの演習_プログラムの実装  過学習解決手法


![output_12_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/659797a8-b608-fc0d-65dc-a74a69f79714.png)


# ソースコードの演習_プログラムの実装 畳み込み

![output_14_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/7a3c37fa-b052-f30a-91f8-27b5da39bbf3.png)




# ソースコードの演習_プログラムの実装 プーリン グ層


![output_16_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/ae0c50d7-21f9-4804-751f-d4859a6437ff.png)



# ソースコードの演習_プログラムの実装 CNN全体
![output_18_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/91cb87db-024b-637e-c57e-ce0398be1e0e.png)




=================================================================================================================
# Day3
# 　　■ 深層学習全体像の復習 最新のCNN 
*　 • AlexNet*
　　AlexNetとは2012年に開かれた画像認識コンペティション2位に大 差をつけて優勝したモデルである。 AlexNetの登場で、ディープラーニングが大きく注目を集めた
#  ■ 再帰型ニューラルネットワークについて  
**Section1) 再帰型ニューラルネットワークの概念**
 　・ RNN全体像
　　　一定間隔ごとに観察され、相互に統計的依存関係が認められるようなデータに対応可能な、ニューラルネットワークである<br>
　　　　例え：音声データ、テキストデータ、など  
　・ RNNについて
　　　RNNは、隠れ層で初期の状態と過去の時間t-1の状態を保持し、そこから次の時間でのtを再帰的に求める再帰構造になっている。
　・RNN数学的記述  

```math
u^t = W_{ (in) }x^t + Wz^{ t-1 } + b \\
z^t = f(W_{ (in) }x^t + Wz^{ t-1 } + b)\\
v^t = W_{ out } z^t + c\\
y^t = g(W_{ out }z^t + c)\\
```

 1-2 BPTT
  ・RNNにおいてのパラメータ調整方法の一種　　
　　　　　　 ⇒誤差逆伝播の一種<br>

**Section2) LSTM 全体像（前回の流れと課題全体像のビジョン）**
2-1 CEC
　　CECの保存されている情報を、任意のタイミングで他のノードに伝播させたり、 あるいは任意のタイミングで忘却させたい。　⇒勾配消失および勾配爆発を解決する方法。
2-2 入力ゲートと出力ゲート
　　入力・出力ゲートを追加することで、 それぞれのゲートへの入力値の重みを、 重み行列W,Uで可変可能とする。
2-3 忘却ゲート
　　過去の情報が要らなくなった場合、削除する。
2-4 覗き穴結合
　　CECの保存されている情報を、任意のタイミングで他のノードに伝播させたり、 あるいは任意のタイミングで忘却させたい。　　
  　　　⇒CEC情報にマスクを掛ける。  

**Section3) GRU**
　　従来のLSTMでは、パラメータが多数存在していたため、計算 負荷が大きかった。しかし、GRUでは、そのパラメータを大幅に削減 し、精度は同等またはそれ以上が望める様になった構造。    


**Section4) 双方向RNN** 
　　過去の情報だけでなく、未来の情報を加味することで、 精度を向上させるためのモデル  

![bidirecory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/8b6e0819-d78d-74af-5caf-fb404078bc71.png)




#  ■ RNNでの自然言語処理

 
**Section5) Seq2Seq 全体像** 
　　Seq2seqは、Encoder-Decoderモデルの一種を指す。機械対話や、機械翻訳などに使用されている。 
5-1 Encoder RNN
　　ユーザーがインプットしたテキストデータを、 単語等のトークンに区切って渡す構造。
5-2 Decoder RNN
　　システムがアウトプットデータを、 単語等のトークンごとに生成する構造。
5-3 HRED
　　過去の発話の履歴を加味した返答をできる。
5-4 VHRED
　　HREDに、VAEの潜在変数の概念を追加したもの。
5-5 VAE
　　VAEは、データを潜在変数zの確率分布という構造に押し込め ることを可能にした。
5-5-1 オートエンコーダ―
　　教師なし学習の一つ。 そのため学習時の入力データは訓練データのみで教師データは利用しない。
　　　※入力データから潜在変数zに変換するニューラルネットワークをEncoder 逆に潜在変数zをインプットとして元画像を復元するニューラルネットワーク をDecodeする。
5-5-2 VAE
　　VAEは、データを潜在変数zの確率分布という構造に押し込め ることを可能にします。  

**Section6) Word2vec**
　　学習データからボキャブラリを作成、大規模データの分散表現の学習が、 現実的な計算速度とメモリ量で実現可能にした。  
  

**Section7) AttentionMechanism** 
　　入力と出力のどの単語が関連しているのか」 の関連度を学習する仕組み。  


# ◆Day3考察

【P11】サイズ5×5の入力画像を、サイズ3×3のフィルタで 畳み込んだ時の出力画像のサイズを答えよ。 なおストライドは2、パディングは1とする。<br>  
　**●考察：**
　　　答え： 高さ：(5＋2*1 - 3)/2 + 1 = 3 
   　　　　　　幅：(5＋2*1 - 3)/2 + 1 = 3 <br>
  
【P23】RNNのネットワークには大きくわけて3つの重みが ある。1つは入力から現在の中間層を定義する際に かけられる重み、1つは中間層から出力を定義する際に かけられる重みである。 残り1つの重みについて説明せよ。 
 
　**●考察：**
　　答え： 隠れ層で（t-1）時刻状態→現時刻（ｔ）時刻状態を再帰的に求めるため使う重み
  
【P35】連鎖律の原理を使い、dz/dxを求めよ
　z = t2
　t = x + y
 
　**●考察：**
$
 \frac{dz}{dx}=\frac{dz}{dt}\frac{dt}{dx}　
$
$
　⇒　 \frac{dz}{dt} = 2t, \frac{dt}{dx} = 1　,t=x+y
$
上記式を代入結果：
$
 \frac{dz}{dx} = 2(x+y)
$ 



【P44】下図のy1をx・s0・s1・win・w・woutを用いて数式で表せ。
※バイアスは任意の文字で定義せよ。
※また中間層の出力にシグモイド関数g(x)を作用させよ。 

![ddd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/f7b5db3c-f7b9-b76a-b4eb-62338baafc38.png)


　**●考察：**   

```math
z_{ 1 } ＝ sigmoid(W_{ (in) }x_{ 1 } + Ws_{ 0 } + b ) \\
y_{ 1 } ＝ sigmoid(W_{ (out) }z_{ 1 } + c ) \\ 
```
  
【P61】シグモイド関数を微分した時、入力値が0の時に最大値をとる。その値 として正しいものを選択肢から選べ。
 （1）0.15 
 （2）0.25
 （3）0.35 
 （4）0.4  
　**●考察：** 　　
$
 sigmoid'(x) = sigmoid(x)(1-sigmoid(x))
$　 　　　　
$
 sigmoid(0) = 0.5
$
上記式を代入結果：　　　　
$
 sigmoid'(0) = 0.5*(1-0.5) = 0.25
$  
よって、正解は、(2)


【P71】以下の文章をLSTMに入力し空欄に当てはまる単語を予測したいとする。 文中の「とても」という言葉は空欄の予測において なくなっても影響を及ぼさないと考えられる。 このような場合、どのゲートが作用すると考えられるか。<br>
「映画おもしろかったね。ところで、とてもお腹が空いたから何か____。」。

　**●考察：** 
  　忘却ゲートは、過去の情報が要らなくなった場合、そのタイミングで情報を忘却する機能がある。
　　　⇒したがって、答えは、忘却ゲートです。



【P87】LSTMとCECが抱える課題について、それぞれ簡潔に述べよ。　　 

　**●考察：** 
  　・LSTMの課題
　    　LSTMでは、パラメータ数が多く、計算負荷が高くなる問題があった。 
　 　※解決策
　　   　GRUは、従来のLSTMのパラメータを大幅に削減し、精度は同等またはそれ以上が望める様になった構造でこれを利用して計算負荷が低下させる。      　
  　　・CECの課題 
   　　　入力データについて、 時間依存度に関係なく重みが一律である。　
　　　　　　⇒ニューラルネットワークの学習特性が無いということ
　　　※解決策
　　　　覗き穴結合は、CEC自身の値に、重み行列を介して伝播可能にした構造で、これを利用して過去の情報が要らなくなった場合、そのタイミングで情報を忘却させる。）   
 
【P91】LSTMとGRUの違いを簡潔に述べよ。
  
　**●考察：**
　　・GRUでは、忘却ゲートと入力ゲートが明確に分けていない。
　　・GRUは、パラメータがすくない。

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

      
【P118】seq2seqとHRED、HREDとVHREDの違いを簡潔に述べよ。   
　**●考察：** 
　　・seq2seqとHREDの違いは、Seq2seqでは、問に対して文脈も何もなく、ただ応答が行われる 続ける、HREDでは、 前の単語の流れに即して応答される。 
　　・HREDとVHREDの違いは、HREDが、同じ入力に対する出力は同じになるが、VHREDでは、Context層に確率的なノイズである潜在変数を加えることによって、同じ入力に対して多様な出力が可能。  


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

　**●考察：**
　　答え：確率分布    

【P136】RNNとword2vec、seq2seqとAttentionの違いを簡潔に述べよ。

　**●考察：** 
　　・RNNとword2vecの違いは、RNNでは、単語のような可変長の文字列をNNに与えることはできない、word2vecでは、 固定長形式で単語を表す可能。 
　　・seq2seqとAttentionの違いは、seq2seqは、長い文章への対応が難しい。 Attentionは、入力と出力のどの単語が関連しているのか」 の関連度を学習できるため、 長い文章への対応が簡単になる。 
  
  
  

# 演習_プログラムの実装（RNN）



![output_24_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/de87a1d9-bca0-b2cd-aa41-5a4e607b717d.png)




=================================================================================================================
# Day4

  **Section1) TensorFlowの実装演習** 

  **Section2) 強化学習**
**2-1 強化学習とは**
　　長期的に報酬を最大化できるように環境のなかで行動を選択 できるエージェントを作ることを目標とする機械学習の一分野
　　　　⇒行動の結果として与えられる利益(報酬)をもとに、 行動を決定する原理を改善していく仕組みです。
**2-2 強化学習の応用例** 
　　環境:会社の販売促進部  
　　エージェント:プロフィールと購入履歴に基づいて、キャンペーンメールを送る顧客を決めるソフトウェアである。  
　　行動:顧客ごとに送信、非送信のふたつの行動を選ぶことになる。  
　　報酬:キャンペーンのコストという負の報酬とキャンペーンで生み出されると推測される売上という正の報酬を受ける。

**2-3 探索と利用のトレードオフ** 
　　環境について事前に完璧な知識があれば、 最適な行動を予測し決定することは可能。強化学習の場合、不完全な知識を元に行動しながら、データを収集。 最適な行動を見つけていく。  
　　　・過去のデータで、ベストとされる行動のみを常に取り続ければ 他にもっとベストな行動を見つけることはできない。
　　　・未知の行動のみを常に取り続ければ、過去の経験が活かせない。
　　このように、探索が足りない状態と利用が足りない状態の上記トレードオフ２状態になる。  
**2-4 強化学習のイメージ** 

![reforceNN.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/69d1b3a1-b5b5-1ee7-f6f1-5b9830418e79.png)


**2-5 強化学習の差分** 
　　強化学習と通常の教師あり、教師なし学習との違い。
　　結論:目標が違う
　　　・教師なし、あり学習では、データに含まれるパターンを見つけ出す、およびそのデータから予測することが目標
　　　・強化学習では、優れた方策を見つけることが目標  
**2-6 行動価値関数**
　　行動価値関数とは、価値を表す関数としては、状態価値関数と行動価値関数の2種類がある。
　　ある状態の価値に注目する場合は、状態価値関数 状態と価値を組み合わせた価値に注目する場合は、行動価値関数。

**2-7 方策関数**
　　方策関数とは 方策ベースの強化学習手法において、 ある状態でどのような行動を採るのかの確率を与える関数のことです  
**2-8 方策勾配法**
　　方策反復法 方策をモデル化して最適化する手法  　　

```math
\theta^{ t+1 } = \theta^{ t } + \epsilon \nabla J(\theta) \\
```

$ 　　　　※定義した方策の良さJ(\theta)で評価していく  $  

◆方策勾配法についての定義方法
　　　　・平均報酬
　　　　・割引報酬和　　


# 演習(1)
![output_28_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/72b6af48-dc1d-a68b-12a8-df6aa5e4f9ab.png)




# 演習＿（２）



![output_30_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551625/74688b3e-ab2e-12e6-bcd0-060fc3ed9741.png)





```python

```