ラビットチャレンジレポート＿深層学習②-2

**深層学習day4**
**Section1: 強化学習**

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

価値関数:
価値を表す関数としては、状態価値関数と行動価値関数の2種類がある。
・状態価値関数
状態の価値に注目する。
$$V^{\pi}(s)$$

・行動価値関数
価値を組み合わせた価値に注目する。
状態s+行動a
$$ Q^{\pi}(s,a)$$

Q学習：
行動価値関数を行動するごとに更新することによって学習を進める方法

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

方策勾配法:
方策をモデル化して最適化する手法

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

$t$：時間
$\theta$：重み
$\epsilon$：学習率
$J$：方策の良さ(定義する必要がある)

方策勾配定理

$$\nabla_{\theta}J(\theta)=\nabla_{\theta}\sum_{a\in A}{\pi_{\theta}(a|s)Q^{\pi}(s,a)}$$

$$\nabla_{\theta}J(\theta)=E_{\pi_{\theta}}[(\nabla_{\theta}log\pi_{\theta}(a|s)Q^{\pi}(s,a))]$$

$\pi_{\theta}(a|s)$：エージェントが取る行動の確率(方策関数)
$Q^{\pi}(s,a)$：ある状態で撮ったある行動から得られる報酬(行動価値関数)
$\pi_{\theta}(a|s)Q^{\pi}(s,a)$：ある行動をとる時の報酬


参考：
https://blog.brainpad.co.jp/entry/2017/02/24/121500



**Section2: AlphaGo**

Alpha Go
Alphabet傘下のDeepMind社が開発した囲碁AIプログラム。
盤面を評価するための価値ネットワークと、行動を選択するための方策ネットワークで構成されている（どちらもCNN）。

AlphaGoの学習は以下のステップで行われる
１、教師あり学習によるRollOutPolicyとPolicyNetの学習
２、強化学習によるPolicyNetの学習
３、強化学習によるValueNetの学習

参考：AlpahaGo
https://www.researchgate.net/publication/292074166_Mastering_the_game_of_Go_with_deep_neural_networks_and_tree_search

AlpahaGoの後継

AlphaGoZero：
Residual Netを導入。
モンテカルロ木探索からRollOutシミュレーションを廃止。

参考：AlphaZero
https://www.nature.com/articles/nature24270

AlphaStar:
制限なしでeスポーツのトップリーグの実力に到達したプログラム

参考：AlphaStar
https://deepmind.com/blog/article/AlphaStar-Grandmaster-level-in-StarCraft-II-using-multi-agent-reinforcement-learning



**Section3: 軽量化・高速化技術**

分散深層学習
深層学習において、多数の計算機に処理を分散させて学習を行うことを分散深層学習という。
分散学習のアプローチには、データ並列とモデル並列がある。

データ並列化
親モデルをコピーしたn個のレプリカを各GPUワーカに配置し、異なるバッチを各GPUワーカに供給することで演算を並列化する。
パラメータの更新の仕方によって同期型と非同期型に分けられる。
同期型では、すべてのGPUワーカが勾配を計算してから平均勾配を取るため、GPU間に性能の差があると無駄が生じる。
非同期型では、あるGPUワーカが勾配を計算している間に、パラーメータ更新が行われることがあるため、更新時間は再遅GPUワーカに依存せず、一般に同期型よりもスループットは高い。

モデル並列化
親モデルのn個の部分モデルを各GPUワーカに割り当てる。

GPUによる高速化
簡単な並列処理が得意。ニューラルネットの学習は単純な行列演算が多いので、GPUを用いることで高速化が可能。

モデルの軽量化
・量子化
重みの精度を下げることにより計算の高速化と省メモリ化を行う技術。
通常のパラメータの64 bit 浮動小数点を32 bit など下位の精度に落とすことでメモリと演算処理の削減を行う。
計算の高速化、省メモリ化が利点。精度の低下が欠点。

参考：
https://arxiv.org/pdf/1511.00363.pdf


・蒸留
複雑で精度の良い教師モデルから軽量な生徒モデルを効率よく学習を行う技術。
大きなモデルが獲得した知識を小さなモデルに転移させることで、
少ない学習回数でより精度の良いモデルを作成することが可能。

蒸留は教師モデルと生徒モデルの2つで構成される。
教師モデルの重みを固定し生徒モデルの重みを更新していく。
誤差は教師モデルと生徒モデルのそれぞれの誤差を使い重みを更新していく。
・教師モデル
予測精度の高い複雑なモデルやアンサンブルされたモデル
・生徒モデル
教師モデルをもとに作られる軽量なモデル

参考：
https://arxiv.org/pdf/1503.02531.pdf

・プルーニング
寄与の少ないニューロンをモデルから削減し高速化と省メモリ化を行う技術。
モデルの精度に寄与が少ないニューロンを削除することで、モデルの軽量化、高速化が可能。

参考：
https://arxiv.org/pdf/1506.02626.pdf

**Section4: 応用モデル**

MobileNet：
Depthwise Separable Convolution(Depthwise ConvolutionとPointwise Convolution)という仕組みを用いて画像認識において軽量化・高速化・高精度化したモデル。
全体の計算量はDepthwise Convolutionの計算量　+ Pointwise Convolutionの計算量。

参考：
https://arxiv.org/pdf/1704.04861.pdf

DenseNet：
Dense Blockという仕組みを用いた画像認識モデル。
畳み込み→Dense Block→Transition Layer→Dense Block→Transition Layer→Dense Block→プーリング層→全結合層。
Dense Blockで前の各層の入力を使うことでチャンネル数が増え、Transition Layerで特徴量の抽出を繰り返していく。

参考：
https://arxiv.org/pdf/1608.06993.pdf

正規化
Batch Normalization：
ミニバッチ単位で平均が0、分散(標準偏差)が1になるように正規化。
N個のデータの同一チャンネルが正規化の単位となり、特徴マップごとに正規化された結果を出力する。
バッチサイズに影響を受けるため、バッチサイズが小さいと学習が収束しないこともある。

参考：
https://arxiv.org/pdf/1502.03167.pdf

Layer Normalization：
各データ1つの全チャンネルに対して正規化する。
全てのチャンネルで正規化して特徴マップごとに出力する。

Instance Normalization：
各データ1つの各チャンネルに対して正規化する(Batch Normalizationのバッチサイズ1と同じ)。
コントラストの正規化等で使用される。


Wavenet：
時系列データである音声に畳み込みニューラルネットワーク(Dilated Convolution)を用いた音声生成モデル。
次元間でのつながりがある場合、畳み込みができる。
また、畳込みは2次元だけでなく1次元や3次元等も可能。

＊深層学習を用いて結合確率を学習する際に、効率的に学習が行えるアーキテクチャを提案したことがWaveNetの大きな貢献の1つである。提案された新しいConvolution型アーキテクチャは「Dilated Causal Convolution」と呼ばれ、結合確率を効率的に学習できるようになっている。
「Dilated Causal Convolution」を用いた際の大きな利点は、単純なConvolution Layerと比べて「パラメータ数に対する受容野が広い」ことである。



**Section5: Transformer**

Seq2seq：
Encoder-Decoderモデルとも呼ばれる。
系列(Sequence)を入力として、系列を出力する。


Transformer：
RNNを使用せず、Attentionのみ使用しているモデル。
自然言語処理で使用されている。

参考：
https://arxiv.org/pdf/1706.03762.pdf

BERT:
自然言語処理用のモデル。
Transformerのエンコーダが用いられている。
双方向的なモデル。
BERTの学習は、事前学習と再学習の２段階で行われる。
事前学習は教師なし学習によって行われ、単語マスク問題と、次の文かどうかを予測する問題を同時に解く。
その後、出力層以降を解きたいタスク用の層に置き換え、再学習を行う。再学習は教師あり学習によって行われる。

参考：
https://arxiv.org/pdf/1810.04805.pdf


**Section6: 物体検知・セグメンテーション**

物体検出
物体が含まれる短形領域であるバウンディングボックスと、それに対応するクラスを予測する。
バウンディングボックスを一つに限定する処理のことを、非最大値抑制になる。

IOU(Intersection over Union)
物体位置の予測精度を評価する指標。

$$IoU=\frac{Area\ of\ Overlap}{Area\ of\ Union}$$

混合行列を用いると

$$IoU=\frac{TP}{TP+FP+FN}$$

・1段階検出器(One-stage detector)
候補領域の検出とクラス推定を同時に行う
2段階検出器より精度が低いが予測は早い傾向がある。

・2段階検出器(Two-stage detector)
候補領域の検出とクラス推定を別々に行う。

YOLO
１枚の画像を特定のサイズのグリッドに分割し、その分割されたグリッドごとにクラス特定とバウンディングボックスの回帰を行う。

SSD
YOLOに類似した物体検出用モデル。
各層の特徴マップを用いて物体検出を行う。

GAN(Generative Adversarial Nets)（敵対的生成ネットワーク）:
生成器と識別器を競わせて学習する生成・識別モデル。
Generator：乱数からデータを生成
Discriminator：入力データが真のデータであるか識別

GAN 論文で用いられてるloss 関数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2119567/1b17d73a-e97d-d009-822d-4f6ec50394e6.png)

仮に最適な生成器と識別器の両方が得られた場合、識別器の出力は0.5になる。

参考：
https://arxiv.org/pdf/1406.2661.pdf


DCGAN(Deep Convolutional GAN):
GANの枠組みをCNNに適用した画像生成モデル
DCGAN（深層畳み込みGAN）では、学習を安定化させるためのテクニックとして以下を提案されている。
・プーリング処理の代わりに、ストライドを２以上に設定したった畳み込み層や逆畳み込み層を用いる。
・生成器と識別器の両方にバッチ正規化を用いる。
・生成器の活性化関数は、最終層にtanh、それ以外にはReLUを使用する。
・識別器の活性化関数にLeaky ReLUを使用する。
・全結合層は使用しない。

ConditionalGAN：
GANの応用例のひとつ。
生成するデータに関する条件を与えることで、その条件に従うデータを生成することを可能とする。
条件にはクラスラベルや、文章などのベクトル表現を用いる。

pix2pix:
ConditionalGANの条件を画像とすることで、スタイル変換を実現したもの。
U-Netと呼ばれるスキップ接続付きの自己符号化器を生成器として用いる。
U-Netではエンコーダの情報をデコーダへ渡し、エンコーダのすべてのチャンネルと、デコーダのすべてのチャンネルを連結する。


参考：
https://arxiv.org/pdf/1511.06434.pdf



この記事の参考図書
「ゼロから作るDeepLearning」 斎藤康毅
「ゼロから作るDeepLearning２」 斎藤康毅
「徹底攻略ディープラーニングE資格エンジニア問題集」スキルアップAI株式会社
「機械学習のエッセンス」加藤公一　

~Fin~