強化學習(十九) AlphaGo Zero強化學習原理

    在強化學習(十八) 基於模擬的搜索與蒙特卡羅樹搜索(MCTS)中,咱們討論了MCTS的原理和在棋類中的基本應用。這裏咱們在前一節MCTS的基礎上,討論下DeepMind的AlphaGo Zero強化學習原理。html

    本篇主要參考了AlphaGo Zero的論文, AlphaGo Zero綜述和AlphaGo Zero Cheat Sheet。算法

1. AlphaGo Zero模型基礎

    AlphaGo Zero不須要學習人類的棋譜,經過自我對弈完成棋力提升。主要使用了兩個模型,第一個就是咱們上一節介紹MCTS樹結構,另外一個是一個神經網絡。MCTS上一篇已經有基本介紹了,對於神經網絡,它的輸入是當前的棋局狀態,輸出兩部分,第一部分輸出是在當前棋局狀態下各個可能的落子動做對應的獲勝機率p,能夠簡單理解爲Actor-Critic策略函數部分。另外一部分輸出爲獲勝或者失敗的評估[-1,1],能夠簡單理解爲Actor-Critic價值函數部分。網絡

    AlphaGo Zero的行棋主要是由MCTS指導完成的,可是在MCTS搜索的過程當中,因爲有一些不在樹中的狀態須要仿真,作局面評估,所以須要一個簡單的策略來幫助MCTS評估改進策略,這個策略改進部分由前面提到的神經網絡完成。數據結構

    這兩部分的關係以下圖所示:函數

    具體AlphaGo Zero的MCTS如何搜索,神經網絡如何訓練,如何指導MCTS搜索咱們在後面再講。post

 2. AlphaGo Zero的訓練過程簡介

    在討論AlphaGo Zero的MCTS如何搜索,神經網絡如何訓練等細節以前,咱們先看看AlphaGo Zero的訓練過程是什麼樣的。學習

    AlphaGo Zero訓練過程主要分爲三個階段:自我對戰學習階段,訓練神經網絡階段和評估網絡階段。優化

    自我對戰學習階段主要是AlphaGo Zero自我對弈,產生大量棋局樣本的過程,因爲AlphaGo Zero並不使用圍棋大師的棋局來學習,所以須要自我對弈獲得訓練數據用於後續神經網絡的訓練。在自我對戰學習階段,每一步的落子是由MCTS搜索來完成的。在MCTS搜索的過程當中,遇到不在樹中的狀態,則使用神經網絡的結果來更新MCTS樹結構上保存的內容。在每一次迭代過程當中,在每一個棋局當前狀態$s$下,每一次移動使用1600次MCTS搜索模擬。最終MCTS給出最優的落子策略$\pi$,這個策略$\pi$和神經網絡的輸出$p$是不同的。當每一局對戰結束後,咱們能夠獲得最終的勝負獎勵$z$,1或者-1. 這樣咱們能夠獲得很是多的樣本$(s,\pi,z)$,這些數據能夠訓練神經網絡階段。url

    在訓練神經網絡階段,咱們使用自我對戰學習階段獲得的樣本集合$(s,\pi,z)$,訓練咱們神經網絡的模型參數。訓練的目的是對於每一個輸入$s$, 神經網絡輸出的$p,v$和咱們訓練樣本中的$\pi,z$差距儘量的少。這個損失函數$L$實際上是很簡單的:$$L=(z-v)^{2}-\pi^{T}log(p)+c||\theta||^{2}$$htm

    損失函數由三部分組成,第一部分是均方偏差損失函數,用於評估神經網絡預測的勝負結果和真實結果之間的差別。第二部分是交叉熵損失函數,用於評估神經網絡的輸出策略和咱們MCTS輸出的策略的差別。第三部分是L2正則化項。

    經過訓練神經網絡,咱們能夠優化神經網絡的參數$\theta$,用於後續指導咱們的MCTS搜索過程。

    當神經網絡訓練完畢後,咱們就進行了評估階段,這個階段主要用於確認神經網絡的參數是否獲得了優化,這個過程當中,自我對戰的雙方各自使用本身的神經網絡指導MCTS搜索,並對戰若干局,檢驗AlphaGo Zero在新神經網絡參數下棋力是否獲得了提升。除了神經網絡的參數不一樣,這個過程和第一階段的自我對戰學習階段過程是相似的。

3. AlphaGo Zero的神經網絡結構

    在第二節咱們已經討論了AlphaGo Zero的主要訓練過程,可是還有兩塊沒有講清楚,一是AlphaGo Zero的MCTS搜索過程是怎麼樣的,二是AlphaGo Zero的神經網絡的結構具體是什麼樣的。這一節咱們來看看AlphaGo Zero的神經網絡的細節。

    首先咱們看看AlphaGo Zero的輸入,當前的棋局狀態。因爲圍棋是19x19的361個點組成的棋局,每一個點的狀態有二種:若是當前是黑方行棋,則當前有黑棋的點取值1,有白棋或者沒有棋子的位置取值爲0,反過來,若是當前是白方行棋,則當前有白棋的點取值1,有黑棋或者沒有棋子的位置取值爲0。同時,爲了提供更多的信息,輸入的棋局狀態不光只有當前的棋局狀態,包括了黑棋白棋各自前8步對應的棋局狀態。除了這16個棋局狀態,還有一個單獨的棋局狀態用於標識當前行棋方,若是是當前黑棋行棋,則棋局狀態上標全1,白棋則棋局狀態上標全0。以下圖所示:

 

     最終神經網絡的輸入是一個19x19x17的張量。裏面包含黑棋和白棋的最近8步行棋狀態和當前行棋方的信息。

    接着咱們看看神經網絡的輸出,神經網絡的輸出包括策略部分和價值部分。對於策略部分,它預測當前各個行棋點落子的機率。因爲圍棋有361個落子點,加上還能夠Pass一手,所以一共有362個策略端機率輸出。對於價值端,輸出就簡單了,就是當前局面勝負的評估值,在[-1,1]之間。

    看完了神經網絡的輸入和輸出,咱們再看看神經網絡的結構,主要是用CNN組成的深度殘差網絡。以下圖所示:

     在19x19x17的張量作了一個基本的卷積後,使用了19層或者39層的深度殘差網絡,這個是ResNet的經典結構。理論上這裏也可使用DenseNet等其餘流行的網絡結構。神經網絡的損失函數部分咱們在第二節已經將了。整個神經網絡就是爲了當MCTS遇到沒有見過的局面時,提供的當前狀態下的局面評估和落子機率參考。這部分信息會被MCTS後續綜合利用。

4. AlphaGo Zero的MCTS搜索

    如今咱們來再看看AlphaGo Zero的MCTS搜索過程,在強化學習(十八) 基於模擬的搜索與蒙特卡羅樹搜索(MCTS)裏,咱們已經介紹了MCTS的基本原理,和4個主要的搜索階段:選擇,擴展,仿真和回溯。和上一篇的內容相比,這裏MCTS的不一樣主要體如今樹結構上保存的信息不一樣,進而UCT的計算公式也稍有不一樣。最後MCTS搜索完畢後,AlphaGo Zero也有本身選擇真正落子點的策略。

    在上一篇裏,咱們的MCTS上保存的數據很簡單,就是下的總盤數和贏的總盤數。在AlphaGo Zero這裏,咱們保存的信息會多一些。主要包括下面的4部分:

    $N(s,a) $:記錄邊的訪問次數
    $W(s,a)$:  合計行動價值
    $Q(s,a)$ :平均行動價值
    $P(s,a)$ :選擇該條邊的先驗機率

    其中$s$爲當前棋局狀態,$a$爲某一落子選擇對應的樹分支。

    有了MCTS上的數據結構,咱們看看AlphaGo Zero的MCTS搜索的4個階段流程:

    首先是選擇,在MCTS內部,出現過的局面,咱們會使用UCT選擇子分支。子分支的UCT原理和上一節同樣。可是具體的公式稍有不一樣,以下:$$ U(s,a) = c_{puct}P(s,a)\frac{\sqrt{\sum_{b}{N(s,b)}}}{1+N(s,a)}$$ $$a_t = \underset{a}{\arg\max}(Q(s_t, a) + U(s_t, a))$$

    最終咱們會選擇$Q+U$最大的子分支做爲搜索分支,一直走到棋局結束,或者走到了沒有到終局MCTS的葉子節點。$c_{puct}$是決定探索程度的一個係數,上一篇已講過。

    若是到了沒有到終局的MCTS葉子節點,那麼咱們就須要進入MCTS的第二步,擴展階段,以及後續的第三步仿真階段。咱們這裏一塊兒講。對於葉子節點狀態$s$,會利用神經網絡對葉子節點作預測,獲得當前葉子節點的各個可能的子節點位置$s_L$落子的機率$p$和對應的價值$v$,對於這些可能的新節點咱們在MCTS中建立出來,初始化其分支上保存的信息爲:$$\{ N(s_L,a)=0,W(s_L,a)=0,Q(s_L,a)=0,P(s_L,a)=P_a \}$$

    這個過程以下圖所示:

 

    這樣擴展後,以前的葉子節點$s$,如今就是內部節點了。作完了擴展和仿真後,咱們須要進行回溯,將新葉子節點分支的信息回溯累加到祖先節點分支上去。這個回溯的邏輯也是很簡單的,從每一個葉子節點$L$依次向根節點回溯,並依次更新上層分支數據結構以下:$$N(s_t,a_t) = N(s_t,a_t)+1$$$$W(s_t,a_t) = W(s_t,a_t)+v$$$$Q(s_t,a_t) = \frac{W(s_t,a_t)}{N(s_t,a_t)}$$

    這個MCTS搜索過程在一次真正行棋前,通常會進行約1600次搜索,每次搜索都會進行上述4個階段。

     這上千次MCTS搜索完畢後,AlphaGo Zero就能夠在MCTS的根節點$s$基於如下公式選擇行棋的MCTS分支了:$$\pi(a|s)=\frac{N(s,a)^{1/\tau}}{\sum_{b}^{}{N(s,b)^{1/\tau}}}$$    

    其中,$\tau$爲溫度參數,控制探索的程度, $\tau$ 越大,不一樣走法間差別變小,探索比例增大,反之,則更多選擇當前最優操做。每一次完整的自我對弈的前30步,參數 $\tau = 1$ ,這是早期鼓勵探索的設置。遊戲剩下的步數,該參數將逐漸下降至0。若是是比賽,則直接爲0.

    同時在隨後的時間步中,這個MCTS搜索樹將會繼續使用,對應於實際所採起的行爲的子節點將變成根節點,該子節點下的子樹的統計數據將會被保留,而這顆樹的其他部分將會丟棄 。

    以上就是AlphaGo Zero MCTS搜索的過程。

5. AlphaGo Zero小結與強化學習系列小結

     AlphaGo Zero巧妙了使用MCTS搜索樹和神經網絡一塊兒,經過MCTS搜索樹優化神經網絡參數,反過來又經過優化的神經網絡指導MCTS搜索。二者一主一輔,很是優雅的解決了這類狀態徹底可見,信息充分的棋類問題。

    固然這類強化學習算法只對特定的這類徹底狀態可見,信息充分的問題有效,遇到信息不對稱的強化學習問題,好比星際,魔獸之類的對戰遊戲問題,這個算法就不那麼有效了。要推廣AlphaGo Zero的算法到大多數普通強化學習問題仍是很難的。所以後續強化學習算法應該還有不少發展的空間。

    至此強化學習系列就寫完了,以前預計的是寫三個月,結果因爲事情太多,竟然花了大半年。可是總算仍是完成了,沒有爛尾。生活不易,繼續努力!

 

(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com) 

相關文章
相關標籤/搜索