ラビットチャレンジ　レポート　深層学習 day 4

## 1. 強化学習
長期的に報酬を最大化できるように環境のなかで行動を選択できるエージェントを作ることを目標とする機械学習の一分野
行動の結果として与えられる利益(報酬)をもとに、行動を決定する原理を改善していく

強化学習に必要な概念
1．行動：エージェントが環境に働きかけること。複数の行動の中から１つを選択する。
2．状態：環境の状態。行動によって状態は変化する。
3．報酬：エージェントが受け取る報酬。報酬を元に、最適な行動を学習していく。
4．方策：状態を踏まえ、エージェントがどのように行動するのかを定めたルール。

強化学習の応用例
マーケティングの場合
環境:会社の販売促進部
エージェント:プロフィールと購入履歴に基づいて、キャンペーンメールを送る顧客を決めるソフトウェアである。
行動:顧客ごとに送信、非送信のふたつの行動を選ぶことになる。
報酬:キャンペーンのコストという負の報酬とキャンペーンで生み出されると推測される売上という正の報酬を受ける。

価値関数
価値を表す関数としては「状態価値関数」と「行動価値関数」の2種類がある。
ある状態の価値に注目する場合は、状態価値関数
状態と価値を組み合わせた価値に注目する場合は、行動価値関数

状態価値関数
$V^{\pi}(s)$：状態 $s$ において、方策 $\pi$ により得られる累積報酬の期待値を表す関数

$$V^{\pi}(s)=E_{\pi}\left\[R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}+\cdots \right\]=E_{\pi}\left\[\sum_{k=0}^{\infty}\gamma^kR_{t+k+1}\right\]$$

$S$：状態、$R_t$：報酬、$\gamma$：割引率

行動価値関数
$Q^{\pi}(s,a)$：状態 $s$ で、行動 $a$ を取ったとき、方策 $\pi$ により得られる累積報酬の期待値（価値）を表す関数

$$Q^{\pi}(s,a)=E_{\pi}\left\[R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}+\cdots \right\]=E_{\pi}\left\[\sum_{k=0}^{\infty}\gamma^kR_{t+k+1}\right\]$$

方策関数
方策ベースの強化学習手法において、ある状態でどのような行動を採るのかの確率を与える関数

方策勾配法
方策を最適化したいが、現実的には困難な場合が多い
方策をモデル化して最適化する手法


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

```math
\nabla_{\theta}J(\theta)=\mathbb{E}_{\pi_{\theta}}[\nabla_{\theta}\log \pi_{\theta}(a|s)Q^{\pi}(s,a)] 
```



## 2. AlphaGo
AlphaGoの学習は以下のステップで行われる
1. 教師あり学習によるRollOutPolicyとPolicyNetの学習
2. 強化学習によるPolicyNetの学習
3. 強化学習によるValueNetの学習

PolicyNetの教師あり学習
KGS Go Server（ネット囲碁対局サイト）の棋譜データから3000万局面分の教師を用意し、教師と同じ着手を予測できるよう学習を行った。
具体的には、教師が着手した手を1とし残りを0とした19×19次元の配列を教師とし、それを分類問題として学習した。
この学習で作成したPolicyNetは57%ほどの精度である。

PolicyNetの強化学習
現状のPolicyNetとPolicyPoolからランダムに選択されたPolicyNetと対局シミュレーションを行い、その結果を用いて方策勾配法で学習を行った。
PolicyPoolとは、PolicyNetの強化学習の過程を500Iteraionごとに記録し保存しておいたものである。
現状のPolicyNet同士の対局ではなく、PolicyPoolに保存されているものとの対局を使用する理由は、対局に幅を持たせて過学習を防ごうというのが主である。
この学習をminibatch size 128で1万回行った。

ValueNetの学習
PolicyNetを使用して対局シミュレーションを行い、その結果の勝敗を教師として学習した。
教師データ作成の手順は
１、まずSL PolicyNet(教師あり学習で作成したPolicyNet)でN手まで打つ。
２、N+1手目の手をランダムに選択し、その手で進めた局面をS（N+1）とする。
３、S（N+1）からRLPolicyNet（強化学習で作成したPolicyNet）で終局まで打ち、その勝敗報酬をRとする。
S(N+1）とRを教師データ対とし、損失関数を平均二乗誤差とし、回帰問題として学習した。
この学習をminibatch size 32で5000万回行った
N手までとN+1手からのPolicyNetを別々にしてある理由は、過学習を防ぐためであると論文では説明されている

モンテカルロ木探索
コンピュータ囲碁ソフトでは現在もっとも有効とされている探索法。
他のボードゲームではminmax探索やその派生形のαβ探索を使うことが多いが、盤面の価値や勝率予想値が必要となる。しかし囲碁では盤面の価値や勝率予想値を出すのが困難であるとされてきた。
そこで、盤面評価値に頼らず末端評価値、つまり勝敗のみを使って探索を行うことができないか、という発想で生まれた探索法である。囲碁の場合、他のボードゲームと違い最大手数はマスの数でほぼ限定されるため、末端局面に到達しやすい。
具体的には、現局面から末端局面までPlayOutと呼ばれるランダムシミュレーションを多数回行い、その勝敗を集計して着手の優劣を決定する。
また、該当手のシミュレーション回数が一定数を超えたら、その手を着手したあとの局面をシミュレーション開始局面とするよう、探索木を成長させる。
この探索木の成長を行うというのがモンテカルロ木探索の優れているところである。
モンテカルロ木探索はこの木の成長を行うことによって、一定条件下において探索結果は最善手を返すということが理論的に証明されている。

AlphaGo(Lee) とAlphaGoZeroの違い
１、教師あり学習を一切行わず、強化学習のみで作成
２、特徴入力からヒューリスティックな要素を排除し、石の配置のみにした
３、PolicyNetとValueNetを１つのネットワークに統合した
４、Residual Net（後述）を導入した
５、モンテカルロ木探索からRollOutシミュレーションをなくした

Alpha Go Zeroの学習法
Alpha Goの学習は自己対局による教師データの作成、学習、ネットワークの更新の３ステップで構成される
　自己対局による教師
データの作成現状のネットワークでモンテカルロ木探索を用いて自己対局を行う。
まず30手までランダムで打ち、そこから探索を行い勝敗を決定する。
自己対局中の各局面での着手選択確率分布と勝敗を記録する。
教師データの形は（局面、着手選択確率分布、勝敗）が１セットとなる。
　学習
自己対局で作成した教師データを使い学習を行う。
NetworkのPolicy部分の教師に着手選択確率分布を用い、Value部分の教師に勝敗を用いる。
損失関数はPolicy部分はCrossEntropy、Value部分は平均二乗誤差。
　ネットワークの更新
学習後、現状のネットワークと学習後のネットワークとで対局テストを行い、学習後のネットワークの勝率が高かった場合、学習後のネットワークを現状のネットワークとする。


## 3. 軽量化・高速化技術
データ並列化
親モデルを各ワーカーに子モデルとしてコピー
データを分割し、各ワーカーごとに計算させる

データ並列化：同期型
各ワーカーが計算が終わるのを待ち、全ワーカーの勾配が出たところで勾配の平均を計算し、親モデルのパラメータを更新する。

データ並列化：非同期型
各ワーカーはお互いの計算を待たず、各子モデルごとに更新を行う。学習が終わった子モデルはパラメータサーバにPushされる。新たに学習を始める時は、パラメータサーバからPopしたモデルに対して学習していく。

処理のスピードは、お互いのワーカーの計算を待たない非同期型の方が早い。
しかし、非同期型は最新のモデルのパラメータを利用できないので、学習が不安定になりやすい。
現在は同期型の方が精度が良いことが多いので、主流となっている

モデル並列化
親モデルを各ワーカーに分割し、それぞれのモデルを学習させる。全てのデータで学習が終わった後で、一つのモデルに復元。
モデルが大きい時はモデル並列化を、データが大きい時はデータ並列化をすると良い。

GPUによる高速化
GPGPU (General-purpose on GPU)
　元々の使用目的であるグラフィック以外の用途で使用されるGPUの総称
CPU
　高性能なコアが少数
　複雑で連続的な処理が得意
GPU
　比較的低性能なコアが多数
　簡単な並列処理が得意
　ニューラルネットの学習は単純な行列演算が多いので、高速化が可能

軽量化
１．量子化
　通常のパラメータの64 bit 浮動小数点を32 bit など下位の精度に落とすことでメモリと演算処理の削減を行う
２．蒸留
　規模の大きなモデルの知識を使い軽量なモデルの作成を行う
３．プルーニング
　モデルの精度に寄与が少ないニューロンを削減することでモデルの軽量化、高速化が見込まれる


## 4. 応用モデル
MobileNet
Depthwise Separable Convolution (Depthwise ConvolutionとPointwise Convolution)という仕組みを用いて画像認識において軽量化・高速化・高精度化したモデル。
通常の畳込みが空間方向とチャネル方向の計算を同時に行うのに対して、Depthwise Separable ConvolutionではそれらをDepthwise ConvolutionとPointwise Convolutionと呼ばれる演算によって個別に行う。

DenseNet
Dense Blockという仕組みを用いた画像認識モデル。

正規化
Batch Norm
　ミニバッチに含まれるsampleの同一チャネルが同一分布に従うよう正規化
Layer Norm
　それぞれのsampleの全てのpixelsが同一分布に従うよう正規化
Instance Nrom
　さらにchannelも同一分布に従うよう正規化

WaveNet
生の音声波形を生成する深層学習モデル
Pixel CNNを音声に応用したもの
時系列データである音声に畳込みニューラルネットワーク(Dilated Convolution)を適用する


## 5. Transformer
Attention (注意機構) (Bahdanau et al., 2015)
翻訳先の各単語を選択する際に、翻訳元の文中の各単語の隠れ状態を利用
query(検索クエリ)に一致するkeyを索引し、対応するvalueを取り出す操作であると見做すことができる。これは辞書オブジェクトの機能と同じである。

注意機構には二種類ある
Source target attention
 Queryに正解となる系列を与え、Key、Valueに入力となる系列を与える
Self attention
 Query、Key、Value全て入力となる系列を与える

Position-Wise Feed-Forward Networks
位置情報を保持したまま順伝播させる

Scaled dot product attention
全単語に関するAttentionをまとめて計算する

Multi-Head attention
重みパラメタの異なる８個のヘッドを使用
8個のScaled dot product attentionを出力をconcat
それぞれのヘッドが異なる種類の情報を収集


## 6. 物体検知・セグメンテーション
広義の物体認識タスク
入力:画像（カラー・モノクロは問わない）
出力：
　分類・・・（画像に対し単一または複数の）クラスラベル
　物体検知・・・Bounding Box
　意味領域分割・・・（各ピクセルに対し単一の）クラスラベル
　個体領域分割・・・（各ピクセルに対し単一の）クラスラベル

物体検出コンペティションで用いられたデータセット
VOC12, ILSVRC17, MS COCO18, OICOD18
開発されたアルゴリズムの精度を見るために、共通として制度評価に用いられるデータセットが必要になる。

正解率（Accuracy）：全データ（$TP+FN+FP+TN$）のうち、正しく判別した（$TP+TN$）確率
$$\frac{TP+TN}{TP+FN+FP+TN}$$

再現率（Recall）：Positiveなデータ（$TP+FN$）から、Positiveと予想（$TP$）できる確率
$$\frac{TP}{TP+FN}$$

適合率（Precision）：モデルがPositiveと予想したデータ$TP+FP$から、Positiveと予想（$TP$）できる確率
$$\frac{TP}{TP+FP}$$

F値(F score)：再現率（Recall）と適合率（Precision）の調和平均
$$\frac{2}{\frac{1}{Recall}+\frac{1}{Precision}}=\frac{2(Precision)(Recall)}{Recall+Precision}$$

IOU（Intersection Over Union）= Area of overlap / Area of Union
クラスラベルだけでなく, 物体位置の予測精度も評価

AP：Average Precision（PR曲線の下側面積）
confの閾値を$\beta$とするとき、Recall$=$R($\beta$)、
Precision$=$ P($\beta$)
$$AP=\int_0^1P(R)dR$$

mAP：mean Average Precision
APの平均
$$mAP=\frac{1}{C}\sum_{i=1}^C AP_i$$

FPS：Flames per Second
検出精度に加え検出速度も問題となる

2段階検出器(Two-stage detector)
候補領域の検出とクラス推定を別々に行う。
相対的に精度が高い傾向
相対的に計算量が大きく推論も遅い傾向
→リアルタイム検出には向かない

1段階検出器(One-stage detector)
候補領域の検出とクラス推定を同時に行う。
相対的に精度が低い傾向 
相対的に計算量が小さく推論も早い傾向

SSD (Single Shot Detector)
1段階検出器のモデルの1つ。
初めにデフォルトボックスを用意する。
デフォルトボックスを変形して、プレディクテッド・バウンディングボックスとする。