28 天自制你的 AlphaGo (4) : 對於策略網路的深入分析(以及它的弱點所在)

知乎對於人機大戰的關注度很高,所以寫這個系列,希望能讓大家對於人工智慧和圍棋有更多的了解。如果有收穫,請記得點一下贊。

在上一篇我們看了策略網路的訓練過程,這篇談談理論:神經網路在圍棋中的歷史和發展進程(包括最新的進展),運作的直觀原理,及其弱點所在

本系列已更新多篇,其它幾篇的傳送門:

  • (1) : 圍棋 AI 基礎 知乎專欄

  • (2) : 安裝 MXNet 搭建深度學習環境 知乎專欄

  • (3) : 訓練策略網路,真正與之對弈 知乎專欄
  • (4.5):後文預告(Or 為什麼你應該試試 Batch Normalization 和 ResNet)知乎專欄

一、神經網路在圍棋中的歷史

再次回顧 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.

[1]

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.

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

然而神經網路(淺層的)在圍棋中的應用卻遇到很大的困難。例如90年代就有一個神經網路圍棋叫 NeuroGo:The Integration of A Priori Knowledge into a Go Playing Neural Network 它的架構(如下圖)也經過不少考慮,但棋力很低,10K的水平:

二、策略網路的工作原理

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

策略網路的目的,簡單說是快速預測雙方的下一手的位置,類似於棋手的第一感。實際上,策略網路的第一層是類似於這樣的規則的集合(為方便非程序員理解,這裡舉一個特別的例子)

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

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

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

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

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

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

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

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

如果只有兩層網路,在看棋譜時,對於對弈者的下一手的位置,只能達到 35% 左右的正確率:cs.utoronto.ca/~ilya/pu

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

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

深度神經網路的最有趣之處在於,並不需要特別告訴它存在這樣的概念的層次,它會自動從數據中形成這樣的層次

二,與棋盤和卷積神經網路的性質有關。第一層的規則,最好是局部的規則,因為這樣的規則的泛化能力較高。譬如 AlphaGo v13 第一層使用的是 5x5 的局部,然後在第二層中再考慮 3x3 個 5x5 的局部,由於這些 5x5 的局部之間有重疊部分,就會形成一個 7x7 的局部。通過一層層往上加,最終可覆蓋整個 19x19 的棋盤(如果你喜歡,可以繼續往上加)。這符合我們的一種直覺:棋形會從裡向外輻射一層層的影響,先看 5x5 ,然後看看周邊的棋子就是 7x7 的情況,然後繼續看下去。

四、新發展:殘差網路

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

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

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

這就是 ResNet 殘差網路的思想:arxiv.org/pdf/1512.0338 通過使用它,網路可以加到上千層也沒有問題,幾乎是一個免費的午餐:

通過運用殘差網路和少量 MCTS 模擬,策略網路的準確度可達 58% 以上:openreview.net/pdf? 。這近乎於理論最高值了,因為人的走棋不完美,同樣的局面可以有不同的走法。

五、策略網路的弱點

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

第一,學習的棋譜數量有限,因此會有未見過的局面;同時,有時會知其然而不知其所以然,只學到了表面。這個問題很有趣,譬如,很多人發現 Zen6 (包括 DeepZenGo)有時會在征子上短路。下圖是 2016/11/27 07:43 日 EWZGDXFEZ 與 Zen19L 在 KGS 的對局,黑棋是 Zen19L,走出了驚世駭俗的一步 M4,並認為自己的勝率高達 70% 以上:

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

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

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

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

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

第二,由於輸入中缺乏對於多口氣的精確區分(請思考為什麼沒有精確區分),可以說它不會精確數氣,對於對殺和死活容易犯暈。這一般可以被蒙特卡洛樹搜索糾正,但總會有糾正不了的情況。不過,雖然其它各路狗在此都經常會犯錯,但 Master 卻還沒有被人抓到,有可能在於它已經學會有意避免這種局面,就像傳說它會有意避免某些大型變化。

第三,靠感覺是不會精確收官和打劫,因此許多狗的官子和打劫有缺陷(換而言之,人可以靠官子和打劫逆轉)。不過目前看來 AlphaGo 的新版已經專門為此做過額外處理,不會讓人抓到這麼明顯的漏洞。我的一個猜測是,新版 AlphaGo 可能也建立了一個以"贏的子數"作為目標的價值網路,並且在適當的時候會參考它的結果。

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

不過,電腦的保守,有時候可以被人類利用。譬如,在電腦的棋有潛在缺陷的時候,可以先故意不走,等到收官階段,電腦認為必勝(並且退讓了很多)的時候再走,讓電腦措手不及。最近陳耀燁就通過類似的辦法連贏了國產狗好幾盤,而 DeepZenGo 也被某位棋手抓到了一個漏洞連贏了好幾盤(而這兩位狗對付其它職業棋手的勝率已經相當高了)。圍棋確實很有趣。我相信人機對抗並沒有結束,還會繼續下去,因為雙方都會不斷進步。

這篇就到此吧,我們下一篇見。

本系列已更新多篇,其它幾篇的傳送門:

  • (1) : 圍棋 AI 基礎 知乎專欄

  • (2) : 安裝 MXNet 搭建深度學習環境 知乎專欄

  • (3) : 訓練策略網路,真正與之對弈 知乎專欄

如需轉載本系列,請先與本人聯繫,謝謝。小廣告:晚上工作學習是否覺得光線不夠舒服,精神不夠集中,眼睛容易疲勞?不妨點擊看看我們的自然全光譜燈系列:Blink Sunshine護眼LED燈泡 高顯指97顯色指數無頻閃學習檯燈床頭 如果需要好用的耳機或錢包,我們也有 :-)

推薦閱讀:

圍棋比賽將成為人工智慧「奧運會」的雛形
AlphaZero實戰:從零學下五子棋(附代碼)
一張圖看懂AlphaGo Zero
人機大戰柯潔勝算不到一成,AlphaGo 身後的 TPU 殺傷力究竟有多強大?
AlphaGo無懸念勝出柯潔,人類更應該關注人工智慧的應用

TAG:AlphaGo | 人工智能 | 深度学习DeepLearning |