DeepMindの外部メモリー型DQNの論文を読む

ランニングできず 英語できず

(1) DeepMindの外部メモリーDQNの論文を読む

「Neural Episodic Memory](2017/03) https://arxiv.org/abs/1703.01988

この論文は人間がある状況で適切な行動を求められる場合、過去の類似した状況での結果を思いだして行動選択する事をモデル化したものである。この発展版がDeepMindの外部記憶メモリを使う「Neural Turing Machine」である事がわかった。

このモデルはUNREALなど多くのモデルの一部として採用されており、一般的になりつつある。

一般にBellman方程式は、状態sでの採った行動aでの期待できる将来価値Qを計算する式である。しかし将来への漸化式になっているので陽に解けないので、Q関数は特徴量\phiとパラメータ\thetaの線形和で近似する場合が多い。

   Q_{t+1}(s,a) = \mathbb{E}\left(r_t + \gamma \max_{a'}Q_t(s',a')\right)

   Q(s,a;\theta) = \sum_{k} \phi_k(s,a) * \theta_k

 DQNはQ学習アルゴリズムとして、2つの重要な考え方を導入してEnd-to-Endの問題を解くモデルを実現した。

  1)特徴量\phi(s,a)はゲーム画像をDeepLearningのCNNで抽象化して生成する

  2)パラメータ\thetaは、t時点に実際得られた報酬rと近似されたQ関数の差からパラメータ\theta_t微分してして解き、さらに近似を精緻化する。

   \mathcal{L}(\theta_t) = \mathbb{E_{s,a \sim p}}\left((r_t - Q(s,a;\theta_t)^2\right)

  \nabla_{\theta_t} \mathcal{L}(\theta_t) = \mathbb{E_{s,a \sim p}}\left(\left(r+\gamma \max_{a} Q(s',a';\theta_{t-1}) - Q(s,a;\theta_t)\right) \nabla_{\theta_t} Q(s,a;\theta_t)\right)  

  \theta'=\theta +  \eta \nabla_{\theta^*}\mathcal{L}(\theta^*)    ここで \etaは学習率

 

 しかし、DQNは人が2時間でマスターするゲームを200時間もかかってしまう。これはQ関数が単なるパラメータの近似関数なので有効な学習が難しいためと考えられる。

そこで、今までの実際得た価値を外部記憶に記憶させ、今の状況と似たものから呼出して価値を計算してしまおうとする考え方である。

 

f:id:mabonki0725:20170816105519p:plain

 この外部記憶モデルは近似的なQ関数の代替なので、素早い計算が要求されるので

・簡単な内積計算でQ値を計算する

・書込みは追加だけ

 以下はモデルの説明

1)外部記憶からの呼び出し

・外部記憶は行動a毎に設定され、各々外部記憶M_aがある。外部記憶はインデックスh_iとその値Q_iの表構造で構成されている。

・現在のゲーム画像sをCNNで抽象化してベクトルhをキーとして生成する。

・複数の行動a毎に外部記憶M_aをキーhで検索して、行動毎に価値Q(s,a)を計算する。その中で最大の価値Qを採る行動を決定する。

・キーが一致しない場合が殆どなので(キーは画像の場面を表わすから)、外部記憶のインデックスh_iとキーhが似ていいる程、尊重する様調整する。

 キーが似ているかは内積を採ればいいのであるが、少し上等にしてガウシアンカーネルk(h,h_i)を使って調整する

 注)ガウシアン・カーネルとはキーhと検索インデックスh_iの一致具合を正規分布表現するものである。

    調整の重みは     w_i  = \frac{k(h,h_i)}{\sum_j k(h,h_j)}

 算出するQ値は    Q(s,a) = \sum_j w_j * Q_j

2) 外部記憶への書込み値 

 ・ゲーム画像sを表わすキーhの追加書込みの値はN期先までの価値としている。

    N期先の価値関数    rは報酬  \gammaは将来への割引値

 {Q^N(s_t,a) = \sum_{j=0}^{N-1}\gamma^j r_{t+j} + \gamma^N \max_{a'} Q(s_{t+N},a')}

・既存の外部メモリーの価値Qiの調整を行う。 \alphaは調整係数

 Q_i= Q_i + \alpha \left(Q^N(s,a) - Q_i\right)

・もし追加枠が一杯になれば、最も近いインデックスを持つものと置き換える

 

 

この様な外部記憶を使うことによって、従来モデルと比較して大幅な改善を達成している。

f:id:mabonki0725:20170816120543p:plain