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