深層学習　後編

後編

Section1: RNN

1.	AlexNet
CNNの一種
５層の畳み込み層およびプーリング層、それに続く３層の全結合層から構成される。
全結合層の出力にドロップアウトを使用。
2.	RNNとは
時系列データに対応したニューラルネット
隠れ層として過去の重みのデータを組み込んでいる
時間的順序を追って一定期間ごとに観察され、相互に依存関係が認められるようなデータの系列のことを指す。（音声データ、文字入力データ）
中間層にさらなる重みを加える（時系列データ）
時系列モデルを扱うには初期の状態（現在）と過去の時間ｔ-1の状態を保持し、そこから次の時間でのtを求める構造が必要。
過去のuも入れる。
勾配消失がうまれる。（ソフトマックスかけまくるから）」
u[:,t+1] = np.dot(X, W_in) + np.dot(z[:,t].reshape(1, -1（pythonがきめた推定の値）), W)←過去の重み
　　過去に遡るたびに、損失関数の微分が積算される


3.	BPTTとは
BackPropergation Through-Timeのこと
逆伝播する誤差も、過去に遡って反映するので、勾配降下法を使って誤差を反映していく
RNNの学習に使われる


Section2; LSTM

1.	LSTMとは
RNNを勾配消失が失われる（つまりだんだんと昔のデータは勾配を失い、長い時系列の学習が困難）という問題を、誤差を保持し入力出力をゲートで管理することにより、構造的に解決した仕組み

2.	勾配のクリッピングとは
勾配爆発を防ぐために、勾配を正規化する手法

3.	CECとは
LSTMにおいて、誤差を内部にとどまらせる機構
Constant Error Carousel
誤差を内部にとどめ、勾配消失を防ぐ
勾配を一にすること。
しかし入力データについて、時間が過ぎても関係なく重みが一律１のままになるので、勾配消失、爆発は起こらない
しかしそうすると学習ができなくなる。
またCECとしてはずっと重みが更新されない＝学習がされない
　　	さらにずっと誤差を内部にためることになるという欠点もあった
→忘却ゲート設置で解決

4.	忘却ゲートとは
忘却ゲートは、誤差信号を受け取ることで、関連性が薄くなった一度メモリセルで記憶した内容を一気に「忘れる」ことを学習する

5.	入力重み衝突、入力ゲートとは
入力重み衝突とは時系列データを学習する最、矛盾する重み更新を同時に受けること（つまり今の時点では入力の重みを弱くし、将来の時点では大きくするという更新である）
そこで入力ゲートを導入し、追加の重みパラメタを持たせることで、「前のユニット(1つ前の時間のユニット)の入力を受け取るか否か」を判断させるようにした。そうすることで必要に応じて誤差信号の伝播をゲート部で止め、必要な誤差信号だけが適切に伝播するようにゲートを開いたり閉じたりできる。

6.	出力重み衝突、出力ゲートとは
出力重み衝突入力重み衝突と同じく、今の時点では出したくないけど将来出したいという矛盾を出力側でもかかえること
そこで出力ゲートをつくり、出力側でもパラメータを持ち、コントロールするようにした。

7.	覗き穴結合とは
CEC自身の値から入力、出力ゲートへ重み伝播可能にした構造


Section3: GRU
LSTMはパラメータが多すぎて(多くのセルやゲートの最適化が必要なため)、計算負荷がかかる
ゲートをリセットゲート、更新ゲートの二つにシンプル化することで、
精度もLSTMと同等、またはそれ以上を望めるようになった
新しい中間状態は、1ステップ前の中間表現と計算された中間表現の線形和で表現される。

Section4: 双方向RNN
	過去の情報だけでなく、過去と未来両方の情報を使って予測する
	順伝播と逆伝播を合わせる
	過去用と未来用で独立して現在の重みへ影響を与える
	文章の推敲や、機械翻訳に使われる

Section5: Seq2seq
出力も時系列で予測したいというニーズから発展
機械翻訳や機械対話につかわれる
一問一回答しか対応できない
文脈が考慮されず、ただ応答だけをおこなわれる

1.	エンコーダRNN、デコーダRNN
Seq2se1では二つのLSTMに分かれており、エンコーダが入力データ、デコーダが出力データをそれぞれ処理
エンコーダはインプットしたテキストデータを単語に分け、ベクトル化
デコーダはエンコーダが分けたものをランダムに選び、次の言葉の生成確率を算出、ベクトルから文字列化する

2.	HREDとは
Seq2seq + Context RNN
前の単語の流れに即して応答されるため、より人間らしい文章が生成される。
情報量に乏しい答えを出しがち、答えの内容が同じものしか出せない。
これはよくある答えを選ぶ傾向があるため。

3.	Context RNNとは
Encoderのまとめた各文章の系列をまとめて、これまでの会話コンテキスト全体を表すベクトルに変換する構造（過去の発話の履歴を加味した返答ができる。）

4.	VHREDとは
HREDにVAEの潜在変数の概念を追加したもの。
つまりHREDの課題（同じような答えしか出せない）を、VAEの潜在変数の概念を追加することによりランダムで別の答えが出せるようになった。

潜在変数
例：顧客の特性（潜在変数）を、店で購入した数やネットで購入した数を観測変数としてグループ化。
次元の削減で出てきた主成分分析(PCA)で、「重量」「内圧」「弾力性」「硬さ」「触感」という5つの観測変数をもとに、「ふわふわ度」「すべすべ感」という潜在変数を求める

5.	VAE
変分オートエンコーダ
単なるオートエンコーダではなく、統計分布に変換し、平均と分散を表現するように学習する
オートエンコーダの構造はブラックボックス（瀬在変数）
この潜在変数に確率分布を仮定して、データを潜在変数の確率分布に押し込めることを可能にしているといえる。
構造としては、エンコーダに対して潜在変数をかけあわせデコーダに排出するというものである
画像認識でも使われ、画像が何かしらの分布にもとづいて生成されているのであれば、その分布を表現するように学習すればよいという考え方

6.	オートエンコーダとは
教師なし学習の一つ。
学習時の入力データは訓練データのみで、教師データは利用しない
入力した内容と同等の出力を出すような次元削減をしたニューラルネット
エンコーダ（入力を次元削減）、デコーダー（削減したものを再現）で構成される。

エンコーダとは
ユーザーがインプットしたテキストデータを、単語などのトークン（分類しIDを付与）に区切って渡す構造のこと（トーキング）＝区切る役割
最後の出力をfinal stateと呼び、出力する

エンコーダデコーダモデル
入力言語側(encoder)と出力言語側(decoder)の2個のRNNを用意して、それを中間ノードで繋ぎ合わせたもの
出力側で単語と一緒に終端記号を生成するため、翻訳の終了をモデル自身が決めている
しかし逆に言うと、この終端記号の学習に失敗していると無限に単語を生成するようになってしまうため、実際には適当な単語数を生成しても終わらない場合は処理を打ち切る必要がある

Section6: Word2vecとは
単語をベクトル化したもの
ベクトル化することによって、単語の距離や関係を見出す
RNNでは単語のような可変長の文字列をニューラルネットに与えることができず、固定長形式で単語を表す必要がある、という制約を解決
学習データからボキャブラリを作成する
One hotの辞書ができる
ボキャブラリとボキャブラリの重み行列の利用今まであったが、
ボキャブラリと任意の単語ベクトル次元で重み行列を利用した点が今までの仕組みと違った（次元を減らして、結果を出せるようになった。）
ボキャブラリ数×単語ベクトルの次元数の重み行列を学ぶ

Section7: Attention mechanism
入力と出力の単語の関連度（表現したい内容に対する単語の重要度）を学習する仕組みである。重要度の関連度を学ぶことで、全部スキャンしなくても、重要な単語だけに反応するようにすることで、計算量を減らす。
Seq2seqは長い文章への対応が難しい。理由は２語でも１００語でも固定次元ベクトルの中に入力しなければならないからである。
つまり文章が長くなるほど、そのシーケンスの内部表現の次元も大きくなるのである。
attention を用いたモデルでは、エンコーダの隠れ層のうち、特定の入力単語やその周辺の単語（直近の時間の重みを重視など）にフォーカスしたベクトルをデコーダで用いる。これにより、デコーダのある時点で必要な情報にフォーカスして使用することができ、入力文の長さに関係なくデコードを効率よく行うことができる


えんべっディング（IDからそのトークンを表す分散表現ベクトル（重みをかける）に変換）
そのベクトルを順番にRNNに入力


2日目

Section1: Tensorflow

1.TensorFlowとは
Numpyで実装するのではなく、tensorflowやkerasのようなライブラリで実装するのが実務では多い
Shapeは配列を表す
プリントしても中身が表されるわけではない
Placeholderは箱のようなものを用意している。定数ではできないような、あとから自在に値を入れられるものである。バッチでデータをあとから代入したいときに使われる
Tensorというセッションを定義してランしていない段階ではtensorは動作しない。

Tensorflowで線形回帰を実践
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/e0eda848-a5a3-f53c-23bd-877a6ba9a6f9.png)

Tensorflowで非線形回帰を実践
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/29350f75-6d6f-325d-49ee-8626806f1447.png)


ノイズ大のデータだと、誤差拡大
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/aaf6939c-67a0-dab8-14de-03fbb803c6de.png)


2. VGGとは
AlexNetをより深くした、畳み込み層とプーリング層から成るどノーマルなCNNで、重みがある層(畳み込み層や全結合層)を16層、もしくは19層(19 層の内訳は 3 convolutional layers * 5 + 4 FC)重ねたもの。それぞれVGG16やVGG19と呼ばれる。
小さいフィルターを持つ畳み込み層を2〜4つ連続して重ね、それをプーリング層でサイズを半分にするというのを繰り返し行う構造が特徴。大きいフィルターで画像を一気に畳み込むよりも小さいフィルターを何個も畳み込む(=層を深くする)方が特徴をより良く抽出できるらしい。(理由はよくわかってないが、活性化関数を通る回数が増えるため、表現力が増す？)

4.	Imagenet
下記三つを収録したデータセット
・1,400万枚を超える画像データ
・画像に写っている物体名（クラス名）を付与
・物体名（クラス名）は2万種類以上

5, Mnist
	手書き数字(0-9)画像を数十万枚収録

Mnistの分析
層=1000, 隠れ層=800
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/939f2284-8b82-b953-0350-545b39f2d8da.png)

層=3000,隠れ層=1000 正解率低下＝層が多いからといって正解率が増えるわけではない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/4a188c3e-ca30-11f1-5be2-935b2a952687.png)


Mnist CNN dropout = 0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/0c0c8502-1d79-6084-eed6-bb02e5c6faa8.png)


dropout = 0.5　正解率低下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/00af3ed0-a7b4-49ef-0a6b-be815513006d.png)



6, CIFAE-10
飛行機、鳥など10クラスの画像を数万枚収録


5.	inception
物体認識とは違い、画像識別といわれる「与えられた画像そのもの」に対して、「写っているものが何か」を分類するための学習モデル
Googleによって開発されたInception-v3は、ILSVRCという大規模画像データセットを使った画像識別タスク用に1,000クラスの画像分類を行うよう学習されたモデルで、非常に高い精度の画像識別を達成

6.	物体認識
様々な物体が含まれた画像に対して、画像のどのあたりに物体が写っているかを検出、その「種類」を判断
物体認識は一般物体認識と特定物体認識に大別
一例として、図1に写っている犬の認識。トイプードルや柴犬など世界には数百以上の犬種が存在すると言われており、それぞれ特徴が異なるため、例えば柴犬だけを認識するタスクは特定物体認識と呼ばれる。
このタスクにおいては、画像特徴などを利用してデータベースを構築し、特徴のマッチングを利用して類似度を計算する等の方法が用いられた。
一方、様々な犬種をまとめて犬として認識するタスクは一般物体認識と呼ばれます。この場合、犬として不変な特徴を見つけ出す必要があり非常に難しいタスクとなるが、ディープラーニングの登場により認識精度が飛躍的に向上

7.	物体検出
物体検出と物体認識は、物体を識別するという点で類似した手法だが、その実行方法が異なる。
物体検出は、画像内の物体のインスタンスを見つけるプロセス。
ディープラーニングの場合、物体検出は物体の識別だけでなく、画像内の位置の特定が行われるという点で、物体認識の一部と言える。

4.GoogleNet
2014年のコンペで1位になったアーキテクチャ。このアーキテクチャは通常の入力層から出力層まで縦一直線な構造ではなく、インセプション構造と呼ばれる横にも層が広がる構造をしている。
このため、Inceptionモデルとも呼ばれる。
横への層の広がりは、
異なるサイズのフィルターの畳み込み層を複数横に並べて、それを結合するという形になっている。

8.Resnet
ネットワークでは層を深くしすぎると性能が落ちるという問題があったが、それを「スキップ構造」によって解決し、152層もの深さ(前年優勝のGoogLeNetでも22層)を実現した。
スキップ構造は、ある層への入力をバイパスし層をまたいで奥の層へ入力してしまうというもので、これにより勾配の消失や発散を防止し、超多層のネットワークを実現している。

9.Yolo
You only look once" の略で、リアルタイム画像認識を行うアルゴリズム
FCN というネットワークを使用
画像の領域推定と分類が分断されており、それゆえ処理が複雑であり、かつ処理時間も長くなりがちだった
「YOLO」では、画像認識を回帰問題に落とし込み、「画像の領域推定」と「分類」を同時に行うことを実現した。 
「YOLO」のアルゴリズムは１つのCNNで完結するためシンプル

10.axivを検索
実装結果を共有しているサイト

11.Kerasとは
TensorFlowのラッパー
細かい複雑な実装はできないが、ベーシックな部分に関しては簡単に実装可能。
Placeholderを用意しなくても、wやbの定義可能
わざわざvariablesで変数を定義しなくてよい。

12.	Irisとは
花びらの大きさやがく片の長さなどの４種類のｘで構成されるデータセット
データの中には特徴量が格納されており、その中で花の種類の分類を実践できる

Iris分類　(ReLu)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/3661dc1b-3921-4da3-b213-876e00e8b22f.png)

Iris分類　(Sigmoid)層が多いため、勾配消失
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/4c9c313f-bc0d-6ff3-a201-21d27996b511.png)


13.単純パーセプトロンの分類
エポック=100
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/484201ec-9d81-c1a2-7ec0-a725148c48f4.png)

エポック =10 正解率低下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453340/ae3e4a7d-4349-bd90-36b3-8afdc52c0a93.png)

Section2: 強化学習

１.	強化学習とは
教師なし学習
長期的に長期的に報酬を最大化できる行動を探す
行動として得られる利益をもとに、現在の行動を決定する
要素として、環境・エージェント・行動・報酬がある
例
環境：ゲームの盤面
エージェント：ゲームのプレイヤー
行動：ゲームの操作
報酬：ゲームのポイントや勝敗

２.	強化学習の目標
不完全な知識をもとに行動しながら、データを収集し、最適な行動を見つけていく
教師なし学習の目的はデータに含まれるパターンを見つけ出し、予測すること。
強化学習はもっと自律的に優れた方策を自ら見つけ出す。（もちろんその分類結果がどれだけうれしいか、つまり報酬は何であるか、という定義づけは人間が行う）

３.	探索と利用のトレードオフとは
過去のデータからベストの方法を見つけ出そうとすると、新しいよりよいベストな方法を見つけ出せない→探索不足
未知の行動のみをとり続ければ、過去の経験が活かせない→利用不足

４.	関連近似法
価値関数や方策関数を関数近似する手法のこと

５.	Q学習
行動価値関数を行動数たびに更新をすることで学習を進めるもの


６.	行動価値関数は二種類
・ある状態の価値(収益の期待値)を表す状態価値関数
・行動価値関数（狭義）

７.	方策関数
この状態であれば、この行動をとる確率が何パーセント、というように表現された関数
採用された方策は方策関数で示される
行動や価値は行動価値関数で表される


８.	方策勾配法とは
方策をモデル化して最適化する手法
方策がどうなった状態がよいか、という定義が必要
再帰的にモデルを学習する（ｊ）

９.	平均報酬とは
ある状況で行動をとったときにうまれる価値全部の平均をとったもの

10.割引報酬和とは
その報酬の加算する割合を減らす（減衰）

11.価値反復法とは
ある状態から最適な行動をとり続けた時の期待利得を算出する
この定義に従って行動価値関数Qの定義を行うと方策勾配定理が成り立つ
ゴールから逆算して、ゴールの1つ手前、2つ手前の位置（状態）へと順々に誘導していく作戦。つまり、ゴール以外の位置（状態）にも価値（優先度）をつけてあげる作戦。

12.DCGANとは
Deep convolutional generative adversarial Networks
CNNのディープネットワークを使って敵対的学習を使って画像を生成する
通常のGANより性能がいい

13.ベルマン方程式
	動的計画法（動的な最適化問題）の最適性の必要条件を表す方程式。
最適化問題とは、集合内のすべての数値を、ある関数にいれたときに最小あるいは最大となる集合内の元を探すことを目的とする問題

14.方策勾配定理
早くゴールできたケースで実行した行動（action）は重要だと考え、その行動を今後多く取り入れるように方策を更新する作戦です。つまり、うまくいったケースの行動を重要視する方法（方策反復法）のアルゴリズム

15. Kaggle
企業などが分析の懸賞金を出す機械学習のコンテスト
制限ありで、GPUをつかって参加することもできる
Kernelをコピーして一部自分なりに工夫するのが初めはよい
Discussionの内容を参考にする
複数のモデルでアンサンブルとするとよい。（シングルモデルでは限界がある。）
モデルの多様性があるとよい。

16.Kernels
世界のデータサイエンティストたちがどのように実装しているのかをみることができる。
写経で自分でコードをコピーして学ぶのがよい