私は2048ゲームをプレイする神経ネットワークを訓練したい。私はNNが2048のような州のゲームのための良い選択ではないことを知っていますが、NNが経験豊富な人間のようにゲームをプレイする、つまり3方向にのみタイルを動かすことを実現したいと思います。2048ゲームをするためにニューラルネットワークを訓練するにはどうすればよいですか?
しかし、私たちは有効な出力がわからないので、NNを自己学習する方法を理解できません。通常、回帰では、正しい出力を知っていて、損失(例えば、二乗平均誤差)を計算して重みを更新することができます。しかし、2048年に有効な出力は基本的には不明です(もちろん、あなたが移動できる各方向のスコアを計算することができます。たとえば、差が最も大きい方向をscore_after_move - previous_score
とすると有効な出力になりますが、それは自己学習する方法ではないと思います。 NN)。それで、2048ゲームの損失関数を定義することは可能ですか?最高のものは分化可能なものです。
次の質問は、ウェイトを更新するときです:各移動後または完全なゲームの後(ゲームオーバー)ですか?それが重要な場合
は:私のNNトポロジーは現在、単純なために次のようになります。
2D matrix of gaming board -> 2D matrix of input neurons -> 2D fully-connected hidden layer -> 1D 4-neuron layer
ので、各タイルは、第一の層に対応するニューロンへの入力となります(2Dのための特別な名前が完全に接続されています層?)。最後の層からの期待される出力は、長さ4のベクトルである。 [1、0、0、0]は「上」の移動方向になります。
今のところ私は2048ゲーム用のヘッドレスクラス(Python/NumPy)を実装しています。これは、ビジュアル入力を使用するのが遅く、さらに多くの作業が必要なためです。
P.S.たぶん私はこのゲーム(または一般的にゲーム)のNN学習について間違って考えています。私にもっと良い方法を教えてもらえたら、私はそれを感謝します。ありがとう:)
EDIT:強化学習は方法と思われる。だから、https://github.com/matthiasplappert/keras-rlが最善の方法であるように思わ
Demystifying Deep Reinforcement Learning
Action-Value Methods and n-armed bandit problems
Deep Reinforcement Learning for Keras
をあなたは、これは面白いかもしれません:ここに完全にそれを忘れて、ソースへの約束のリンクですhttps://www.youtube.com/watch Δv= qv6UVOQ0F44 – Tim
それはいいです:)私はまた、いくつかの遺伝的アルゴリズムを実装したい。残念なことに、著者は説明を書いていないので、ソースコードを読むだけです。 – jirinovo
あなたはリクエストしたとおり、この質問をSOに移行することは可能ですが、トピックにあるようには見えないため、移行が拒否される可能性があります。 – whuber