3

我是新來的神經網絡,我設計了一個前饋神經網絡來學習玩遊戲跳棋。 作爲輸入,董事會必須給予,輸出應該有機會贏得和輸。但是,如何將跳棋板理想地轉換爲一排數字以供輸入?每個廣場上有32個可能的正方形和5種不同的可能性(國王或白色或黑色玩家和自由位置)。如果我爲每個正方形的每個可能的值提供輸入單元,這將是32 * 5.另一種選擇是:遊戲跳棋的神經網絡的理想輸入

Free Position: 0 0 

    Piece of white: 0 0.5 && King Piece of white: 0 1 

    Piece of black: 0.5 1 && King Piece of black: 1 0 

在這種情況下,輸入長度將只是64,但我不知道哪一個會給更好的結果?

回答

1

我試過所有可能性和直覺,我可以說最好的想法是分離所有廣場的所有可能性。因此,具體的:

0 0 0: free 
1 0 0: white piece 
0 0 1: black piece 
1 1 0: white king 
0 1 1: black king 

它也可以提高對遊戲等下方的可能性跳威脅或量塊的量的情況等參數。

2

我已經用Tic-Tac-Toe做過這種事情。有幾種方法來表示這一點。 TTT最常見的一種是輸入和輸出,它們代表了電路板的整個尺寸。在TTT中,這變成了9 x隱藏x 9.輸入-1表示X,0表示無,1表示O.然後神經網絡的輸入是電路板的當前狀態。輸出是所需的移動。無論輸出神經元具有最高的激活程度,都將是這一舉措。

傳播訓練在這裏效果不好,因爲你不會有有限的訓練集。像模擬退火,PSO或具有分數功能的任何東西都是理想的。爲了評分功能而將網絡彼此對抗會很好。

這對TTT有一定幫助。我不確定它如何適用於跳棋。國際象棋可能會毀掉它。對於Go而言,它可能是無用的。

問題是神經網絡只會在固定位置學習模式。例如,跳過左上角的對手與跳過左下角的對手完全不同。這些必須單獨學習。

也許更好的是以位置獨立的方式表示董事會的確切狀態。這需要一些思考。例如,你可能會傳達什麼「跳躍」機會存在。什麼方向走向王廣場的機會存在等,並允許網絡學習優先這些。

+0

我很喜歡這種思維方式「也許更好的是以位置獨立的方式表示董事會的確切狀態」!因此你具體說我必須選擇32個輸入神經元?對於0.5和-0.5(對手),對於國王-1和1以及自由位置0.I我會嘗試。在我的神經網絡中,有3個輸出神經元可以改變贏球,輸球和抽球;由於輸入神經元數量較少,它們可能也會以這種方式更加敏感。對於培訓,我打算使用TD進行強化學習,這會使情況更加困難。謝謝! – Asqan 2013-05-04 23:59:27

1

如果有人對這個主題感興趣,我建議用32維矢量編碼跳棋板。我最近在一個專家Checkers數據庫上訓練了一個CNN,並且能夠在沒有搜索的情況下實現令人驚訝的高水平遊戲,與Deepmind用於預訓練AlphaGo的有監督的學習步驟有些相似(我懷疑)。我將我的輸入信息表示爲一個8x4的網格,其中集合[-3,-1,0,1,3]中的條目對應於一個對立的國王,對立的棋子,空的,自己的棋子,自己的國王。因此,輸入空間可以被縮減爲32維向量,而不是用160維矢量編碼板,其中每個維度對應於定位件組合,輸入空間可以減小到32維矢量,其中每個板位置由唯一維度表示,該位置由一組實數編碼 - 這是在沒有任何信息損失的情況下完成的。

至少在我的腦海裏,更有趣的問題是哪種輸出編碼最有利於學習。一種選擇是以與輸入相同的方式對其進行編碼。我建議不要這樣做,發現將輸出編碼簡化爲一個位置(要移動的部分)和一個方向(沿着它移動所述部分)對於學習來說更有利。雖然其原因可能更爲微妙,但我懷疑這是由於跳棋的巨大狀態空間(比如50^20棋盤)。考慮到我們的預測模型的目標是接受包含大量可能狀態的輸入,並且從(最多)48個可能性(除跳躍之外的4個可能方向的12個時間)產生一個輸出(即,移動),構建神經網絡的首要任務應該是將其輸入和輸出空間的複雜性與實際遊戲的複雜性相匹配。考慮到這一點,我選擇將輸出編碼爲32 x 4矩陣,每行代表一個電路板位置,每列代表一個方向。在訓練過程中,我簡單地將其解釋爲128維單編碼向量(使用softmax激活的argmax)。請注意,這種輸出編碼適用於給定電路板的許多無效移動(例如,從電路板的邊緣和拐角移開,移動到佔用的位置等)。 - 我們希望神經網絡能夠學習有效的播放足夠的訓練集。我發現CNN在學習有效舉措方面做得非常出色。

我已經寫了更多關於這個項目在http://chrislarson1.github.io/blog