TensorFlow でビデオゲーム攻略 (1) パックマン / DQN (Deep Q-Network) の実装
DQN – Deep Q Network
DeepMind 社で有名になった、DQN (Deep Q-Network) の利用によるビデオゲームの攻略を TensorFlow で実装してみました。
DQN は(強化学習の)Q 学習に深層学習をミックスインしたものです。
Wikipedia によれば、Q 学習 は有限マルコフ決定過程において全ての状態が十分にサンプリングできるようなエピソードを無限回試行した場合、最適な評価値に収束することが理論的に証明されています。
DQN の元々のペーパーは以下ですが :
V. Mnih, K. Kavukcuoglu, D. Silver, A. Graves, I. Antonoglou, D. Wierstra and M. Riedmiller
(Submitted on 19 Dec 2013)
実装は以下を参考にしています :
V. Mnih, A. P. Badia, M. Mirza, A. Graves, T. P. Lillicrap, T. Harley, D. Silver, K. Kavukcuoglu
(Submitted on 4 Feb 2016 (v1), last revised 16 Jun 2016 (this version, v2))
nature 掲載でも有名になりました :
(Received: 10 July 2014, Accepted: 16 January 2015, Published online: 25 February 2015 )
TensorFlow でパックマン攻略
TensorFlow による実装はそれほど難しくはなく、(というか寧ろ簡単で、)4 フレームを入力として actor (agent) の action を出力とする、単純な CNN (Convolutional NN, 畳み込み NN) モデルを用います。アルゴリズムは上記 Asynchronous Methods for Deep Reinforcement Learning の Algorithm 1. Asynchronous one-step Q-learning に従っています。
ポイントは、actor-learner をマルチスレッドにするのですが、(ε-greedy 法の)ε 値を減衰させる際の下限のバランスを上手く取ることでしょうか。(ペーパーどおりの値を使用しました。)
題材は取りあえず「パックマン」です。
この選択に深い意味はなく、「ブロック崩し」などの例を良く見るので違う選択にしてみただけです。
18 million steps 訓練してみた結果が以下です。まずは Q 最大値の推移 :
ある程度収束はしていますが、もう少し値は上昇しそうです。
しかし訓練中の reward (報酬、この場合はスコア)を見てみると、既に頭打ちになっています :
サンプリングが少し粗いので、必ずしも reward が落ちてきているわけではないのですが、
評価してみると、10 million あたりをピークにして性能は徐々に落ちていきました。
訓練途中のものですが、評価例をアップロードしておきます :
まだ工夫の余地はありそうですし、他のゲームも試してみる予定です。
以上