The jonki

呼ばれて飛び出てじょじょじょじょーんき

OpenAI GymでQ学習してみた

f:id:jonki:20170103212740g:plain

今更ながらOpenAI Gymに手を出してみました.OpenAI Gymは強化学習の検証プラットフォームです.色々なゲームがGymとしてあるので,自分のアルゴリズムを簡単に検証できます.以前最良経路をQ学習で求める記事を書きましたが,Gym向けに書けばGUIも付いてきて面白いですし,コードをGistで共有していろんな人が見れるのが素晴らしいですね.OpenAI GymについてはQiitaなどの日本語記事も多くありますが,公式ドキュメントをさらっとやるのが良いと思います.pipで簡単に入ります.また結果のアップロード法なども書いてあります.

この記事は私がDQNを勉強するにあたっての勉強段階のメモになりますが,せっかくなので記事にしておきます.

今回やろうとしたことは下記サイトさまの完全な2番煎じです.とても丁寧に導出があるのでわかりやすいです.
OpenAI GymのFrozenLakeをQ学習で解く - 壁は通り抜けられませんよ


ちなみに今回の私の結果はこちらです.お決まりのQ値更新をε-greedy法でやってます.エピソードが20k回を超えたあたりで頭打ちしてるのがわかります.εは0.1なので0.9ぐらいのところで頭打ちになりそうな気がしますが,このFrozenというゲームでのActionは失敗する(床が凍ってるので失敗して違うところに行く)ためこのようになってるのでしょうか.εを大きくすると探索が多くなるので学習回数が稼げるような今回では性能はもっと低くなりました.ちなみにこのFrozenゲームで"Solved"扱いとなるのは,100回以上の連続エピソードで平均報酬が0.78となるときの模様.
gym.openai.com

OpenAIのページにGistのリンクを関連づけできますが,こちらにも転載しておきます.
gist.github.com


またこのコードは学習に100000回,テストに1000回のエピソードを実行しています.テスト時はグリーディにQ値が高いものだけを選んでいるのでまぁまぁの報酬を得られています.ちなみにGymページ上で公開する結果は,実際にエージェントのアクションを実行したものが記録されているので,プログラム上で学習・テストのフェーズに分けていても区別されないので注意が必要です.もしSolvedまでのターン数を少なくするためには学習を途中で打ち切るための工夫が必要になります.

###### LEARNING #####
episodes      : 100000
total reward  : 31345.0
average reward: 0.31
Q Value       :[[ 0.59249091  0.55120355  0.55790889  0.53586489]
 [ 0.37375349  0.28501838  0.32681906  0.50252414]
 [ 0.43046317  0.41389927  0.40868551  0.47895268]
 [ 0.22864477  0.3356128   0.31680292  0.45435774]
 [ 0.61381787  0.36289281  0.40866098  0.40079206]
 [ 0.          0.          0.          0.        ]
 [ 0.19441865  0.16082773  0.31126553  0.19699278]
 [ 0.          0.          0.          0.        ]
 [ 0.49801749  0.32274067  0.38407111  0.64344424]
 [ 0.41881865  0.69643086  0.31627336  0.38262692]
 [ 0.64931095  0.42975229  0.29664946  0.29694533]

 [ 0.          0.          0.          0.        ]
 [ 0.          0.          0.          0.        ]
 [ 0.55541199  0.54653454  0.76694065  0.59618378]
 [ 0.75235909  0.926072    0.83294958  0.78563857]
 [ 0.          0.          0.          0.        ]]
###### TEST #####
episodes      : 1000
total reward  : 741.0
average reward: 0.74


まだ理解が足りてないところもあるけどひとまず今回はこんなところで.