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