また、CartPole問題なのだが、今回はDeep Q-Network(DQN)で解いた。

解いたといっても、自力で解いたわけではなくて、Udacity DLNDの Reinforcement Learningの回のJupyter Notebookを参考にした。

このNotebookは tensorflowを利用しているのだけれども、理解を深めるためにKerasに移植してみた。

DQNのポイント

Deep Q-Network(DQN)とは、ディープラーニングと強化学習(Q学習)を組み合わせたアルゴリズム。

これがなんなのか、いまいちよくわからなかったので、参考になりそうなリンクをかき集めた。

Q学習で利用するテーブルをニューラルネットワークで関数近似しただけだと、

DQNとは呼ばないらしい。David Silver さんのスライドによると、

以下の3つの学習を促進するための工夫をしたことによって、DQNは安定した学習を可能にしている。

  • Experience Replay
  • Fixed Target Q-Network
  • 報酬のclipping

Fixed Target Q-Networkをいまいち理解していないので、正式なDQNではないのかも。Experience Replayは実装した。

これは、状態の相関関係によって学習がうまくいかないことを防ぐための手法。<s, a, r, s’> の組を保存しておき、学習時に保存したデータ組からランダムにサンプリングしてミニバッチをつくり、それをニューラルネットで学習するという手法。アルゴリズムを Udacity DLNDから引用する。

  • Initialize the memory
  • Initialize the action-value network with random weights
  • For episode = 1, do
    • For , do
      • With probability select a random action , otherwise select
      • Execute action in simulator and observe reward and new state
      • Store transition in memory
      • Sample random mini-batch from :
      • Set if the episode ends at , otherwise set
      • Make a gradient descent step with loss
    • endfor
  • endfor

コード

https://gist.github.com/tsu-nera/edd306ddeefebe4afb1efceefbc3f953

結果

前回のQ学習が3000エピソードくらいで解けたのに対して、今回のDQNは250エピソードで解けた。大幅な進歩だ。

https://gym.openai.com/evaluations/eval_DYySvAnSxuP3oHjZchxaQ