在 AlphaGo 輸掉前,它的弱點已經被人類發現?


引用本文原文作者陳經,香港科技大學計算機科學碩士,中國科學技術大學科技與戰略風雲學會研究員,新浪圍棋 6D。本文首發於“觀察者”,原標題為“陳經:在AlphaGo完勝後繼續分析其算法巨大優勢與可能的缺陷”,已獲得作者同意轉載。

注:本文首發時間為昨日上午 9 點 55 分,而第四場李世乭戰勝 AlphaGo 的套路基本驗證了兩本文中的內容。


2016 年 3 月 12 日人機大戰第三局,AlphaGo 執白 176 手中盤勝李世乭,以 3:0 的比分提前取得了對人類的勝利。

這一局李世乭敗得最慘,早早就被 AlphaGo 妙手擊潰,整盤毫無機會。最後李世乭悲壯地造劫,在 AlphaGo 脱先之後終於造出了緊劫。但 AlphaGo 只靠本身劫就贏得了劫爭,粉碎了 AlphaGo 不會打劫的猜想。這一局 AlphaGo 表現出的水平是三局中最高的,幾乎沒有一手棋能被人置疑的,全是好招。三局過去,AlphaGo 到底實力高到什麼程度,人們反而更不清楚了。

看完這三局,棋界終於差不多絕望了,原以為 5:0 的,都倒向 0:5 了。有些職業棋手在盤算讓先、讓二子是否頂得住。整個歷程可以和科幻小説《三體》中的黑暗戰役類比,人類開始對戰勝三體人信心滿滿,一心想旁觀 5:0 的大勝。一場戰鬥下來人類艦隊全滅,全體陷入了 0:5 的悲觀失望情緒中。

我也是糾結了一陣子,看着人類在圍棋上被機器碾壓的心情確實不好。但是承認機器的優勢後,迅速完成了心理建設,又開心地看待圍棋了。其實挺容易的,國際象棋界早就有這樣的事了。這個可以等五盤棋過後寫。

現在我的感覺是,棋界整體還是對 AlphaGo 的算法以及風格很不適應。一開始輕視,一輸再輸,姿態越來越低,三盤過後已經降到一個很低迷沉鬱的心理狀態了。這也可以理解,我一個圍棋迷都抑鬱了一會,何況是視棋如生命的職業棋手。但是不管如何,還是應該從技術的角度平心靜氣地搞清楚,AlphaGo 到底是怎麼下棋的,優勢到底在哪些,是不是就沒有一點弱點了?

現在有了三盤高水平的棋譜,質量遠高於之前和樊麾的五盤棋譜。還有Google 2016 年 1 月 28 號發表在《自然》上的論文,介紹了很多技術細節,還有一些流傳的消息,其實相關的信息並不少,可以作出一些技術分析了。

之前一篇文章提到,從研發的角度看,Google團隊把 15-20 個專家湊在了一起,又提供了巨量的高性能計算資源,建立起了整個 AlphaGo 算法研究的 “流水線”。這樣Google團隊就從改程序代碼的麻煩工作中解放出來,變成指揮機器幹活,開動流水線不斷學習進步,改善策略網絡價值網絡的係數。而且這個研發架構似乎沒有什麼嚴重的瓶頸,可以持續不斷地自我提升,有小瓶頸也可以想辦法再改訓練方法。就算它終於遇到了瓶頸,可能水平也遠遠超過人類了。

這些複雜而不斷變動的神經網絡係數是 AlphaGo 的獨門絕技,要訓練這些網絡,需要比分佈式版本對局時 1200 多個 CPU 多得多的計算資源。AlphaGo 算法裏還是有一些模塊代碼是需要人去寫的,這些代碼可不是機器訓練出來的,再怎麼訓練也改不了,Google團隊還不可能做到這麼厲害。例如蒙特卡洛搜索(MCTS)整個框架的代碼,例如快速走子網絡的代碼。這裏其實有兩位論文共同第一作者 David Silver 和 Aja Huang 多年積累的貢獻。這些人寫的代碼,就會有內在的缺陷,不太可能是完美無缺的。這些缺陷不是 “流水線” 不眠不休瘋狂訓練能解決的,是 AlphaGo 真正的內在缺陷,是深度學習、self-play、進化、強化學習這些高級名詞解決不了的。Google再能堆硬件,也解決不了,還得人去改代碼。
第一局開局前,Google就説其實還在忙着換版本,最新版本不穩定,所以就用上一個固定版本了。這種開發工作,有可能就是人工改代碼消除 bug 的,可能測試沒完,不敢用。

總之,像 AlphaGo 這麼大一個軟件,從算法角度看存在 bug 是非常可能的。在行棋時表現出來就是,它突然下出一些不好的招數,而且不是因為策略網絡價值網絡水平不夠高,而是 MCTS 框架相關的搜索代碼運行的結果。如果要找 AlphaGo 潛在的 bug,需要去仔細研究它的 “搜索”。這可能是它唯一的命門所在,而且不好改進。

那麼 MCTS 的好處壞處到底是什麼?幸運的是,Zen 和 CrazyStone 等上一代程序,以及 facebook 田淵棟博士開發的 Darkforest 都用了 MCTS。它們和 AlphaGo 雖然棋力相差很遠,但是行棋思想其實很相似,相通之處遠比我們想象的高得多。


這是田淵棟貼的 Darkforest 對前兩局的局勢評分。可以看出,這個評分和棋局走向高度一致,完全説得通。而且Google也透露了 AlphaGo 對局勢的評分,雖然一直領先,但第二局也有接近的時候,能夠相互印證。如果到網上下載一個 Zen,輸入 AlphaGo 和李世乭的對局,選擇一個局面進行分析,也會有像模像樣的評分出來。這究竟是怎麼回事?

從技術上來説,所謂的局勢評分,就是程序的 MCTS 模塊,對模擬的合理局面的勝率估計。連 AlphaGo 也是這樣做的,所以幾個程序才能對同樣一個局面聊到一塊去。所有程序的 MCTS,都是從當前局面,選擇一些分支節點搜索,一直分支下去到某層的 “葉子” 節點,比如深入 20 步。

這個分支策略,AlphaGo 和 Darkforest 用的是 “策略網絡” 提供的選點,選概率大的先試,又鼓勵沒試過的走走。到了葉子節點後,就改用一個 “快速走子策略” 一直下完,不分支了,你一步我一步往下推進,比如再下 200 步下完數子定出勝負。這個走子策略必須是快速的,Google論文中説 AlphaGo 的快速走子策略比策略網絡快 1000 倍。如果用策略網絡來走子,那就沒有時間下完了,和李世乭對局時的 2 小時會遠遠不夠用。下完以後,將結果一路返回,作一些標記。最後統計所有合理的最終局面,看雙方勝利的各佔多少,就有一個勝率報出來,作為局勢的評分。一般到 80% 這類的勝率就沒意義了,必勝了,機器看自己低於 20% 就中盤認輸了。

AlphaGo 的創新是有價值網絡,評估葉子節點時不是隻看下完的結果,而是一半一半,也考慮價值網絡直接對葉子節點預測的勝負結果。走子選擇就簡單了,選獲勝概率最大的那個分支。機器也會隨機下,因為有時幾個分支勝率一樣。

MCTS 這個框架對棋力最大的意義,我認為就是 “大局觀” 好。無論局部如何激烈戰鬥,所有的模擬都永遠下完,全盤算子的個數。這樣對於自己有多少佔地盤的潛力,就比毛估估要清楚多了。以前的程序,就不下到終局,用一些棋塊形狀幅射之類的來算自己影響的地盤,估得很差,因為一些棋塊死沒死都不清楚。MCTS 就不錯,下到終局死沒死一清二楚。MCTS 也不會只盯着局部得失,而是整個盤面都去劃清楚邊界。這個特點讓幾個 AI 對局勢的評估經常很相似,大局觀都不錯。MCTS 對於雙方交界的地方,以及虛虛實實的陣勢,通過打入之類的模擬,大致有個評估。當然這不是棋力的關鍵,大局觀再好,局部被對手殺死也沒有用,可能幾手下來,局勢評估就發生了突變。

AlphaGo 的大局觀還特別好,特別準確,主要是它模擬的次數最多,模擬的質量最好。而且這個大局觀從原理上就超過了人類!比如人看到一塊陣勢,如果不是基本封閉的實空,到底價值多少評估起來其實是非常粗的。高手點目時經常這樣,先把能點的目算清楚,有一些小陣勢如無憂角就給個經驗目數,然後加上貼目算雙方精確目數的差值,然後説某方的某片陣勢能不能補回這個差值,需要扣除對方打入成的目數,孤棋薄棋減目數。這類估算有很多不精確的因素。

AlphaGo 就不一樣了,它會真的打入到陣勢裏,來回模擬個幾十萬次,每一次都是精確的!人絕對沒有能力像 AlphaGo 這麼想問題,一定是利用經驗去估算陣勢的價值,誤差就可能很大。極端情況下,一塊空有沒有棋,職業棋手根本判斷不清,AlphaGo 卻可以通過實踐模擬清楚,沒棋和有棋相比,目數差別太大了。AlphaGo 雖然不是嚴格證明,但通過概率性地多次打入模擬,能夠接近理論情況,比人類憑經驗要強太多了。我可以肯定,AlphaGo 的大局觀會遠遠超過職業高手,算目也要準得多,所以佈局好、中後盤收束也很強大。甚至 Zen 之類的程序大局觀都可能超過職業高手。

例如第二局這個局面:


李世乭左下佔了便宜,本來局勢還可以。但是他 70 和 72 手吃了一子落了後手,被 AlphaGo 走到 73,大局一下就落後了。這個在前面 Darkforest 對局勢的評估圖中都非常清楚,是局勢的轉折點。李世乭要是手頭有個 Zen 輔助,試着下兩下都可能會知道 70 手不要去吃一子了。大局觀不太好的職業高手,比如李世乭就是個典型,大局觀不如 Zen 真不一定是笑話。李世乭比 Zen 強的是接觸戰全局戰的手段,要強太多了。MCTS 實事求是不怕麻煩下完再算子的風格,比起人類棋手對於陣勢價值的粗放估算,是思維上先天的優勢。

AlphaGo 比其它程序強,甚至比職業高手還強的,是近身搏殺時的小手段。


第三局,李世乭 29 和 31 是失着。29 湊白 30 雙,雖然獲得了 H17 的先手,但是中間的頭更為重要。當黑 31 手飛出後,白 32 象步飛可以説直接將黑擊斃了。在盤面的左上中間焦點處,AlphaGo 的快速走子網絡會有一個 7*7 之類的小窗口,對這裏進行窮舉一樣的搜索,用人手寫的代碼加上策略網絡。32 這步妙招可能就是這樣找出來的,李世乭肯定沒有算到。但是 AlphaGo 是不怕麻煩的,就一直對着這裏算,比人更容易看到黑三子的可憐結局。這個計算對人有些複雜,只有實力很強的才能想到算清楚,對 AlphaGo 就是小菜。李世乭一招不慎就被技術性擊倒了。AlphaGo 對這種封閉局部的計算,是它超過人類的強項。

但是 AlphaGo 的搜索是不是就天衣無縫了?並不是。來看第二局這個局面:


AlphaGo 黑 41 手尖衝,43 手接出作戰。最後下成這樣,這是三局中 AlphaGo 被眾多職業棋手一致認為最明顯的一次虧損失誤,如果它還有失誤的話。我們猜想它為什麼會失誤。關鍵在於,這裏是一個開放式的接觸戰,棋塊會發展到很遠的地方去。AlphaGo 的小窗口封閉窮舉搜索就不管用了,就只有靠 MCTS 在那概率性地試。這裏分支很多,甚至有一個複雜的到達右上角的回頭徵。我認為 AlphaGo 這裏就失去了可靠的技術手段,終於在這個人類一目瞭然的局面中迷失了。它是沒有概念推理的,不知道什麼叫 “憑空生出一塊孤棋”。也不確定人會在 50 位斷然反擊,可能花了大量時間在算人妥協的美好局面。


再來看 AlphaGo 一個明確的虧損。第一局白 AlphaGo 第 136 手吃掉三子。這裏是一個封閉局面,是可以完全算清楚的。可以絕對地證明,136 手吃在 T15 更好,這裏白虧了一目。但是為什麼 AlphaGo 下錯了?因為它沒有 “虧一目” 的這種概念。只有最終模擬收完數子,白是 179 還是 180 這種概念,它根本搞不清楚差的一個子,是因為哪一手下得不同產生的,反正都是勝,它不在乎勝多少。除非是 176 與 177 子的區別,一個勝一個負,那 136 就在勝率上劣於 T15 了,它可能就改下 T15 了。

這個局面白已經勝定了所以無所謂。但是我們可以推想,如果在對局早期,局部發生了白要吃子的選擇,一種是 A 位吃,一種是 B 位吃,有目數差別,選哪種吃法?這就説不清了。AlphaGo 的小窗口窮舉,是為了保證對殺的勝利,不殺就輸了。但是都能吃的情況下,這種一兩目的區別,它還真不好編程説明。説不定就會下錯虧目了。

經過以上的分析,AlphaGo 相對人類的優勢和潛在缺陷就清楚多了。它的大局觀天生比人強得多,因為有強大的計算資源保證模擬的終局數量足夠,策略網絡和價值網絡剪枝又保證了模擬的質量。它在封閉局部的對殺會用一個小窗口去窮舉,絕對不會輸,還能找到妙手。它佈局好,中盤戰鬥控制力強,都是大局觀好的表現。它中後盤收束差不多都是封閉局面了,基本是窮舉了,算目非常精確,幾百萬次模擬下來什麼都算清了。想要收官中撈點目回去不是問題,它勝了就行;但是想收官逆轉是不可能的,影響了勝率它立刻就窮舉把你堵回去。

但是封閉式局面的小手段中,AlphaGo 可能存在不精確虧目的可能性,不知道怎麼推理。在開放式接觸戰中,如果戰鬥會搞到很遠去,它也可能手數太多算不清,露出破綻。但不會是崩潰性的破綻,要崩潰了它就肯定能知道這裏虧了,不崩吃點暗虧它就可能糊塗着。目前來看,就是這麼兩個小毛病。

另外還有打劫的問題。如果是終局打劫,那是沒有用的,它就窮舉了,你沒有辦法。如果是在開局或者中局封閉式局部有了劫爭,由於要找劫,等於強制變成了殺到全盤的開放度最大的開放式局面了。這是 AlphaGo 不喜歡的,它的小窗口搜索就用不上了。而用 MCTS 搜索,打劫步數過多,就會超過它的葉子節點擴展深度,比如 20 步就不行了,必須“快速走子”收完了。這時它就胡亂終局了,不知道如何處理劫爭,模擬質量迅速下降。所以,這三局中,AlphaGo 都顯得“不喜歡打劫”。但是,這不是説它不會打劫,真要逼得它不打劫必輸了,那它也就被 MCTS 逼得去打了。如果劫爭發生在早中期手數很多,在打劫過程中它就可能發生失誤。

當然這只是一個猜想。它利用強大的大局觀與局部手段,可以做到“我不喜歡打劫,打劫的變化我繞過”,想吃就給你,我到別的地方撈回來。當然如果對手足夠強大,是可以逼得它走上打劫的道路的,它就只好打了,説不定對手就有機會了。第三局李世乭就逼得它打起了劫,但是變化簡單它不怕,只用本身劫就打爆了對手。

如果要戰勝 AlphaGo,根據本文的分析,應該用這樣的策略:大局觀要頂得住,不能早早被它控制住了。局部手段小心,不要中招。頂住以後,在開放式的接觸戰中等它自己犯昏。或者在局部定型中看它自己虧目。在接觸戰中,要利用它“不喜歡打劫”的特性,利用一些劫爭的分枝虛張聲勢逼它讓步,但又不能太過分把它逼入對人類不利的劫爭中。這麼看,這個難度還真挺高的。但也不是不可想象了,柯潔大局觀好,比較合適。李世乭大局觀差,不是好的人類代表。

本文進行了大膽的猜測,可能是一家之言。但我也是有根據的,並不是狂想。如果這篇文章能幫助人類消除對 AlphaGo 的恐懼,那就起到了作用。

寫在轉載後

目前來看,AlphaGo 的確和之前很多人預測的一樣,在打劫和更為複雜的圍棋上面存在缺陷。第四局李世乭的勝利就是最好的證明。

不過這個問題由來已久,AlphaGo 的許多“前輩”同樣存在這個問題。甚至 KGS 比賽前職業選手還會利用這些漏洞去對抗很多圍棋 AI ,從而非常輕鬆的取得勝利。

明天這場人機圍棋世紀大戰就將迎來最終局,而李世乭能否再拿下一局將會成為大家最關心的問題。當然,過多的猜測也沒有意義,歡迎大家明天繼續關注我們的直播。

引用人類歷史上的最後一次“深藍”大戰?!3 月 9 日- 15 日,Google 出品的人工智能 AlphaGo 將迎戰目前世界最頂尖圍棋選手之一的李世乭(韓國)。究竟人類能否在 5 場比賽中守住最後的尊嚴?愛範兒為你邀請了多位圍棋界頂尖棋手、人工智能領域專家進行全程跟蹤和報道,敬請持續關注!

題圖來自 Soocurious


資料來源:愛範兒(ifanr)
作者/編輯:李 賡

如果喜歡我們的文章,請即分享到︰

標籤: AlphaGo  Google  DeepMind  李世乭  李世石