1. 程式人生 > >Mastering the game of Go with deep neural networks and tree search譯文

Mastering the game of Go with deep neural networks and tree search譯文

用深度神經網路和樹搜尋征服圍棋

作者:David Silver 1 , Aja Huang 1 , Chris J. Maddison 1 , Arthur Guez 1 , Laurent Sifre 1 , George van den Driessche 1 , Julian Schrittwieser 1 , Ioannis Antonoglou 1 , Veda Panneershelvam 1 , Marc Lanctot 1 , Sander Dieleman 1 , Dominik Grewe 1 , John Nham 2 , Nal Kalchbrenner 1 , Ilya Sutskever 2 , Timothy Lillicrap 1 , Madeleine Leach 1 , Koray Kavukcuoglu 1 , Thore Graepel 1 , Demis Hassabis

摘要:

圍棋一直都被看作是人工智慧界最具有挑戰性的經典遊戲,原因歸結於它巨大的搜尋空間以及對於棋盤佈局和每一步的落子的衡量的困難性。這裡引入了一個新的方法來解決圍棋問題,它使用值網路來評估棋盤的佈局,以及使用策略網路來選擇每一次落子。這些深度神經網路在基於人類棋手的比賽的資料,通過對有監督學習的一種新的組合和自我對弈的強化學習來實現的。不使用前向搜尋,而是使用蒙特卡洛搜尋樹進行成千上萬次隨機自我對弈的模擬遊戲。同樣引入了一種結合了蒙特卡洛樹和策略網路、值網路的新的演算法。使用這種搜尋演算法,Alpha Go對於其他圍棋程式的勝率達到了99.8%。而且在和專業人類棋手的比賽中,首次實現了勝利,之前認為至少需要10年才能實現這個目標。

引言

所有完全資訊博弈都有一個最優估值函式v∗(s) ,它在判斷了每個棋局或狀態 s 之後的博弈結果的優劣(在所有對手完美髮揮的情況下)。解決這些博弈可以通過在搜尋樹中遞迴呼叫最優估值函式,這個搜尋樹包含大約bd 種可能的下棋序列,其中 b 是博弈的廣度(每一次下棋時候的合法落子個數),d 是的深度(博弈的步數長度)。在大型博弈中,比如國際象棋(b≈35,d≈80),和特別是圍棋(b≈250,d≈150),窮舉搜尋是不可行的的,但是有效的搜尋空間可以通過兩種通用的原則減少。第一,搜尋的深度可以通過棋局評估降低:在狀態 s 時對搜尋樹進行剪枝,然後用一個近似估值函式v(s)≈v∗(s) 取代狀態 s 下面的子樹,這個近似估值函式預測狀態 s 之後的對弈結果。這種方法已經在國際象棋、國際跳棋、黑白棋中得到了超越人類的下棋能力,但是人們認為這種方法在圍棋中是難以處理的,因為圍棋的巨大的複雜度。第二,搜尋的廣度可以通過來自策略 p(a∣s) 的取樣動作來降低,這個策略是一個在位置 s 的可能下棋走子a 概率分佈。比如蒙特卡洛走子方法搜尋到最大深度時候根本不使用分歧界定法,它從一個策略 p 中採集雙方棋手的一系列下棋走法。計算這些走子的平均數可以產生一個有效的棋局評估,在西洋雙陸棋戲和拼字遊戲中獲得了超出人類的效能表現,並且在圍棋中達到了業餘低段水平。

蒙特卡洛樹搜尋使用蒙特卡洛走子方法,評估搜尋樹中每一個狀態的估值。隨著執行越來越多的模擬,這個搜尋樹成長越來越大,而且相關估值愈發精確。用來選擇下棋動作的策略在搜尋的過程中也會隨著時間的推移而改進,通過選擇擁有更高估值的子樹。漸近的,這個策略收斂到一個最優下法,然後評估收斂到最優估值函式。目前最強的圍棋程式是基於蒙特卡洛樹搜尋的,並且受到了策略的增強,這個策略被人訓練用來預測專家棋手的下法。這些策略用來縮窄搜尋空間到一束高可能性下棋動作,和用來在走子中採集下法動作。這個方法已經達到了業餘高手的級別。然而,先前的工作已經受到了膚淺策略的限制或基於輸入的線性組合的估值函式的限制。

最近,深度卷積神經網路已經在計算機視覺中達到了空前的效能:比如影象分類,人臉識別,和玩雅達利的遊戲。它們使用很多層的神經網路,層與層之間像瓦片重疊排列在一起,用來構建圖片的愈發抽象的區域性代表。我們為圍棋程式部署了類似的體系架構。我們給程式傳入了一個19*19大小棋局的圖片,然後使用卷積神經網路來構建一個位置的代表。我們使用這些神經網路來降低搜尋樹的有效的深度和廣度:通過估值網路來評估棋局,和使用策略網路來博弈取樣。

我們使用一個包含多個不同階段的機器學習方法的管道來訓練神經網路。我們開始使用一個監督學習(SL)策略網路 pδ ,它直接來自人類專家的下棋。這提供了快速高效的學習更新,擁有快速的反饋和高質量的梯度。和向前的工作類似,我們同時也訓練了一個可以迅速從走子中取樣的快速策略 pπ 。其次,我們訓練了一個強化學習(RL)策略網路pρ,它通過優化自我對弈的最終結局來提升 SL策略網路。這調整策略網路朝向贏棋的正確目標發展,而不是最大化提高預測精度。最後,我們訓練了一個估值網路vθ ,它預測博弈的贏者,通過和RL策略網路和自己對弈。我們的AlphaGo程式有效的把策略網路、估值網路,和蒙特卡洛搜尋樹結合在一起。

1 策略網路的監督學習

在訓練管道的第一階段,我們在先前工作的基礎上,使用了監督學習來預測人類專家下圍棋。監督學習(SL)策略網路pδ(a∣s) 在重量δ的卷積層和非線性的整流器中替換。策略網路的輸入 s 是一個棋局狀態的簡單代表(如擴充套件資料表2)。策略網路使用了隨機取樣狀態-動作對(s,a),使用了隨機梯度遞增來最大化人類在狀態 s 選擇下棋走子 a 的可能性。 在這裡插入圖片描述 我們用KGS圍棋伺服器的3千萬個棋局,訓練了13層的策略網路(我們稱之為SL 策略網路)。在輸入留存測試資料的所受特徵的時候,這個網路預測人類專家下棋的精準的達到了57%,而且在僅僅使用原始棋局和下棋記錄的時候,精度達到了55.7%。與之相比,截至到本篇文論提交(2015年),其他研究團隊的最先進的精度是44.4%(全部結果在擴充套件資料表3)。在精確度方面的小提升會引起下棋能力的很大提升(圖片2,a);更大的神經網路擁有更高的精確度,但是在搜尋過程中評估速度更慢。我們也訓練了一個更快的但是精確度更低的走子策略pπ(a∣s) ,它使用了一個權重為π 的小型模式特徵的線性softmax。它達到了24.2%的精確度,每選擇下一步棋只用2微秒,與之相比,策略網路需要3毫秒。 在這裡插入圖片描述 圖1:神經網路訓練管道和體系結構。a:在一個棋局資料集合中,訓練一個快速走子策略pπ 和監督學習(SL)策略網路pδ 用來預測人類專家下棋。一個強化學習(RL)策略網路pρ 由SL策略網路初始化,然後由策略梯度學習進行提高。和先前版本的策略網路相比,最大化結局(比如贏更多的博弈)。一個新的資料集合產生了,通過自我對弈結合RL策略網路。最終通過迴歸訓練,產生一個估值網路vθ ,用來在自我對弈的資料集合中預測期待的結局(比如當前棋手是否能贏)。b:AlphaGo使用的神經網路體系架構的原理圖代表。策略網路把棋局狀態 s 當作輸入的代表,策略網路把 s 傳輸通過很多卷積層(這些卷積層是引數為δ 的SL策略網路或者引數為ρ 的RL策略網路),然後輸出一個關於下棋動作 a 的概率分佈 pδ(a∣s) or pρ(a∣s) ,用一個棋盤的概率地圖來表示。估值網路類似的使用了很多引數θ 的卷積層,但是輸出一個標量值vθ(s′) 用來預測棋局狀態 s′後的結局。

在這裡插入圖片描述 圖2:策略網路和估值網路的能力和精確度。a圖顯示了策略網路的下棋能力隨著它們的訓練精確度的函式。擁有128,192,256,384卷積過濾每層的策略網路在訓練過程中得到週期性的評估;這個圖顯示了AlphaGo使用不同策略網路的贏棋概率隨著的不同精確度版本的AlphaGo的變化。b:估值網路和不同策略網路的評估對比。棋局和結局是從人類專家博弈對局中取樣的。每一個棋局都是由一個單獨的向前傳遞的估值網路vθ 評估的,或者100個走子的平均值,這些走子是由統一隨機走子,或快速走子策略pπ ,或 SL 策略網路pδ ,或 RL 策略網路pρ 。圖中,預測估值和博弈實際結局之間的平均方差隨著博弈的進行階段(博弈總共下了多少步)的變化而變化。

2 策略網路的強化學習

訓練管道第二階段的目標是通過策略梯度強化學習(RL)來提高策略網路。強化學習策略網路pρ 在結構上和 SL策略網路是一樣的,權重ρ 初始值也是一樣的,ρ=δ 。我們在當前的策略網路和隨機選擇某先前一次迭代的策略網路之間博弈。從一個對手的候選池中隨機選擇,可以穩定訓練過程,防止過度擬合於當前的策略。我們使用一個獎勵函式 r(s),對於所有非終端的步驟 t < T,它的值等於零。從當前棋手在步驟 t 的角度來講,結果 zt=±r(sT) 是在博弈結束時候的終端獎勵,如果贏棋,結果等於 +1,如果輸棋,結果等於 -1。然後權重在每一個步驟 t 更新:朝向最大化預期結果的方向隨機梯度遞增

在這裡插入圖片描述 我們在博弈過程中評估 RL策略網路的效能表現,從輸出的下棋動作的概率分佈,對每一下棋動作at∼pp(⋅∣st) 進行取樣。我們自己面對面博弈,RL策略網路對 SL策略網路的勝率高於80%。我們也測試了和最強的開源圍棋軟體 Pachi 對弈,它是一個隨機的蒙特卡洛搜尋程式,在KGS中達到業餘2段。在沒有使用任何搜尋的情況下,RL策略網路對 Pachi的勝率達到了85%。與之相比,之前的最先進的僅僅基於監督學習的卷積網路,對 Pachi的勝率僅只有11%,對稍弱的程式 Fuego的勝率是12%。

3 估值網路的強化學習

訓練管道的最後一個階段關注於棋局評估,評估一個估值函式 vp(s) ,它預測從棋局狀態 s 開始,博弈雙方都按照策略網路 p 下棋的結局, 在這裡插入圖片描述 理想情況下,我們期望知道在完美下法v∗(s)情況下的最優值;然而在現實中,我們使用 RL策略網路,來評估估值函式vPp ,作為我們的最佳策略。我們使用權重是θ 的估值網路 vθ(s)來逼近估值函式,vθ(s)≈vPp≈v∗(s)。這個神經網路和策略網路擁有近似的體系結構,但是輸出一個單一的預測,而不是一個概率分佈。我們通過迴歸到狀態-結果對(s, z)來訓練估值網路的權重,使用了隨機梯度遞減,最小化預測估值vθ(s)和相應的結局 z 之間的平均方差(MSE)。

在這裡插入圖片描述 這個天真的從擁有完整對弈的資料來預測博弈結局的方法導致過度擬合。問題在於,連續的棋局之間的聯絡十分強大,和僅單獨下一步棋有差距,但是迴歸目標和整個博弈又是相通的。當通過這種方式在KGS資料集合上訓練是,估值網路記住了博弈的結局而不是推廣出新的棋局,在測試資料上面MSE最小達到了0.37,與之相比在訓練資料集合上面MSE是0.19。為了解決這個問題,我們想出了新的自我對弈的資料集合,包含了三千萬個不同的棋局,每一個都是從不同盤博弈中取樣。每一盤博弈都是在 RL策略網路和自己之間對弈,直到博弈本身結束。在這個資料集合上訓練導致了MSE為0.226,和訓練和測試資料集合的MSE為0.234,這預示著很小的過度擬合。圖2,b展示了估值網路對棋局評估的精確度:對比使用了快速走子策略網路pπ 的蒙特卡洛走子的精確度,估值函式一直更加精確。一個單一的評估vθ(s) 的精確度也逼近了使用了 RL策略網路vθ(s)的蒙特卡洛走子的精確度,不過計算量是原來的15000分之一。

4 運用策略網路和估值網路搜尋 AlphaGo在把策略網路、估值網路和MCTS演算法結合,MCTS通過預測搜尋選擇下棋動作。每一個搜尋樹的邊(s,a)儲存著一個動作估值 Q(s, a),訪問計數 N(s, a),和先驗概率 P(s, a)。這棵樹從根節點開始,通過模擬來遍歷(比如在完整的博弈中沿著樹無沒有備份地向下搜尋)。在每一次模擬的時間步驟 t,在狀態 s的時候選擇一個下棋動作at ,

在這裡插入圖片描述 用來最大化動作估值加上一個額外獎勵u(s,a)∼P(s,a)1+N(s,a) ,它和先驗概率成正向關係,但是和重複訪問次數成反向關係,這樣是為了鼓勵更多的探索。當在步驟 L 遍歷到達一個葉節點sL 時,該葉節點可能不會被擴充套件。葉節點棋局sL 僅被 SL策略網路pδ 執行一次。輸出的概率儲存下來作為每一合法下法動作 a 的先驗概率 P,P(s,a)=pδ(a∣s) 。葉節點通過兩種方式的得到評估:第一,通過價值網路vθ(sL) 評估;第二,用快速走子策略pπ 隨機走子,直到終點步驟 T,產生的結果zL 作為評估方法。這些評估方法結合在一起,在葉節點的評估函式V(SL) 中使用一個混合引數λ , 在這裡插入圖片描述 在模擬的結尾 n,更新所有被遍歷過的邊的下棋動作估值和訪問次數。每一條邊累加訪問次數,和求出所有經過該邊的模擬估值的平均值。

在這裡插入圖片描述 其中siL 是第 i 次模擬的葉節點,1(s, a, i) 代表一條邊 (s, a) 在第 i 次模擬時是否被遍歷過。一旦搜尋完成,演算法選擇從根節點開始,被訪問次數最多的節點。 在AlphaGo中,SL策略網路pδ 的表現優於 RL策略網路pρ ,推測可能是因為人類從一束不同的前景很好的下棋走法中選擇,然而 RL優化單一最優下棋走法。然而,從更強的 RL策略網路訓練出來的估值函式vθ≈vPρ(s) 優於從 SL策略網路訓練出來的估值函式vθ≈vPδ(s) 評估策略網路和估值網路和傳統的啟發式搜尋相比,需要多幾個數量級的計算量。為了高效的把 MCTS 和深度神經網路結合在一起,AlphaGo 在很多CPU上使用非同步多執行緒搜尋技術進行了模擬,在很多GPU上計算策略網路和估值網路。最終版本的 AlphaGo使用了40個搜尋執行緒,48個CPU,和8個GPU。我們也實現了一個分散式的AlphaGo版本,它利用了多臺電腦,40個搜尋執行緒,1202個CPU,176個GPU。在方法部分提供了關於非同步和分佈MCTS的全部的細節。 在這裡插入圖片描述

圖3:AlphaGo中的蒙特卡洛樹搜尋。a 每一次模擬遍歷搜尋樹,通過選擇擁有最大下棋動作估值 Q的邊,加上一個額外獎勵 u§(依賴於儲存的該邊的先驗概率 P) 。b葉節點可能被展開,新的結點被策略網路pθ 執行一次,然後結果概率儲存下來作為每一個下棋動作的先驗概率。c在一次模擬的結尾,葉節點由兩種方式評估:使用估值網路 vθ和執行一個走子策略直到博弈結尾(使用了快速走子策略pπ ),然後對於贏者運算函式 r。d 下棋動作估值 Q 得到更新,用來跟蹤所有評估 r(.) 的平均值和該下棋動作的子樹的vθ(⋅)

5 評估AlphaGo的下棋能力

為了評估 AlphaGo 的水平,我們舉辦了內部比賽,成員包括不同版本的 AlphaGo 和幾個其它的圍棋程式,包括最強的商業程式 CrazyStone和Zen,和最強的開源程式Pachi和Fuego。所有這些程式都是基於高效能蒙特卡洛樹搜尋演算法的。此外,我們的內部比賽還包括了開源程式GnuGo,它使用了最先進搜尋方法的蒙特卡洛樹搜尋。所有程式每次執行下一步棋允許5秒鐘。 比賽的結果如圖4,a,它預示著單擊版本的AlphaGo比先前任何一個圍棋程式強上很多段,在495場比賽中,AlphaGo贏了其中的494場比賽。我們也在讓對手4目棋的情況下進行了比賽:AlphaGo和CrazyStone,Zen,Pachi的勝率分別是77%,86%,99%。分散式版本的AlphaGo強大很多:和單機版本的AlphaGo對弈的勝率是77%,和其他的圍棋程式對弈的勝率是100%。 我們也評估了不同版本的AlphaGo,不同版本僅僅使用估值網路(λ=0 )或者僅僅使用快速走子(λ=1 )(如圖4,b)。即使不使用快速走子,AlphaGo的效能超出了所有其他圍棋程式,顯示了估值網路提供了一個可行的代替蒙特卡洛評估的可能。不過,其估值網路和快速走子的混合版本表現最好(λ=0.5),在對其他版本的AlphaGo的時候勝率達到了95%以上。這預示著這兩種棋局評估系統是互補的:估值網路通過能力很強,但是不切實際的慢的pρ 來逼近博弈的結局;快速走子可以通過能力更弱但是更快的快速走子策略pρ 來精確的評估博弈的結局。圖5將AlphaGo在真實博弈棋局中評估能力可視化了。 最終,我們把分散式版本的AlphaGo和樊麾進行了評估,他作為一個職業2段棋手,是2013,2014,2015年的歐洲圍棋冠軍。在2015年10月5-9日,AlphaGo和樊麾在真實比賽中下了5盤棋。AlphaGo以5:0的比分贏了比賽(圖6和擴充套件資料表1)。這是史上第一次,在人類不讓子和完整棋盤的情況下,一個圍棋程式在贏了一個人類職業棋手。這個壯舉之前認為需要至少十年才能達到。 在這裡插入圖片描述

圖4:AlphaGo的比賽評估。a 和不同圍棋程式比賽的結果(見擴充套件資料表6-11)。每個程式使用接近5秒每走一步棋的速度。為了給AlphaGo更高的挑戰難度,一些程式得到了所有對手讓4步子的優勢。程式的評估基於ELO體系:230分的差距,這相當於79%的勝率差距,這大致相當於在KGS中高一個業餘等級。一個和人類接近的相當也顯示了,水平的線顯示了程式在線上比賽中達到的KSG等級。和歐洲冠軍樊麾的比賽也包括在內。這些比賽使用更長的時間控制。圖中顯示了95%的置信區間。b 單機版本的AlphaGo在組成部分的不同組合下的效能表現。其中僅僅使用了策略網路的版本沒有使用任何搜尋演算法。c 蒙特卡洛搜尋樹演算法關於搜尋執行緒和GPU的可擴充套件性研究,其中使用了非同步搜尋(淺藍色)和分散式搜尋(深藍色),每下一步時間兩秒。 在這裡插入圖片描述 圖5:AlphaGo(執黑)是在一個和樊麾的非正式的比賽中選擇下棋走子的。接下來的每一個統計中,估值最大的落子地點用橘黃色標記。a根節點 s 的所有後繼結點 s’ 的估值,使用估值網路 vθ(s′) ,評估很靠前的會贏的百分數顯示出來了。b 從根節點開始的每一條邊(s, a)的走子動作估值 Q(s, a);僅僅使用估值網路(λ=0 )方法的均值。c 下棋動作 Q(s, a),僅僅使用快速走子(λ=1 )方法的均值。d 直接使用 SL策略網路的下棋走子概率,pδ(a|s);如果大於0.1%的話,以百分比的形式報告出來。e 從根節點開始的模擬過程中下棋走子地點選擇的頻率百分比。f AlphaGo的樹搜尋的理論上的走子選擇序列(一個搜尋過程中訪問次數最多的路徑)。下棋走子用一個數字序列表示。AlphaGo選擇下棋的落子地點用紅色圓圈標記出來;樊麾下在白色方形的地方作為迴應;在他的覆盤過程中,他評論道:下在地點 1 應該是更好的選擇,而這個落子地點正好是AlphaGo預測的白棋的落子地點。

6 討論

在這個工作中,我們基於一個深度神經網路和樹搜尋的結合開發了一個圍棋程式,它的下棋水平達到了人類最強的水平,因此成功戰勝了一項人工智慧領域的偉大挑戰。我們首次,對圍棋開發了一個有效的下棋走子選擇器和棋局評估函式,它是基於被一個創新型的監督學習和強化學習的組合訓練的深度神經網路。我們引入了新的搜尋演算法,它成功的把神經網路評估和蒙特卡洛走子結合在一起。我們的程式AlphaGo把這些組成部分按照比例整合在一起,成為了一個高效能的樹搜尋引擎。 在和樊麾的比賽中,AlphaGo對棋局評估的次數和深藍對卡斯帕羅夫下國際象棋的時候的次數相比,是其千分之一。作為補償的,是更加智慧的棋局選擇能力,使用了更加精確的評估棋局的能力,使用了估值網路(一個也許是更加接近於人類下棋方式的方法)。此外,深藍使用的是人類手工調引數的估值函式,然而AlphaGo 的神經網路是直接從比賽對弈資料中訓練出來的,純通過一個通用目的的監督學習和強化學習方法。 圍棋在很多方面是橫亙在人工智慧面前的困難:一個有挑戰性的決策任務;一個難以對付的解空間;和一個非常複雜的最優解,以至於它看上去不可能世界使用策略或者估值函式逼近。之前的關於圍棋程式的重大突破,蒙特卡洛樹搜尋,在其它領域導致了相應的進步:比如通用的博弈比賽,經典的規劃問題,區域性觀察規劃問題,排程問題,和約束滿足問題。通過把樹搜尋和策略網路、估值網路結合在一起,AlphaGo 最終達到了圍棋職業選手的水平,並且提供了希望:在其它看似難以解決的人工智慧領域裡,計算機現在是可以達到人類水平的。 在這裡插入圖片描述 圖6: AlphaGo 和歐洲冠軍樊麾的博弈棋局。下棋走的每一步按照下棋順序由數字序列顯示出來。重複落子的地方在棋盤的下面成雙成對顯示出來。每一對數字中第一個數字的落子,重複下到了第二個數字顯示的交叉地方。

感謝

我們感謝樊麾答應和AlphaGo進行比賽;感謝T.M擔當比賽的裁判;感謝R.M和T.S給予有幫助的討論和建議;感謝A.C和M.C在視覺化方面的工作;感謝P.D, G.W, D.K, D.P, H.vH, A.G和G.O修訂了這篇論文;感謝 DeepMing 團隊其它的成員的支援,想法,和鼓勵。

後記

理解 AlphaGo 有兩個關鍵部分: 1. 深度神經網路的訓練過程,文章把這個過程描述成為一個管道。所謂管道,很像Linux系統中的管道命令,把前者的輸出作為後者的輸入 2. 蒙特卡洛樹搜尋的過程,看這個搜尋是如何把 SL策略網路,估值網路,快速走子策略結合在一起的。 先談談 1: 輸入人類的棋譜,經過監督學習,輸出SL策略網路 輸入SL策略網路,經過強化學習,輸出RL策略網路 輸入RL策略網路,經過強化學習,輸出估值網路

再談談 2: 蒙特卡洛樹搜尋是模擬下棋,並且評估的過程。蒙特卡洛就是“隨機”的意思,只不過逼格更高而已。如果你“隨機”下棋,肯定輸呀,怎麼辦?使用 SL策略網路來預測人類是如何下棋的。AlphaGo每次要下棋的時候,先執行 SL策略網路一遍,得到一個概率分佈,在此基礎上進行“隨機”:更有可能在概率更大的地方落子。 AlphaGo一邊模擬自己下棋,一邊模擬對手下棋,最後,下完了。所謂下完了,就是在樹搜尋的時候達到了葉節點。下完了之後,對棋局進行評估。結合估值網路和快速走子策略,得到一個估值函式,該函式的值越高,越好。

模擬很多很多遍。模擬結束之後,進行“統計”工作。統計每一條邊走過的次數,和估值函式的估值。最後,AlphaGo做出選擇:現在是棋局 s,如果在 a 地方,結合 a 在模擬過程中走過的次數,以及 a 下面的葉節點的估值函式,累加起來最高,那麼AlphaGo選擇在 a 地方落子。