張澤玲
2016年3月9日至15日,韓國(guó)九段棋手李世石與谷歌計(jì)算機(jī)AlphaGo在韓國(guó)首爾進(jìn)行了一次舉世矚目的人機(jī)大戰(zhàn)。經(jīng)過5場(chǎng)艱難的對(duì)弈,AlphaGo以4∶1的比分取得勝利,而幾個(gè)月前,它還只能戰(zhàn)勝職業(yè)圍棋二段選手樊麾。AlphaGo戰(zhàn)勝了人類頂尖棋手,且進(jìn)步速度如此之快,這不禁讓人擔(dān)心:這樣下去,它豈不是要像《終結(jié)者》中的“天網(wǎng)”和《黑客帝國(guó)》中的“母體”一樣,可以統(tǒng)治地球奴役人類了?
AlphaGo真的有這么無敵嗎?它的出現(xiàn),對(duì)人類而言究竟是福還是禍呢?
拋開所有高大上的描述,AlphaGo本質(zhì)上只是一段很長(zhǎng)很長(zhǎng)的程序代碼。人類眼中的下圍棋,在它眼里只是不停地按照代碼設(shè)定做計(jì)算。人類棋手下棋時(shí)要計(jì)算每一步棋該怎樣走,走這一步是優(yōu)勢(shì)還是劣勢(shì),同樣,AlphaGo也在做類似的計(jì)算。而支撐它進(jìn)行計(jì)算的是四個(gè)程序設(shè)置:策略網(wǎng)絡(luò)、估值網(wǎng)絡(luò)、快速部署和蒙特卡洛樹搜索。要想知道AlphaGo是怎樣學(xué)棋、下棋的,我們就得好好說說這四個(gè)程序設(shè)置了。
AlphaGo的策略網(wǎng)絡(luò),由監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)兩種機(jī)器學(xué)習(xí)方法搭建。聽上去有些高深?別急,平時(shí)刷題不止、考試不斷的你一定深有體會(huì)。
所謂的監(jiān)督學(xué)習(xí),是我們給程序一個(gè)訓(xùn)練集,其中一部分稱為例子,相當(dāng)于習(xí)題;一部分稱為目標(biāo),相當(dāng)于答案。然后設(shè)定一個(gè)函數(shù)模型,讓程序不斷把訓(xùn)練集的例子代入函數(shù)模型,算答案,對(duì)答案。如果答案不對(duì),程序就去調(diào)整這個(gè)函數(shù)模型里的某些參數(shù),再重復(fù)之前的過程,直到能得出較高的正確率。接著再給程序一個(gè)測(cè)試集,相當(dāng)于考試。如果程序?qū)y(cè)試集里的例子算出的答案正確率也比較高,表明訓(xùn)練成功。
對(duì)于AlphaGo來說,訓(xùn)練集是人類在KGS圍棋對(duì)戰(zhàn)平臺(tái)上下過的數(shù)萬局棋譜,其中,“例子”是給定一步以后下一步該走什么,“答案”是人類走法中較多人走的且效果不錯(cuò)的那步,函數(shù)模型是模擬人類大腦的“深度卷積神經(jīng)網(wǎng)絡(luò)”。這里的“神經(jīng)網(wǎng)絡(luò)”指的是一類算法結(jié)構(gòu),本質(zhì)是一簇互相關(guān)聯(lián)的函數(shù);“深度”指的是“神經(jīng)網(wǎng)絡(luò)”有好多層,每層負(fù)責(zé)學(xué)習(xí)不同的知識(shí)點(diǎn);“卷積”則是一類數(shù)學(xué)方法,在神經(jīng)網(wǎng)絡(luò)中處理一些函數(shù)之間的關(guān)系和提煉輸入數(shù)據(jù)里的有效信息。要想完全弄清楚“卷積”,大學(xué)的時(shí)候你可得好好學(xué)習(xí)高等數(shù)學(xué)哦。
接下來的強(qiáng)化學(xué)習(xí),有點(diǎn)像平時(shí)老師讓我們用學(xué)到的知識(shí)去解決某些答案并不確定的實(shí)際問題。在監(jiān)督學(xué)習(xí)的過程中,AlphaGo只是參照人類的走法大致學(xué)會(huì)了預(yù)測(cè)下一步,那么下棋的效果究竟會(huì)怎么樣呢?于是我們讓兩個(gè)策略網(wǎng)絡(luò)互相下棋并不斷調(diào)整,看哪邊下贏了就保留勝方的模式和參數(shù),這樣下過3000萬盤后,AlphaGo便通過這樣“左右互搏”的方式提高了策略網(wǎng)絡(luò)的“實(shí)戰(zhàn)能力”,避免只會(huì)照貓畫虎模仿人類。
估值網(wǎng)絡(luò)與策略網(wǎng)絡(luò)中強(qiáng)化學(xué)習(xí)的過程差不多,只不過在這里AlphaGo學(xué)的不是預(yù)測(cè)下一步怎么走,而是學(xué)習(xí)評(píng)估此刻棋盤上自己下在不同地方最終獲勝的概率。
快速部署又是什么呢?雖然AlphaGo已經(jīng)學(xué)習(xí)了很多東西,下棋的時(shí)候還是會(huì)遇到卡殼的情形,這個(gè)時(shí)候總不能干瞪眼發(fā)愣吧?于是,AlphaGo會(huì)根據(jù)經(jīng)驗(yàn)“猜”一步——按照正確率不太高的一個(gè)函數(shù)模型進(jìn)行快速計(jì)算,然后結(jié)合估值網(wǎng)絡(luò)得出的獲勝概率分布和蒙特卡洛樹搜索得到的信息判定下一步該怎么下。
最后要說的是蒙特卡洛樹搜索。“蒙特卡洛”并不是人名,而是一個(gè)地名。該方法的發(fā)明人之一斯塔尼斯拉夫·烏拉姆的叔叔經(jīng)常在蒙特卡洛賭場(chǎng)輸錢,賭博和這類方法都依賴概率,因此得名。它的功能是從當(dāng)前一步參照估值網(wǎng)絡(luò)和快速部署所給的信息,去評(píng)估搜索接下來的幾步,再把搜索的結(jié)果傳回給策略網(wǎng)絡(luò)和估值網(wǎng)絡(luò)。這個(gè)過程的流程圖就像不斷分叉的樹干,選擇哪一個(gè)分支深入搜索下去則是靠一定的概率,因此被稱為“蒙特卡洛樹搜索”。
總的來說,AlphaGo跟人類下棋時(shí),策略網(wǎng)絡(luò)和快速部署負(fù)責(zé)評(píng)估下一步不同走法的好壞,估值網(wǎng)絡(luò)負(fù)責(zé)估算當(dāng)前盤面的獲勝概率分布,蒙特卡洛樹搜索負(fù)責(zé)結(jié)合前三者幫助找到最佳的那一步。當(dāng)然,這只是粗略的分工,在AlphaGo的實(shí)際運(yùn)行中,這四種程序設(shè)置是互相交叉協(xié)作的。
在跟李世石九段對(duì)決中,由于比賽規(guī)則里有時(shí)間限制,AlphaGo還額外增加了一部分程序設(shè)置用于控制時(shí)間。面對(duì)復(fù)雜度高的局面,AlphaGo的計(jì)算量會(huì)顯著增加,一樣會(huì)出現(xiàn)人類棋手的“長(zhǎng)考”現(xiàn)象。為避免在一步棋中耗費(fèi)太多時(shí)間,時(shí)間控制部分的程序就要權(quán)衡每步棋的時(shí)間分布。
這么看來,AlphaGo學(xué)習(xí)和下棋的過程真是比我們上課復(fù)雜枯燥多了——所有內(nèi)容都是對(duì)數(shù)據(jù)的處理和計(jì)算。而且,因?yàn)橹唤邮芰恕跋聡濉钡挠?xùn)練,AlphaGo只會(huì)下圍棋,別的什么也不會(huì)。如果沒有開發(fā)人員去調(diào)試AlphaGo的代碼,修改函數(shù)模型,給予新的訓(xùn)練,AlphaGo就學(xué)不到新技能,逞不了什么威風(fēng)。目前,AlphaGo更像是一條聰明的獵犬,必須要人類的牽引和訓(xùn)練才能進(jìn)步。即便有壞人企圖利用人工智能干壞事,情形也跟當(dāng)下黑客入侵我們的電腦手機(jī)類似,自有負(fù)責(zé)信息安全的專家們?nèi)ブ浦梗螞r,人工智能的科學(xué)家們?cè)缭谠O(shè)計(jì)之初就把這些安全因素考慮進(jìn)去了,目前最“聰明”的AlphaGo也還在科學(xué)家們的牢牢掌控之中呢。
從另一個(gè)角度看,AlphaGo的成功是因?yàn)樗7铝巳祟惖乃伎挤绞胶蛯W(xué)習(xí)能力,這也讓我們認(rèn)識(shí)到了人是多么神奇的存在,認(rèn)識(shí)人類自身又是一個(gè)多么廣闊的領(lǐng)域。我們“日用而不知”的能力,包含了多少?gòu)?fù)雜的道理?這些天然的饋贈(zèng),我們不更應(yīng)該好好珍惜、好好利用嗎?