ガウス過程による逆強化学習を実装(python)してみる
先日下記の論文について自分の理解を述べたが、文献に沿ったプログラムがあったので、これを自分なりに修正して稼動してみると、完全に自分の理解が誤っていたことが判明した。もし以前の記述を読んだ方がいれば大変申し訳なく、下記にて修正させて頂きます。
Nonlinear Inverse Reinforcement Learning with Gaussian Processes
(1)ロジックの説明
プログラムによって理解したロジックです。
この手法のプログラムを読むと、ガウス過程の逆強化学習は以下の手順で行っています。
① 局面を表す特徴量を選定します。
②熟練者の操作過程の特徴量を記録します。
⑥の尤度(IRL term)が最大になるまで③から⑥を繰返します。
③特徴量の記録から、ガウスカーネルのパラメータを最大尤度(GP probability) で計算します
④次式に従って特徴量と観測された報酬でカーネル過程回帰します
⑤擬似報酬の事後分布で真の報酬を逆算します
この事後分布(GP posterior)は尤度分布と事前分布ともガウス分布なので
理論解で計算できます
⑥真の報酬よりBellman方程式を解いてこの尤度(IRL term)を計算します。
根拠のロジックは次式の式になります。
ここで
は熟練者のデータ
は特徴量
は観測された報酬
は真の報酬
IRL termはBellman方程式の解
GP posterior はガウス分布の事後分布
GP probabilityはガウス過程回帰
(2) 実験課題
5×5のセルにマーク1と2がある。各セルにエージェントは上下左右に移動する
マーク1からの距離が3以内でかつマーク2からの距離が2以内のセルに居るなら報酬を得る
マーク1から3超かマーク1に居るなら罰則がある。
この規則に従うと以下の報酬になる。
(3) 実装した結果
熟練者のデータは上記(2)のルールに従って移動して、その100経路のログを記録している。
この行動記録から上記(1)のロジックで報酬を算出している。
但し、ARD(Auto Relevant Decision 自動関連決定)のガウスカーネルを使用した。
ガウス過程による逆強化学習の結果(右)は真の報酬に近い値となっている。
参照したプログラムが探しだせなくなったので、自分が修正したプログラムを示します。