ガウス過程による逆強化学習の論文を読む

最大エントロフィの逆強化学習の性能はベイズより優れていることは実装してみて判明したが、下記の論文によるとガウス過程(Gaussian Process)を使った逆強化学習が傑出してよい性能を出している。  

papers.nips.cc

  この論文の高速道路の実験例をみるとパトカーやパトバイクに近い所は人間がスピード抑制をしている事が観測されている。

f:id:mabonki0725:20180129072437p:plain

左上が人間のスピード抑制データ(濃い色)で、GPIRL(ガウス過程逆強化学習)が殆ど等しいことが示されている。ここでの比較先は

 MaxEntIRL(最大エントリフィIRL) 

   FIRL(Feature Construction IRL)

 

 この手法のプログラムを読むと、ガウス過程の逆強化学習は以下の手順で行っています。

 ① 局面を表す特徴量X_uを選定します。

 ②熟練者の操作過程\mathcal{D}の特徴量を記録します。

 ⑥の尤度(IRL term)が最大になるまで③から⑥を繰返します。

  ③特徴量の記録から、ガウスカーネルK_{u,u}のパラメータ\thetaを最大尤度(GP probability) で計算します

      P(\theta|X_u) = - \frac{1}{2} tr(K^{-2}_{u,u}) - \sum_i \log(\lambda+1)

        この\thetaは特徴量X_u正則化項のパラメータです\thetaは乱数を振って上式が最大(最尤度)となる値を採用しています。

  ④式(3)に従って特徴量X_uと観測された報酬uカーネル過程回帰します 

f:id:mabonki0725:20180129073958p:plain

  これはカーネルK_{u,u}を分散とする対数分布ですが、最後に\log P(\theta)が追加されています。

 

  ⑤擬似報酬uの事後分布で真の報酬rを逆算します

   この事後分布(GP posterior)は尤度分布と事前分布ともガウス分布なので

   理論解で計算できます

   r = K^T_{r,u} \cdot k^{-1}_{u,u} \cdot u

   報酬rと特徴量X_uカーネルK_{r,u}を使っています。問題は報酬rの算出にこれが未定なのに使っています。よってこの式は仮置きの報酬rを使って、SGDの繰返しで精緻化する方針としています。

     ⑥式(2)のP(\mathcal{D}|rは仮置きの報酬rよりBellman方程式を解いてこの式(2)尤度(IRL term)を計算します。

 

f:id:mabonki0725:20180129073901p:plain

   ここで

    Dは熟練者のデータ

         Xuは特徴量

         uガウス過程

              rは報酬

    \thetaX_u正則化

    IRL termはBellman方程式の解

         GP posterior はガウス分布の事後分布

         GP probabilityはガウス過程回帰

       ⑦仮置きの報酬rSGDで精緻化するため、本論文ではL-BFGSを使ったと記述があります。この微分式については下記のSupprementに詳細に記述され、Python版ではこの通り実装されています。   

Nonlinear Inverse Reinforcement Learning with Gaussian Processes f:id:mabonki0725:20180311155547p:plain

  SGDの為に以下の微分項を計算する

           \frac{\partial}{\partial \theta} \log P(\mathcal{D},u,\theta|Xu) = \frac{\partial \mathcal{L}_D}{\partial r} \frac{\partial r}{\partial \theta} + \frac{\mathcal{L}_G}{\partial \theta} + \frac{\partial \mathcal{L}_H}{\partial \theta}

           \frac{\partial}{\partial u} \log P(\mathcal{D},u,\theta|Xu) = \frac{\partial \mathcal{L}_D}{\partial r} \frac{\partial r}{\partial u} + \frac{\partial \mathcal{L}_G}{\partial u}

       ここで諸値は以下で与えられる

   \frac{\partial\mathcal{L}_D}{\partial r} = \hat{u} - \mathbb{E}(u) エネルギーベースの逆強化学習

           \frac{\partial\mathcal{L}_G}{\partial \theta_i} = \frac{1}{2} \mathrm{tr} [\alpha \alpha^T - K_{u,u}^{-1} \frac{\partial K_{u,u}}{\partial \theta_i} ] ここで\alpha = K_{u,u}^{-1} u

           \frac{\partial\mathcal{L}_G}{\partial \theta_i} = - K_{u,u}^{-1} u

      \frac{\partial r}{\partial u} = K_{r,u}^T K_{u,u}^{-1}

           \frac{\partial r}{\partial \theta} = \frac{\partial[r=K_{r,u}^T K_{u,u}^{-1} u]}{\partial \theta_i}

         ここで\theta = \{\beta,\lambda\}なので\frac{\partial \mathcal{L}_H}{\partial \theta}は 

    \frac{\partial \mathcal{L}_H}{\partial \beta} = \mathrm{tr} [K_{u,u}^{-3} \frac{\partial K_{u,u}}{\partial \beta}]

            \frac{\partial \mathcal{L}_H}{\partial \lambda} = \mathrm{tr} [K_{u,u}^{-3} \frac{\partial K_{u,u}}{\partial \beta} ] - \frac{1}{\sum_i \Lambda_{ii} +1}

 

実験課題

黄色の位置から3距離までと赤の位置から2距離の場合に居続けると報酬が加算される(左下の赤い範囲)。コマを上下左右に移動して報酬の多寡で強化学習を行った軌跡をデータとして保存する。

f:id:mabonki0725:20180203095534p:plain

強化学習で学習した軌跡でPythonによるガウス過程を使った逆強化学習の結果が右図。一応左図の真の結果に近く細かい報酬が得られている。

f:id:mabonki0725:20180203095721p:plain