詳解AlphaGo到AlphaGo Zero!

AI科技大本營發表於2019-01-31

640?wx_fmt=jpeg


作者 | 劉思鄉,達觀資料資料探勘工程師,負責達觀資料推薦系統的開發和部署,對推薦系統在相關行業中的應用有濃厚興趣。

編輯 | Jane


摘要


1、圍棋是一個 MDPs 問題

2、policy iteration 如何求解 MDPs 問題?

3、WHAT and WHY is Monte Carlo method?

4、AlphaGo Zero 的強化學習演算法


1.前言


AlphaGo 是 Google DeepMind 團隊開發的一個基於深度神經網路的圍棋人工智慧程式,一共經歷了以下幾次迭代:


(1)2015 年 10 月,以 5-0 擊敗歐洲冠軍樊麾,其使用了兩個神經網路;

(2)2016 年 3 月,以 4-1 擊敗世界冠軍李世石,較於上一版本,其使用了更復雜的網路結構,在生成訓練資料時,使用了更加強大的模擬器;

(3)2017 年 1 月,AlphaGo Master 在網路上與人類棋手的對陣中保持了 60 不敗的戰績,與之前版本不同的是,只使用了一個神經網路;

(4)2017 年 10 月,DeepMind 公開了最新版本的 AlphaGo Zero,此版本在與 2016 年 3 月版的 AlphaGo 的對陣中取得了 100-0 的戰績,並且,在訓練中未使用任何手工設計的特徵或者圍棋領域的專業知識,僅僅以歷史的棋面作為輸入,其訓練資料全部來自於 self-play。


2.馬爾可夫決策過程


一個馬爾可夫決策過程(Markov Decision Processes,MDPs)通常包括以下幾個要素:


(1)狀態集合 S,包含 MDPs 可能處在的各個狀態;

(2)動作集合 A,包含 MDPs 在各個狀態上可採取的動作;

(3)轉換概率 Psa,表示在狀態上採取動作後,下一個狀態的概率分佈;

(4)回報函式 R,R(s) 表示狀態的回報。

     


在定義了以上幾個要素之後,我們可以來描述一個典型的 MDPs:從某個起始狀態 640?wx_fmt=jpeg 開始,選擇採取動作 640?wx_fmt=png,然後,以 640?wx_fmt=png 的概率轉換到下一個狀態 640?wx_fmt=jpeg,然後採取動作 640?wx_fmt=jpeg,並以 640?wx_fmt=jpeg 的概率轉換到下一個狀態 640?wx_fmt=jpeg ... ...


640?wx_fmt=jpeg


如果 MDPs 的狀態集合和動作集合是有限大的,則稱之為有限 MDPs。


通常,我們還會定義另外一個引數——折扣因子(discount factor)640?wx_fmt=png。定義折扣因子之後,MDPs的總回報可以表示為:640?wx_fmt=png


MDPs的核心問題是如何找到一個對所有狀態都適用的最優策略,按照此策略來選擇動作,使總回報的期望最大化。在總回報中加入折扣因子後,為使總回報的期望最大化,須儘可能的將正向回報提前,負向回報推遲。


回想一下圍棋的對弈,起始狀態是一個空的棋盤,棋手根據棋面(狀態)選擇落子點(動作)後,轉換到下一個狀態(轉換概率為:其中一個狀態的概率為 1,其他狀態的概率為 0),局勢的優劣是每個狀態的回報。棋手需要根據棋面選擇合適落子點,建立優勢並最終贏下游戲,因此,圍棋可以看作是一個 MDPs 問題。


3.策略迭代


定義一個策略?的狀態值函式(state-value function)為:

640?wx_fmt=jpeg

等式右半部即為總回報的期望值。展開等式的右半部分:

640?wx_fmt=png

上面的等式稱作貝爾曼方程(Bellman equation),從貝爾曼方程可以看出,當前狀態的回報的期望包括兩部分:1)當前狀態的立即回報,2)後續狀態的回報的期望和與折扣因子之積。


定義最優狀態值函式(optimal state-value function)為:

640?wx_fmt=png

根據貝爾曼方程有:

640?wx_fmt=png

定義策略為:

640?wx_fmt=png

對於任意狀態和任意策略,均有:

640?wx_fmt=png

因此,策略640?wx_fmt=jpeg即為最優策略。


最優策略可通過策略迭代來求解。一次策略迭代包括兩個步驟:1)策略估計(Policy Evaluation):基於當前的策略和狀態值函式根據貝爾曼方程更新狀態值函式;2)策略提升(Policy Improvement):基於當前的策略和1)中更新後的狀態值函式來更新策略。


策略迭代求解MDPs問題的演算法如圖1所示:


640?wx_fmt=png

圖1 策略迭代演算法


為證明演算法的收斂性,定義動作值函式(action-value function)為:

640?wx_fmt=png


假設有兩個策略和640?wx_fmt=png,對於任意狀態均有 640?wx_fmt=png,那麼,對於任意狀態640?wx_fmt=jpeg,不等式成立640?wx_fmt=jpeg,即策略640?wx_fmt=jpeg優於策略640?wx_fmt=jpeg


640?wx_fmt=png


因此,在策略迭代中,每一次策略提升後,將得到一個更優的解。對於有限MDPs,策略的個數是有限的,在經過有限次的迭代之後,策略將收斂於最優解。


4.蒙特卡洛方法


在策略迭代中,為了估計狀態值函式,需要計算並儲存所有狀態的值函式。在圍棋中,有超過 640?wx_fmt=png 的狀態,遠遠超出了計算或儲存的極限,因此,策略迭代的方法不再適用。


蒙特卡洛方法(Monte Carlo Method)通過模擬取樣來估計狀態值函式和動作值函式,將取樣結果的均值作為估計值,根據大數定律,隨著取樣次數的增加,估計值將趨近於實際值。蒙特卡洛方法適用於“情節任務(episodic tasks)”,即不管使用哪種策略,最終都能到達終止狀態,圍棋是一種 “情節任務”。蒙特卡洛方法對各個狀態的估計是相互獨立的,即在估計狀態值函式或動作值函式時不依賴於其他狀態的值函式,因此,不需要計算或儲存所有狀態的值函式。


為估計策略  640?wx_fmt=png ,把初始狀態置為 s,然後開始模擬取樣,在狀態 s 上採取動作 a,轉換到下一個狀態,在後續的狀態中,依據策略 ? 來選擇動作,直到到達終止狀態,記錄下此時的回報。重複執行以上操作。對於路徑上的每一個狀態-動作對(state-action pair),將所有包含此狀態-動作對的模擬的回報的均值作為動作值函式 640?wx_fmt=jpeg 的估計值。以上過程稱之為“深耕(exploitation)”,即在現有的知識下,將每一步都做到最好。


策略 640?wx_fmt=jpeg 是貪婪的,即在每個狀態 s 上均以 P=1 的概率選擇當前最優的動作 640?wx_fmt=jpeg,因此,對於任意動作 640?wx_fmt=png,狀態-動作對 640?wx_fmt=png 都不會被選擇,其動作值函式也不會被估計。估計動作值函式的目的是幫助我們在狀態 s 上選擇合適的動作,為了比較動作的收益,我們還需要估計這個狀態上其他的動作的值函式。為了估計其他動作的值函式,一種常用的方法是640?wx_fmt=jpeg 策略,其中640?wx_fmt=jpeg是一個接近於0的小數,對於每一個狀態 s,以640?wx_fmt=png 的概率選擇非貪婪動作640?wx_fmt=jpeg,以 640?wx_fmt=png 的概率選擇貪婪動作 640?wx_fmt=jpeg。以上過程稱之為“探索(exploration)”,即不滿足於眼前的最好,探索未知中可能存在的更好。


在蒙特卡洛方法中,“深耕”使得我們更多的在最有希望的方向上搜尋,而“探索”使得我們能夠同時兼顧到其他方向。


5.AlphaGo Zero


5.1 AlphaGo Zero的網路架構


圍棋的棋面可以看作是一個 19 × 19 的影像,每一個棋子對應一個畫素點,不同顏色的棋子對應不同的畫素值。考慮到深度神經網路,尤其是卷積神經網路在影像領域的成功應用,AlphaGo 使用卷積神經網路來估計當前的局面,選擇落子的位置。


AlphaGo Zero 所使用的卷積神經網路的輸入是 19 × 19 × 17 的張量 640?wx_fmt=jpeg640?wx_fmt=jpeg,其 17 個通道中,640?wx_fmt=jpeg 表示 t 時刻棋盤上第 i 個位置是否有己方的棋子,640?wx_fmt=jpeg表示 t 時刻棋盤上第i個位置是否有對方的棋子,C 是一個常數,用於標識當前輪次的顏色;網路包括兩個輸出,640?wx_fmt=jpeg,輸出值函式的分支稱之為值網路(Value network),輸出策略的分支稱之為策略網路(Policy network)。在之前的版本中,值網路和策略網路是兩個同架構但分立的網路,在AlphaGo Zero中,這兩個網路合併成一個網路。


640?wx_fmt=png

圖2 AlphaGo Zero網路架構


5.2 策略迭代與蒙特卡洛樹搜尋


蒙特卡洛樹搜尋使用蒙特卡洛方法估計搜尋樹上的每個節點的統計量。AlphaGo 將策略迭代與蒙特卡洛樹搜尋(Monte Carlo Tree Search,MCTS)結合了起來。對於每個狀態640?wx_fmt=jpeg,根據策略網路輸出的策略640?wx_fmt=jpeg選擇動作,執行 MCTS。MCTS 輸出策略640?wx_fmt=jpeg,通常這個策略要比策略網路輸出的策略640?wx_fmt=jpeg更加健壯,因此,這個過程可以看作是策略迭代中的策略提升;根據 MCTS 輸出的策略選擇動作,並轉換到下一個狀態640?wx_fmt=jpeg,然後執行 MCTS…,直到終止狀態(遊戲結束),將遊戲的勝者 640?wx_fmt=jpeg640?wx_fmt=jpeg 作為模擬的結果,這個過程可以看作是策略迭代中的策略估計,如圖3(a)所示。640?wx_fmt=jpeg作為一個訓練樣本,用於訓練神經網路640?wx_fmt=jpeg,更新網路引數640?wx_fmt=jpeg,如圖3(b)所示。在後續的策略迭代中,使用更新後的神經網路來指導 MCTS。


640?wx_fmt=png

圖3 AlphaGo的強化學習演算法


  • 5.2.1 策略提升


在 MCTS 的過程中,搜尋樹上的每個節點 s 的每條邊640?wx_fmt=jpeg維護一個集合640?wx_fmt=jpeg,其中,640?wx_fmt=jpeg是此條邊被訪問的次數,640?wx_fmt=jpeg是總的動作值函式,640?wx_fmt=jpeg是平均動作值函式,640?wx_fmt=jpeg是在狀態採取動作的先驗概率。


策略提升的一次搜尋過程包括以下幾個步驟:


(1)對於從根節點640?wx_fmt=jpeg到葉節點640?wx_fmt=jpeg之間的每個節點640?wx_fmt=jpeg,動作的選擇策略是640?wx_fmt=jpeg640?wx_fmt=jpegc 用於控制策略中“探索”的比重,當 c=0 時,該策略即為貪婪策略,如圖4(a)所示。在 MCTS 的初期,該策略傾向於選擇先驗概率大、訪問次數少的動作,隨著搜尋的進行,將更多地選擇值函式大的動作。此外,為了鼓勵“探索”,對於根節點640?wx_fmt=jpeg還會在其策略上疊加一個狄利克雷(Dirichlet )噪聲640?wx_fmt=jpeg,其中 640?wx_fmt=jpeg


(2)在搜尋到達葉節點640?wx_fmt=jpeg後,將640?wx_fmt=jpeg輸入到神經網路640?wx_fmt=jpeg中計算值函式和策略640?wx_fmt=jpeg。對於此節點的每條邊640?wx_fmt=jpeg,初始化其集合為640?wx_fmt=jpeg640?wx_fmt=jpeg 的先驗概率,如圖4(b)所示。


(3)備份,更新搜尋路徑上節點640?wx_fmt=jpeg的邊640?wx_fmt=jpeg的集合中的元素,640?wx_fmt=jpeg640?wx_fmt=jpeg,如圖4(c)所示。


在多次搜尋之後,根據根節點640?wx_fmt=jpeg上的各條邊 a 的訪問次數640?wx_fmt=jpeg輸出策略640?wx_fmt=jpeg640?wx_fmt=jpeg是溫度引數,用於控制“探索”的比重,如圖4(d)所示。


  • 5.2.2 策略估計


在狀態640?wx_fmt=jpeg上,按照策略提升返回的策略640?wx_fmt=jpeg選擇落子位置640?wx_fmt=jpeg。在遊戲的初期(前30手,640?wx_fmt=jpeg),為了鼓勵“探索”、提升棋局的多樣性,將溫度引數640?wx_fmt=jpeg的值設為1,即,選擇落子位置640?wx_fmt=jpeg的概率正比於節點640?wx_fmt=jpeg的這條邊在策略提升中被訪問的次數;在30手之後 ,溫度引數640?wx_fmt=jpeg,此時,策略是貪婪的,以P=1的概率選擇訪問次數最多的邊。


在狀態640?wx_fmt=jpeg上執行動作後,進入到下一個狀態640?wx_fmt=jpeg,將搜尋樹上640?wx_fmt=jpeg所對應的節點作為新的根節點,執行MCTS,返回提升後的策略640?wx_fmt=jpeg,…,直到遊戲結束,將遊戲的勝者640?wx_fmt=jpeg作為狀態640?wx_fmt=jpeg的值函式的估計值。

    

640?wx_fmt=png

圖4 MCTS


這個過程即 self-play。為了提高搜尋的效率,在策略提升時,當搜尋到葉節點後,使用值網路估計狀態值函式作為收益返回,避免繼續向下搜尋,限制搜尋的深度;在策略估計時,使用策略提升輸出的策略來指導動作的選擇,限制搜尋的廣度。另外,如果值網路估計的局勢的收益(勝率)低於一個閾值之後,便放棄此局遊戲。


  • 5.2.3 旋/翻轉不變性


將圍棋的棋盤旋轉或翻轉之後,不會影響局勢,落子的位置也只需要做相應的變換即可。如果狀態 s 被旋轉或翻轉,值網路的輸出 v 不變,策略網路的輸出640?wx_fmt=jpeg做相應的變換,假設 d 為變換函式,則有640?wx_fmt=jpeg。在策略提升中,當搜尋到達葉節點後,從 8 種旋/翻轉變換中隨機地選取一種對葉節點的狀態進行變換,變換之後的狀態作為神經網路的輸入。


棋盤有 7 種不重複的旋/翻轉變換,分別是:上(下)翻轉,右(左)翻轉,右上(左下)翻轉,右下(左上)翻轉,90度旋轉,180度旋轉,270度旋轉。90度旋轉可以通過右下翻轉+上翻轉來實現,180度旋轉可以通過上翻轉+右翻轉來實現,270度旋轉可以通過右下翻轉+右翻轉來實現,因此,只需要實現4個基礎的翻轉變換。在估計葉節點的值函式和各條邊的先驗概率時,從8種變換中隨機地取一個對葉節點進行處理,並對策略網路的輸出做相應的反變換。

     

640?wx_fmt=png

圖5 旋轉和翻轉


5.3 模型優化


在 self-play 的每一局遊戲中,會生成一系列的狀態-策略-值元組640?wx_fmt=jpeg640?wx_fmt=jpeg,這一系列狀態是強關聯的。為了避免過擬合這種關聯,每局遊戲只隨機地選擇一個元組來組成訓練集。


模型優化的損失函式是640?wx_fmt=jpeg,其中,第一項為值網路的輸出與 self-play 實際結果的均方誤差,第二項為策略網路的輸出與策略提升的輸出的交叉熵,第三項為 L2 正則項。在損失函式中,由於640?wx_fmt=jpeg,(值網路的最後一層使用tanh啟用函式),因此,均方誤差對損失函式的貢獻被限定在範圍內。給予均方誤差和交叉熵相同的權重,避免由於過擬合了狀態值函式而出現“模型能夠精準預測遊戲勝負卻輸出糟糕的策略”的現象。


模型引數更新使用帶動量和學習率衰減的隨機梯度下降方法,動量因子設為0.9,學習率在優化的過程中從 0.01 衰減到 0.0001。每次從最近的 500,000 局遊戲中隨機地選取一個大小為 2048 的 mini-batch,每 1000 次更新之後,對模型進行評估。


5.4 模型評估

 

更新後的模型640?wx_fmt=jpeg與當前最優的模型640?wx_fmt=jpeg對戰 400 局,即在策略提升中,分別使用640?wx_fmt=jpeg640?wx_fmt=jpeg來估計葉節點的值函式和各條邊的先驗概率,在選擇落子位置時,溫度引數640?wx_fmt=jpeg,在每一步均貪婪地選擇訪問次數最多的邊。如果新模型640?wx_fmt=jpeg的勝率大於55%,則新模型成為當前最優的模型,並使用此模型進行 self-play 生成訓練資料,以確保訓練資料的質量。


6.總結


人工智慧在很多領域已經顯示出了超越人類的水準,並且還在不斷的攻城略地,達觀也將在文字智慧處理領域持續地深耕和探索,讓計算機代替人工來處理企業內的各類文書資料,幫助企業提升自動化水平。

(*本文為 AI科技大本營投稿文章,轉載請聯絡作者)

推薦

640?wx_fmt=png


推薦閱讀

640?wx_fmt=png

相關文章