AlphaGo是如何煉成的:解讀論文 "Mastering the game of Go with deep neural networks and tree search"

這篇發表在nature 2016年1月27日上的文章題目爲:"Mastering the game of Go with deep neural networks and tree search"來自Google deep mind,它闡述了AlphaGo的模型過程和訓練方法,讓我們對這篇論文進行解讀,看看爲何AlphaGo可以成爲迄今最強大的圍棋對弈程序吧。

論文地址爲:Mastering the game of Go with deep neural networks and tree search - nature

在進行棋牌遊戲的時候,最理想的玩法是先得知棋盤上所有狀態的完美狀態值函數v(s)v^* (s),然後根據收益最大的狀態來進行遊戲。但是問題在於有時候棋盤的所有狀態規模非常大,在圍棋遊戲中,這種方法的複雜度是250150250^{150},這顯然是做不到的,但是可以通過兩種方式來減少搜索空間,一個是通過位置評估的方式,使用近似的值函數來代替完美狀態值函數,以此來減少搜索樹的深度。另一種方式是通過一個策略來對可能性更大的動作進行採樣,這樣可以減少搜索樹的寬度。本文以這兩種策略爲基礎,結合目前在視覺等領域已經取得突出成果的深度卷積神經網絡和強化學習技術,設計了史上最強大的圍棋AI程序。

本文的AlphaGo一共有三個階段。它的大體流程是這樣的:首先訓練一個有監督學習的策略網絡pσp_σ ,其樣本來自人類棋手的圍棋歷史數據,AlphaGo將會在這個階段進行快速高效的學習,得到一個初步的策略網絡。接着應用強化學習對程序自己對弈的遊戲收益進行優化,得到一個優化的策略網絡pρp_ρ,最後根據pρp_ρ自己對弈的遊戲結果,訓練一個可以預測對弈勝者的值網絡vθv_θ。其流程結構如圖1所示。

1

圖1. AlphaGo的總體流程
接下來詳細解釋各個階段的網絡學習和訓練的過程以及他們的含義。

A. 使用有監督學習的策略網絡

根據前人工作中的方法,AlphaGo首先使用有監督學習神經網絡得到一個快速的策略網絡。學習器的輸入是棋盤的狀態,來自大量的人類玩家的對弈動作歷史數據,然後它將隨機從動作狀態空間的狀態-值對(s,a)(s,a)中選取一個動作aa,然後神經網絡通過隨機梯度下降的算法最大化在狀態ss下與人類玩家動作的相似度。換句話說,這個學習的目的就是使得AlphaGo的對弈動作擬合人類對弈的動作。神經網絡學習的結果如下表所示。

t1
從表中可以看出通過初步的有監督學習,AlphaGo已經獲得了與人類玩家平起平坐的實力。

B. 使用強化學習的策略網絡

這個階段的學習的目的是通過策略梯度強化學習來提升上一個階段得到的策略網絡。在這個階段使用的強化學習策略網絡跟上一個階段的有監督學習策略網絡結構一致。並且它的網絡權重也初始化爲有監督學習網絡的權重值。具體訓練過程是這樣的,將當前的策略網絡與隨機選取的以前迭代的策略網絡進行對弈,在這裏獎勵函數在除了終止步驟之前的每步都是0,比賽結果每贏一次獎勵就+1,輸掉則-1,使用ztz_t表示。該網絡的權重更新如下面的公式所表示:
Δρlogpρ(atst)ρzt \Delta \rho \propto \frac{\partial log p_{\rho}(a_t|s_t)}{\partial \rho}z_t
使用強化學習的網絡進行對弈時,從它的動作概率分佈輸出中採樣得到下一步的動作。從對弈結果來看,使用強化學習的AlphaGo的勝率比使用監督學習的高了80%80\%,並且也遠勝另外兩種圍棋算法。

C. 使用強化學習的值網絡

之前說到使用值網絡來預測對弈的勝者,也就是位置評估,在這裏AlphaGo使用強化學習來訓練一個能夠預測在一個比賽狀態ss中使用策略pp的雙方玩家的回報。值函數的表達式如下所示:
vp(s)=E[ztst=s,atTp] v^p(s)=\mathbb{E}[z_t|s_t=s,a_{t\dots T}\sim p]
表示的是在狀態ss的時候使用策略p所得到的回報,也就是最終的比賽結果的期望。最好的情況是能夠得知一個完美的玩家在狀態ss的值函數,也就是開頭提到的完美值函數v(s)v^* (s),但是這是很難做到的,因此AlphaGo使用值網絡去近似值函數,這個值網絡用vθ(s)v_θ (s)表示,其中θ是值網絡的權重。其更新公式如下:
Δθvθ(s)θ(zvθ(s)) \Delta \theta \propto\frac{\partial v_\theta(s)}{\partial \theta}(z-v_{\theta}(s))
訓練的方法是將狀態-回報對(s,z)(s,z)進行迴歸,使用隨機梯度下降來最小化預測值與相應的回報z的均方誤差。

D. 使用策略網絡與值網絡進行搜索

AlphaGo使用蒙特卡羅樹搜索的方式將策略網絡與值網絡進行結合。其流程示意如圖2所示。
在這裏插入圖片描述

圖2. AlphaGo中的蒙特卡羅樹搜索
蒙特卡羅的方法是通過大量的採樣(模擬),當採樣的數量足夠多的時候,就會更加逼近最優解。在每一次模擬的時候,都會通過前向搜索選取子節點中Q值和額外獎勵u(p)值最大的分支,即贏面較大的一步操作將會被選擇具體公式如下:

at=arg maxx(Q(st,a)+u(st,a)) a_t = \argmax_x(Q(s_t,a)+u(s_t,a))
其中,額外獎勵與子節點中保存的先驗概率以及模擬次數有關,公式如下:
u(s,a)=p(s,a)1+N(s,a) u(s,a)=\propto\frac{p(s,a)}{1+N(s,a)}
接着通過策略網絡對擴展的子節點進行處理,計算出子節點操作的先驗概率。在這一步模擬結束的時候,AlphaGo會通過兩種方式對子節點進行評估:一種是使用值網絡進行評估,另一種是使用一個快速rollout策略將遊戲從這一步進行到結束,然後計算回報r。最後依據所有子節點的回報r和值網絡的均值對Q進行更新。
N(s,a)=i=1n1(s,a,i)Q(s,a)=1N(s,a)i=1n1(s,a,i)V(sLi) \begin{aligned} N(s,a)&=\sum_{i=1}^n1(s,a,i) \\ Q(s,a)&=\frac{1}{N(s,a)}\sum_{i=1}^n1(s,a,i)V(s_L^i) \end{aligned}
值得一提的是,在AlphaGo中監督學習的策略網絡表現要比強化學習的策略網絡要好,或許是因爲人類在對弈的過程中會選擇更多可能的下法(監督學習正是模擬人類的下棋行爲),然而強化學習的策略只會選擇最優的一種下法。但是呢,強化學習的策略網絡也不是完全沒用,通過它導出的值網絡表現要比通過監督學習導出的值網絡要好。AlphaGo將蒙特卡羅樹搜索與深度學習結合了起來,通過異步多線程的方法在CPU上運行模擬,然後在GPU上並行地計算策略網絡和值網絡。

E. AlphaGo在比賽中的表現

圖3展示了AlphaGo在與現在最高水平的圍棋程序和人類棋手對弈的能力排名,這些圍棋程序都是基於高性能的蒙特卡羅樹搜索算法的。可以看出AlphaGo的能力遠在其他對手之上。
在這裏插入圖片描述
下圖展示了AlphaGo在與人類棋手樊麾下棋的其中一個過程。
在這裏插入圖片描述
首先AlphaGo會對以該狀態s爲根節點的樹的所有後續節點進行評估,用值網絡vθ(s)v_θ (s)估計每個子節點的獲勝概率。圖4b展示的是以當前狀態s爲根節點的搜索樹各個邊的動作值Q(s,a)Q(s,a),而圖4c展示的是以當前狀態s爲根節點的搜索樹各個邊的rollout評估值。然後通過監督學習的策略網絡預測下一步動作,以概率分佈來表示。

F. 總結與感想

可以看到,AlphaGo綜合使用了監督學習、強化學習和蒙特卡羅樹搜索等多種算法,通過複雜的訓練過程才獲得了它足以傲視羣雄的實力,相比於之前基於蒙特卡羅搜索樹的其他圍棋程序,AlphaGo多了強化學習導出值網絡的過程,這也使他比之前的程序高出一籌。文中提到,由監督學習得到的策略網絡的表現甚至要比強化學習得到的策略網絡更好,這一點有點超出我的意料,因爲強化學習的策略網絡從一開始是與監督學習的策略網絡一致的,在多輪強化學習之後,其性能居然沒有監督學習的效果好,這是否說明在某種特定任務中強化學習會使學習到的東西更加片面,還是說這是強化學習的一個過擬合現象呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章