質問: reward_j + self.discount_factor * qvalue state_minibatch.append(state_j) y_minibatch.append(y_j) # training self.sess.run(self.training, feed_dict={self.x: state_minibatch, self.y_: y_minibatch}) ``` しているのに loss がほぼ0 のまま Q_max も 報酬(reward) 勝ったら1 を与えているのに 0.002 とか小さいのです。 参考にしたのが 超シンプルにTensorFlowでDQN (Deep Q Network) を実装してみる 〜導入編〜 | ALGO GEEKS です。 よろしくお願いいたします。
回答: playerがランダムアクションする確率をexploration=0.1としているようですが,ここが最初から0.1という小さい値で固定されているのがおかしいと思います. 最初からepsilonが小さいとまだ学習していないモデルがたまたま取るアクションについてばかり経験が蓄積されてしまい,学習がうまく進みません. 最初の方は様々なアクションを試して経験を貯め,後の方は学習したモデルで収益を最大化するために,最初はexploration=1.0から始めて特定の値になるまで徐々に減らしていく(例えば,0.1になるまでアクションする度に0.00001ずつ減らしていく)という手法,いわゆるepsilon-greedyがDQNの実装ではよく用いられているようです(実装が簡単だし効果もあるので). 紹介されている「超シンプルにTensorFlowでDQN〜」のタスクはとても単純(アクションが左右のどちらかに動くという2種類しかない?)なのでexploration=0.1でも時間をかければ十分経験が蓄積されてうまく学習が進むのだと考えられます. コードをちゃんと読んだわけではないので的はずれだったらすみません.