AlphaGo原理淺析


一、PolicyNetwork(走棋網絡)

首先來講一下走棋網絡。我們都知道,圍棋的棋盤上有19條縱橫交錯的線總共構成361個交叉點,狀態空間非常大,是不可能用暴力窮舉的方式來模擬下棋的。但是我們可以換一種思路,就是讓計算機來模擬職業棋手來下棋。DeepMind團隊首先想到的是用深度卷積神經網絡,即DCNN來學習職業棋手下棋。他們將圍棋棋盤上的盤面視為19*19的圖片作為輸入,黑子標為1,白子標為-1,無子標為0。但是還不能僅僅將這一張圖送入網絡中進行訓練,因為圍棋盤面的情況非常復雜,棋子之間的關系都是非線性的,所以如果只輸入這一個矩陣的話訓練起來會很耗資源和計算量。

所以DeepMind團隊又把一些新的特征維度送到深度卷積神經網絡中,讓模型訓練變得更加簡單,這些新的特征由圍棋術語中的氣、目、空這些概念構成。最終他們將棋盤局面變成48張圖,也就是最終輸入深度卷積神經網絡中的是一個19*19*48的圖像棧,將輸入代入到13層的卷積神經網絡中進行訓練,選擇192個濾波器進行卷積,最終輸出一個361維的向量,表示的是職業棋手在棋盤上每個交叉點上落子的概率,比如這幅圖中輸出的是職業棋手大概率在這個范圍內落子,然后在這個點落子的概率是0.4,所以計算機就會選擇在概率最高的這個0.4的點落子。這套網絡的訓練集是16萬局6-9段的人類職業棋手的對弈棋譜,收取了將近3000萬步。最終這套網絡經過訓練之后已經能正確符合57%的人類落子行為,已經能和業余水平的人類棋手過招。這張圖顯示了策略網絡的戰力相對於訓練后准確性的關系,可以看到當網絡的卷積核個數為384個時,這個走棋網絡具有最高的水平,但是為了兼顧速度他們最終選擇卷積核個數為192個。

這張圖列出的是他們最終選擇的作為每個棋局輸入的48個特征面。

 

 

二、Fastrollout(快速走子)

我們得到的這個走棋網絡效果還算不錯,但是運行速度太慢了,要用3毫秒,而圍棋是一項需要計時的比賽,也就是說速度越快,那么也就代表着AlphaGo具有越高的下棋水平,所以DeepMind又做了一個相對簡化的版本,叫作快速走子。快速走子用的是局部特征匹配加線性回歸的方法,比使用神經網絡的走棋網絡快了1000倍,但是模擬職業棋手的准確率降低了一半。這張圖顯示了采用不同的策略進行下棋的准確性的比較,可以看到快速走子和前面所提到的走棋網絡還是有一定差距的。

 

 

三、ValueNetwork(估值網絡)

現在我們已經有了一個比較強但是很慢的監督學習走棋網絡,以及一個很快但是准確率相對較低的快速走子網絡,這兩個網絡一起構成了AlphaGo的落子選擇器,即告訴AlphaGo下一步可以走哪些步。但僅有策略網絡的AlphaGo還不夠強,因為它只是模擬人類棋手下棋,學習的是人類棋手的方法,那16萬局的棋譜也不都是頂尖人類棋手的棋譜,好棋壞棋它都有學,所以僅靠策略網絡永遠也無法達到頂尖的水平。於是DeepMInd團隊又加入了一個估值網絡,用來表示某一局面下雙方的輸贏概率。訓練一個這樣的網絡肯定需要數據集,注意這時候他們就運用了增強學習的方法。我們前面說的,用16萬張棋譜訓練出了一個走棋網絡Pσ1,然后再用Pσ1與Pσ1左右互搏模擬對弈比如1萬局,得到1萬局新的棋譜。之后再用新的棋譜訓練出Pσ2。再用Pσ2與Pσ2左右互搏得到Pσ3,以此類推最終得到Pσn。我們將Pσn取一個新名字叫做Pρ,即增強學習的策略網絡(RL)。這時的Pρ與最原始的Pσ1對局可以達到80%的勝率,但是Pρ與人類棋手的比賽卻效果反而不如Pσ1,這可能是因為Pρ的落子選擇過於單一,而人類棋手非常狡猾,下棋的時候套路很多,所以實戰效果很差。但是我們用增強學習方法得到了很多質量很好的樣本用於估值網絡v(s)來訓練,實驗表明基於Pρ訓練的估值網絡的效果要好於最原始的Pσ1

 

 

四、蒙特卡洛樹搜索算法

現在我們有一快一慢的兩個策略網絡以及一個估計局面輸贏的估值網絡。我們可以先用策略網絡模擬人類棋手走子,它得到了一個人類棋手常見的走棋范圍,把整個棋面的361個落子點壓縮到一個比較小的范圍,減少了需要考慮的可能性。之后再用基於增強學習訓練出來的估值網絡篩選出贏棋概率較高的落子方案。但是高手下棋的時候都是“手下一着子,心想三步棋”,實際甚至都不止想三步之后的情況。比如實際情況往往是這一手你下了a,你的勝率是70%,輪到對方下一手a,對方的贏棋概率是60%,而第三步輪到你下a3的時候你的贏棋概率降到了30%,那么你當初要不要下a1這一手呢?為什么三步之后我們的贏棋概率從70%降到了30%呢?因為我們的估值函數v(s)模擬的是我們通過增強學習的下棋策略下完全局所得到的勝率,但是實戰中人類棋手有一定概率不按照的套路來下,所以估值函數會出現誤差,導致下着下着AlphaGo的勝率變低了。所以我們前面得到的估值函數,也就是這里vaule network還不太完美,這里我們就要引入蒙特卡洛樹搜索(MCTS)的概念,將走棋網絡、快速走子以及估值網絡結合到這個框架上來。

 

具體的方法就是,首先用得到一個棋局,先用走棋網絡開局,走L步,選取比較有價值的走法得到一顆樹,給每個走法一個初始的分數。先選擇初始分數最高的a點,在a點上用蒙特卡洛搜索樹的架構調用快速走子網絡,將L步之后的棋局模擬到底,並模擬出多盤未來的對局,最終得到一個估值分數z。並在此同時在這個a點調用我們前面提到的估值網絡v(s),那么a點的新分數=調整后的初始分+ 0.5 通過模擬得到的贏棋概率 + 0.5 局面評估分。之后再更新a點上級所有根節點的分數,更新的方法就是把所有子節點的分數相加取平均值。這樣再選取一個更新后的最高的分數進行模擬,一直不斷地模擬和更新分數,直到最后選取一個訪問次數最多的節點,而不是最終分數最高的節點,因為訪問次數最多的節點比分數最高的節點要更加可靠。這樣我們就完成了AlphaGo對某一局面的決策,選擇蒙特卡洛樹中訪問次數最多的節點作為下一步的走法,最終取得了非常好的效果。

a是DeepMind團隊后面將不同圍棋程序之間比賽所得到的結果圖,每個程序在走子之前大約有5秒的計算時間。為了讓AlphaGo面對的比賽更富有挑戰性,一些程序在和其他對手比賽時被讓了4子。程序水平的評估基於Elo尺度:一個230點的差距大概相對於79%的贏率,大概相應於KGS的一個業余段級之間的差距。和人類歐洲冠軍樊麾的比賽也包含在圖上,但這些比賽使用更長的賽時制。此圖所示的置信區間為95%。b是使用不同部件進行組合的單機版本的AlphaGo的表現。只單單使用策略網絡則意味着沒有任何搜索。c是AlphaGo的蒙特卡洛樹搜索的搜索縣城和GPU的可擴展性研究,使用異步(淺藍)或分布式(深藍)搜索,每次走子有2秒的計算時間。

 

 

后記:

以上都是我在看過論文原文以及一些大牛寫的AlphaGo原理的博客后自己的一些理解,其中有很多細節方面並沒有涉及到,如有錯誤望大家能批評指正。

 

 參考文獻:

1、AlphaGo原理解析

2、28 天自制你的 AlphaGo(五):蒙特卡洛樹搜索(MCTS)基礎

3、論文筆記:Mastering the game of Go with deep neural networks and tree search (AlphaGo)

4、AlphaGo的分析

5、機器學習系列(8)_讀《Nature》論文,看AlphaGo養成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM