谷歌的AlphaGo對(duì)李世石的五番棋大戰(zhàn)已經(jīng)結(jié)束了第一盤的角逐,AlphaGo首戰(zhàn)告捷。為何AlphaGo有能力與人類的頂尖棋手對(duì)決,請(qǐng)看Facebook智能圍棋darkforest的負(fù)責(zé)人田淵棟此前的分析。
撰文 田淵棟(卡耐基梅隆大學(xué)機(jī)器人系博士、Facebook人工智能組研究員)
最近我仔細(xì)看了下AlphaGo在《自然》雜志上發(fā)表的文章,寫一些分析給大家分享。
AlphaGo這個(gè)系統(tǒng)主要由幾個(gè)部分組成:
走棋網(wǎng)絡(luò)(Policy Network),給定當(dāng)前局面,預(yù)測(cè)/采樣下一步的走棋。
快速走子(Fast rollout),目標(biāo)和1一樣,但在適當(dāng)犧牲走棋質(zhì)量的條件下,速度要比1快1000倍。
估值網(wǎng)絡(luò)(Value Network),給定當(dāng)前局面,估計(jì)是白勝還是黑勝。
蒙特卡羅樹搜索(Monte Carlo Tree Search,MCTS),把以上這三個(gè)部分連起來,形成一個(gè)完整的系統(tǒng)。
我們的DarkForest和AlphaGo同樣是用4搭建的系統(tǒng)。DarkForest較AlphaGo而言,在訓(xùn)練時(shí)加強(qiáng)了1,而少了2和3,然后以開源軟件Pachi的缺省策略(default policy)部分替代了2的功能。以下介紹下各部分。
1.走棋網(wǎng)絡(luò)
走棋網(wǎng)絡(luò)把當(dāng)前局面作為輸入,預(yù)測(cè)/采樣下一步的走棋。它的預(yù)測(cè)不只給出最強(qiáng)的一手,而是對(duì)棋盤上所有可能的下一著給一個(gè)分?jǐn)?shù)。棋盤上有361個(gè)點(diǎn),它就給出361個(gè)數(shù),好招的分?jǐn)?shù)比壞招要高。DarkForest在這部分有創(chuàng)新,通過在訓(xùn)練時(shí)預(yù)測(cè)三步而非一步,提高了策略輸出的質(zhì)量,和他們?cè)谑褂迷鰪?qiáng)學(xué)習(xí)進(jìn)行自我對(duì)局后得到的走棋網(wǎng)絡(luò)(RL network)的效果相當(dāng)。當(dāng)然,他們并沒有在最后的系統(tǒng)中使用增強(qiáng)學(xué)習(xí)后的網(wǎng)絡(luò),而是用了直接通過訓(xùn)練學(xué)習(xí)到的網(wǎng)絡(luò)(SLnetwork),理由是RLnetwork輸出的走棋缺乏變化,對(duì)搜索不利。
有意思的是在AlphaGo為了速度上的考慮,只用了寬度為192的網(wǎng)絡(luò),而并沒有使用最好的寬度為384的網(wǎng)絡(luò)(見圖2(a)),所以要是GPU更快一點(diǎn)(或者更多一點(diǎn)),AlphaGo肯定是會(huì)變得更強(qiáng)的。
所謂的0.1秒走一步,就是純粹用這樣的網(wǎng)絡(luò),下出有最高置信度的合法著法。這種做法一點(diǎn)也沒有做搜索,但是大局觀非常強(qiáng),不會(huì)陷入局部戰(zhàn)斗中,說它建模了“棋感”一點(diǎn)也沒有錯(cuò)。我們把DarkForest的走棋網(wǎng)絡(luò)直接放上KGS就有3d的水平,讓所有人都驚嘆了下??梢哉f,這一波圍棋AI的突破,主要得益于走棋網(wǎng)絡(luò)的突破。這個(gè)在以前是不可想像的,以前用的是基于規(guī)則,或者基于局部形狀再加上簡(jiǎn)單線性分類器訓(xùn)練的走子生成法,需要慢慢調(diào)參數(shù)年,才有進(jìn)步。
當(dāng)然,只用走棋網(wǎng)絡(luò)問題也很多,就我們?cè)贒arkForest上看到的來說,會(huì)不顧大小無謂爭(zhēng)劫,會(huì)無謂脫先,不顧局部死活,對(duì)殺出錯(cuò),等等。有點(diǎn)像高手不經(jīng)認(rèn)真思考的隨手棋。因?yàn)樽咂寰W(wǎng)絡(luò)沒有價(jià)值判斷功能,只是憑“直覺”在下棋,只有在加了搜索之后,電腦才有價(jià)值判斷的能力。
2. 快速走子
那有了走棋網(wǎng)絡(luò),為什么還要做快速走子呢?有兩個(gè)原因,首先走棋網(wǎng)絡(luò)的運(yùn)行速度是比較慢的,AlphaGo說是3毫秒,我們這里也差不多,而快速走子能做到幾微秒級(jí)別,差了1000倍。所以在走棋網(wǎng)絡(luò)沒有返回的時(shí)候讓CPU不閑著先搜索起來是很重要的,等到網(wǎng)絡(luò)返回更好的著法后,再更新對(duì)應(yīng)的著法信息。
其次,快速走子可以用來評(píng)估盤面。由于天文數(shù)字般的可能局面數(shù),圍棋的搜索是毫無希望走到底的,搜索到一定程度就要對(duì)現(xiàn)有局面做個(gè)估分。在沒有估值網(wǎng)絡(luò)的時(shí)候,不像國象可以通過算棋子的分?jǐn)?shù)來對(duì)盤面做比較精確的估值,圍棋盤面的估計(jì)得要通過模擬走子來進(jìn)行,從當(dāng)前盤面一路走到底,不考慮岔路地算出勝負(fù),然后把勝負(fù)值作為當(dāng)前盤面價(jià)值的一個(gè)估計(jì)。這里有個(gè)需要權(quán)衡的地方:在同等時(shí)間下,模擬走子的質(zhì)量高,單次估值精度高但走子速度慢;模擬走子速度快乃至使用隨機(jī)走子,雖然單次估值精度低,但可以多模擬幾次算平均值,效果未必不好。所以說,如果有一個(gè)質(zhì)量高又速度快的走子策略,那對(duì)于棋力的提高是非常有幫助的。