ベイズによる逆強化学習をC言語で実装してみた
本郷で行われた強化学習アーキテクト(2018/01/16)は千葉大学Dの石川翔太さんのベイズによる逆強化学習であった。
https://www.slideshare.net/ShotaIshikawa2/ss-86214928
最大エントロフィ法の逆強化学習を実装して見て納得できなかった事は、熟練者の方策変更を反映できない事であった。
その点ベイズでは熟練者のデータを分類して、その方策の移動を隠れ変数として反映できる可能性がある。
以下の文献に従って簡単な、ベイズによる強化学習を実装してみた。
https://www.aaai.org/Papers/IJCAI/2007/IJCAI07-416.pdf
プログラム(python) としては下記のGitHubを参照しました。
https://github.com/erensezener/aima-based-irl
熟練者の選択確率をとすると報酬はベイズより次式の事後分布で算出する事ができる。
ここで
:局面
:行動
は観測された熟練者の遷移経路
:熟練者の報酬の事前確率
:分配関数
は行動価値関数 Bellman方程式で解く
隠れ変数Rを変動させて事後分布を最大とするMAP(Maximum Posterior)をすればよい
ベイズモデルの有意性は上記の様に定式化が明確で理解し易いことにあるが、一般に事後分布は尤度関数が共役事前分布でないと理論的に解けず、MCMCによる繰返し計算が必要になる。
以下の手順で計算する。
①報酬の事前分布は一様分布とする
②MCMCを使って最適を探査する
簡単にいうと一様分布の報酬をランダムに変えて生成した熟練者の事後分布が高くなるなら、これを採用する
③生成する尤度分布は仮定されたよりBellaman方程式を解いて価値行動関数に指数比例とする(ボルツマン分布の仮定)
は熟練者の局面での最適行動
この実装では熟練者の経路から局面での最頻度行動としている。
上記のpythonの例だと熟練者の事前報酬を仮定して採用している。
④ 乱数で生成された報酬での熟練者の事後分布が、前に計算された事後分布より高くなれば、この仮定された報酬を選択する。
実験課題
課題は最大エントロフィ逆強化学習と同じ問題とする。
赤がゴール。熟練者データはOpen-AIで解いた100通りの経路とする。
実験結果
ゴールに近い所が報酬が高く、遠い所が低く計算できている。
最大エントロフィ逆強化学習よりは粗い結果となっている。これは熟練者の最適方策を単に経路データから最頻度行動を採用しているためと考えられる。