G検定メモ⑭　ディープラーニング　深層強化学習　編

G検定を受ける前に、公式テキストを読んでメモした走り書きがあったので公開するよ。

---------------------------------------------------------------------

#6-6　深層強化学習
###１．強化学習
機械学習の３つの分野の最後の一つ（教師あり/教師なし/強化学習←これ！）

######●強化学習とは
・行動を学習する仕組み
ある環境下で、目的とする報酬が最大化するためにはどのような行動をとっていけばいいかを学習する

######※注意点
　教師あり学習と強化学習を混同しない事！！
　強化学習は　一連の行動系列の結果としての報酬を最大とするように学習をする
　例えば）ロボットの歩行
　教師あり学習では、関節の角度、動かす速度、歩幅、力、などの情報を入出力のペアで逐一用意する
　強化学習では、「歩けた距離」を報酬として設定すると、いろいろ勝手に試して、歩くためには関節はどの角度が良いか、速度はどれくらいが良いか、歩幅は、力は、と失敗を繰り返し試行錯誤する中で、
偶然歩けた時の値を学習し、より上手に歩けた時の値を学習し、と目的を達成する。

######●問題点
　強化学習の難しさ
　・状態をいかに表現できるか
　・その状態に基づいていかに現実的な時間内で行動に結びつけることが出来るか

###２．深層強化学習
強化学習の問題点をディープラーニングが解決したことで、深層強化学習がブームとなる
これまでの強化学習では、現在の状況を認識して本質だけを抜き出す事が出来なかったので、全パターンの組み合わせ数計算する必要があった。現実問題には対応できない。
この部分が本質だよと人間が教える事でしか対応できなかった。

ディープラーニングで、この部分が本質だよと自分で見つけ出す事が出来るようになったので、
強化学習でできる事が一気に増えた。

2013年ディープマインド　ディープラーニング（CNN)を組み合わせた強化学習によりゲームのブロック崩しを行い、人間のスコアを超えた

Q学習という手法で行っている
######DQN（Deep Q-Network）と呼ばれている
※ﾄﾞｷｭｿじゃないよ

DQNはさらに改良され
・Double　DQN
・Dueling Network
・Categorical DQN
・Rainbow
など様々な研究がされている

多くの成果が上がったことで、ディープラーニングと強化学習の組み合わせである
「深層強化学習」の研究が活発になり
2015年から2017年にかけてDeepMind社　AlphaGo(あるふぁ碁)が世界チャンピオンのプロ棋士い勝って話題となった。

アルファ碁も状態や行動の評価にCNNを用いている
実際にどのような手を打つべきかの探索にはモンテカルロ木探索が用いられている
アルファ碁では以後の寄付を学習に利用していたが、

2017年10月　アルファ碁ゼロを開発し、
アルファ碁ゼロは完全に自己対局のみで学習をしている
結果従来のアルファ碁を超える強さとなった。

深層強化学習
・自動運転
・ロボティクス
に活用され始めている。




#6-7．深層生成モデル
###１．生成タスクへのアプローチ

ディープラーニングでは、認識・識別タスク以外に生成タスクも出来るようにてきた。
・認識・識別タスク
・生成タスク
　画像データの生成、時系列データの生成　が活発な研究分野

生成するもの
・データをもとに、新しく別の何かを生成したい
・データそのものを生成したい

●データをもとに、新しく別の何かを生成⇒識別モデルの延長
######・WaveNet
音声生成においてブレイクスルーを起こした
CNNを用いて音声生成をおこなう

●データそのものを生成する
・生成モデル⇒ディープラーニングを利用した「深層生成モデル」
元データの分布を推測し、分布に基づいて、元データとおなじようなデータを生成（サンプリング）する


###２．画像生成モデル
VAEとGANが主流
######VAE
変分オートエンコーダー（Variational AutoEncoder）
######GAN
敵対的生成ネットワーク（Generatibe Adversarial Network)

画像生成の手順
１．元データ（訓練データ）から画像が持つ潜在空間を取得する
２．潜在空間をベクトルで表現する

VAEとGANはそれぞれ異なったアプローチで潜在空間表現と生成をじつげんした。

######VAEとは
オートエンコーダーを活用する
従来のオートエンコーダー
　入力と出力を同じにするような学習を行うもので、隠れ層は入力データの特徴をうまく圧縮表現したもの
VAEで利用するオートエンコーダー
　入力を統計分布に変換する
　平均と分散を表現するように学習する
理由：入力データ（画像）が何かしらの分布に基づいて生成されているものだとしたら、
　　　その分布を表現するように学習すればいい　という考え方
具体的に：エンコーダーが統計分布へと変換する
　　　　　そこからランダムにサンプリングをする
　　　　　サンプリングした点をデコーダによって復元する
　　　　　⇒新しいデータを生成する事が出来る


######オートエンコーダ【自己符号化器】
オートエンコーダの各は「次元削減」
オートエンコーダはニューラルネットワークの一種
情報量を小さくした特徴表現を獲得する事が目的

入力と出力を同じデータにして学習をする
隠れ層の次元を小さくすると、データをちいさな情報量に圧縮する必要がある
小さな情報に圧縮するとは、要点だけに絞って、無駄な部分は捨てるという事

######●ニューラルネットワークの歴史
初期：単純パーセプトロン
・2層構造のニューラルネットワーク
　問題点：非線形問題が解けない（理由は中間層の結合荷重が変わらないから）
中期：多層パーセプトロン　3層の時代
・3層構造の多層パーセプトロン
　出来た理由：誤差逆伝播法が提案された（バックプロパゲーション）
　中間層の結合荷重も学習によって変えられるようになった
　2層から3層にするだけで、非線形問題に対応できるようになった。

⇒より層を深く行くことで、高度な表現能力の獲得を目指すが・・・
問題点
・勾配消失（Vanishing gradients）
層を増やすにつれて、バックプロパゲーションでは徐々に最初の層に近づくにつれて情報伝達できなくなり、学習速度が遅くなっていった。
・過学習（Overfitting）
機械学習でよくあることだが、訓練データは正しく予測できるが、未知のデータが全くダメになる。
汎化性能が悪く、一つ一つ訓練データの答えを覚えるようになってしまった。
層を深くすると、表現能力が高くなったのも問題を複雑にとらえてしまった。

######●解決策
事前学習(pre-training)
オートエンコーダを用いてパーセプトロンの重みの初期値をあらかじめ推定しておく
⇒完全なランダム値と比べ、勾配消失問題が起こる可能性が小さくなった。

######●オートエンコーダのその後
今のディープラーニングではオートエンコーダを使った事前学習はあまり使われない
ディープラーニングのアルゴリズムは改良を重ね、事前学習をせずにランダム値を採用しても、
十分な精度えるようになった。


そして、オートエンコーダあの研究は進み、生成モデルで活用され始めた。
Variational Autoencoder
オートエンコーダのまとめ
オートエンコーダは次元圧縮する事を目的としているが、入力と出力を同じにする
反響し有学習で、対象の特徴表現を自己学習してしまう
今は生成モデルでも効果を発揮しはじめている


######●GAN
敵対的生成ネットワーク（Generative Adversarial Network)
GANは2種類のネットワークで構成されている
①ジェネレータ（generator）
②ディスクリミネータ（discriminator）
・ジェネレータ：入力として潜在空間のランダムベクトルを受け取り、画像を生成して出力する。
・ディスクリミネータ（入力として画像を受け取る。その画像が本物か（ジェネレータによって生成された）偽物かを予測して出力する。

ディスクリミネータの予測結果はジェネレータにフィードバックされる。

重要な点
・ジェネレータはディスクリミネータが間違えるような偽物画像を作るように学習する
・ディスクリミネータは偽物をきちんと見抜けるように学習する

GANは２種類のネットワークを戦わせることで、最終的には本物t見分けがつかないような偽物、すなわち新しい画像サンプルを作り出すことを実現する。

例）ジェネレータは絵画の贋作や偽札を作る人、ディスクリミネータはそれを見抜く警官
　　両社はいたちごっこのように競い合っているような状況

画像生成用のモデル　GAN
実は、GANは上記のアーキテクチャの事を指している。
それぞれのネットワークにCNNを用いたモデルが高度な画像生成を可能にしている。
このモデルをDCGAN（DeepConvolutional GAN）と言う。

2016年以降、GANやDCGANが画像生成モデルにおいては圧倒的な人気を博している。