我想訓練神經網絡玩2048遊戲。我知道神經網絡對於像2048這樣的國家遊戲並不是一個好的選擇,但是我希望神經網絡能夠像經驗豐富的人一樣玩遊戲,即只在三個方向上移動平鋪。如何訓練神經網絡來玩2048遊戲?
但我不知道如何自我訓練神經網絡,因爲我們不知道有效的輸出。通常,例如在迴歸中,您知道正確的輸出,並且可以計算損失(例如均方誤差)並更新權重。但在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
所以每個瓦片將被輸入到第一層相應的神經元(有沒有完全連接的二維任何特殊的名字層?)。來自最後一層的預期輸出是長度爲4的矢量,例如, [1,0,0,0]將成爲「向上」移動方向。
現在我已經爲2048遊戲實現了無頭類(在Python/NumPy中),因爲使用可視化輸入很慢並且還有更多工作要做。
P.S.也許我正在錯誤地思考關於這個遊戲的NN學習(或者一般的遊戲)。隨時給我一個更好的方式,我將不勝感激。謝謝:)
編輯:強化學習似乎是方式。下面是一些有用的鏈接:
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