在AlphaGo完勝後繼續頑強地分析其缺陷|陳經
在AlphaGo完勝後繼續頑強地分析其缺陷|陳經
請點擊「風雲之聲」,打開新的世界
科技與戰略風雲學會,受過科學訓練的理性愛國者們組建的智庫。科學素養,家國情懷,橫跨文理,縱覽風雲。
導讀:本文寫於李世石和AlphaGo第三盤對局後,發表於第四盤李世石取勝前6個小時。AlphaGo以3:0戰勝李世石後,圍棋界都絕望了,對機器產生了恐懼。陳經卻基於對演算法的了解,堅持分析AlphaGo的弱點,並精準地預測到了李世石在第四局獲勝的方式。
————————————————————————————————
2016年3月12日人機大戰第三局,AlphaGo執白176手中盤勝李世石,以3:0的比分提前取得了對人類的勝利。
這一局李世石敗得最慘,早早就被AlphaGo妙手擊潰,整盤毫無機會。最後李世石悲壯地造劫,在AlphaGo脫先之後終於造出了緊劫。但AlphaGo只靠本身劫就贏得了劫爭,粉碎了AlphaGo不會打劫的猜想。這一局AlphaGo表現出的水平是三局中最高的,幾乎沒有一手棋能被人置疑的,全是好招。三局過去,AlphaGo到底實力高到什麼程度,人們反而更不清楚了。
看完這三局,棋界終於差不多絕望了,原以為5:0的,都倒向0:5了。有些職業棋手在盤算讓先、讓二子是否頂得住。整個歷程可以和科幻小說《三體》中的黑暗戰役類比,人類開始對戰勝三體人信心滿滿,一心想旁觀5:0的大勝。一場戰鬥下來人類艦隊全滅,全體陷入了0:5的悲觀失望情緒中。
我也是糾結了一陣子,看著人類在圍棋上被機器碾壓的心情確實不好。但是承認機器的優勢後,迅速完成了心理建設,又開心地看待圍棋了。其實挺容易的,國際象棋界早就有這樣的事了。這個可以等五盤棋過後寫。
現在我的感覺是,棋界整體還是對AlphaGo的演算法以及風格很不適應。一開始輕視,一輸再輸,姿態越來越低,三盤過後已經降到一個很低迷沉鬱的心理狀態了。這也可以理解,我一個圍棋迷都抑鬱了一會,何況是視棋如生命的職業棋手。但是不管如何,還是應該從技術的角度平心靜氣地搞清楚,AlphaGo到底是怎麼下棋的,優勢到底在哪些,是不是就沒有一點弱點了?
現在有了三盤高水平的棋譜,質量遠高於之前和樊麾的五盤棋譜。還有谷歌2016年1月28號發表在《自然》上的論文,介紹了很多技術細節,還有一些流傳的消息,其實相關的信息並不少,可以作出一些技術分析了。
之前一篇文章提到,從研發的角度看,谷歌團隊把15-20個專家湊在了一起,又提供了巨量的高性能計算資源,建立起了整個AlphaGo演算法研究的「流水線」。這樣谷歌團隊就從改程序代碼的麻煩工作中解放出來,變成指揮機器幹活,開動流水線不斷學習進步,改善策略網路價值網路的係數。而且這個研發架構似乎沒有什麼嚴重的瓶頸,可以持續不斷地自我提升,有小瓶頸也可以想辦法再改訓練方法。就算它終於遇到了瓶頸,可能水平也遠遠超過人類了。
這些複雜而不斷變動的神經網路係數是AlphaGo的獨門絕技,要訓練這些網路,需要比分散式版本對局時1200多個CPU多得多的計算資源。AlphaGo演算法里還是有一些模塊代碼是需要人去寫的,這些代碼可不是機器訓練出來的,再怎麼訓練也改不了,谷歌團隊還不可能做到這麼厲害。例如蒙特卡洛搜索(MCTS)整個框架的代碼,例如快速走子網路的代碼。這裡其實有兩位論文共同第一作者David Silver和Aja Huang多年積累的貢獻。這些人寫的代碼,就會有內在的缺陷,不太可能是完美無缺的。這些缺陷不是「流水線」不眠不休瘋狂訓練能解決的,是AlphaGo真正的內在缺陷,是深度學習、self-play、進化、強化學習這些高級名詞解決不了的。谷歌再能堆硬體,也解決不了,還得人去改代碼。
第一局開局前,谷歌就說其實還在忙著換版本,最新版本不穩定,所以就用上一個固定版本了。這種開發工作,有可能就是人工改代碼消除bug的,可能測試沒完,不敢用。
總之,像AlphaGo這麼大一個軟體,從演算法角度看存在bug是非常可能的。在行棋時表現出來就是,它突然下出一些不好的招數,而且不是因為策略網路價值網路水平不夠高,而是MCTS框架相關的搜索代碼運行的結果。如果要找AlphaGo潛在的bug,需要去仔細研究它的「搜索 」。這可能是它唯一的命門所在,而且不好改進。
那麼MCTS的好處壞處到底是什麼?幸運的是,Zen和CrazyStone等上一代程序,以及facebook田淵棟博士開發的Darkforest都用了MCTS。它們和AlphaGo雖然棋力相差很遠,但是行棋思想其實很相似,相通之處遠比我們想像的高得多。
這是田淵棟貼的Darkforest對前兩局的局勢評分。可以看出,這個評分和棋局走向高度一致,完全說得通。而且谷歌也透露了AlphaGo對局勢的評分,雖然一直領先,但第二局也有接近的時候,能夠相互印證。如果到網上下載一個Zen,輸入AlphaGo和李世石的對局,選擇一個局面進行分析,也會有像模像樣的評分出來。這究竟是怎麼回事?
從技術上來說,所謂的局勢評分,就是程序的MCTS模塊,對模擬的合理局面的勝率估計。連AlphaGo也是這樣做的,所以幾個程序才能對同樣一個局面聊到一塊去。所有程序的MCTS,都是從當前局面,選擇一些分支節點搜索,一直分支下去到某層的「葉子」節點,比如深入20步。
這個分支策略,AlphaGo和Darkforest用的是「策略網路」提供的選點,選概率大的先試,又鼓勵沒試過的走走。到了葉子節點後,就改用一個「快速走子策略」一直下完,不分支了,你一步我一步往下推進,比如再下200步下完數子定出勝負。這個走子策略必須是快速的,谷歌論文中說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的恐懼,那就起到了作用。
作者簡介:筆名陳經,香港科技大學計算機科學碩士,科技與戰略風雲學會會員, 微博@風雲學會陳經,棋力新浪圍棋6D。二十一世紀初開始有獨特原創性的經濟研究,啟發了大批讀者。2003年的《經濟版圖中的發展中國家》預言中國將不斷產業升級,挑戰發達國家。2016年8月出版新書《陳經說:中國的官辦經濟》。
【本文2016年3月13日以《在AlphaGo完勝後繼續分析其演算法巨大優勢與可能的缺陷》為題發表於觀察者網(陳經:在AlphaGo完勝後繼續分析其演算法巨大優勢與可能的缺陷)。】
請關注風雲學會的微信公眾平台「風雲之聲」,微信號fyvoice
知乎專欄:風雲之聲 - 知乎專欄
一點資訊:【一點資訊】風雲之聲 www.yidianzixun.com
今日頭條:風雲之聲 – 頭條號(TouTiao.org)
推薦閱讀:
※一大波 Master 正在靠近
※柯潔輸掉人機大戰不可怕,計算機悔棋、掀棋盤才可怕
※如何打造一個AI遊戲玩家?(AI遊戲代碼資源庫—隨時更新)