圖片源自網(wǎng)絡(luò)
柯潔與AlphaGo世紀(jì)大戰(zhàn)已經(jīng)結(jié)束了,可以說(shuō)是毫無(wú)懸念,柯潔最終還是輸?shù)袅艘痪?,這也是在大家意料之中的事情。今天借著這樣一個(gè)契機(jī),我寫(xiě)下了這篇文章,重點(diǎn)想和大家聊一聊AlphaGo背后的人工智能技術(shù)。
我們知道,去年三月份戰(zhàn)勝?lài)甯呤掷钍纴h的AlphaGo實(shí)際上是一個(gè)多種AI技術(shù)、多個(gè)深度網(wǎng)絡(luò)的混合體。它的總體架構(gòu)如下圖所示:
其中整個(gè)架構(gòu)分成左右兩部分,左邊是兩個(gè)神經(jīng)網(wǎng)絡(luò),利用人類(lèi)的走棋來(lái)訓(xùn)練得到。DeepMind獲取了韓國(guó)網(wǎng)絡(luò)圍棋對(duì)抗平臺(tái)KGS上大量高手走棋的棋譜,并訓(xùn)練左邊的神經(jīng)網(wǎng)絡(luò)來(lái)預(yù)測(cè)人類(lèi)下一步的走棋。
右側(cè)的部分則是不需要借鑒人類(lèi)下棋的經(jīng)驗(yàn),機(jī)器完全通過(guò)強(qiáng)化學(xué)習(xí),自己跟自己玩從而訓(xùn)練網(wǎng)絡(luò)達(dá)到強(qiáng)大的水平。
據(jù)說(shuō),現(xiàn)在的AlphaGo是升級(jí)版本的,它已經(jīng)完全拋棄了基于人類(lèi)專(zhuān)家下棋經(jīng)驗(yàn)的走棋網(wǎng)絡(luò)(左邊),而只剩下了AlphaGo左右互博的強(qiáng)化學(xué)習(xí)部分。本篇文章就主要講講右半部分,左右互搏的AlphaGo。
走棋網(wǎng)絡(luò)
首先,我們可以將AlphaGo看作是一個(gè)機(jī)器人,棋盤(pán)加對(duì)手就是它所面臨的環(huán)境。
AlphaGo需要學(xué)習(xí)的就是在面對(duì)不同環(huán)境的時(shí)候,它應(yīng)該如何進(jìn)行決策,也就是給出下一時(shí)刻的走棋。我們把這種從當(dāng)前棋局決定我應(yīng)該走到哪里的對(duì)應(yīng)稱(chēng)作一個(gè)策略(Policy),AlphaGo通過(guò)大量的自己跟自己下棋從而得到這樣的一個(gè)走棋策略。
具體的方法是,我們首先構(gòu)造一個(gè)深度的卷積神經(jīng)網(wǎng)絡(luò)(稱(chēng)為走棋網(wǎng)絡(luò)),輸入的是棋盤(pán)狀態(tài)所構(gòu)成的一張二維圖片;輸出的則是AlphaGo下一步的走法,如下圖所示。
我們知道,深度卷積神經(jīng)網(wǎng)絡(luò)非常擅長(zhǎng)處理圖像,它不僅可以敏銳地辨別圖像屬于不同的類(lèi)別,而且還可以提煉出圖像中的多層次信息。
例如,當(dāng)我們把大量的圖片喂給卷積神經(jīng)網(wǎng)絡(luò)的時(shí)候,它就可以在低層的網(wǎng)絡(luò)提煉圖像中的細(xì)節(jié)信息(如邊緣、棱角),而在高層則處理圖像中的大尺度信息。之所以在和李世乭的世紀(jì)大戰(zhàn)中,AlphaGo展現(xiàn)出了某種“大局觀”,就是因?yàn)榫矸e神經(jīng)網(wǎng)絡(luò)可以提煉棋局中的大尺度、高層次信息。
有了這樣的網(wǎng)絡(luò)架構(gòu),我們就要訓(xùn)練這個(gè)網(wǎng)絡(luò)了。
然而,卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練是需要有監(jiān)督信息的,而我們知道圍棋是一種無(wú)監(jiān)督的博弈,AlphaGo只有在走完了整個(gè)棋局才能獲得反饋,怎么辦呢?答案就在于左右互博!我們可以讓當(dāng)前的AlphaGo和它自己來(lái)進(jìn)行比賽,走到終點(diǎn)!這樣不就可以獲得反饋信息了嗎?
具體地說(shuō),我們可以用同一個(gè)走棋網(wǎng)絡(luò)的兩個(gè)副本完成兩個(gè)AlphaGo的博弈,然后讓其中的一個(gè)AlphaGo進(jìn)行學(xué)習(xí)。這樣,每從一個(gè)棋局S開(kāi)始,AlphaGo和它自己的副本完成了對(duì)局,就會(huì)獲得一個(gè)輸贏的得分;然后它再?gòu)腟開(kāi)始,再下到棋局結(jié)束,……,一共進(jìn)行3千萬(wàn)次。
由于每一次走棋都是有隨機(jī)性的,所以每次的得分都會(huì)不一樣,有的時(shí)候AlphaGo可能贏,有的時(shí)候則可能是輸,于是針對(duì)一個(gè)棋局S,我們就可以計(jì)算這三千萬(wàn)盤(pán)棋的平均得分。
我們把這個(gè)平均得分作為目標(biāo),來(lái)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)以實(shí)現(xiàn)這個(gè)目標(biāo)的最大化。于是,我們就用左右互搏的方式,訓(xùn)練出了一個(gè)走棋網(wǎng)絡(luò)。
價(jià)值網(wǎng)絡(luò)
然而,單純依靠這樣的走棋網(wǎng)絡(luò),AlphaGo雖然已經(jīng)很強(qiáng),但還沒(méi)有強(qiáng)到能對(duì)抗人類(lèi)圍棋九段高手的地步,怎么辦呢?DeepMind團(tuán)隊(duì)的科學(xué)家們想出了另外一種強(qiáng)化學(xué)習(xí)手段,這就是價(jià)值網(wǎng)絡(luò)。什么是價(jià)值呢?我們都知道,人類(lèi)是有自己的價(jià)值觀判斷的。
比如,我們每個(gè)人都知道尊老愛(ài)幼是一種美德,這就是價(jià)值觀。對(duì)于一個(gè)強(qiáng)化學(xué)習(xí)的程序來(lái)說(shuō),由于在很多情況下,它缺乏環(huán)境給它的反饋,于是人們就給程序設(shè)計(jì)了一種價(jià)值函數(shù),在沒(méi)有環(huán)境反饋信息的時(shí)候,程序可以根據(jù)這個(gè)價(jià)值函數(shù)來(lái)選擇自己的行動(dòng),讓價(jià)值最大化。但難點(diǎn)是,我們應(yīng)該怎么設(shè)計(jì)這個(gè)價(jià)值函數(shù)呢?答案是,讓機(jī)器自己把這個(gè)函數(shù)學(xué)到。
在AlphaGo中,它同樣是依賴(lài)于類(lèi)似于走棋網(wǎng)絡(luò)的方法來(lái)學(xué)習(xí)出一個(gè)價(jià)值函數(shù)的,這個(gè)函數(shù)能夠評(píng)定每一個(gè)棋局的可能獲勝的價(jià)值有多大。AlphaGo仍然利用了一種卷積神經(jīng)網(wǎng)絡(luò)的技術(shù)來(lái)實(shí)現(xiàn)這個(gè)價(jià)值函數(shù),如下圖所示:
同樣的,這個(gè)價(jià)值網(wǎng)絡(luò)的反饋信息也來(lái)源于從任意一個(gè)棋局開(kāi)始的左右互搏。在訓(xùn)練的階段,AlphaGo從當(dāng)前棋局開(kāi)始運(yùn)用上面已經(jīng)訓(xùn)練好的走棋網(wǎng)絡(luò)走棋,一直下到結(jié)尾而得到輸贏的得分。這么做三千萬(wàn)次后計(jì)算平均得分z就是價(jià)值網(wǎng)絡(luò)的學(xué)習(xí)目標(biāo)。也就是說(shuō)價(jià)值網(wǎng)絡(luò)要根據(jù)當(dāng)前棋局S'得到價(jià)值判斷v(S'),以使得v(S')要盡可能地靠近z。
引入了價(jià)值網(wǎng)絡(luò)之后,我們又會(huì)面臨新的問(wèn)題,我們究竟是應(yīng)用走棋網(wǎng)絡(luò)來(lái)指導(dǎo)我們下棋,還是依賴(lài)于價(jià)值網(wǎng)絡(luò)呢?
在AlphaGo的早期版本中,它是運(yùn)用價(jià)值網(wǎng)絡(luò)的評(píng)估結(jié)果來(lái)作為AlphaGo走棋的主要參考的。但由于價(jià)值網(wǎng)絡(luò)在計(jì)算每一個(gè)棋局的平均得分的時(shí)候,每一次走棋都是根據(jù)走棋網(wǎng)絡(luò)進(jìn)行的,所以其實(shí)價(jià)值網(wǎng)絡(luò)已經(jīng)綜合了走棋網(wǎng)絡(luò)。
蒙特卡洛樹(shù)搜索
然而,即使這樣綜合了兩者的意見(jiàn),AlphaGo還是不能達(dá)到九段的水平,因?yàn)樗荒芟駠甯呤忠粯舆M(jìn)行虛擬走棋。我們?nèi)祟?lèi)在下棋的時(shí)候,總會(huì)從當(dāng)前的棋局開(kāi)始,往前看幾步,然后才決定當(dāng)前這一步的走法。
我們知道,經(jīng)典的人工智能的方法就是搜索。
所以,在實(shí)際開(kāi)始下棋的時(shí)候,DeepMind再借用了一個(gè)大招,這就是蒙特卡洛樹(shù)搜索,這種算法可以讓AlphaGo進(jìn)行虛擬地走棋,從而在一定搜索步驟后,才決定當(dāng)前應(yīng)該走到哪里。我們把每一個(gè)棋局看作一個(gè)節(jié)點(diǎn),如果通過(guò)一步走棋a可以從棋局A走到棋局B,那么我們就從A建立一條有向連邊到B,這樣通過(guò)走棋我們就可以得到一個(gè)網(wǎng)絡(luò)。
然而,我們很快就會(huì)發(fā)現(xiàn),不可能在電腦空間中裝下這個(gè)網(wǎng)絡(luò)。假設(shè)每步有10種可能的走法,那么虛擬地走10步棋就會(huì)有10^10種可能棋局,這已經(jīng)是一個(gè)非常大的數(shù)字了。所以,AlphaGo必須巧妙地對(duì)這個(gè)空間進(jìn)行壓縮,從而避免組合爆炸。
蒙特卡洛搜索算法的好處就在于它可以依概率來(lái)在眾多的可能性中選擇一個(gè),從而砍掉大量其它的分支樹(shù),快速地展開(kāi)樹(shù)搜索。
開(kāi)始的時(shí)候,由于我們對(duì)當(dāng)前棋局了解不多,于是我會(huì)純隨機(jī)地選擇一種走法a。但是經(jīng)過(guò)幾步虛擬走棋之后,我就會(huì)積累關(guān)于棋局的信息,從而減少不必要的隨機(jī)搜索。
在AlphaGo中,它的隨機(jī)選擇并不是純粹的隨機(jī),而是利用了前面介紹的走棋網(wǎng)絡(luò)、價(jià)值網(wǎng)絡(luò)的先驗(yàn)信息,以及累積到的下一步棋局的信息等等再隨機(jī)走棋的。
具體地,假設(shè)現(xiàn)在AlphaGo所在的棋局是S(真實(shí)的棋局),于是它開(kāi)始展開(kāi)樹(shù)搜索,也就是展開(kāi)虛擬的對(duì)局。每一步虛擬對(duì)局應(yīng)該怎么走是依據(jù)走棋網(wǎng)絡(luò)進(jìn)行的,如下圖所示:
這就是一次虛擬走棋(搜索),每一步打開(kāi)棋局節(jié)點(diǎn)都是根據(jù)走棋網(wǎng)絡(luò)p_{sigma}。在早期版本的AlphaGo中,這個(gè)走棋網(wǎng)絡(luò)是通過(guò)和人學(xué)習(xí)訓(xùn)練得到的(參見(jiàn)圖1中的左手第二個(gè)網(wǎng)絡(luò)),而在現(xiàn)在的升級(jí)版中,這個(gè)走棋網(wǎng)絡(luò)很可能就是前面介紹的通過(guò)深度強(qiáng)化學(xué)習(xí)訓(xùn)練得到的。
這種虛擬走棋不可能一直走下去,而是在經(jīng)過(guò)了T時(shí)間步后就會(huì)停止。
虛擬走棋停止之后,我們就可以對(duì)這些虛擬走出來(lái)的棋局進(jìn)行評(píng)估。事實(shí)上,人類(lèi)在進(jìn)行棋局推演的時(shí)候,也就是要評(píng)估每一種可能走棋究竟是好還是壞。AlphaGo的價(jià)值評(píng)估過(guò)程如下:
首先,對(duì)于一個(gè)葉節(jié)點(diǎn)(也就是虛擬走棋走到的最后一步所對(duì)應(yīng)的棋局)來(lái)說(shuō),AlphaGo會(huì)利用一個(gè)快速走棋算法p_{\pi}(根據(jù)人類(lèi)的棋譜訓(xùn)練得到的另一個(gè)神經(jīng)網(wǎng)絡(luò),參見(jiàn)圖1)將整個(gè)棋局走完,從而對(duì)該節(jié)點(diǎn)進(jìn)行評(píng)估。這種評(píng)估綜合了之前訓(xùn)練好的價(jià)值網(wǎng)絡(luò)(v_{\theta})和快速虛擬走棋到達(dá)終局的結(jié)果好壞程度(r)來(lái)給出。
其次,對(duì)于非葉子節(jié)點(diǎn),AlphaGo會(huì)將葉子節(jié)點(diǎn)反推回來(lái)的價(jià)值信息進(jìn)行綜合來(lái)計(jì)算該非葉節(jié)點(diǎn)的價(jià)值信息,如下圖所示:
這里的Q就表示根據(jù)后續(xù)的棋局來(lái)進(jìn)行綜合的算法。總而言之,通過(guò)層層的計(jì)算,我們能夠給每一個(gè)虛擬走出來(lái)的棋局賦值一個(gè)評(píng)估值Q,它綜合了快速搜索和價(jià)值網(wǎng)絡(luò)的評(píng)估。
最后,AlphaGo將根據(jù)這些“思考”的結(jié)果,依據(jù)估值信息Q來(lái)展開(kāi)真實(shí)的走棋,也就是在所有可能的下一步棋局中,選擇Q值最大的一個(gè)進(jìn)行實(shí)際落子。至此,AlphaGo終于走出了艱難的一步!
AlphaGo展開(kāi)的蒙特卡洛搜索樹(shù)
綜合
整個(gè)AlphaGo實(shí)際上仍然分成了學(xué)習(xí)和走棋兩個(gè)大的階段。
在與柯潔對(duì)戰(zhàn)之前,AlphaGo通過(guò)自我對(duì)局的方式完成對(duì)走棋網(wǎng)絡(luò)和價(jià)值網(wǎng)絡(luò)的學(xué)習(xí)。而在真正對(duì)戰(zhàn)的階段,AlphaGo將主要展開(kāi)對(duì)蒙特卡洛樹(shù)搜索的算法,并綜合搜索和學(xué)習(xí)的成果完成每一步走棋。
所以,總的來(lái)說(shuō),AlphaGo是將深度強(qiáng)化學(xué)習(xí)的技術(shù)與蒙特卡洛樹(shù)搜索技術(shù)巧妙地綜合到了一起,從而得到的一種超強(qiáng)的算法。這種將最新的深度學(xué)習(xí)技術(shù)與傳統(tǒng)的基于符號(hào)、推理、搜索的AI技術(shù)相綜合的方法正是現(xiàn)在人工智能界的一個(gè)主要趨勢(shì)。
分享到微信 ×
打開(kāi)微信,點(diǎn)擊底部的“發(fā)現(xiàn)”,
使用“掃一掃”即可將網(wǎng)頁(yè)分享至朋友圈。