Terrarium

白紙から描きなおすには ちょうどいいかもしれない

OpenAI Gymを動かしてみた(keras-rlを用いたDQN編)

前回OpenAI Gymのチュートリアルを使ってQ学習を試してみました. 今回はAlphaGoなどで話題のDQN(Deep Q Network)を試してみたいと思います.

1. Deep Q Network

Deep Q Networkとは,Q学習で用いられるQ関数(状態を入力にとり,各行動の価値を返す.行動価値関数)をDeep Neural Networkで表現したものです. Q学習においては,行動価値関数はテーブルを用いて表現されるのが一般的です. しかし,ゲームなどの多くの状態をもつ環境や,実世界などの連続値環境では,テーブルのサイズが大きくなりうまく学習ができません. このテーブルをニューラルネットワークで近似しようというのが基本的なアイデアです. (以上は私の定性的理解です)

DQNは学習が収束しにくいなどの欠点があり,それを回避するためにExperience Replayなどの様々な手法が取り入れられていますが,今回はkeras-rlという強化学習ライブラリを使って簡単に試してみたいと思います.

2. keras-rl

kerasは機械学習のライブラリの一つです.

https://keras.io/ja/

TheanoやTensorflowのラッパーであり,これらに比べて簡単にニューラルネットワークを記述することができます.

keras-rlはkeras向けの強化学習ライブラリで,

  • Deep Q Learning (DQN)
  • Double DQN
  • Deep Deterministic Policy Gradient (DDPG)

など様々な強化学習手法を試すことができます.

github.com

ドキュメントはこちらです.

keras-rl.readthedocs.io

3. 試してみる

まずはkerasとkeras-rlのインストールを行います. なおこの部分は以下のリンクを参考にしました. qiita.com

  • keras
pip install keras
  • keras-rl
git clone https://github.com/matthiasplappert/keras-rl.git
pip install ./keras-rl

keras-rlを展開したディレクトリに,example/dqn_cartpole.pyというファイルがあると思うので,それを実行します.

するとLayer情報が出力された後,Cartpoleの描画が始まります. しばらくすると学習され,持続時間が伸びていくことが確認できます.

私の環境では200エピソード程度でほぼ最後まで続くようになりました. (Q学習では数千エピソード程度の学習が必要だったので,それより優れているかもしれません.パラメータチューニングを行なっていないのでなんとも言えませんが…)

4. その他

自分でアルゴリズムを作りたい,などの場合は,CartPole-v0環境についてのドキュメントを確認すると良いと思います.

github.com

また,env.render()で描画される画面は,ディスプレイに見えていない時(ウィンドウの後ろにあるなど)は描画がスキップされるらしく,必要な時だけ見えるようにしておくことで学習の高速化が図れます.

今回DQNの細かい理論,アルゴリズムには触れませんでしたが,下のリンクはPythonとKeras,Tensorflowを用いてDQNの実装例があるので,このような記事を参考にすると良いと思います.

DQNをKerasとTensorFlowとOpenAI Gymで実装する