AlphaGo原理淺析


論文筆記:Mastering the game of Go with deep neural networks and tree search

背景:完全信息博弈與MCTS算法

要完全弄清AlphaGo背后的原理,首先需要了解一下AI在博弈游戲中常用到的蒙特卡洛樹搜索算法——MCTS。

在一個完全信息下的博弈游戲中,如果所有參與者都采取最優策略,那么對於游戲中的任意一個局面\(s\),總有一個確定性的估值函數\(v^*(s)\)可以直接計算出最終的博弈結果。理論上,我們可以通過構建一棵博弈樹,遞歸地求解出\(v^*(s)\)。這就是Minimax算法。然而在有些問題中,這棵搜索樹往往十分巨大(例如在圍棋游戲中達到了\(250^{150}\)的搜索空間),以至於窮舉的算法並不可行。

有兩種策略可以有效地降低搜索空間的復雜度:1. 通過一個evalutaion function對當前局面進行價值的評估以降低搜索的深度;2. 剪枝以降低搜索的寬度。然而,這些策略都需要引入一些先驗的知識。

於是,人們提出了蒙特卡洛樹搜索(MCTS)算法。MCTS是一類通用博弈算法——理論上,它不需要任何有關博弈的先驗知識。

想象一下,你站在一堆老虎 機面前,每一台老虎 機的reward都服從一個隨機的概率分布。然而,一開始,你對這些概率分布一無所知。你的目標是尋找一種玩老虎 機的策略,使得在整個游戲的過程中你能獲得盡可能多的reward。很明顯,你的策略需要能夠在嘗試盡可能多的老虎 機(explore)與選擇已知回報最多的老虎 機(exploit)之間尋求一種平衡。

一種叫做UCB1的策略可以滿足這種需求。該策略為每台老虎 機構造了一個關於reward的置信區間:

\[x_i\pm\sqrt{\frac{2\ln{n}}{n_i}} \]

其中,\(x_i\)是對第\(i\)台老虎 機統計出來的平均回報;\(n\)是試驗的總次數;\(n_i\)是在第\(i\)台老虎 機上試驗的次數。你要做的,就是在每一輪試驗中,選擇置信上限最大對應的那台老虎 機。顯然,這個策略平衡了explore與exploit。你的每一次試驗,都會使被選中的那台老虎 機的置信區間變窄,而使其他未被選中的老虎 機的置信區別變寬——變相提升了這些老虎 機在下一輪試驗中被選中的概率。

蒙特卡洛樹搜索(MCTS)就是在UCB1基礎上發展出來的一種解決多輪序貫博弈問題的策略。它包含四個步驟:

  1. Selection。從根節點狀態出發,迭代地使用UCB1算法選擇最優策略,直到碰到一個葉子節點。葉子節點是搜索樹中存在至少一個子節點從未被訪問過的狀態節點。
  2. Expansion。對葉子節點進行擴展。選擇其一個從未訪問過的子節點加入當前的搜索樹。
  3. Simulation。從2中的新節點出發,進行Monto Carlo模擬,直到博弈結束。
  4. Back-propagation。更新博弈樹中所有節點的狀態。進入下一輪的選擇和模擬。

可以看出,通過Selection步驟,MCTS算法降低了搜索的寬度;而通過Simulation步驟,MCTS算法又進一步降低了搜索的深度。因此,MCTS算法是一類極為高效地解決復雜博弈問題的搜索策略。

關於MCTS算法更多詳細的介紹,可參見博客:Introduction to Monte Carlo Tree Search

AlphaGo的基本原理

圍棋是一類完全信息的博弈游戲。然而,其龐大的搜索空間,以及局面棋勢的復雜度,使得傳統的剪枝搜索算法在圍棋面前都望而卻步。在AlphaGo出現之前,MCTS算法算是一類比較有效的算法。它通過重復性地模擬兩個players的對弈結果,給出對局面\(s\)的一個估值\(v(s)\)(Monte Carlo rollouts);並選擇估值最高的子節點作為當前的策略(policy)。基於MCTS的圍棋博弈程序已經達到了業余愛好者的水平。

然而,傳統的MCTS算法的局限性在於,它的估值函數或是策略函數都是一些局面特征的淺層組合,往往很難對一個棋局有一個較為精准的判斷。為此,AlphaGo的作者訓練了兩個卷積神經網絡來幫助MCTS算法制定策略:用於評估局面的value network,和用於決策的policy network。(后面會看到,這兩個網絡的主要區別是在輸出層:前者是一個標量;后者則對應着棋盤上的一個概率分布。)

首先,Huang等人利用人類之間的博弈數據訓練了兩個有監督學習的policy network:\(p_\sigma\)(SL policy network)和\(p_\pi\)(fast rollout policy network)。后者用於在MCTS的rollouts中快速地選擇策略。接下來,他們在\(p_\sigma\)的基礎上通過自我對弈訓練了一個強化學習版本的policy network:\(p_\rho\)(RL policy network)。與用於預測人類行為的\(p_\sigma\)不同,\(p_\rho\)的訓練目標被設定為最大化博弈收益(即贏棋)所對應的策略。最后,在自我對弈生成的數據集上,Huang等人又訓練了一個value network:\(v_\theta\),用於對當前棋局的贏家做一個快速的預估。

pipeline of neural networks

因此,用一句話簡單概括一下AlphaGo的基本原理:在MCTS的框架下引入兩個卷積神經網絡policy network和value network以改進純隨機的Monte Carlo模擬,並借助supervised learning和reinforcement learning訓練這兩個網絡。

接下來將對AlphaGo的細節進行展開討論。

有監督學習的Policy Networks

Huang等人首先訓練了一個有監督的Policy Network用來模擬人類專家的走子。SL policy network是一個卷積神經網絡;其輸出層是一個Softmax分類器,用來計算在給定的棋面狀態\(s\)下每一個位置的落子概率\(p_\sigma(a|s)\)。對一個棋面狀態\(s\)的描述如下:
input features for policy networks
(這里的Features對應着卷積神經網絡里的Channels。)

經過人類高手三千萬步圍棋走法的訓練后,SL policy network模擬人類落子的准確率已經達到了57%;相應地,網絡的棋力也得到大大的提升。但是,如果直接用這個網絡與人類高手,甚至是MCTS的博弈程序進行對弈,依然是輸面居多。而且,這個網絡的走子太慢了!平均每步\(3ms\)的響應時間,使得這個網絡很難被直接用於MCTS的rollout中進行策略的隨機。因此,Huang等人通過提取一些pattern features又訓練了一個更快速(響應時間達到了\(2\mu s\))但准確率有所降低(24.2%)的rollout policy network: \(p_\pi\)

強化學習的Policy Networks

接下來,為了進一步提高policy network的對弈能力,Huang等人又采用一種policy gradient reinforcement learning的技術,訓練了一個RL policy network:\(p_\rho\)。這個網絡的結構與SL policy network的網絡結構相同,依然是一個輸出為給定狀態下落子概率的卷積神經網絡。網絡的參數被初始化為\(p_\sigma\)的參數;接下來,通過不斷地自我對弈(與歷史版本),網絡的權重向着收益最大化的方向進化。此時,網絡的學習目標不再是模擬人類的走法,而是更為終極的目標:贏棋。

具體來說,我們定義了一個reward function \(r(s_t)\):對於非終止的時間步\(t<T\),總有\(r(s_t)=0\)。每一步的收益\(z(t)\)被定義為\(\pm r(s_T)\):即對當前玩家而言對弈的最終結果(\(+1\)代表贏棋;\(-1\)代表輸棋)。網絡的權重通過隨機梯度上升法進行調整:

\[\Delta\rho\propto\frac{\partial\log{p_\rho(a_t|s_t)}}{\partial\rho}z_t \]

通過這種方式訓練出來的RL policy network,在與SL policy network對弈時已有80%的贏面。即便是與依賴Monte Carlo搜索的圍棋博弈程序相比,不依賴任何搜索的RL policy network,也已經達到了85%的贏面。

強化學習的Value Networks

最后,Huang等人又開始尋求一個能快速預估棋面價值(棋勢)的Value Network。一個棋面的價值函數\(v^p(s)\),被定義為在給定的一組對弈策略\(p\)的情況下,從狀態\(s\)出發,最終的期望收益(也即贏棋的概率):

\[v^p(s)=E[z_t|s_t=s,a_{t...T}\in p] \]

顯然,理想情況下,我們想知道的是在雙方均采用最優策略的條件下得到的最優期望收益\(v^*(s)\)。然而,我們並不知道什么才是最優的策略。因此,在實際應用中,Huang等人采用了目前最強的策略函數\(p_\rho\)(RL policy network )來計算一個棋面的價值\(v^{p_\rho}(s)\),並訓練了一個value network \(v_\theta(s)\)來擬合這個價值函數:\(v_\theta(s) \approx v^{p_\rho}(s) \approx v^*(s)\)

Value Network的網絡結構與前面的Policy Network類似,也是一個卷積神經網絡,只是輸出層變成了一個單神經元的標量。我們可以通過構造一組\((s,z)\)的訓練數據,並用隨機梯度下降法最小化網絡的輸出\(v_\theta(s)\)與目標收益\(z\)的均方差,來調整網絡的參數:

\[\Delta\theta\propto\frac{\partial{v_\theta(s)}}{\partial\theta}(z-v_\theta(s)) \]

在構造訓練數據時有一些技巧。如果我們從人類對弈的完整棋局中抽取足夠數量的訓練數據,很容易出現過擬合的問題。這是因為,在同一輪棋局中的兩個棋面的相關性很強(往往只相差幾個棋子);此時,網絡很容易記住這些棋面的最終結果,而對新棋面的泛化能力很弱。為了解決這個問題,Huang等人再次祭出強化學習的大殺器:通過RL policy network的自我對弈,產生了三千萬個從不同棋局中提取出來的棋面-收益組合的訓練數據。基於這份數據訓練出來的Value Network,在對人類對弈結果的預測中,已經遠遠超過了使用fast rollout policy network的MCTS的准確率;即便是與使用RL policy network的MCTS相比,也已是不遑多讓(而Value Network的計算效率更高)。

accuracy of value network

整合

到這里,我們手頭上已經有一個牛逼但是巨慢的SL policy network;有一個不那么牛逼但是很快的fast policy network;有一個一心只想着如何贏棋的RL policy network;還有一個能一眼洞穿棋局的value network。那么,將這些networks放在一起互相補足,會得到什么呢?

答案就是AlphaGo。而把這些networks整合在一起的框架,就是MCTS算法。

與經典的MCTS算法類似,APV-MCTS(asynchronous policy and value MCTS)的每一輪模擬也包含四個步驟:

  1. Selection:APV-MCTS搜索樹中的每條連邊\((s,a)\)都包含三個狀態:決策收益\(Q(s,a)\),訪問次數\(N(s,a)\),和一個先驗概率\(P(s,a)\)。這三個狀態共同決定了對一個節點下行為的選擇:

\[a_t=\arg\max_a{(Q(s_t,a)+u(s_t,a))} \]

其中,\(u(s,a)\propto\frac{P(s,a)}{1+N(s,a)}\)
2. Expansion:步驟1中的selection終止於葉子節點。此時,要對葉子節點進行擴展。這里采用SL policy network \(p_\sigma\)計算出葉子節點上每個行為的概率,並作為先驗概率\(P(s_L,a)\)存儲下來。
3. Evaluation。使用value network \(v_\theta(s)\)和fast rollout policy network \(p_\pi\)模擬得到的博弈結果對當前訪問到的葉子節點進行估值:$$V(s_L)=(1-\lambda)v_\theta(s_L)+\lambda z_L$$
4. Backup。更新這一輪模擬中所有訪問到的路徑的狀態:

\[N(s,a)=\sum_{i=1}^n{1(s,a,i)} \]

\[Q(s,a)=\frac{1}{N(s,a)}\sum_{i=1}^n{1(s,a,i)V(s_L^i)} \]

其中,\(n\)是模擬的總次數;\(1(s,a,i)\)標示第\(i\)輪模擬中是否經過邊\((s,a)\)\(s_L^i\)是第\(i\)輪模擬中訪問到的葉子節點。

下圖展示了一輪模擬的動態過程。

MCTS with policy networks and value networks

模擬結束后,算法會選擇訪問次數\(N(s,a)\)最大的策略\(a\)作為當前的走子策略。

值得注意的是,在整個模擬的過程中,我們見到了SL policy network(用於Expansion中先驗概率的計算);見到了fast rollout policy network(用於Evaluation中的快速走子);見到了value network(用於Evaluation中對棋勢的預估)。等等,RL policy network去哪了?為什么不用RL policy network替代SL policy network?明明RL policy network有着更強的棋力啊(85%的贏面)?

這是因為,與RL policy network相比,由人類專家走法訓練出來的SL policy network在策略上的多樣性更強;因此更適用於MCTS中的搜索。但是,用RL policy network的自我對弈結果訓練出來的value network的泛化能力就要比SL policy network訓練出來的value network要強得多了。

結語

回顧一下,我們發現AlphaGo本質上是CNN、RL、MCTS三者相結合的產物。其中,MCTS是AlphaGo的骨骼,支撐起了整個算法的框架;CNN是AlphaGo的眼睛和大腦,在復雜的棋局面前尋找盡可能優的策略;RL是AlphaGo的血液,源源不斷地提供新鮮的訓練數據。三者相輔相成,最終4:1戰勝了人類圍棋世界冠軍李世石。其實還有很多細節我沒有詳細的展開,包括如何在分布式的機器上更高效地訓練;如何更新MCTS中的權重等等。然而,其背后的基本原理差不多就是這些了。


免責聲明!

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



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