深層学習　DAY4

###自分用メモ

####強化学習

長期的に報酬を最大限できるように環境のなかで行動を選択できるエージェントを作ることを目標とする機械学習の一分野

→行動の結果として与えられる利益（報酬）をもとに、行動を決定する原理を改善していく仕組み。

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/e4521675-96ff-2da1-9f50-995791935fd0.jpeg)

環境について事前に完璧な知識があれば、最適な行動を予測し決定することは可能。→不完全な知識を元に行動しながら、データを収集。最適な行動を見つけていく。

過去のデータで、ベストとされる行動のみを常に取り続ければ他にもっとベストな行動を見つけることはできない。
→探索が足りない。
　　　↕　トレードオフの関係性
未知の行動のみを常に取り続ければ、過去の経験が活かせない。
→利用が足りない状態。

- 強化学習と通常の教師あり、教師なし学習との違い

結論：目標が違う。
・教師なし、あり学習では、データに含まれるパターンを見つけ出すおよびそのデータから予測することが目標
・強化学習では、優れた方策を見つけることが目標。

- 歴史

・冬の時代があったが、計算速度の進展により大規模な状態を保つ場合の、強化学習を可能としつつある。
・関数近似法と、Q学習を組み合わせる手法の登場。

Q学習：行動価値関数を、行動する毎に更新することにより学習を進める方法

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


- 価値関数

価値を表す関数としては、状態価値関数と行動価値関数の２種類がある。

ある状態の価値に注目する場合は。状態価値関数と価値を組み合わせた価値に注目する場合は、行動価値関数

- 方策関数

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

- 関数の関係

方策関数：π(s)=a
エージェントは方策に基づいて行動する。
π(s,a):VやQを基にどういう行動をとるか
　　　　→経験を活かす　or チェレンジするなど

V(s):状態関数
Q(s,a):状態＋行動関数
→ゴールまで今の方策を続けたときの報酬の予測値が得られる。

→やり続けたら最終的にどうなるか。

- 方策勾配法について

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

```math

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

```

Jは方策の良さ

定義方法
・平均報酬
・割引報酬

上記の定義に対応して、行動価値関数：Q(s,a)の定義を行い、方策勾配定理が成り立つ。

```math

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


```



####AlphaGo

- Alpha Go Lee

value net（価値関数）とpolicy net（方策関数）がある。

どちらもニューラルネットワーク

Alpha Go LeeのPolicyNet

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/77d93d16-41b2-6df5-03db-a6191e80667d.jpeg)

Alpha Go LeeのValueNet

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/584348f3-c639-11b2-a3ac-2ac0dc9d9ec7.jpeg)

- Alpha Goの学習は以下のステップで行われる。

1.教師あり学習によるRollOutPolicyとPolicyNetの学習
2.強化学習によるPolicyNetの学習
3.強化学習によるValueNetの学習

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/cc82f6da-1196-4fca-1161-54b14478485d.jpeg)


- Alpha Go Zero

LeeとZeroの違い
1.教師あり学習を一切行わず、強化学習のみで作成
2.特徴入力からヒューリスティックな要素を排除し、石の配置のみにした。
3.PolicyNetとValueNetを一つのネットワークに統合した。
4.Residual Netを導入した。
5.モンテカルロ木探索からRollOutシュミレーションをなくした。

Residual Networkはネットワークにショートカット構造を追加して、勾配の爆発、消失を抑える効果を狙ったもの。
Residual Networkを使うことにより、100層を超えるネットワークでの安定した学習が可能となった。

- Residual Networkの派生形

1.Residual Blockの工夫
Bottleneck
1×1カーネルのConvolutionを利用し、１層目で次元削減を行って３層目で次元を復元する３層構造にし、２層のものと比べて計算量はほぼ同じだが一層増やせるメリットがあるとしたもの。

PreActivation
ResidualBlockの並びをBatchNorm→ReLU→Convolution→BatchNorm→ReLU→Convolution→Addとすることにより性能が上昇したとするもの。

2.Network構造の工夫
WideResnet
ConvolutionのFilter数をk倍にしたResnet。１倍→k倍×ブロック→2*k倍ｙブロックと段階的に幅を増やしていくのが一般的。Filter数を増やすことにより、浅い層数でも深い層数のものと同等以上の精度となり、またGPUをより効率的に使用できるため学習も早い。

PyramidNet
WildresNetで幅が広がった直後の層に過度の負荷がかかり精度を落とす原因となっているとし、段階的にではなく、各層でFilter数を増やしていくResNet。





####データ並列化

- 分散深層学習とは


複数の計算資源（ワーカー）を使用し、並列的にニューラルネットワークを構成することで、効率の良い学習を行いたい。
データ並列化、モデル並列化、GPUによる高速技術は不可欠である。

- データ並列化

親モデルを各ワーカーに小モデルとしてコピー。データを分割し、各ワーカーごとに計算させる。




![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/4e997125-fccb-22fc-e796-c0c897f560be.jpeg)

同期型


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/8ef6e832-ad71-d921-e973-c6f3f9f940a7.jpeg)


非同期型



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/47b5d5f9-8fb9-0490-8ee2-ff4ee3fb1109.jpeg)




####モデル並列化

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


![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/4e349c91-3c8a-5e1c-7bac-5b3131794092.png)


モデルのパラメータ数が多いほど、スピードアップの効率も向上する。

#####GPUによる高速化

- GPGPU
元々の使用目的であるグラフィック以外の用途で使用されるGPUの総称

- CPU
高性能なコアが少数
複雑で連続的な処理が得意

- GPU
比較的低性能なコアが多数
簡単な並列処理が得意
ニューラルネットの学習は単純な行列演算が多いので、高速化が可能



####量子化

通常のパラメータの64bit浮動小数点を31bitなど下位の精度に落とすことでメモリと演算処理の削減を行う。

- 省メモリ化
ニューロンの重みを浮動小数点のbit数を少なくし、有効桁数を下げることで、ニューロンのメモリサイズを小さくすることができ、多くのメモリを消費するモデルのメモリ使用量を抑えることができる。

- 利点
計算の高速化
省メモリ化

- 欠点
精度の低下


64bitは倍精度
32bitは単精度
16bitは半精度



####蒸留

規模の大きなモデルの知識を使い軽量なモデルの作成を行う。

学習済みの精度の高いモデルの知識を軽量なモデルへ継承させる。

- 教師モデルと生徒モデル

蒸留は教師モデルと生徒モデルの２つで構成される。

- 教師モデル
予測精度の高い、複雑なモデルやアンサンブルされたモデル

- 生徒モデル
教師モデルをもとに作られる軽量なモデル


教師モデルの重みを固定し生徒モデルの重みを更新していく。
誤差は教師モデルと生徒モデルのそれぞれの誤差を使い重みを更新していく。


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/4ff7356b-b4b5-0465-bacd-97299a822c6e.jpeg)

- 利点
蒸留によって少ない学習回数でより精度の良いモデルを作成していく。


####プルーニング
モデルの精度に寄与が少ないニューロンを削減することでモデルの軽量化、高速化が見込まれる。

寄与の少ないニューロンの削減を行いモデルの圧縮を行うことで高速化に計算を行うことができる。

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/b7c58974-910f-2dde-7f6a-7aa46a71adef.jpeg)


- ニューロンの削減

重みが閾値以下の場合ニューロンを削減し、再学習を行う。
下記の例は重みが0.1以下のニューロンを削減した。


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/d2197d04-3129-88b3-8271-bf799ab1a938.jpeg)



####MobileNet

ディープラーニングモデルの軽量化・高速化・高精度化を実現（その名の通りモバイルなネットワーク）

畳み込み演算に工夫がされている。

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/cd52c594-339e-da72-0275-cacc8af7a44a.jpeg)



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/6f13b144-c841-ab54-b345-90cd2b3f28d3.jpeg)

 
一般的な場合は計算量が多い。

- Depthwise convolution

・入力マップのチャンネルごとに畳み込みを実施

・出力マップをそれらと結合（入力マップのチャンネル数と同じになる）

・通常の畳み込みカーネルはすべての層にかかっていることを考えると計算量が大幅に削減可能

・各層ごとの畳み込みなので層間の関係性は全く考慮されない。通常はPW畳み込みとセットで使うことで解決

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/489dd5b3-5278-f876-5404-fc2902e06a50.jpeg)

- Pointwise convolution
・1x1 convとも呼ばれる。
・入力マップのポイントごとに畳み込みを実施
・出力マップ（チャンネル数）はフィルタ数分だけ作成可能（任意のサイズが指定可能）


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/a0a28e00-3a0c-1c72-cd71-f244310efd71.jpeg)

Depthwise Separable Convolutionという手法を用いて計算量を削減している。通常の畳み込みが空間方向とチャンネル方向の計算を同時に行うのに対して、Depthwise Separable ConvlutionではそれらをDepthwise Convolution とPointwise Convolutionと呼ばれる演算によって個別に行う。

Depthwise Convolutionはチャンネル毎に空間方向へ畳み込む。すなわち、チャンネル毎にDk×Dk×1のサイズのフィルターをそれぞれ用いて計算を行うため、その計算量はHxWxCxKxKとなる。

次にDepthwise Convolutionの出力をPointwise Convolutionによってチャンネル方向に畳み込む。すなわち、出力チャンネル毎に1x1xmサイズのフィルターをそれぞれ用いて計算を行うため、計算量はHxWxCxMになる。


####DenceNet

出力層に前の層の入力を足し合わせる。
層間の情報の伝達を最大にするために全ての同特徴量サイズの層を結合する。

Batch正規化
ReLu関数による変換
3x3畳み込み層による処理

入力特徴マップのチャンネル数がl x kだった場合、出力は(l+1)xkとなる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/8dfd5975-130c-d7cf-cb59-6c2c4c686704.png)



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/434bfa8d-0d51-bee3-bd60-7ddaebe4c419.jpeg)

- Transition Layer

CNNでは中間層でチャンネルサイズを変更し、特徴マップのサイズを変更し、ダウンサンプリングを行うため、Transition Layerと呼ばれる層でDence blockをつなぐ。

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/812ea700-07af-0114-8925-b0615b90cdd8.jpeg)

- DenceNetとResNetの違い

DenceBlockでは前方の各層からの出力全てが後方の層への入力として用いられる。
RessidualBlockでは前1層の入力のみ後方の層へ入力

DenceBlockでは成長率(growth rate)と呼ばれるパラメータが存在する。


####BatchNorm
レイヤー間を流れるデータ分布を、ミニバッチ単位で平均が0・分散が１になるように正規化
Batch Normalizationはニューラルネットワークにおいて学習時間の短縮や初期値への依存低減、過学習の抑制など効果がある。

・問題点
Batch sizeが小さい条件下では、学習が収束しないことがあり、代わりにLayer Normalizationなどの正規化手法が使われることが多い。

その他の正規化
・LayerNorm
それぞれのsampleの全てのpixelsが同一分布に従うよう正規化
・Instance norm
さらにchannelも同一分布に従うように正規化


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/2f2753f7-477f-147c-039a-927e7d4dcb2f.jpeg)

HxWxCのsampleがN個あった場合に、N個の同一チャンネルが正規化の単位

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/22c1c742-7e41-5191-4c74-926fc3c593ca.jpeg)



####LayerNorm
N個のsampleのうち一つに注目。HxWxCのすべてのpixelが正規化の単位。



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/ee27fbb0-5846-aa9d-eda3-548da8e7eaa4.jpeg)

入力データや重み行列に対して、以下の操作を施しても、出力が変わらないことが知られている。
入力データのスケールに関してロバスト
重み行列のスケールやシフトに関してロバスト

####Instance Norm

各sampleの各チャンネルをごとに正規化

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/c3f85eb4-dec1-ea42-3e4a-a9e0f439923e.jpeg)

####WaveNet

生の音声波形を生成する深層学習モデル

時系列データに対して畳み込み(Dilated convolution)を適用する。

Dialated convolution
- 層が深くなるにつれて畳み込むリンクを離す
- 受容野を簡単に増やすことができるという利点がある。



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/78b34056-9539-16b3-0652-024611eb232f.jpeg)


大きな利点は単純なConvolution　Layerと比べてパラメータ数に対する受容野が広いことである。



####Seq2seq

系列(sequence）を入力として、系列を出力するもの

・Encoder-Decoderモデルとも呼ばれる。
・入力系列がencode(内部状態に変換）され、内部状態からDecode（系列に変換）する。

言語モデルを２つ連結した形になっている。
・RNNの理解
・言語モデルの理解

RNNとは
系列データを読み込むために再帰的に動作するNN
系列情報を舐めて内部状態に変換できる。

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/424e14d8-1841-5e4c-fb9d-ff9a65e02ef2.jpeg)

言語モデルとは
・単語の並びに対して尤度（それがどれだけ起こり得るのか）、すなわち文章として自然かを確率で評価する。

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/7d913201-2456-3ec3-0283-a91bec4751d1.jpeg)

時刻t-1までの情報で、時刻ｔの事後確率を求めることができる。
→これで同時確率が計算できる。

RNNｘ言語モデルは各地点で次にどの単語がくれば自然（事後確率最大）かを出力できる。

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/e25c9bbb-408f-0371-973e-252be863f892.jpeg)

seq2seqはEncoderからDecoderに渡される内部状態ベクトルが鍵

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/688aec73-20c4-b97a-7e72-64ec8e0b8b9b.jpeg)

Decoder側の構造は言語モデルRNNとほぼ同じだが隠れ状態の初期値にEncoder側の内部状態を受け取る。



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/a8d1da54-e78a-9319-0f71-80ef6a09414d.jpeg)


Decoderのoutput側に正解を当てれば教師あり学習がEnd2endで行える。



####Transformer

ニューラル機械翻訳の問題点
長さに弱い

- Attention 

翻訳先の各単語を選択する際に、翻訳元の文中の各単語の隠れ状態を利用

attentionは辞書オブジェクト

query（検索クエリ）に一致するkeyを索引し、対応するvalueを取り出す操作であると見做すことができる。これは辞書オブジェクトの機能と同じである。


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/88d7c056-a775-4476-b01e-17b502ce600a.jpeg)

Transformer主要モジュール



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/9585125e-4dd4-b172-ed69-cc7d212c5d24.jpeg)

注意機構には二種類ある



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/e00381b5-9945-e80c-8f96-72765acc021d.jpeg)

Self-Attentionが肝

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/5425d7ae-b2d6-d52e-d2ce-b0331362af86.jpeg)

Scaled dot product attention

全単語に関するAttentionをまとめて計算する。




![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/23c036e0-c46d-23d8-e56c-cb9256cb4b26.jpeg)


Multi-Head attention

重みパラメータの異なる８個のヘッドを使用


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/fbcef7df-b69c-b11c-67df-7213ffd3d088.jpeg)

Add&

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/36ccabba-e39d-cb5d-fe4f-e2360e85b77e.jpeg)


Position Encoding

RNNを用いないので単語列の語順情報を追加する必要がある。

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/a1ec1bbc-49c5-645a-62af-6a4c859dc973.jpeg)





####物体検知

#####広義の物体認識タスク

classification（分類）、Semantic segmentation（意味領域分割）,Object Detection（物体検知）, Instance Segmentation（個体領域分割）


#####代表的データセット

VOC12,ILSVRC17,MS COCO18,OICOD18などがある。
いずれも物体検知コンペティションで用いられたデータセット



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/1a4018a5-ddef-80fa-1b2a-3f0949eda4ea.jpeg)

BOX/画像が大になればなるほど部分的な重なり等も見られる日常生活のコンテキストに近い。

目的に応じたBox/画像の選択を！
クラス数が大きいことは嬉しいのか？

######分類問題の評価指標

Confusion Matrix


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/bc1bfe47-9f48-a341-684e-ac89eb630ed4.jpeg)

物体検出においてバウンディングボックスはThresholdの設定とconfidenceの値によって変化する。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/dc060f1b-0e34-cc64-00b4-b49895bae25d.png" width=60%>

物体検出においてはクラスラベルだけでなく、物体位置の予測精度も評価したい。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/63be3504-6cba-13c0-9c20-c25c8508d5a9.png)

Precision/Recallの計算例


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/aa53c116-f971-dd27-95a8-1703b97bf023.jpeg)

Average Precisionとは

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/6332b18a-a6ff-e470-dea6-9345b792b625.jpeg)


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/ca93d019-60f1-49ec-fc44-7057b8825f06.jpeg)


FPS :Flames per Second

一秒間あたりに検出する数





SSD :single shot dectentation

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/592e51ac-5f90-12d3-d02b-bcc98f1bfd5e.jpeg)

ベースネットワークはVGG16として、ネットワークアーキテクチャ
が構成される。


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/27cca269-1d74-42d1-4eed-47d58d52a2e5.jpeg)


特徴マップから出力



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/13c803ff-0d57-2ec3-013b-e53fe0eeac67.jpeg)


SSDのデフォルトボックス数


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/d5552efa-f27b-aa85-25f2-d8e88c4f46ee.jpeg)



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/34f285bb-9356-269d-eadf-0fd74f95ac3f.jpeg)


####セグメンテーション


Semantic segmentationの肝



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/6b1805d5-7b36-8bf8-0c6b-fa703d12723d.jpeg)

正しく物体を認識するためには受容野にある程度の大きさが必要である。

受容野を広げる典型：
１.深いCov.層　２.プーリング（ストライド）


いかに元の解像度にアップサンプリングすることが鍵

Deconvolution/Transposed convolution


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/e19c33be-8741-5301-0b61-0760df14358e.jpeg)



![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/b7e764e7-8ca6-b11c-3e6b-3aa32d860264.jpeg)

Dilated Convolution


![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653571/7f29127f-dff6-ae5d-28b8-ecd44f7af055.jpeg)