【ラビットチャレンジ】深層学習(Day3:RNN)-2

E資格取得のためラビットチャレンジに挑戦しています。

[![](http://ai999.careers/bnr_jdla.png)](http://study-ai.com/jdla/)



#Section3:GRU

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187649/db6af253-d804-b3e8-a8bb-b2d3bfb1ef3a.png)


###ポイント
+ Gated recurrent unit
+ LSTMの弱点だった、パラメータ数を大幅に削減し、精度は同等またはそれ以上が望めるようになった構造
+ 計算負荷が低い

#####確認テスト
+ LSTMとCECが抱える課題について、それぞれ簡潔に述べよ

=> LSTM: パラメータが多く計算コストが高い
CEC:入力データについて、時間依存度に関係なく重みが一律であるためニューラルネットワークの学習特性がなくなってしまうため学習が行えない。

#####演習チャレンジ

<img width="1023" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/f00e09fd-2d29-e58d-1754-3e645e795283.png">



=>(4)

#####確認テスト
+ LSTMとGRUの違いを簡潔に述べよ
=>LSTMはパラメータ数が多いがGRUはパラメータの数が少なく計算コストも低い


####考察
パラメータの数によって計算コストに差が出る。
LSTMがGRUより優れている点をあとで調べる。

####参考
https://qiita.com/KojiOhki/items/89cd7b69a8a6239d67ca


#Section4:双方向RNN

###ポイント
+ 過去の情報だけでなく、未来の情報を加味することで、精度を向上させるためのモデル
+ 文章の推敲や、機械翻訳に使われる。

<img width="514" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/ed9b747a-ccd5-7a21-8b20-5b283bfa1571.png">


#####演習チャレンジ

<img width="957" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/0546807f-6960-a8cd-a32a-3c5351f0ddf2.png">

=>(1)×
=>(4)

#Section4:Seq2Seq

<img width="952" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/1384dfbb-7f68-6f01-6588-cbe710db8c77.png">


###ポイント
+ Encoder-Decoderモデル
+ 機械対話や、機械翻訳に使用されている
+ 一問一答しかできない

##5-1 Endoder RNN
<img width="292" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/55b52a93-9931-4875-1cf4-d89b4362f9c3.png">

###ポイント
+ ユーザがインプットしたテキストデータを単語等のトークンに区切って渡す構造
+ Taking:文章を単語等のトークン毎に分割し、トークン毎のIDに分割する
+ Embedding:IDから、そのトークンを表す分散表現ベクトル(言語を数値化)に変換
+ Encoder RNN: ベクトルを順番にRNNに入力していく
+ vec1をRNNに入力し、hidden stateを出力
+ hidden stateとvec2をRNNしhidden state出力を繰り返す
+ 最後のVecを入力したときのhidden stateをfinal stateとする。
+ final stateがthought vectorと呼ばれ、入力した文の意味を表すベクトルとなる。


##5-2 Decoder RNN

<img width="263" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/28fcb52b-b72e-edcd-09a0-ea0c78c97b0f.png">

###ポイント
+ システムがアウトプットデータを。単語等のトークン毎に生成する構造
+ Encoder RNNのfinal state(thought vector)から、各tokenの生成確率を出力いく
+ final stateをDecoderのinitial stateととして、Embeddingを入力
+ sampling: 生成確率に基づいてtokenをランダムに選ぶ
+ Embedding:選ばれたtokenをembeddingして次の入力とする
+ Detokenize:上記を繰り返しtokenを文字列に直す


#####確認テスト

<img width="839" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/63b0c781-a99c-d75f-688c-0d91716678da.png">

=>(2)

#####演習チャレンジ
<img width="985" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/815b55f9-8426-bd21-7b2c-3b54c43b6f08.png">

=>(1)

##5-3 HRED

###ポイント
+ Seq2seqの一問一答しかできない課題を解決
+ 過去n-1個の発話から次の発話を生成する
+ seq2seq + Context RNN
+ Context RNN
    + Encoderのまとめた各文章の系列をまとめて、これまでの会話コンテキスト全体を表すベクトルに変換する構造
    + 文脈もベクトル化
        + 過去の発話の履歴を加味した返答ができる
+ HREDは短く情報量に乏しい答えをしがち
  

##5-4 VHRED
###ポイント
+ HREDに、VAE(Variational Autoencoder)の潜在変数の概念を追加したもの
+ HREDno課題をVAEの潜在変数の概念を追加することによって解決した構造


#####確認テスト
+ seq2seqとHRED、HREDとVHREDの違いを簡潔に述べよ
=> seq2seqは一問一答しかできないがHREDは過去の発話の履歴を加味した返答ができる
HREDは短く情報量に乏しい答えをしがちだがVHREDはVAEの潜在変数を追加することによって改善している。

##5-5 VAE
###5-5-1 オートエンコーダ
###ポイント
+ 教師なし学習
+ 教師データは利用しない
+ 入力データから潜在変数zに変換するニューラルネットワークをEncoder、逆に潜在変数zをインプットとして元画像を復元するニューラルネットワークをdecoderとする。
+ 次元削減可能
    + zの次元が入力データより小さい場合、次元削減とみなすことができる
+ zの構造状態が不明


<img width="176" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/e92d60c4-38b7-8c95-861a-901be4a94269.png">

###5-5-2 VAE
+ zに確率分布z~N(0,1)を仮定してもの
+ データのを潜在変数zの確率分布という構造に押し込められることを可能にする

<img width="675" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/15c7f98f-dbd2-8952-5c5b-3efd3647be4b.png">

#####確認テスト
<img width="775" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/5cb85628-2c48-e40a-8bab-8bf93ffb2ef6.png">

=>確率分布

#Section6: Word2vec
<img width="654" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/21432f95-c08d-d4bc-82d8-69e081768e69.png">

###ポイント
+ RNNでは、単語のような可変長文字列をNNに与えることはできない課題を解決
    + 固定長形式で単語を表す必要があるったものを可変長も扱え得るようにした
+ 学習データからボキャブラリーを作成する 
+ one-hotベクトル
    + あるカラムだけ1で他のカラムは0な行列の表現
+ 大規模データの分散表現学習が可能
+ ボキャブラリ数×任意単語ベクトルの次元数の重みの行列
+ 長い文章に対しての対応が難しい(固定次元ベクトル)

#Section7: Attention Mechanism
###ポイント
+ 文章が長くなるほどそのシーケンスの内部表現の次元も大きくなっていく仕組み
+ 入力と出力のどの単語が関連しているのかの関連度を学習する

<img width="658" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641827/7977028d-7c75-88e4-6cd8-aa0a005942c3.png">


#####確認テスト
+ RNNとword2vec,seq2seqとseq2seq+Attentionの違いを簡潔に述べよ
=> RNNが固定長形式、Word2vecは可変長形式。
=>seq2seqは長い文章に対しての対応は難しいが、Attentionは関連度を学習することによって長い文章にも対応できるような仕組みになっている

#####演習チャレンジ
=>(2)w.dot(np.concatenate([left,right]))