1. 程式人生 > >強化學習(十九) AlphaGo Zero強化學習原理

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

targe 正則化 動作 heat 記錄 標識 post 利用 很多

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

    本篇主要參考了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搜索我們在後面再講。

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)$,這些數據可以訓練神經網絡階段。

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

    損失函數由三部分組成,第一部分是均方誤差損失函數,用於評估神經網絡預測的勝負結果和真實結果之間的差異。第二部分是交叉熵損失函數,用於評估神經網絡的輸出策略和我們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的算法到大多數普通強化學習問題還是很難的。因此後續強化學習算法應該還有很多發展的空間。

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

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]

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