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. 剪枝以下降搜索的寬度。然而,這些策略都須要引入一些先驗的知識。app

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

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

一種叫作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算法是一類極爲高效地解決複雜博弈問題的搜索策略。post

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

AlphaGo的基本原理

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

然而,傳統的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中的權重等等。然而,其背後的基本原理差很少就是這些了。

相關文章
相關標籤/搜索