
和訓(xùn)練深度學(xué)習(xí)模型不同,快速走子用到了局部特征匹配,自然需要一些圍棋的領(lǐng)域知識(shí)來選擇局部特征。對(duì)此AlphaGo只提供了局部特征的數(shù)目(見Extended Table 4),而沒有說明特征的具體細(xì)節(jié)。我最近也實(shí)驗(yàn)了他們的辦法,達(dá)到了25.1%的準(zhǔn)確率和4-5微秒的走子速度,然而全系統(tǒng)整合下來并沒有復(fù)現(xiàn)他們的水平。我感覺上24.2%并不能完全概括他們快速走子的棋力,因?yàn)橹灰咤e(cuò)關(guān)鍵的一步,局面判斷就完全錯(cuò)誤了;而圖2(b)更能體現(xiàn)他們快速走子對(duì)盤面形勢(shì)估計(jì)的精確度,要能達(dá)到他們圖2(b)這樣的水準(zhǔn),比簡(jiǎn)單地匹配24.2%要做更多的工作,而他們并未在文章中強(qiáng)調(diào)這一點(diǎn)。

在AlphaGo有了快速走子之后,不需要走棋網(wǎng)絡(luò)和估值網(wǎng)絡(luò),不借助任何深度學(xué)習(xí)和GPU的幫助,不使用增強(qiáng)學(xué)習(xí),在單機(jī)上就已經(jīng)達(dá)到了3d的水平(見Extended Table 7倒數(shù)第二行),這是相當(dāng)厲害的了。任何使用傳統(tǒng)方法在單機(jī)上達(dá)到這個(gè)水平的圍棋程序,都需要花費(fèi)數(shù)年的時(shí)間。在AlphaGo之前,Aja Huang曾經(jīng)自己寫過非常不錯(cuò)的圍棋程序,在這方面相信是有很多的積累的。
3. 估值網(wǎng)絡(luò)

AlphaGo的估值網(wǎng)絡(luò)可以說是錦上添花的部分,從Fig 2(b)和Extended Table 7來看,沒有它AlphaGo也不會(huì)變得太弱,至少還是會(huì)在7d-8d的水平。少了估值網(wǎng)絡(luò),等級(jí)分少了480分,但是少了走棋網(wǎng)絡(luò),等級(jí)分就會(huì)少掉800至1000分。特別有意思的是,如果只用估值網(wǎng)絡(luò)來評(píng)估局面(2177),那其效果還不及只用快速走子(2416),只有將兩個(gè)合起來才有更大的提高。我的猜測(cè)是,估值網(wǎng)絡(luò)和快速走子對(duì)盤面估計(jì)是互補(bǔ)的,在棋局一開始時(shí),大家下得比較和氣,估值網(wǎng)絡(luò)會(huì)比較重要;但在有復(fù)雜的死活或是對(duì)殺時(shí),通過快速走子來估計(jì)盤面就變得更重要了??紤]到估值網(wǎng)絡(luò)是整個(gè)系統(tǒng)中最難訓(xùn)練的部分(需要三千萬局自我對(duì)局),我猜測(cè)它是最晚做出來并且最有可能能進(jìn)一步提高的。
關(guān)于估值網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)的生成,值得注意的是文章中的附錄小字部分。與走棋網(wǎng)絡(luò)不同,每一盤棋只取一個(gè)樣本來訓(xùn)練以避免過擬合,不然對(duì)同一對(duì)局而言輸入稍有不同而輸出都相同,對(duì)訓(xùn)練是非常不利的。這就是為什么需要三千萬局,而非三千萬個(gè)盤面的原因。對(duì)于每局自我對(duì)局,取樣本是很有講究的,先用SL network保證走棋的多樣性,然后隨機(jī)走子,取盤面,然后用更精確的RL network走到底以得到最正確的勝負(fù)估計(jì)。當(dāng)然這樣做的效果比用單一網(wǎng)絡(luò)相比好多少,我不好說。
一個(gè)讓我吃驚的地方是,他們完全沒有做任何局部死活/對(duì)殺分析,純粹是用暴力訓(xùn)練法訓(xùn)練出一個(gè)相當(dāng)不錯(cuò)的估值網(wǎng)絡(luò)。這在一定程度上說明深度卷積網(wǎng)絡(luò)(DCNN)有自動(dòng)將問題分解成子問題,并分別解決的能力。
另外,我猜測(cè)他們?cè)谌∮?xùn)練樣本時(shí),判定最終勝負(fù)用的是中國(guó)規(guī)則。所以說三月和李世石對(duì)局的時(shí)候也要求用中國(guó)規(guī)則,不然如果換成別的規(guī)則,就需要重新訓(xùn)練估值網(wǎng)絡(luò)(雖然我估計(jì)結(jié)果差距不會(huì)太大)。至于為什么一開始就用的中國(guó)規(guī)則,我的猜測(cè)是編程非常方便(我在寫DarkForest的時(shí)候也是這樣覺得的)。
4. 蒙特卡羅樹搜索
這部分基本用的是傳統(tǒng)方法,沒有太多可以評(píng)論的,他們用的是帶先驗(yàn)的UCT,即先考慮DCNN認(rèn)為比較好的著法,然后等到每個(gè)著法探索次數(shù)多了,選擇更相信探索得來的勝率值。而DarkForest則直接選了DCNN推薦的前3或是前5的著法進(jìn)行搜索。我初步試驗(yàn)下來效果差不多,當(dāng)然他們的辦法更靈活些,在允許使用大量搜索次數(shù)的情況下,他們的辦法可以找到一些DCNN認(rèn)為不好但卻對(duì)局面至關(guān)重要的著法。
一個(gè)有趣的地方是在每次搜索到葉子節(jié)點(diǎn)時(shí),沒有立即展開葉子節(jié)點(diǎn),而是等到訪問次數(shù)到達(dá)一定數(shù)目(40)才展開,這樣避免產(chǎn)生太多的分支,分散搜索的注意力,也能節(jié)省GPU的寶貴資源,同時(shí)在展開時(shí),對(duì)葉節(jié)點(diǎn)的盤面估值會(huì)更準(zhǔn)確些。除此之外,他們也用了一些技巧,以在搜索一開始時(shí),避免多個(gè)線程同時(shí)搜索一路變化,這部分我們?cè)贒arkForest中也注意到了,并且做了改進(jìn)。