天天看點

28天自制你的AlphaGo(三):對政策網絡的深入分析以及它的弱點所在

一、神經網絡在圍棋中的曆史

再次回顧 alphago v13 的三大元件:

mcts(蒙特卡洛樹搜尋) cnn (卷積神經網絡,包括:政策網絡 policy network、快速走子網絡 playout network、價值網絡 value network) rl (強化學習)

在上世紀90年代初期,大家就已經開始實驗将神經網絡(當時是淺層的)與強化學習應用于棋類遊戲。最著名的例子是西洋雙陸棋 backgammon 的 td-gammon,它在自我對弈了150萬局後,就達到了相當強的棋力,摘選 wikipedia 中的一段:

backgammon expert kit woolsey found that td-gammon's positional judgement, especially its weighing of risk against safety, was superior to his own or any human's. td-gammon's excellent positional play was undercut by occasional poor endgame play. the endgame requires a more analytic approach, sometimes with extensive lookahead. td-gammon's limitation to two-ply lookahead put a ceiling on what it could achieve in this part of the game. td-gammon's strengths and weaknesses were the opposite of symbolic artificial intelligence programs and most computer software in general: it was good at matters that require an intuitive "feel", but bad at systematic analysis.
28天自制你的AlphaGo(三):對政策網絡的深入分析以及它的弱點所在

簡單地說,就是"大局觀"特别強(比當時所有人類都強,不過,後來人也學習它的招法,人也進步了!),但是"官子弱"。這恰好和許多圍棋 ai 給人的感覺完全一緻。

然而神經網絡(淺層的)在圍棋中的應用卻遇到很大的困難。例如90年代就有一個神經網絡圍棋叫

neurogo:the integration of a priori knowledge into a go playing neural

network 它的架構(如下圖)也經過不少考慮,但棋力很低,10k的水準:

28天自制你的AlphaGo(三):對政策網絡的深入分析以及它的弱點所在

二、政策網絡的工作原理

究其原因,我們看政策網絡的輸入(很多年來大家使用的輸入都大同小異,最重要的是把棋子按氣的口數分類,如1口氣的,2口氣的,3口氣的,4口和更多氣的):

28天自制你的AlphaGo(三):對政策網絡的深入分析以及它的弱點所在

政策網絡的目的,簡單說是快速預測雙方的下一手的位置,類似于棋手的第一感。實際上,政策網絡的第一層是類似于這樣的規則的集合(為友善非程式員了解,這裡舉一個特别的例子):

"如果這個位置的上面有一個1口氣的對方棋子,左下區域的2口氣以上的本方棋子密度為某某某,右邊某某區域本方的棋子密度按氣權重為某某某,......,那麼将以上事實權重算出有xx%的幾率在這裡落子"

看上去,這種規則更像是能預測某些局部的棋形情況,不像能準确地預測下一手。現代的圍棋政策網絡為何取得大的進展,是因為使用了 卷積神經網絡 + 深度神經網絡 的思想。

如果我們隻看 alphago v13 的第一層和最後一層神經網絡,那麼它的運作是:

1. 使用了 192 條類似的規則(由棋譜自動訓練出來)(規則的數量太少固然不行,太多也會慢同時容易走入誤區),然後在全棋盤掃描每個點(這就是卷積神經網絡的思想),計算由所有規則綜合得到的權值。

2. 再輸入“1x1卷積核”網絡(通俗地說,就是将每個點的上面算出的 192 種模式權值綜合考慮,得出最終的落子幾率),算出棋盤每個點作為走子的幾率。如果也舉個特别的例子,這類似于:

"如果要判斷是否在這裡走一個子,就會将【這裡符合 a模式的程度】*0.8,【這裡符合 b模式的程度】*0.4,【這裡符合 c模式的程度】*(-0.2),等等等等,綜合考慮,得出一個落子機率。"

3. 上述具體的訓練過程,就是每見到一個情況就加強這個情況的權值。是以越經常出現的情況就會越被加強。

三、深度神經網絡為何有效

但是,通過使用深度神經網絡,也就是多層的網絡,alphago v13 可以達到 55% 左右的預測正确率。這有兩個原因:

一,是概念層面的。舉例,人在選點時,會考慮附近的雙方棋子的"厚薄",但"厚薄"是個進階概念,大緻可以認為是棋塊的"安定性"與"棋形"的結合。那麼我們可以想象,如果第一層的規則,包括一部分專門負責"安定性"的規則,和一部分專門負責"棋形"的規則,再往上一層就可以通過權重考慮這兩種規則的結果,得出類似"厚薄"的概念。然後再往上一層,就可以再運用之前得出的棋盤每個位置的"厚薄"情況,進行進一步的決策。

深度神經網絡的最有趣之處在于,并不需要特别告訴它存在這樣的概念的層次,它會自動從資料中形成這樣的層次。

二,與棋盤和卷積神經網絡的性質有關。第一層的規則,最好是局部的規則,因為這樣的規則的泛化能力較高。譬如

alphago v13 第一層使用的是 5x5 的局部,然後在第二層中再考慮 3x3 個 5x5 的局部,由于這些 5x5

的局部之間有重疊部分,就會形成一個 7x7 的局部。通過一層層往上加,最終可覆寫整個 19x19

的棋盤(如果你喜歡,可以繼續往上加)。這符合我們的一種直覺:棋形會從裡向外輻射一層層的影響,先看 5x5 ,然後看看周邊的棋子就是 7x7

的情況,然後繼續看下去。

四、新發展:殘差網絡

自然的問題是,如果這麼說,是不是層越多就越好?

從前大家認為不是,因為太多層後很難訓練,有時在訓練集上的準确度已經會變差。

但是,如果仔細想想,這有點問題。我們不妨假設新加的一層就是一個不變變換,就是什麼都不改變,就把上一層的輸入做為輸出。那麼,此時的模型不會變好也不會變差。換而言之,增加層數,是永遠不應該變差的!(這裡的意思是,在訓練集上的準确度不應該下降。在測試集上的準确度可能會由于過拟合而下降)

28天自制你的AlphaGo(三):對政策網絡的深入分析以及它的弱點所在

通過運用殘差網絡和少量 mcts 模拟,政策網絡的準确度可達 58% 以上:https://openreview.net/pdf?id=bk67w4yxl 。這近乎于理論最高值了,因為人的走棋不完美,同樣的局面可以有不同的走法。

五、政策網絡的弱點

然而政策網絡是有弱點的。我在此更具體地說明幾種情況。

第一,學習的棋譜數量有限,是以會有未見過的局面;同時,有時會知其然而不知其是以然,隻學到了表面。這個問題很有趣,譬如,很多人發現

zen6 (包括 deepzengo)有時會在征子上短路。下圖是 2016/11/27 07:43 日 ewzgdxfez 與 zen19l 在

kgs 的對局,黑棋是 zen19l,走出了驚世駭俗的一步 m4,并認為自己的勝率高達 70% 以上:

28天自制你的AlphaGo(三):對政策網絡的深入分析以及它的弱點所在

結果被白棋直接在 n4 征死(同時勝率立刻掉到17%...)。這到底是為什麼?我們可以打開 zen6 的政策網絡顯示(hotspots 菜單):

28天自制你的AlphaGo(三):對政策網絡的深入分析以及它的弱點所在

非常有趣。zen6 認為白棋最可能的下一步是在 g2(機率大小是按紅橙黃綠藍紫排列,最不可能的是無色),而 n4 是它眼中白棋最不可能下的棋。它根本想不到白棋會走 n4。這個問題的成因是明顯的:

在人類高手的對弈中,很少出現一方對另一方進行征子,因為另一方會預先避免對方征子成功。而政策網絡在學習中,卻不可能看到如此高的概念,它隻能看到,如果有一方走出看似可以被征的棋形,另一方不會去征,于是,它所學到的,就是大家都不會去征對方的子。

著名的第 78 手與此也有類似的原因(差別是隐蔽得多)。同樣,機器很難了解人為什麼會"保留",因為人"保留"的原因是另一個層次的(例如作為劫材)。當然,人的"保留"也不見得都對。

解決這個現象,初級的辦法是加入手動的處理,更好的辦法是通過自我對弈學習更多的局面。alphago 比其它各路狗強大的重要原因,在于經過了上億盤的左右互搏學習,見過的局面太多了。

第二,由于輸入中缺乏對于多口氣的精确區分(請思考為什麼沒有精确區分),可以說它不會精确數氣,對于對殺和死活容易犯暈。這一般可以被蒙特卡洛樹搜尋糾正,但總會有糾正不了的情況。不過,雖然其它各路狗在此都經常會犯錯,但

master 卻還沒有被人抓到,有可能在于它已經學會有意避免這種局面,就像傳說它會有意避免某些大型變化。

第三,靠感覺是不會精确收官和打劫,是以許多狗的官子和打劫有缺陷(換而言之,人可以靠官子和打劫逆轉)。不過目前看來

alphago 的新版已經專門為此做過額外處理,不會讓人抓到這麼明顯的漏洞。我的一個猜測是,新版 alphago

可能也建立了一個以"赢的子數"作為目标的價值網絡,并且在适當的時候會參考它的結果。

許多人可能會很好奇,為什麼各路狗都是用"勝率"而不是"赢的子數"作為目标。這是因為大家發現以"勝率"為标準,得到的勝率更高(這看似是廢話,其實不是廢話)。說到這個,我見過網上有人提為什麼不在穩赢的時候改變貼目,盡量赢得更多一些,棋走得更好看;這個想法其實大家早就試過了,叫

dynamic komi 動态貼目,後果也是會稍微降低勝率。

不過,電腦的保守,有時候可以被人類利用。譬如,在電腦的棋有潛在缺陷的時候,可以先故意不走,等到收官階段,電腦認為必勝(并且退讓了很多)的時候再走,讓電腦措手不及。最近陳耀烨就通過類似的辦法連赢了國産狗好幾盤,而

deepzengo

也被某位棋手抓到了一個漏洞連赢了好幾盤(而這兩位狗對付其它職業棋手的勝率已經相當高了)。圍棋确實很有趣。我相信人機對抗并沒有結束,還會繼續下去,因為雙方都會不斷進步。

相關閱讀:

本文作者:彭博

繼續閱讀