[轉錄] 分析AlphaGo算法巨大的優勢與可能的缺陷

作者: rgx (teddybear)   2016-03-13 11:41:46
http://www.guancha.cn/chenjing/2016_03_13_353749_s.shtml
陳經
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雖然棋力相差很遠,但是行棋思想其實很相似,相通之處遠比我們想像的高得多。
http://i.guancha.cn/news/2016/03/13/20160313092954207.jpg
http://i.guancha.cn/news/2016/03/13/20160313093004954.jpg
這是田淵棟貼的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之類的程序大局觀都可能超過職業高手。
例如第二局這個局面:
http://i.guancha.cn/news/2016/03/13/20160313093531725.jpg
李世石左下佔了便宜,本來局勢還可以。但是他70和72手吃了一子落了後手,被AlphaGo走到73,大局一下就落後了。這個在前面Darkforest對局勢的評估圖中都非常清楚,是局勢的轉折點。李世石要是手頭有個Zen輔助,試著下兩下都可能會知道70手不要去吃一子了。大局觀不太好的職業高手,比如李世石就是個典型,大局觀不如Zen真不一定是笑話。李世石比Zen強的是接觸戰全局戰的手段,要強太多了。MCTS實事求是不怕麻煩下完再算子的風格,比起人類棋手對於陣勢價值的粗放估算,是思維上先天的優勢。
AlphaGo比其它程序強,甚至比職業高手還強的,是近身搏殺時的小手段。
http://i.guancha.cn/news/2016/03/13/20160313093656512.jpg
第三局,李世石29和31是失著。29湊白30雙,雖然獲得了H17的先手,但是中間的頭更為重要。當黑31手飛出後,白32象步飛可以說直接將黑擊斃了。在盤面的左上中間焦點處,AlphaGo的快速走子網絡會有一個7*7之類的小窗口,對這裡進行窮舉一樣的搜索,用人手寫的代碼加上策略網絡。
32這步妙招可能就是這樣找出來的,李世石肯定沒有算到。但是AlphaGo是不怕麻煩的,就一直對著這裡算,比人更容易看到黑三子的可憐結局。這個計算對人有些複雜,只有實力很強的才能想到算清楚,對AlphaGo就是小菜。李世石一招不慎就被技術性擊倒了。AlphaGo對這種封閉局部的計算,是它超過人類的強項。
但是AlphaGo的搜索是不是就天衣無縫了?並不是。來看第二局這個局面:
http://i.guancha.cn/news/2016/03/13/20160313093905125.jpg
AlphaGo黑41手尖沖,43手接出作戰。最後下成這樣,這是三局中AlphaGo被眾多職業棋手一致認為最明顯的一次虧損失誤,如果它還有失誤的話。我們猜想它為什麼會失誤。關鍵在於,這裡是一個開放式的接觸戰,棋塊會發展到很遠的地方去。
AlphaGo的小窗口封閉窮舉搜索就不管用了,就只有靠MCTS在那概率性地試。這裡分支很多,甚至有一個複雜的到達右上角的回頭征。我認為AlphaGo這裡就失去了可靠的技術手段,終於在這個人類一目瞭然的局面中迷失了。它是沒有概念推理的,不知道什麼叫「憑空生出一塊孤棋」。也不確定人會在50位斷然反擊,可能花了大量時間在算人妥協的美好局面。
http://i.guancha.cn/news/2016/03/13/20160313094124303.jpg
再來看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的恐懼,那就起到了作用。
作者: darkseer   2016-03-13 11:46:00
未看先推(?) XD
作者: TS13 (ㄏㄏ)   2016-03-13 11:51:00
看來要想辦法一開始就把戰鬥引到中間
作者: fallcolor (秋天走了)   2016-03-13 11:57:00
除了google在賽前改MCTS的猜想以外的分析都滿同意的
作者: goldduck (哥達鴨)   2016-03-13 11:58:00
狗狗只是遵循圍棋規則下去下而已沒這樣複雜
作者: tn00371115 (二代目月光仙子)   2016-03-13 12:02:00
這篇腦補有點多吧 ZEN電腦軟體大局觀跟阿法狗差多了
作者: NaoGaTsu (那歐卡茲)   2016-03-13 12:05:00
zen的火力和阿發狗天差地別,這篇作者到底在寫啥
作者: tn00371115 (二代目月光仙子)   2016-03-13 12:06:00
這篇最後的策略 李不就用了 然後被打爆....我倒有一招可以打敗阿法狗 利用深度學習的機制先跟阿法狗下個幾盤臭棋詐降 再全力打爆他利用深度學習的過度學習BUG 不過要先輸個幾百盤就是..還有工程師如果關掉學習功能 這招也廢....
作者: marrvosal (神清水)   2016-03-13 12:18:00
實際上alphaGO不太會overfitting,樓上這招沒用
作者: DaringDo (天馬無畏)   2016-03-13 12:20:00
ZEN? zen連黃士傑初寫的Eric都打不贏了何況是進入deepmind公司後寫的阿發狗
作者: Murasaki0110 (麥當勞歡樂送)   2016-03-13 12:30:00
他每天self play幾百萬盤 你和他下的幾百盤只是微不足道的noise
作者: TS13 (ㄏㄏ)   2016-03-13 12:44:00
其實裡面也有說AlphaGo和zen天差地遠...
作者: indium111 (#ttyhg)   2016-03-13 13:12:00
這篇是少數在圍棋和AI都有認識的文章
作者: Waldner (Waldi)   2016-03-13 14:33:00
這人不懂類神經網路人寫的代碼,就會有內在的缺陷他完全用"邏輯性"的程式來看待AlphaGo這個作者學的是經濟
作者: goldflower (金色小黃花)   2016-03-13 15:36:00
alphago會下什麼棋作者都不知道了 你要怎找邏輯錯誤
作者: Waterpig (waterpig)   2016-03-13 16:13:00
類神經其實很玄阿 很難解釋他為什麼可以這麼好
作者: tn00371115 (二代目月光仙子)   2016-03-13 16:28:00
類神經就類似黑盒子 翻出CODE根本看不懂
作者: fengc (q )   2016-03-13 16:33:00
aja下棋時都會幫忙整理棋子 這樣會算到讀秒嗎?
作者: extimacy (extimacy)   2016-03-13 16:52:00
狗官....狗的官子.... XDDD
作者: semiacicada (先這樣)   2016-03-13 17:03:00
從今天的結果回頭看,李也算在搏殺中擾亂了阿發?
作者: lolylolyosu (3-1次元)   2016-03-13 17:54:00
阿發狗2.0還沒出場 鹿死誰手還很難說...

Links booklink

Contact Us: admin [ a t ] ucptt.com