はじめに
前回の続き。前回はなんの戦略もなく、ただ試した。
今回は、CrossEntropy Method(CEM)をつかって、OpenAI gym の CartPole-v0 を試した。
CrossEntropy Method(CEM)について
クロスエントロピー法は、2006 年に登場したモンテカルロ法を応用したアルゴリズム。
レアなイベントについてサンプリングすることで(政策改善)、 エリートのみであらたなポリシーをつくる(政策評価)するところに特徴がある。
自分のイメージでは、ランダムにシミュレーションして、 ラッキーな場合のみを選び出して、ポリシーに反映させていくように考えている。
Berkeley の John Schulman さん曰く、このアルゴリズムは、
- Evolutionary algorithm
- Works embarrassingly well
と、激ホメしている。
アルゴリズム
Schulman さんの講義スライドより引用。
この gist の資料も参考になった。以下、アルゴリズムの定義を引用。
平均(mean)とガウシアンの共分散(sigma)を初期化し、n_iter回以下を繰り返す。
- batch_size 分の theta を mean と sigma からなるガウス分布から集める
- noisy evaluation を実施して、これらの theta からの報酬を得る
- top p% のサンプルを選択する(これをエリート集合と呼ぶ)
- エリート集合の mean と sigma で 現在の値を更新する。
Lab1
Schulman さんの 2016 年 Deep Reinforcement Learning サマースクールの課題をやる。
クロスエントロピーメソッドで cartpole を攻略するためのスターターコードがある。
Code
スターターコードの穴埋め部分を埋めてみた。nv.monitor.clos のコードを参考にした。
Result
結果は、OpenAI Gym にアップロードした。
132.20 ± 6.42. という結果で、合格ラインの 195 には程遠いが、前回よりはずっと改善した。
embarrassingly だ!
参考リンク
- Practical RL week1: https://github.com/yandexdataschool/Practical_RL/tree/master/week1
- Article about CEM in general - https://people.smp.uq.edu.au/DirkKroese/ps/eormsCE.pdf
- Article about CEM for optimization - https://people.smp.uq.edu.au/DirkKroese/ps/CEopt.pdf
- Article about CEM in reinforcement learning - https://www.aaai.org/Papers/ICML/2003/ICML03-068.pdf