訓練卷積神經網路下五子棋

訓練卷積神經網路下五子棋

本人是計算機專業大四學生,最後一個學期正在寫畢業論文,題目就是用卷積神經網路學習五子棋。在研究了AlphaGo的兩篇paper之後,放棄了Reinforcement Learning的想法(太費時費資源了),決定用大量的數據訓練一個Policy Network。

數據是從這個網站獲得的 http://www.renju.net, 一共50000多局棋局。

方法如下:

  • 第一步,預處理數據:

原始數據是類似這樣的每一步位置的記錄

我將每一局遊戲重現了一遍,以二維數組的形式記錄下每一步之前的棋盤狀態(sample,size: 15x15), 和下一步的位置(one-hot label, size: 15x15 = 225)。

後來我把黑棋用-1表示,白棋用1表示,空白區域還是0表示。

  • 第二步,神經網路構建(Tensorflow):

這是最開始用的神經網路結構,之後又加了一個卷基層,每個卷基層128個filters, 又加了一個全聯接層,兩個全連階層各512個神經元。

  • 第三步,訓練

訓練了一晚上,用的顯卡訓練,testing loss很快降到4.7左右就再也不減小了,但我還是堅持讓它訓練了一晚(可能overfit了也說不準。。)

  • 測試

白棋是我,黑棋是神經網路

不出所料,神經網路很弱很弱(WEAK!!)於是乎,想辦法分析下神經網路究竟學了個什麼??(What the XXXX)

我把神經網路每一次的預測可視化:

橘黃色代表高可能性,深藍色代表極低的可能性

我的天哪,不出所料,神經網路認為越往中心走越好,完全就是無腦了。

怕是overfit的原因,我又快速訓練了一遍神經網路,效果依舊不好。

雖然做成這個樣子論文已經可以了,但是不甘心,又由於沒有系統的學過機器學習和神經網路,是在想不到解決辦法,於是乎發此貼,請大師們指點迷津 :)

更新!:問題找到了,見下圖

圖片是訓練用的Label,我把他們全部加起來又reshape成了15X15的樣子。可以看得出訓練label確實集中在中心區域。

同樣可以從這個頻率直方圖裡看出問題(橫坐標是label 從0標到224, 一共225 個):

再次更新 (三月3號,2018):

增加了100多行代碼的評估函數來輔助神經網路使用,因為神經網路輸出已經給出了一個概率梯度,因此沒有用樹搜索,只是簡單的取神經網路輸出的前20個可能走法進行評估,然後取得分最高的走法去下。發現效果還不錯,因為沒有樹搜索,節省了時間。附上一局人機對戰:


推薦閱讀:

再戰絕藝,半目惜敗
如何看待柯潔在人機大戰後持續連勝?
AlphaZero實踐——中國象棋(附論文翻譯)
不只是圍棋!AlphaGo Zero之後DeepMind推出泛化強化學習演算法AlphaZero
李世石在與AlphaGo對弈的第四局下出的「78挖」這一手是否算得上「神之一手」?

TAG:機器學習 | AlphaGo | 卷積神經網路CNN |