好吧,所以我創建了一個神經網絡Q-learner,使用與DeepMind的Atari算法相同的想法(除了我給出的原始數據不是圖片(然而))。爲什麼我的神經網絡Q-learning不學習井字遊戲
神經網絡的構建:
9個輸入(0代表空白點,1表示 「X」,-1 「O」)
1隱藏層與9-50神經元(試圖用不同的尺寸,激活函數乙狀結腸)
9輸出(1每一個動作,輸出Q值,激活函數乙狀結腸)
- MSE損失函數
- 亞當backprop
我100%相信網絡是正確建立,因爲坡度的檢查和大量的測試。
Q-參數:
- -1獎勵敗局
- -1的獎勵,如果此舉是試圖已佔點(例如,X已經在球員Ø試圖把現場他的「O」)
- 0獎勵吸引
- 0獎勵移動,這不會導致終端狀態
- +1的獎勵贏得比賽
- 下一個狀態(在s,a,r,s'中)是你自己和對手的移動之後的狀態。例如。空板和選手X先轉身並將「X」放在左上角。然後玩家O將「O」放在右上角。那麼s,a,r,s'就是s = [0,0,0,0,0,0,0,0,0],a = 0,r = 0,s'= [1,0, - 1,0,0,0,0,0,0]
問題
我所有的Q值變爲零,如果我給-1獎勵時,由移動已經佔據的位置。如果我不這樣做,網絡不知道它不應該移動到已經佔用的地方,似乎學習任意的Q值。另外我的錯誤似乎並沒有縮小。
解決方案沒有奏效
我曾試圖改變獎勵(0,0.5,1)和(0,1),但它仍然沒有學會。
我試圖將空狀態表示爲0,對於O表示0.5,對於X表示1,但沒有工作。
我已經試圖在移動完成後給出下一個狀態,但它沒有幫助。
我已經嘗試過與亞當和香草回道具,但仍然是相同的結果。
- 我試過從重播內存和隨機梯度下降的批次,但仍然相同
- 將sigmoid更改爲ReLU,但沒有幫助。
- 各種各樣的事情我不記得在GitHub上現在
項目:https://github.com/Dopet/tic-tac-toe(對不起, 醜陋的代碼主要是由於所有的這些代碼的重構,這也應該是簡單的測試看是否算法工作)
要點:
- TicTac類有遊戲本身(由û從歌唱比賽抽象類模板方法模式)
- NeuralNetwork類記錄一些數據文件被稱爲MyLogFile.log在當前目錄
- Block和組合類只是用來創造獲獎情況
- jblas-1.2.4。 jar包含DoubleMatrix庫
這個帖子是非常好的,只要它去。問題是(a)我的方法沒有看到任何錯誤; (b)您沒有提供代碼來重現錯誤。 – Prune
我將項目添加到GitHub。請問你有什麼不清楚的地方! https://github.com/Dopet/tic-tac-toe – Dope
[最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。 – Prune