強化學習(十八) 基於模擬的搜索與蒙特卡羅樹搜索(MCTS)

    在強化學習(十七) 基於模型的強化學習與Dyna算法框架中,咱們討論基於模型的強化學習方法的基本思路,以及集合基於模型與不基於模型的強化學習框架Dyna。本文咱們討論另外一種很是流行的集合基於模型與不基於模型的強化學習方法:基於模擬的搜索(Simulation Based Search)。html

    本篇主要參考了UCL強化學習課程的第八講,第九講部分。算法

1. 基於模擬的搜索概述

    什麼是基於模擬的搜索呢?固然主要是兩個點:一個是模擬,一個是搜索。模擬咱們在上一篇也討論過,就是基於強化學習模型進行採樣,獲得樣本數據。可是這是數據不是基於和環境交互得到的真實數據,因此是「模擬」。對於搜索,則是爲了利用模擬的樣本結果來幫咱們計算到底應該採用什麼樣的動做,以實現咱們的長期受益最大化。網絡

    那麼爲何要進行基於模擬的搜索呢?在這以前咱們先看看最簡單的前向搜索(forward search)。前向搜索算法從當前咱們考慮的狀態節點$S_t$開始考慮,怎麼考慮呢?對該狀態節點全部可能的動做進行擴展,創建一顆以$S_t$爲根節點的搜索樹,這個搜索樹也是一個MDP,只是它是以當前狀態爲根節點,而不是以起始狀態爲根節點,因此也叫作sub-MDP。咱們求解這個sub-MDP問題,而後獲得$S_t$狀態最應該採用的動做$A_t$。前向搜索的sub-MDP以下圖:app

    前向搜索創建了一個sub-MDP來求解,這很精確,並且這在狀態動做數量都不多的時候沒有問題,可是隻要稍微狀態動做數量多一點,每一個狀態的選擇就都特別慢了,所以不太實用,此時基於模擬的搜索就是一種比較好的折衷。框架

2. 簡單蒙特卡羅搜索

    首先咱們看看基於模擬的搜索中比較簡單的一種方法:簡單蒙特卡羅搜索。ide

    簡單蒙特卡羅搜索基於一個強化學習模型$M_v$和一個模擬策略$\pi$.在此基礎上,對於當前咱們要選擇動做的狀態$S_t$, 對每個可能採樣的動做$a \in A$,都進行$K$輪採樣,這樣每一個動做$a$都會獲得K組經歷完整的狀態序列(episode)。即:$$\{S_t,a, R_{t+1}^k,S_{t+1}^k,A_{t+1}^k,......S_T^k\}_{k=1}^K \sim M_v,\pi$$函數

    如今對於每一個$(S_t,a)$組合,咱們能夠基於蒙特卡羅法來計算其動做價值函數並選擇最優的動做了。$$Q(S_t,a) = \frac{1}{K}\sum\limits_{k=1}^KG_t$$$$a_t =\arg\max_{a \in A}Q(S_t,a)$$post

     簡單蒙特卡羅搜索和起前向搜索比起來,對於狀態動做數量的處理能力上了一個數量級,能夠處理中等規模的問題。可是假如咱們的狀態動做數量達到很是大的量級,好比圍棋的級別,那麼簡單蒙特卡羅搜索也太慢了。同時,因爲使用蒙特卡羅法計算其動做價值函數,模擬採樣獲得的一些中間狀態和對應行爲的價值就被忽略了,這部分數據能不能利用起來呢?學習

     下面咱們看看蒙特卡羅樹搜索(Monte-Carlo Tree Search,如下簡稱MCTS)怎麼優化這個問題的解決方案。優化

3. MCTS的原理

    MCTS摒棄了簡單蒙特卡羅搜索裏面對當前狀態$S_t$每一個動做都要進行K次模擬採樣的作法,而是總共對當前狀態$S_t$進行K次採樣,這樣採樣到的動做只是動做全集$A$中的一部分。這樣作大大下降了採樣的數量和採樣後的搜索計算。固然,代價是可能動做全集中的不少動做都沒有采樣到,可能錯失好的動做選擇,這是一個算法設計上的折衷。

    在MCTS中,基於一個強化學習模型$M_v$和一個模擬策略$\pi$,當前狀態$S_t$對應的完整的狀態序列(episode)是這樣的:$$\{S_t,A_t^k, R_{t+1}^k,S_{t+1}^k,A_{t+1}^k,......S_T^k\}_{k=1}^K \sim M_v,\pi$$

    採樣完畢後,咱們能夠基於採樣的結果構建一顆MCTS的搜索樹,而後近似計算$Q(s_t,a)$和最大$Q(s_t,a)$對應的動做。$$Q(S_t,a) = \frac{1}{K}\sum\limits_{k=1}^K\sum\limits_{u=t}^T1(S_{uk}=S_t, A_{uk} =a)G_u$$$$a_t =\arg\max_{a \in A}Q(S_t,a)$$    

    MCTS搜索的策略分爲兩個階段:第一個是樹內策略(tree policy):爲當模擬採樣獲得的狀態存在於當前的MCTS時使用的策略。樹內策略可使$\epsilon-$貪婪策略,隨着模擬的進行策略能夠獲得持續改善,還可使用上限置信區間算法UCT,這在棋類遊戲中很廣泛;第二個是默認策略(default policy):若是當前狀態不在MCTS內,使用默認策略來完成整個狀態序列的採樣,並把當前狀態歸入到搜索樹中。默認策略可使隨機策略或基於目標價值函數的策略。

    這裏講到的是最經典的強化學習終MCTS的用戶,每一步都有延時獎勵,可是在棋類之類的零和問題中,中間狀態是沒有明確獎勵的,咱們只有在棋下完後知道輸贏了才能對前面的動做進行狀態獎勵,對於這類問題咱們的MCTS須要作一些結構上的細化。

4. 上限置信區間算法UCT

    在討論棋類遊戲的MCTS搜索以前,咱們先熟悉下上限置信區間算法(Upper Confidence Bound Applied to Trees, 如下簡稱UCT)。它是一種策略算法,咱們以前最經常使用的是$\epsilon-$貪婪策略。可是在棋類問題中,UCT更常使用。

    在棋類遊戲中,常常有這樣的問題,咱們發如今某種棋的狀態下,有2個可選動做,第一個動做歷史棋局中是0勝1負,第二個動做歷史棋局中是8勝10負,那麼咱們應該選擇哪一個動做好呢?若是按$\epsilon-$貪婪策略,則第二個動做很是容易被選擇到。可是其實雖然第一個動做勝利0%,可是極可能是由於這個動做的歷史棋局少,數據不夠致使的,極可能該動做也是一個不錯的動做。那麼咱們如何在最優策略和探索度達到一個選擇平衡呢?$\epsilon-$貪婪策略能夠用,可是UCT是一個更不錯的選擇。

    UCT首先計算每個可選動做節點對應的分數,這個分數考慮了歷史最優策略和探索度嗎,一個經常使用的公式以下:$$\text{score = }\ \frac{w_i}{n_i}+c\sqrt{\frac{\ln N_i}{n_i}}$$

    其中,$w_i$ 是 i 節點的勝利次數,$n_i$ 是i節點的模擬次數,$N_i$是全部模擬次數,c 是探索常數,理論值爲$\sqrt{2}$,可根據經驗調整,c 越大就越偏向於廣度搜索,c 越小就越偏向於深度搜索。最後咱們選擇分數最高的動做節點。

    好比對於下面的棋局,對於根節點來講,有3個選擇,第一個選擇7勝3負,第二個選擇5勝3負,第三個選擇0勝3負。

    若是咱們取c=10,則第一個節點的分數爲:$$score(7,10) =7/10 + C \cdot \sqrt{\frac{\log(21)}{10}}  \approx 6.2 $$

    第二個節點的分數爲:$$score(5,8) = 5/8 + C \cdot \sqrt{\frac{\log(21)}{8}}  \approx 6.8 $$

    第三個節點的分數爲:$$score(0,3) = 0/3 + C \cdot \sqrt{\frac{\log(21)}{3}}  \approx 10 $$

    可見,因爲咱們把探索率c設置的比較大,第三個節點是被UCT選中要執行的動做節點。固然若是咱們把c設置的比較小的話,第一個或者第二個可能就變成最大的分數了。

5. 棋類遊戲MCTS搜索

    在像中國象棋,圍棋這樣的零和問題中,一個動做只有在棋局結束才能拿到真正的獎勵,所以咱們對MCTS的搜索步驟和樹結構上須要根據問題的不一樣作一些細化。

    對於MCTS的樹結構,若是是最簡單的方法,只須要在節點上保存狀態對應的歷史勝負記錄。在每條邊上保存採樣的動做。這樣MCTS的搜索須要走4步,以下圖(圖來自維基百科):

    第一步是選擇(Selection):這一步會從根節點開始,每次都選一個「最值得搜索的子節點」,通常使用UCT選擇分數最高的節點,直到來到一個「存在未擴展的子節點」的節點,如圖中的 3/3 節點。之因此叫作「存在未擴展的子節點」,是由於這個局面存在未走過的後續着法,也就是MCTS中沒有後續的動做能夠參考了。這時咱們進入第二步。

    第二步是擴展(Expansion),在這個搜索到的存在未擴展的子節點,加上一個0/0的子節點,表示沒有歷史記錄參考。這時咱們進入第三步。

    第三步是仿真(simulation),從上面這個沒有試過的着法開始,用一個簡單策略好比快速走子策略(Rollout policy)走到底,獲得一個勝負結果。快速走子策略通常適合選擇走子很快可能不是很精確的策略。由於若是這個策略走得慢,結果雖然會更準確,但因爲耗時多了,在單位時間內的模擬次數就少了,因此不必定會棋力更強,有可能會更弱。這也是爲何咱們通常只模擬一次,由於若是模擬屢次,雖然更準確,但更慢。

    第四步是回溯(backpropagation), 將咱們最後獲得的勝負結果回溯加到MCTS樹結構上。注意除了以前的MCTS樹要回溯外,新加入的節點也要加上一次勝負歷史記錄,如上圖最右邊所示。

    以上就是MCTS搜索的整個過程。這4步通常是通用的,可是MCTS樹結構上保存的內容而通常根據要解決的問題和建模的複雜度而不一樣。

6. MCTS小結

    MCTS經過採樣創建MCTS搜索樹,並基於4大步驟選擇,擴展,仿真和回溯來持續優化樹內的策略,進而能夠幫助對狀態下的動做進行選擇,很是適合狀態數,動做數海量的強化學習問題。好比AlphaGo和AlphaGo Zero都重度使用了MCTS搜索,咱們在下一篇討論AlphaGo Zero如何結合MCTS和神經網絡來求解圍棋強化學習問題。

 

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

相關文章
相關標籤/搜索