AlphaGo的分析
最近我仔細看了下AlphaGo在《自然》雜志上發(fā)表的文章,寫一些分析給大家分享。
AlphaGo這個系統(tǒng)主要由幾個部分組成:
1. 走棋網(wǎng)絡(luò)(Policy Network),給定當前局面,預測/采樣下一步的走棋。
2. 快速走子(Fast rollout),目標和1一樣,但在適當犧牲走棋質(zhì)量的條件下,速度要比1快1000倍。
3. 估值網(wǎng)絡(luò)(Value Network),給定當前局面,估計是白勝還是黑勝。
4. 蒙特卡羅樹搜索(Monte Carlo Tree Search,MCTS),把以上這三個部分連起來,形成一個完整的系統(tǒng)。
我們的DarkForest和AlphaGo同樣是用4搭建的系統(tǒng)。DarkForest較AlphaGo而言,在訓練時加強了1,而少了2和3,然后以開源軟件Pachi的缺省策略 (default policy)部分替代了2的功能。以下介紹下各部分。
1.走棋網(wǎng)絡(luò):
走棋網(wǎng)絡(luò)把當前局面作為輸入,預測/采樣下一步的走棋。它的預測不只給出最強的一手,而是對棋盤上所有可能的下一著給一個分數(shù)。棋盤上有361個點,它就給出361個數(shù),好招的分數(shù)比壞招要高。DarkForest在這部分有創(chuàng)新,通過在訓練時預測三步而非一步,提高了策略輸出的質(zhì)量,和他們在使用增強學習進行自我對局后得到的走棋網(wǎng)絡(luò)(RL network)的效果相當。當然,他們并沒有在最后的系統(tǒng)中使用增強學習后的網(wǎng)絡(luò),而是用了直接通過訓練學習到的網(wǎng)絡(luò)(SL network),理由是RL network輸出的走棋缺乏變化,對搜索不利。

有意思的是在AlphaGo為了速度上的考慮,只用了寬度為192的網(wǎng)絡(luò),而并沒有使用最好的寬度為384的網(wǎng)絡(luò)(見圖2(a)),所以要是GPU更快一點(或者更多一點),AlphaGo肯定是會變得更強的。
所謂的0.1秒走一步,就是純粹用這樣的網(wǎng)絡(luò),下出有最高置信度的合法著法。這種做法一點也沒有做搜索,但是大局觀非常強,不會陷入局部戰(zhàn)斗中,說它建模了“棋感”一點也沒有錯。我們把DarkForest的走棋網(wǎng)絡(luò)直接放上KGS就有3d的水平,讓所有人都驚嘆了下??梢哉f,這一波圍棋AI的突破,主要得益于走棋網(wǎng)絡(luò)的突破。這個在以前是不可想像的,以前用的是基于規(guī)則,或者基于局部形狀再加上簡單線性分類器訓練的走子生成法,需要慢慢調(diào)參數(shù)年,才有進步。
當然,只用走棋網(wǎng)絡(luò)問題也很多,就我們在DarkForest上看到的來說,會不顧大小無謂爭劫,會無謂脫先,不顧局部死活,對殺出錯,等等。有點像高手不經(jīng)認真思考的隨手棋。因為走棋網(wǎng)絡(luò)沒有價值判斷功能,只是憑“直覺”在下棋,只有在加了搜索之后,電腦才有價值判斷的能力。
2. 快速走子
那有了走棋網(wǎng)絡(luò),為什么還要做快速走子呢?有兩個原因,首先走棋網(wǎng)絡(luò)的運行速度是比較慢的,AlphaGo說是3毫秒,我們這里也差不多,而快速走子能做到幾微秒級別,差了1000倍。所以在走棋網(wǎng)絡(luò)沒有返回的時候讓CPU不閑著先搜索起來是很重要的,等到網(wǎng)絡(luò)返回更好的著法后,再更新對應(yīng)的著法信息。
其次,快速走子可以用來評估盤面。由于天文數(shù)字般的可能局面數(shù),圍棋的搜索是毫無希望走到底的,搜索到一定程度就要對現(xiàn)有局面做個估分。在沒有估值網(wǎng)絡(luò)的時候,不像國象可以通過算棋子的分數(shù)來對盤面做比較精確的估值,圍棋盤面的估計得要通過模擬走子來進行,從當前盤面一路走到底,不考慮岔路地算出勝負,然后把勝負值作為當前盤面價值的一個估計。這里有個需要權(quán)衡的地方:在同等時間下,模擬走子的質(zhì)量高,單次估值精度高但走子速度慢;模擬走子速度快乃至使用隨機走子,雖然單次估值精度低,但可以多模擬幾次算平均值,效果未必不好。所以說,如果有一個質(zhì)量高又速度快的走子策略,那對于棋力的提高是非常有幫助的。
為了達到這個目標,神經(jīng)網(wǎng)絡(luò)的模型就顯得太慢,還是要用傳統(tǒng)的局部特征匹配(local pattern matching)加線性回歸(logistic regression)的方法,這辦法雖然不新但非常好使,幾乎所有的廣告推薦,競價排名,新聞排序,都是用的它。與更為傳統(tǒng)的基于規(guī)則的方案相比,它在吸納了眾多高手對局之后就具備了用梯度下降法自動調(diào)參的能力,所以性能提高起來會更快更省心。AlphaGo用這個辦法達到了2微秒的走子速度和24.2%的走子準確率。24.2%的意思是說它的最好預測和圍棋高手的下子有0.242的概率是重合的,相比之下,走棋網(wǎng)絡(luò)在GPU上用2毫秒能達到57%的準確率。這里,我們就看到了走子速度和精度的權(quán)衡。