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