【Deep Q Learning、深層強化学習】keras-rlを試してみる

今回は深層強化学習ライブラリのKeras-rl をとりあえず試したいと思います。

基本的なpythonの操作はできることを想定しています。

keras-rlとは

Keras-rlとは 深層学習用ライブラリであるkerasを用いて、深層強化学習のアルゴリズムを実装したライブラリです。
比較的容易に深層強化学習を試すことができます。

keras-rl/keras-rl
Deep Reinforcement Learning for Keras. Contribute to keras-rl/keras-rl development by creating an account on GitHub.

install方法

Keras-rlのインストール方法は以下のようになります。

Keras-rlを使用するために他にもいくつかインストールしておく必要があります。

問題設定

今回はOpen AI GymのCartpoleという問題を深層強化学習によって解いてみます。

OpenAI Gym

強化学習のベンチマーク問題を集めたOSSです。

keras-rlの強化学習エージェントに解かせる問題は、OpenAI Gymのインターフェースに準じて作成する必要があります。

OpenAI Gymは以下のコマンドでインストールできます。

Cartpole問題とは

CartPoleは、 棒が設置してある台車があり、
台車を棒が倒れないように
うまくコントロールする問題になります。

f:id:ttt242242:20190428190208p:plain

出典:Leaderboard · openai/gym Wiki · GitHub

制御値、観測、報酬等について

制御値(行動)

制御値は、台を左に押す(0)か 右に押す(1)の二択になります。

  操作
0 左に押す
1 右に押す
観測

観測値は、台車の位置、台車の速度、棒の角度、棒の先端の速度の4つになります。

観測情報 最小値 最大値
台車の位置 -2.4 2.4
台車の速度 -inf inf
棒の角度 -41.8° 41.8°
棒の先端の速度 -inf inf
報酬

報酬としては1を与え続けます。

エピソードの終了判定

以下のどれかの条件を満たした場合に、
エピソードが終了したと判定されます。

  • ポールのアングルが±12°以内
  • 台車の位置が±2.4以内
  • エピソードの長さが200以上

keras-rlを動かしてみる

Cartpole問題を深層強化学習で解きます。

ソースコードの解説をしていきます。

まず、もろもろ今回の実験に必要なものをimportします。

Cartpole問題(環境)を定義します。

次にDeep Q Learning のQ Networkを定義します。
このモデルはTarget Networkも兼ねています。
ここはKerasのモデルで簡単に定義できます。
入力は観測情報(observation)で、出力は各行動の期待報酬ですので、行動数(nb_actions)分になります。

次にExperience Replyで用いるExperienceを保存しておくためのMemoryと、
行動選択に用いるPolicyを定義します。今回はBoltzmann行動選択法を用います。

ここで、Deep Q Networkを用いた深層強化学習エージェントを定義します。
先程のQ Network, memoryやpolicyなどを渡します。
そして、Q Networkのcompileを行います。compile時にTarget Networkのcompileをおこないます。

深層強化学習エージェントの学習を行います。
fit関数を用いて学習を行います。ここで、最初に定義したenvなどを渡して学習します。

学習したモデルを以下のコードで保存します。

最後に学習し終えたモデルを用いて評価をおこないます。
ここでは学習や探索はしません。

コードの全体像を以下に示します。

実験結果

上述したソースコードを実行すると以下のように出力します。
以下の出力は、学習し終えた深層強化学習エージェントでCartpole問題を解いた結果です。
各エピソードともに200ステップ、ポール立たせられているので、正しく学習出来ています。

エピソード毎の報酬の変化の推移

エピソード毎の報酬の変化の推移をプロットしてみました。(参考程度) f:id:ttt242242:20170905060828p:plain

学習が進むにつれて報酬が向上していることがわかります。

参考文献(深層強化学習の初心者向け教科書)

つくりながら学ぶ! 深層強化学習 ~PyTorchによる実践プログラミング~

コメント

タイトルとURLをコピーしました