ガウス過程による逆強化学習を実装(python)してみる

 先日下記の論文について自分の理解を述べたが、文献に沿ったプログラムがあったので、これを自分なりに修正して稼動してみると、完全に自分の理解が誤っていたことが判明した。もし以前の記述を読んだ方がいれば大変申し訳なく、下記にて修正させて頂きます。

Nonlinear Inverse Reinforcement Learning with Gaussian Processes

(1)ロジックの説明

 プログラムによって理解したロジックです。

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

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

 ②熟練者の操作過程の特徴量を記録します。

 ⑥の尤度(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)

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

     \log P(u,\theta|X_u) = -\frac{1}{2} u^T K^{-1}_{u,u} u -\frac{1}{2} \log |K_{u,u}| - \frac{n}{2} \log 2\pi + \log P(\theta)

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

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

   理論解で計算できます

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

     ⑥真の報酬rよりBellman方程式を解いてこの尤度(IRL term)を計算します。

 根拠のロジックは次式の式になります。          

f:id:mabonki0725:20180129073901p:plain

 ここで

  Dは熟練者のデータ

       Xuは特徴量

       uは観測された報酬

       rは真の報酬

  \thetaガウスカーネルのパラメータ

  IRL termはBellman方程式の解

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

       GP probabilityはガウス過程回帰

 

(2) 実験課題

 5×5のセルにマーク1と2がある。各セルにエージェントは上下左右に移動する

 マーク1からの距離が3以内でかつマーク2からの距離が2以内のセルに居るなら報酬を得る

 マーク1から3超かマーク1に居るなら罰則がある。

 この規則に従うと以下の報酬になる。 

f:id:mabonki0725:20180203095534p:plain

(3) 実装した結果

  熟練者のデータは上記(2)のルールに従って移動して、その100経路のログを記録している。

  この行動記録から上記(1)のロジックで報酬を算出している。

  但し、ARD(Auto Relevant Decision 自動関連決定)のガウスカーネルを使用した。

  ガウス過程による逆強化学習の結果(右)は真の報酬に近い値となっている。

f:id:mabonki0725:20180203095721p:plain

 

github.com

参照したプログラムが探しだせなくなったので、自分が修正したプログラムを示します。