從人機大戰前兩局推測AlphaGo演算法的重大進展|陳經
從人機大戰前兩局推測AlphaGo演算法的重大進展|陳經
請點擊「風雲之聲」,打開新的世界
科技與戰略風雲學會,受過科學訓練的理性愛國者們組建的智庫。科學素養,家國情懷,橫跨文理,縱覽風雲。
導讀:本文寫於李世石和AlphaGo第二盤對局後。機器的連續勝利讓職業棋手們恐慌,很多創新的著法又讓人興奮。AlphaGo的突破在這局後得到了確認,本文進行技術分析推測演算法的具體進展。
————————————————————————————————
2016年3月10日人機大戰第二局,AlphaGo執黑211手中盤勝李世石。對於不懂圍棋的圍觀群眾,這意味著機器以5:0獲勝的前景確認,可能會轉而關注人工智慧進步對社會的影響。對棋迷特別是職業棋手來說,會更關注第二局中AlphaGo在圍棋技藝上帶來的震撼,這個震撼比第一局更大。
李世石對AlphaGo第二局
先用一段文學性的描述概括前兩局:
在圍棋這個令許多人沉醉的迷失大陸上,忽然半空中浮現了一個既令人恐懼,又令人興奮的帶著魔幻主義色彩的怪物。離得還遠看不太清的時候,職業高手群體作為人類護法,把AlphaGo當作一個有趣的小妖怪,準備用自己明顯更高的法力去吊打它。第一局過後,人們發現這小妖扛過了大法師的主動挑戰,第102手趁法師沒有防備忽然出手偷襲,獲得了勝利。人們稱讚這小妖法力可以啊,但並不認為它有多強大,而是認為大法師發揮不佳。第二局,人類大法師平心靜氣地開局,小妖更多地主動出招主導了棋局的進程。事實說明AlphaGo不是小妖,而是大魔王。它的著數與人類很不相同,下出了人們從未見過的次序與招數,但卻自成體系。大魔王的著法並非天衣無縫,一次主動出擊甚至被抓到了明顯破綻,卻靠著瀰漫在全局的邪氣維持著局面。後半盤,大魔王的威力開始顯現出來,差距越拉越大,在人類的眼中終於完成了從小妖到魔王的形象轉變。職業棋手們現在已經普遍悲觀,認為整個大陸都將被魔王統治,只有柯潔、孟泰齡等少數人還想著進行最後的抵抗。還有一些企圖抓住最後一根稻草,相信大魔王有「不會打劫」的死穴,盼望著最後三局出現奇蹟。
下面用幾個圖介紹一下AlphaGo帶有魔性的著法。
李世石對AlphaGo第二局第16手
開局AlphaGo第13手脫先就讓所有人大吃一驚。15手這麼早刺一下,都是沒人下過的招。雖然難以論定好壞,但AlphaGo從魔界過來的作派已經初露端倪了。
李世石對AlphaGo第二局第37手
黑37是讓所有職業高手都難以置信的創新招手。人類理論說,三路和四路是地勢平衡線,四路尖沖三路常見。AlphaGo卻五路尖沖四路,沒有人敢想。而且這招並不是胡下,四周有配合,得到了聶老等布局高手的讚許。仔細品味,為什麼三路四路的地勢平衡線就是定死的?如果有配合,為什麼平衡線不能上移到四路五路?白R4R5R6這個頭非常硬,本來就是不應該去圍地的形狀,再加上黑S14扳白為了護住「四路大空」要應,等於黑先手護角。這幾個理由加起來,地勢線真的可能就上移了。
李世石對AlphaGo第二局第81手
白80打入,黑81手卻悠然地封住白棋聯絡自身。這實在是很難想到的方向,這麼緊急的地方不去攻打入的那子,卻到這裡自補。但是細細品味,卻會發現這是好招,是一種間接攻擊。也許AlphaGo模擬了幾百萬個局面,認為有了81的自補,白就動不出什麼東西。這無疑是一種非常高級的思路。
李世石對AlphaGo第二局第127手
李世石白120手兇悍出手。黑棋121扳123連125淡定得不得了,白似乎獲利極大。但是黑再127扳住,赫然發現黑這裡圍了不少地,而且整體厚了很多,122那裡的最後一個毛病沒有了,下面就輪到黑對中間白棋發起令人膽寒的魔性攻擊了。
感性完了,我們還是回到技術性的探討。從2015年10月AlphaGo與樊麾的對局來看,雖然AlphaGo正式比賽是5:0,但以高手的標準,五局中它的招數平平無奇,毫無魔性。是下得象人,比以前的程序強太多了,不會抽風。但並沒有真正震懾到人,人們還發現了它不少明顯的漏洞與不精確的地方,前面我寫文章分析介紹了(《谷歌圍棋演算法存在巨大缺陷,達不到人類最高水平》,谷歌圍棋演算法存在巨大缺陷,達不到人類最高水平|陳經 - 風雲之聲 - 知乎專欄)。而且五局非正式對局樊麾也勝了2局。考慮到樊麾心理失衡表現大打折扣,可以認為這時單機版的AlphaGo和他正常的棋力差不多,分散式版本的高一些。谷歌論文也說了單機版AlphaGo的等級分和樊麾差不多,2900多分,差李世石600分。
2016年1月28日論文在《自然》上發表了,棋譜公布了,3月挑戰李世石的計劃也宣布了。在當天WeiqiTV立即推出的談話節目中,劉星透露不久前樊麾來北京時喝大了,又因為保密協議不能說,只是反覆說出大事了,要變天了。如果AlphaGo只是和樊麾差不多的實力,這隻能說是人工智慧界值得慶祝的大事,對圍棋界卻不是變天性質的大事。這還是個好事,幫圍棋打響世界知名度。如果機器總是勝不了人類高手,這對圍棋發展到全球是一個絕佳機會。這是孟泰齡等職業棋手看到的機會,也是我內心的期盼。由於樊麾加入了谷歌團隊,他顯然知道了更多的東西,知道了AlphaGo的實力突破。可以認為,在2015年12月左右,谷歌團隊取得了顯著的演算法突破。
3月9日人機大戰第一局開戰前,就有一個谷歌工程師傳出來的流言,說內部評估李世石勝率為0,AlphaGo三天就完成了一次進化,對上一個版本的勝率達到了100%!現在看來這很可能是真的。後來流言又變成,每三天完成一次進化,對上一個版本達到100%。這應該不成立。谷歌放出的內部消息意思應該是,取得了演算法突破,搞了一次學習進化,AlphaGo用三天時間進化完成後,對勝樊麾的那個版本勝率100%。
所有圍棋AI不斷開發提升實力的過程中,都存在瓶頸。例如之前最強的程序Zen,2011年在KGS上就很厲害了,打到了5D。但之後三四年雖然不斷調整代碼開發,實力進展卻很小。只有在最近引入了深度學習後,才再次突破站穩了7D。之前圍棋AI的主要開發工作是寫程序代碼,怎麼用代碼寫一個走子策略,寫出蒙特卡洛搜索(MCTS)演算法的代碼,怎麼優化代碼,怎麼加進一些代碼消除bug。這種工作還是比較依賴人的具體代碼工作的,主要是人在那動腦子想。主要框架定了以後,不斷改進調試就到頂了,再想有所突破就難了。表現出來就是代碼改了這裡,那裡就不好了,顧此失彼。想加進一些改進的思想,大的加不了,小的越來越瑣碎,加了也不一定有大用。
那麼AlphaGo的瓶頸是什麼?從谷歌論文來看,與Zen等上一代程序很不相同。這裡我們要再次描述一下AlphaGo的演算法框架。
AlphaGo的核心程序代碼有兩部分。一部分是MCTS演算法代碼、快速走子策略中一些和圍棋專業知識相關的代碼。更重要的部分是策略網路、價值網路等幾個多層神經網路中,那幾百萬個節點與更多聯結邊的「係數」。AlphaGo的開發者並不是從頭開始的,兩個並列第一作者David Silver和Aja Huang都是之前研究了圍棋演算法多年的,整個團隊有約15-20人的業界頂級專家。但我相信,要讓他們去調整MCTS代碼,加一些代碼去消除bug,去提升最終的程序表現實力,他們也很快就會工作很煩卻進展不大,這是代碼開發中常有的事。程序演算法框架定下來了,從2015年10月到2016年3月,五個月時間作出重大改變基本不可能。
但是,那幾百萬幾千萬個神經網路中的「係數」卻是很容易變動的。你可以隨便去改那些係數,如果表現不好大不了回到原來的。要是找到了新辦法,搞個三天時間的訓練學習,大批大批地改係數,說不定就取得好的效果,再實踐檢驗下就知道有沒有用了。實踐檢驗很簡單,就是和沒改係數之前的版本下,勝率大躍進,就成功了。這時團隊的開發工作,就不是在那改代碼了,而是想「新的訓練方法」。當然這也不容易,按谷歌論文的說法,你得有一套訓練的「流水線」。想把這個流水線建起來,那就是砸錢,要把各類專家都配齊了,還得有一堆高性能機器。
比如短時間暴力生成3000萬個自我對局,這得多少高性能機子同時對下?還有「深度學習」,輸入的是10萬個甚至更多的棋局,然後用高性能機器訓練出一個節點特別多的多層神經網路。還有「強化學習」,意思差不多如下。比如你要改進策略網路,就有一個初始的「策略網路」。策略網路的結構是不會變的,變的是上面的係數。然後你用什麼方法變一下係數,就相當於變出了一個新的策略網路。然後讓新舊兩個網路對下,從結果看你剛才變的是好是壞,再決定繼續怎麼變。這麼反覆弄下去,就會弄出一個對舊網路勝率很高的,新的策略網路。總之就是讓機器self-play,左右互搏,看結果來變係數。這都是需要一堆高性能機器一起做的,不然根本沒有時間完成訓練。
但是對谷歌這樣有實力的公司,「這都不是事」。一旦把流水線建起來了,那個爽就沒法說了。現在整個團隊的開發工作簡直進入了另一個境界。不是去改代碼了。改來改去調bug,誰知道進度怎麼樣,這就是走入死路了。主要開發工作就是去高層次地想,還有什麼新的訓練方法?感覺靠譜就去試,流水線一開,成千上萬台高性能機器在那暴力運算,self-play熱火朝天。一計不成再生二計,盤算的都是類似於上帝的事,怎麼讓一堆機器幫你辦底層的事,團隊核心就負責想大招。
當然這流水線研發也會有瓶頸。谷歌論文中就說了,他們用KGS的高段對局者的10萬局棋譜,深度學習訓練出了一個「初始策略網路」SL,然後又用「強化學習」對著它不斷「強化」,最後出了一個「強化策略網路」RL。RL和SL對下,勝率高達80%。但是在整個AlphaGo中,把SL替換成RL,和別人下,等級分表現反而更差!原因論文上也有提及,可能是RL過於強調對SL的勝率,訓練得鑽牛角尖了,對別人反而不如SL好,因為SL是很多人的棋招訓練出來的,各種情況都見識過。但是RL也不是沒有用處,用RL自己下,可以生成3000萬個高質量棋局,用來訓練價值網路效果好。
我當時就注意到這個了,所以認為AlphaGo可能水平到了瓶頸了,再怎麼暴力堆數據,堆更多棋局,可能就象RL不如SL一樣,提高不了水平。也因為對整個程序訓練機制理解不夠深,在仔細看棋譜後對AlphaGo的演算法缺陷印象更深,從而作出了「AlphaGo還不如人類頂尖高手,但有勝機」的判斷。
但我們回過頭看,這個瓶頸其實並不嚴重,比起Zen這類程序代碼調整死去活來沒有進步的境地,AlphaGo就算有瓶頸,情況也好多了。谷歌開發者都是業界頂級牛人,肯定能想出一些新訓練方法。比如想個妙招,改用不同的「強化學習」訓練方法,加點小變化。這回從SL強化學習完了,學出個RL-Plus。然後拿RL-Plus換掉SL,變出個新版AlphaGo一試,哇,等級分高了200,大招見效了!又趕緊用RL-Plus在一堆機器對下,生成3000萬個質量更高的棋局,用它們深度學習,訓練出了新的價值網路V-PLus。然後什麼都不變,新版的RL-Plus + V-Plus,對舊版的RL+V,對戰400局,全勝!這下就搞定了,幾個工程師碰杯慶祝,等級分一算,知道李世石機會為0了。
這個流水線非常厲害。谷歌甚至放出了激動人心的消息,不再用人類棋局訓練策略網路!也就是說,讓AlphaGo從零知識開始,從胡亂扔子棋力最差的策略網路開始,不斷刷流水線,通過強化學習、self-play、深度學習更新幾個神經網路。這樣肯定會比較慢,說不定要幾個月時間才訓練好。但是一旦訓練好了,這就是真正沒有和人學過任何東西,全靠自己對下幾十億局訓練出來的,沒有受過人「污染」的機器智能!這個純種AlphaGo可能出手就和人完全不一樣,也許一開始就下的是天元、五五之類的怪招,直到中後盤才和人類棋手以及現在的AlphaGo走得差不多。這種自己在山洞裡練習出來的東西,會不會比人強,甚至比現在這個學了人走法的AlphaGo強,會是特別有意思的事。不懂圍棋的人可能很難理解,為什麼這特別有意思,但真的是很浪漫很狂野的一個事,非常激動人心。
谷歌論文出來以後,專家的解讀也出來了,我也仔細讀了。一開始以為,都是以前見過的東西,就是各個環節都做得不錯,下本錢加在一起細化優化了,所以弄出一個棋力大躍進,戰勝了人類低水平職業棋手。但再要進步,似乎得發明「新技術」,再來一個創新,才能棋力進步追上頂級職業棋手過招。
然而這是一個錯覺。就MCTS,策略網路,價值網路等等技術環節而言,別人都做過。但是搞出工業級的流水線,沒有人做過!流水線本身才是最大的創新!這個流水線誕生以後,潛力無窮,極易取得突破。開發者們一定玩得開心死了。
我大約想明白了谷歌圍棋演算法的秘密,最厲害的就是這個神經網路訓練的流水線。技術不是新的,但是量變到質變,暴力堆數據的各個環節打通以後,就產生了無窮的威力,一舉在短時間內破解了圍棋這個人工智慧的核心問題。
致謝:感謝科技與戰略風雲學會會長袁嵐峰博士(微博@中科大胡不歸 )與其他會員的寶貴意見。
討論:袁嵐峰認為,DeepMind調整係數的辦法可能是遺傳演算法。即先產生大量的初代種群,然後把它們組合起來並加上隨機變異產生下一代種群,通過互相對弈選擇優勝者,再進行下一代組合、變異、選擇,如此循環。這是當代科學研究中全局搜索的常用演算法。
作者簡介:筆名陳經,香港科技大學計算機科學碩士,科技與戰略風雲學會會員, 微博@風雲學會陳經 ,棋力新浪圍棋6D。二十一世紀初開始有獨特原創性的經濟研究,啟發了大批讀者。2003年的《經濟版圖中的發展中國家》預言中國將不斷產業升級,挑戰發達國家。
【新書推薦】2016年8月,中國發展出版社出版《陳經說:中國的官辦經濟》。該書從「官辦經濟」出發,闡述中國如何在計劃經濟向市場經濟轉化的過程中,摸索出一條不同於二者的全新道路。該書被廣大讀者稱之為工業黨思想理論領域的旗幟之作,觀察者網專欄作者文揚點評指出,《陳經說》的出版讓有些「主流經濟學家」的有色眼鏡跌碎一地。京東、噹噹、亞馬遜等店有售,也可進入觀察者網微店購買。
【本文2016年3月12日發表於觀察者網(陳經:從人機大戰前兩局推測AlphaGo演算法的重大進展)。】
請關注風雲學會的微信公眾平台「風雲之聲」,微信號fyvoice
知乎專欄:風雲之聲 - 知乎專欄
一點資訊:【一點資訊】風雲之聲 www.yidianzixun.com
今日頭條:風雲之聲 – 頭條號(TouTiao.org)
推薦閱讀:
※對戰全程視頻!頂級高手苦練DOTA半輩子,就這樣被AI擊敗
※柯潔大戰阿爾法狗,品牌借勢哪家強?
※谷歌圍棋演算法存在巨大缺陷,達不到人類最高水平|陳經
※AlphaGo 擊敗李世石,是否促進了人工智慧行業近一年來的發展?
※請問李世石第四局的「神之一手」到底有多奇妙呢?