本稿は、E資格の受験資格の取得を目的としたラビットチャレンジの受講に伴うレポート記事である。
強化学習とは、教師あり学習、教師なし学習に並ぶ機械学習の一分野である。
与えられた環境のなかで報酬を最大化できるような行動を選択するよう、エージェントを学習させることを指す。行動の結果として与えられる利益をもとに、行動を決定する原理を改善していく仕組みを構築する。
教師あり学習、教師なし学習では、データに含まれるパターンを見つけ出すおよびそのデータから予測することが目標であるが、強化学習では、優れた方策を見つけることが目標である。
強化学習にとって冬の時代があったが、計算速度の進展により大規模な状態をもつ場合の、強化学習を可能としつつある。
全体的なイメージは以下の図の通り。
全体的なイメージ
強化学習に必要な概念は以下の通り。
状態:エージェントが環境において置かれた状態のことを指す。行動によって状態は変化する。
方策:状態を踏まえ、エージェントがどのように行動するのかを定めたルールのことを指す。
価値:その時点で貰える利益ではなく、(将来に渡り得られる)利益を指す。
行動:エージェントが環境に働きかける内容を指す。エージェントは複数の方策の中から1つを選択する。
報酬:エージェントがある状態において、ある行動を起こした結果として、得られた利益のことを指す。
マーケティングを例にとると、以下が考えられる。
以下のように、探索と利用にはトレードオフの関係性がある。
価値関数とは、その名の通り、価値を評価する関数のことを指す。
方策関数$\pi(s) = a$とは、方策ベースの強化学習手法において、ある状態でどのような行動を採るのかの確率を与える関数のことを指す。
これらを組み合わせた手法が開発された。
方策をモデル化して、最適化する方法を指す。
\begin{align}
\theta^{(t+1)} = \theta^{(t)} + \epsilon \nabla J(\theta)
\end{align}
この$J$は方策のよさを示す関数で、定義する必要がある(期待報酬という)。$\theta$は重みパラメータ、$\epsilon$は学習率である。
\begin{align} \nabla_{\theta} J(\theta) = \mathbb{E}_{\pi_{\theta}}[\nabla_{\theta} \log \pi_{\theta}(a|s) Q^{\pi}(s, a)] \end{align}
Google DeepMindによって開発された強化学習によるコンピュータ囲碁プログラムである。2016年3月9日、世界最強の韓国囲碁棋士を4勝1敗で倒したことによりニュースに度々取り挙げられた。
ここでは、以下の2つを取り扱う。
AlphaGo Leeの学習は以下のステップで行われる。
PolicyNet、ValueNetいずれも畳み込みニューラルネットワークである。
この学習で作成したPolicyNetは57%ほどの精度であった。
強化学習の手法の1つで、価値観数を学習する時に使用する。
コンピュータ囲碁ソフトでは現在もっとも有効とされている探索法であり、理論的にも有効性が認められている。
AlphaGoのモンテカルロ木探索は選択、評価、バックアップ、成長という4つのステップで構成される。
※ヒューリスティックは、一般的な「経験的な」「発見的な」と言う意味ではなく、「探索を効率化するのに有効な」と言う意味で用いる。
PolicyValueNetは、PolicyNetとValueNetが統合されたものである。ただし、方策関数と価値観数の出力をそれぞれ得ることができるようにするために、ニューラルネットワークを途中で枝分かれさせている。
ネットワークにショートカット構造を追加して、勾配の爆発、消失を抑える効果を狙ったもの。
AlphaGoの学習は自己対局による教師データの作成、学習、ネットワークの更新の3ステップで構成される。
深層学習は多くのデータを使用したり、パラメータ調整のために多くの時間を使用したりするため、高速な計算が求められる。そこで、以下のようなアプローチが考えられる。
親モデルを各ワーカーに子モデルとしてコピーする。そして、データを分割し、各ワーカーごとに計算させる方法をデータ並列化という。
データ並列化は各モデルのパラメータの合わせ方で、同期型か非同期型か決まる。
環境によって求められる条件が異なるため、それに応じて使い分けられている。
親モデルを各ワーカーに分割し、それぞれのモデルを学習させ、全てのデータで学習が終わった後で、1つのモデルに復元する方法。
ニューラルネットの学習は単純な行列演算が多いことから、GPUを活用することにより、高速化が可能である。特に、元々の使用目的であるグラフィック以外の用途で使用されるGPUの総称であるGPGPU (General-purpose on GPU)が活用されている。
Deep Learningフレームワーク(Tensorflow, Pytorch)内で実装されており、指定するだけで使用可能なので、特段意識する必要はない。
ネットワークが大きくなると大量のパラメータが必要なり学習や推論に多くのメモリと演算処理が必要となる。そこで、通常のパラメータの64 bit 浮動小数点を32 bit など下位の精度に落とすことでメモリと演算処理の削減を行う手法を量子化という。
量子化するにあたり、極端に精度が落とすと誤差が大きくなってしまうが、そうでない限りは性能自体に問題は発生しない。そのため、極端に精度が落とさないようにする必要がある。
学習済みの精度の高いモデルの知識を軽量なモデルへ継承させる手法を蒸留という。一般的には、軽量化しながら、複雑なモデルに匹敵する精度のモデルを得ることができる。
蒸留は教師モデルと生徒モデルの2つから構成される。
複雑なモデルになればなるほどパラメータが膨大な数となっていくが、全てのニューロンが精度に影響を与えるわけではない。そこで、モデルの精度に寄与が少ないニューロンを削減することで省メモリ化、高速化を実現する方法をプルーニングという。
ニューロンの削減は、重みが閾値以下の場合、ニューロンを削減し、再学習するアプローチで行う。
Depthwise Separable Convolution(Depthwise ConvolutionとPointwise Convolution)という仕組みを用いて画像認識において軽量化・高速化・高精度化したモデルのこと。
高さ $H$、幅 $W$、カーネルのサイズ $K$、チャンネル $C$、フィルタ数 $M$とすると以下のようになる。
Dense Blockという仕組みを用いた画像認識モデルのこと。
出力層に前の層の入力を足しあわせる。すなわち、層間の情報の伝達を最大にするために全ての同特徴量サイズの層を結合する。
DenseNet内で使用されるDenseBlockと呼ばれるモジュールでは成⻑率$k$と呼ばれるハイパーパラメータが存在する。
DenseBlock内の各ブロック毎に$k$個ずつ特徴マップのチャネル数が増加していく。
Dense Blockで追加されたチャネルサイズを、ダウンサンプリングして削減し、元に戻す層がTransition Layerである。
WaveNetは、時系列データに対して、畳み込みニューラルネットワーク(Dilated Convolution)を用いたモデルであり、Pixel CNN(高解像度の画像を精密に生成できる手法)を音声に応用したもの。
通常の畳込みと同じ層の深さでもより幅広い時系列を扱うことができる。
■確認テスト
深層学習を用いて結合確率を学習する際に、効率的に学習が行えるアーキテクチャを提案したことがWaveNetの大きな貢献の1つである。提案された新しいConvolution型アーキテクチャは(あ)と呼ばれ、結合確率を効率的に学習できるようになっている。(あ)を用いた際の大きな利点は、単純なConvolution Layerと比べて(い)ことである。
〇解答
(あ) : Dilated Causal Convolution
(い) : パラメータ数に対する受容野が広い。
Seq2seqとは、系列(Sequence)を入力として、系列を出力するもの。
具体的には、RNN x 言語モデルである。
EncoderからDecoderに渡される内部状態ベクトルが鍵である。
Decoder側の構造は言語モデルRNNとほぼ同じだが 隠れ状態の初期値にEncder側の内部状態を受け取る。
Decoderのoutput側に正解を当てれば教師あり学習がEnd2endで行える。
■確認テスト
〇解答
時刻$t$の出力を時刻$t+1$の入力とすることができるが、この方法でDecoderを学習させると、連鎖的に誤差が大きくなり、学習が不安定になったり、収束が遅くなったりする。
■確認テスト
〇解答
訓練時には問題ないように見えても、学習時と本番の時では環境が異なるため、バリデーションで収束しない。
翻訳先の各単語を選択する際に、翻訳元の文中の各単語の隠れ状態を利用する辞書オブジェクトの機能をもつもの。query(検索クエリ)に一致するkeyを索引し、対応するvalueを取り出す操作であると見做すことができる。
Decoderは次の単語を予測するが、RNNを使っていないため系列全ての単語が一度に与えられる。
そのため、未来の単語が見えないようにするため、Decoderでは未来の単語をマスクする。
鳥瞰図
さまざまなアルゴリズムが開発されるにつれ、精度を見るために、
共通として制度評価に用いられるデータセットが必要になる。
物体検知コンペティションで用いられたデータセットは、以下の通り。
コンペ | クラス | Train+Val | Box÷画像 | 画像サイズ |
---|---|---|---|---|
VOC12 | 20 | 11,540 | 2.4 | 470×380 |
ILSVRC17 | 200 | 476,668 | 1.1 | 500×400 |
MS COCO18 | 80 | 123,287 | 7.3 | 640×480 |
OICOD18 | 500 | 1,743,042 | 7.0 | 一様ではない |
ILSVRC17以外は、Instance Annotationが与えられている(物体個々のラベルがなされている)。
一画像当たりのBox数の平均数。
なぜ重要なのか?
混合行列の概要は以下の通り。
混合行列
主な指標は以下の通り。
物体検出においてはクラスラベルだけでなく, 物体位置の予測精度も評価したいことが動機となっている。
bounding boxを用いて、IoUを定義する。
IoU
\begin{align} IoU = \frac{TP}{TP+FP+FN} \end{align}
IOUの直感的理解は難しく、IOUにはよくある誤りがある。
■具体例
以下のプロセスで計算される。
confの閾値を$\beta$とするとき、Recall$=$R($\beta$)、Precision$=$ P($\beta$)
\begin{align}
AP=\int_0^1 P(R) dR
\end{align}
AP(Average Precision)の平均
\begin{align}
mAP=\frac{1}{C} \sum_{i=1}^C AP_i
\end{align}
\begin{align} mAP_{COCO}=\frac{mAP_{0.5}+mAP_{0.55}+mAP_{0.6}+mAP_{0.65}+\cdots +mAP_{0.95}}{10} \end{align}
位置を厳しくしながら評価していったもの。
応用上の要請から, 検出精度に加え検出速度も問題となる(リアルタイム検知も特に大事)ことから生まれた、物体検出の検出速度に対する評価指標。
FPS
1段階検出器のモデルの1つで、VGG16をベースとしたアーキテクチャ。
RCNNでもすでに用いられており、SSDで初めて出てきた概念ではない。
\begin{align} L(x, c, l, g) = \frac{1}{N} (L_{conf}(x,c)+\alpha L_{loc}(x,l,g)) \end{align}
covolutionやpooling をかますことにより入力画像の解像度がどんどん落ちる。これは、解像度が落ちることがSemantic Segmentationにとっては問題
Semantic Segmentationは、入力サイズと同じサイズの画像があり各ピクセルに対してクラス分類が行われるのが基本
解像度が落ちている状態、つまり入力時の画像の解像度とは違う
⇒ どうやって入力時の画像のサイズに戻すのか?
⇒ covolutionやpooling で落ちた解像度を元に戻す(Up-sampling)
概要図
covolutionやpooling で落ちる解像度を元に戻すことをUp-samplingという。
Up-samplingの壁、Up-samplingを如何に行うかが肝となる。
そもそもpoolingしなきゃいいのでは?
⇒ 正しく認識するためには受容野にある程度の大きさが必要。
Up-samplingの手法の1つ
通常のcovolution層と同様にカーネルサイズ、パディング、ストライドを指定する
Convolutionの段階で受容野を広げる工夫をしたもの