1. 程式人生 > >強化學習(RLAI)讀書筆記第八章表格方法的規劃與學習

強化學習(RLAI)讀書筆記第八章表格方法的規劃與學習

第八章:Planning and Learning with Tabular Methods

本章為需要環境的model-based強化學習方法(如DP和啟發式搜尋)和不需要環境的model-free方法(比如MC和TD)提供一個統一的論述框架。基於模型的方法依賴規劃(planning)而無模型的強化學習方法依賴學習(learning)。這兩種方式有很多不同也有很多相似點。特別的是這兩種方法都是以計算值函式為核心。更近一點的說兩種方法都是靠未來的事件來計算當前值函式的更新目標。這一章的目標是把規劃和學習的方法進行整合。

 

8.1 Models and Planning

模型(model)是指一個agent可以用來預測環境對於動作的反應的所有部分。有一些模型會產出所有可能性以及他們的概率,這種叫做分佈模型(distribution model)。另一種是每次根據概率值取樣產生一種可能性,這種叫做取樣模型(sample model)。比如在動態規劃中假設的模型就是一個分佈模型。分佈模型比取樣模型強的地方在於分佈模型也總是可以來產生取樣。但是很多應用中獲取取樣模型會更方便。

模型可以用來模仿或模擬真實經驗。給定一個初始狀態和動作,取樣模型可以產出一個可能的狀態轉移而分佈模型可以產出所有可能的狀態轉移和他們發生的概率。而給定一個初始狀態和策略,取樣模型可以直接產出一個整個的episode而分佈模型可以產出所有可能的episode以及他們發生的概率。所有的例子中模型都是用來模仿環境來產生模擬經驗的。

規劃(Planning)這個詞在這裡是指把模型作為輸入通過與模型環境的互動產生或者改進一個策略的計算過程。在人工智慧中有兩種方式來進行規劃。一種叫做狀態空間規劃(state-space planning),指的是從狀態空間中搜索出一個最優的策略或者到達目標的最優路徑,也就是本書包含的方法。另一種叫做計劃空間規劃(plan-space planning),也就是在計劃空間中搜索最優。比如進化演算法和partial-order planning。本書只考慮前一種。

本章要描述的統一框架是指所有的狀態空間計劃演算法都共享一種架構,同樣適用於本書講到的學習演算法。這個框架有兩個基本點,一是搜有的狀態空間規劃都通過計算值函式作為一個優化策略的關鍵中間步驟,第二是通模擬經驗來計算更新或者是backup操作。框架圖如下:

動態規劃演算法就很適配這個框架。這一章將會介紹其他一些符合這個框架的狀態空間搜尋演算法。學習演算法和規劃演算法的核心都是通過backing-up更新操作來估計值函式。區別在於規劃演算法使用的是模型產生的模擬資料而學習演算法是使用環境產生的真實資料。而他們都符合這個框架也就代表他們之間的很多演算法可以直接通用。學習演算法只需要使用經驗資料作為輸入,因此他們通常能夠同時用在模擬資料和真實資料上。比如下面介紹了一個簡單的基於一步表格Q-learning演算法以及從取樣模型產生的樣本上的例子,這個方法叫做random-sample one-step tabular Q-planning,和一步表格Q-learning演算法收斂條件相同。

除了這個框架之外,本章的第二個主題是規劃演算法在小的增量式步驟中的優勢。這個優勢使得規劃演算法能夠在任何時間點中斷或重定向,這是能夠高效組合規劃演算法以及學習演算法的關鍵要求。

8.2 Dyna: Integrated Planning, Acting, and Learning

因為規劃是通過線上與環境互動的,一些有趣的情景會發生。和環境互動獲得的新資訊可能會改變模型從而與規劃演算法交流。決策和模型的學習都是非常消耗計算力的操作,因此需要將當前算力分配給這兩個部分。首先來定義一個簡單的整合了線上規劃agent需要的所有函式的框架Dyna-Q。

在一個規劃的agent裡,真實經驗至少有兩個作用:一是用來改進環境模型,二是通過強化學習演算法直接進行值函式的更新。前一個功能叫做model-learning,後一個叫做direct reinforcement learning(direct RL)。他們的關係如右圖。真實經驗通過模型來改進值函式或者策略的方式叫做indirect reinforcement learning。兩種方法都有各自的優缺點。間接的方法能夠更充分利用有限的真實經驗因此在更短的迭代次數裡能獲得更好的策略。另一方面直接的方法更加簡潔而且不會收到模型偏差的影響。Dyna-Q框架包含了右圖中的所有部分,包括規劃,行動和模型學習以及直接RL,而且他們是同時進行的。模型學習的方法是基於表的而且是確定性的模型。在規劃演算法中,演算法只會取樣那些之前以及經歷過的狀態動作對,因此不會有問題。

Dyna型別的整體框架如下圖,Dyna-Q只是它的一個例子。中間的一列代表環境與智慧體的互動從而產生真實的序列。左邊的箭頭表示的是從真實的經驗中改進值函式和策略的直接RL,右邊的箭頭是基於模型的處理過程。從真實經驗中建立的環境模型給出模擬的經驗。search control代表的是為模型產生的模擬經驗選擇起始狀態和動作的過程。最後,在模擬經驗中直接應用學習演算法,把模擬的經驗當做真實經驗使用從而進行規劃。一般來說強化學習演算法都可以應用在模擬經驗和真實經驗中。學習和規劃的有很多的相同點,唯一的不同是經驗的來源。

理論上說,規劃、行為、模型學習和直接RL是同時發生的。Dyna-Q的演算法虛擬碼如下:

在Dyna-Q中,規劃和學習是使用完全相同的演算法。因為規劃也是增量式的過程,所以把它們組合起來很容易。規劃的過程一般是在後臺完成,模型學習也是一樣。隨著模型的改變,規劃演算法會逐漸計算出一個不同的行為方式來適應模型。

練習8.1 不能。雖然n步自舉的方法也可以進行一定的遠距離更新,但是相比於Dyna-Q中的規劃來說,更新值函式的速度還是慢很多。因為n步自舉依然是每一個狀態只計算一次,而Dyna-Q中每一個狀態都進行了多步的規劃與更新值函式。

 

8.3 When the Model Is Wrong

因為環境是動態變化的而且僅僅有一部分狀態被訪問過,或者是因為環境進行了變化或者因為模型是從沒有被良好學習的值函式來得到的,因此模型很有可能是錯誤的。因此有時候規劃過程會產生一個次優的策略。有時候規劃產生的次優的策略也會快速導致對模型偏差的發現與修正。

而更困難的情形是當環境變得比以前更好的時候,因為之前正確的策略不會再進行優化。這種情形下模型的錯誤有可能很長時間甚至永遠都不會被察覺。這個問題可以看成是另一種explore與exploit的矛盾。在規劃演算法中,exploration代表的是嘗試那些能夠改進模型的動作,而exploitation表示選擇當前模型下最優的動作。我們希望agent能夠發現環境中的變動,但是這樣會很大地降低效能。和以前一樣這個問題沒有完美的解決方案,但是簡單的啟發搜尋是很有效的。

Dyna-Q+演算法就使用了啟發演算法來解決這個問題。這個演算法記錄了每個狀態動作對上次訪問到現在經過了多少時間步驟,對於越長時間沒有訪問的狀態動作對,就表示這個動作對的轉移有可能改變也就是模型在此處錯誤的概率就越大。因此為每個動作對的轉移返回的反饋都增加一項額外獎勵,用來估計演算法來嘗試這些很久沒有被訪問的狀態動作轉移。

練習8.2  因為增加了額外的獎勵值

練習8.3 因為最優的路徑在後來會經常被訪問因此增加額外的獎勵效果很小,而在非最優的路徑進行訪問又只會得到更少的反饋,所以增加鼓勵探索的額外獎勵效果比一開始見小了。

練習8.4 模型改為每個狀態動作對有多個下一狀態動作對,計算他們的概率然後產生模擬資料。更新Q值的時候使用期望形式。增加額外的獎勵來鼓勵探索。

 

8.4 Prioritized Sweeping

上節介紹的Dyna的agent是隨機等概率的從以往訪問過的狀態動作對中選擇下一個產生模擬經驗的起始狀態。但是這樣往往不是最好的選擇,如果規劃能夠重點關注某些狀態轉移和更新會更好。在很多更大型的問題裡,狀態空間的數量太大,因此如果不能集中經歷更新那些重要的狀態可能就會非常低效。

例子中按時我們或許從目標狀態回退的搜尋可能會更好。但是顯然真實任務中我們不知道哪個是目標狀態,但是可以從哪些狀態值被顯著改變的狀態開始回退來進行更新。比如現在演算法觀察到了環境的一個變化,因此改變了某個狀態的值函式。這可能會導致很多其它狀態值的變化,但是隻有更新那些能夠直接轉移到這個狀態的狀態的值才是有效的。因此不斷地往前回推進行更新。這個想法被叫做規劃計算的backward focusing。

從被更新的狀態之前的狀態進行更新的想法會導致很多狀態動作對都需要被更新,但是它們也是有優先順序的。可以根據它們的優先順序來順序更新,這個想法叫做prioritized sweeping。這個優先順序可以使用一個每個狀態動作對下一個狀態的值函式變化程度表示。完整的演算法如下:

把這個演算法延伸到非確定性的環境中是很自然的。環境模型可以記錄每個狀態動作對下一個狀態並且計數,並且每次規劃過程中進行值更新的時候使用期望的形式就行。prioritized sweeping的一個限制是它需要使用期望更新,這在非確定性的環境中會浪費很多計算力在那些發生概率很小的狀態轉移上。而取樣更新可以將整個的backing-up的計算過程打碎成一個個狀態轉移,這也就使得它能夠重點關注那些比較重要的更新。seijen 和 sutton(2013)的論文采用了這個方法。這章介紹了回退法更新,還有別的集中更新狀態的方法比如forward focusing。

 

8.5 Expected vs. Sample Updates

之前介紹了規劃和學習演算法的結合,下面的章節會介紹其中的一個個組成部分。本屆介紹期望更新和取樣更新的相對優缺點。

值更新有一些層面上的不同點,集中在一步更新上有三個層面的不同:一、是執行狀態值更新還是狀態動作對值更新;二、是通過評估最優策略還是任意一個策略;三、使用的是期望值更新還是取樣值更新。這三個維度的不同產生了7種不同的演算法,如右圖所示。

在第六章介紹一步取樣更新的時候把它當做期望更新的替代。在沒有轉移分佈的時候,無法計算期望更新而可以進行取樣更新。這裡隱含的一點是說如果能計算期望更新那麼就優先使用期望更新。但是雖然期望更新計算出了不會有采樣誤差的更新目標,但是這個演算法同樣需要更多的計算力,而計算力是有限的。在非確定性環境裡這兩種演算法的區別非常大。期望更新的一大優勢是它的計算是精確的,正確性依賴於下一狀態值函式的正確性。而取樣更新需要更少計算。如果有足夠的計算時間,那麼期望更新的值函式往往比取樣更新更好,因為沒有采樣誤差。但是如果沒有足夠的計算時間那麼取樣更新會被優先選擇。在比較大型的問題中通常是沒有足夠的計算時間的。如果假設一個狀態動作對可能會轉移到b個新狀態中,那麼對於每個單元的計算力來說,是計算期望更新更好還是投入b倍的計算力來計算取樣更新更好呢?

一個簡單的實驗表明,對於相對比較大的b來說,取樣更新只需要採用一小部分期望更新需要的計算力就能夠使得值函式的誤差急劇減小。而實際的應用中取樣更新的優勢有可能會更大。取樣更新在使得當前狀態更新更加準確之後可能還會向前面的狀態更新傳遞這個結果。

 

8.6 Trajectory Sampling

本節比較兩種分配更新的方式。一種是經典的從動態規劃中來的方法,也就是遍歷整個的狀態空間。這個方法是病態的因為有的問題裡遍歷整個狀態空間是無法完成的。遍歷的方法對待每一個狀態都是等同的,分配相同的計算時間到每一個狀態上面。而第四章介紹過,DP演算法並不需要完全遍歷以及平等的對待所有的狀態。理論上可以使用任何更新的分配方式,但是實際上一般還是使用遍歷。

第二種是根據某些分佈來取樣狀態或者狀態動作對。可以選擇進行均勻取樣,比如Dyna-Q演算法,但是這回導致類似於遍歷的問題。另一種更好的方法是根據當前策略觀察到的分佈來進行更新。這個方法的優點是可以很簡單地產生分佈。也就是說演算法可以直接模擬產生整個的一個完整序列來對沿途的狀態或者狀態動作對進行值更新。這種產生經驗和更新的方式叫做trajectory sampling。也很難想到比這種方法更有效的on-policy產生序列的方式。trajectory sampling的方法優雅而有效。

不過這個方法是否有效呢?感覺上看這種方法比均勻取樣更好。書的第二部分會講到on-policy的方法在function approximation的時候有很大優勢。只關注on-policy產生的分佈有好處,比如會避開那些無效的狀態空間。但是也有壞處因為這樣會一遍遍的遍歷那些已經訪問了太多次的狀態。我們設計了一個實驗來驗證這個效果。例子中表明,根據on-policy方法產生的取樣在一開始時會帶來更快的規劃但是長期來看會變得很遲鈍。特別是分叉引數比較小而時間步驟比較長的時候這個特點更加明顯。

這些例子的結果表明在短期內,根據on-policy得到的取樣分佈能夠幫助演算法關注那些在初始狀態周圍的狀態。在長期來看,關注這些取樣分佈的狀態有可能會效果較差因為這些狀態已經有了比較正確的值。這些例子的結果可能不是總結性的但是也同樣表明了使用根據on-policy來得到的取樣分佈給比較大規模的問題能夠帶來很大的好處。

8.7 Real-time Dynamic Programming

Real-time dynamic programming或者叫RTDP是動態規劃演算法中Value Iteration演算法的on-policy trajectory-sampling的版本。因為和傳統需要遍歷狀態的DP演算法關係很近,所以能夠更加明顯地表現出on-policy trajectory-sampling的優點。RTDP演算法是一種非同步演算法,因此狀態值的更新可以使以任意的方式和順序進行。

如果trajectory可以只從某些特定的狀態開始,而且只關注對於一個給定策略的預測問題,那麼on-policy trajectory的方法能夠讓演算法完全跳過某些當前策略從任何起始狀態都不會到達的狀態。對於一個control問題來說,目標是找到一個最優策略而不是評估當前策略。而可能會存在某些任何最優策略從任何起始狀態都不會到達的狀態,所以也不需要為這些狀態找到最優動作。我們需要的是optimal partial policy,也就是一個在相關的狀態上最優但是對於不相關的狀態可以使任意動作或者是未定義動作的最優策略。

但是能夠找到這個最優部分策略的on-policy trajectory控制演算法,比如Sarsa演算法,是需要能夠遍歷所有的狀態動作對無限次的,無論狀態是否是相關的。這對於RTDP演算法來說也是一樣。這和評估的問題不一樣,如果需要收斂到最優的策略,那麼就不能夠在任何狀態或者狀態動作對上停止更新。對於RTDP演算法最有趣的結果是,對於某些滿足特定合理條件的問題來說,RTDP演算法不需要遍歷所有的狀態無限次,甚至不需要遍歷某些狀態就能夠找到在相關狀態中最優的策略。在實際產生的經驗或者模擬經驗中,RTDP演算法選擇貪婪的動作而且對所有當前狀態執行期望值更新。而且也可以在每一步驟中任意的更新一些狀態,比如每次都更新當前狀態的後幾個狀態。

對於滿足以下幾個條件而且任意選擇起始狀態結束狀態是目標狀態的任務,RTDP演算法能保證收斂到一個在相關狀態上最優的策略。這些條件是:一、每個目標狀態的初始值是0;二、至少有一個策略能夠保證有一個目標狀態從任意一個起始狀態開始都能夠到達;三、對於轉移到非目標狀態的轉移,反饋必須嚴格小於0;四、所有初始狀態值必須大於或者等於最優值函式(可以都設為0)。擁有這些特點的任務叫做stochastic optimal path problems,這個問題是通過最小化費而不是最大反饋來表示的。

RTDP演算法的另一個優點是隨著值函式趨近於最優值函式,agent用來產生trajectory的策略也趨近於最優策略。因為它總是與當前值函式保持貪心。傳統的value iteration方法可能會導致最優的策略比最優的值函式早很多產生。

傳統的value iteration演算法更新所有的狀態值函式,而RTDP演算法只會重點關注那些和問題目標比較相關的狀態。RTDP演算法通常只需要基於遍歷方法的value iteration方法的一半計算力就可以達到最優。

8.8 Planning at Decision Time

規劃可以通過兩種形式。一種是本章到目前為止所講的,使用規劃演算法在模型中得到的模擬經驗上進行優化策略和值函式的方式。在為當前狀態選擇動作的時候,規劃演算法已經對當前的很多狀態值函式造成了影響。這種規劃演算法並不是關注當前狀態,我們把這種叫做background planning。

另一種方式是每次遇到一個新的狀態時就進行規劃演算法,從而產生一個當前狀態的動作。最簡單也是最退化的方式是當只提供狀態值時,對基於模型預測的每個動作的下一個狀態值函式進行比較從而選擇一個最優動作。一般來說規劃會看的更遠幾步。不想前一種方式,這個形式的規劃演算法更加關注某些特定狀態。這種叫做decision-time planning。

這兩種規劃演算法的形式,一是使用模擬的經驗來逐漸改進策略和值函式,另一個是根據模擬經驗為當前狀態選擇一個動作,可以很自然地進行融合。但是他們一般是分開研究。就算是規劃演算法是僅僅在決策時執行,我們依然可以把它看為使用模擬經驗來更新值函式以及策略。只不過值和策略值與當前狀態和動作選擇有關,而且一般是在選擇了當前動作之後就進行拋棄。在很多應用中這不算是一個大的損失,因為很長時間內我們都不會返回同一個狀態。一般來說可能想要融合以下兩點,既要關注當前狀態又要存下規劃演算法的結果為了以後重複這個狀態時直接返回結果。decision-time planning在不需要立即反應的任務中很有用,如果每次採取動作的間隔很小,那麼就要使用background planning來立即把規劃的結果更新到值函式中去。

8.9 Heuristic Search

人工智慧中最經典的狀態空間規劃方法是一個decision-time的規劃演算法,叫做啟發式搜尋。啟發式搜尋中,對於遇到的每個狀態都會考慮接下來的幾個狀態。值函式的估計會用在搜尋樹的葉子結點並不斷回傳,和書中講的其它函式值計算的方法一樣。計算到在當前狀態值函式處為止。計算完了之後就會得到當前狀態的最優動作,然後這些值函式會被丟棄。

在傳統的啟發式搜尋演算法中,並不會通過改變值函式估計的方式去儲存backed-up計算的值。但考慮允許使用backed-up計算值或者其它方法的計算值來改變當前的值函式也是很自然的。某種程度上我們都已經使用了這個方法,比如greedy,\epsilon-greedy演算法和UCB方法都是一種啟發式搜尋,只不過規模比較小。因此啟發式搜尋演算法可以看作是在一步貪心策略演算法之上的延伸 。

更深的搜尋是為了得到更好的動作。如果有一個完全的模型和不完全的動作值函式,那麼進行更深的搜尋一般會得到更好的策略。另一方面更深的搜尋意味著更多的計算量,通常導致更慢的反應時間。

我們同樣不能忽略啟發式搜尋關注更新的最明顯的方式,那就是關注當前狀態。啟發式搜尋的有效性很大程度上依賴於它對於當前狀態以後有可能發生的狀態的關注和搜尋。正是因為這種對於儲存和計算資源的集中才導致了啟發式搜尋能夠這麼有效。

對更新的分佈可以通過相似的方式換成對當前狀態和它有可能的未來狀態的關注。啟發式搜尋的過程可以當初下圖的形式,並且自下而上進行值的計算。如果更新過程被這種形式組織而且使用了表格的表現形式,那麼更新的過程會和這種深度優先的啟發式搜尋一樣。所有的狀態空間搜尋都能被看成這種把很多單獨的一步更新的形式拼合起來的方式。所以更深的搜尋對於效能的提高不是由於使用了多步更新。而是因為對於更新狀態和動作以及對馬上將要發生的狀態的關注和集中資源。

8.10 Rollout Algorithms

rollout演算法是一種從當前狀態開始,基於應用在模擬序列上的蒙特卡洛控制的一種decision-time規劃演算法。這個演算法通過平均從當前狀態開始採取某個動作以後在某個策略下的模擬序列的反饋值來計算每個動作的值函式估計。當平均計算出的動作值到達一定的可信度的時候,就選擇執行估計值最大的那個動作。

和第五章講的蒙特卡洛演算法不同的是,rollout演算法不是為了估算出最優的動作值函式或者給定策略的值函式。而是產生為當前狀態和某個rollout策略產生每個動作的蒙特卡洛估計。作為一個decision-time planning演算法,rollout演算法每次計算完這些值函式的估計之後都會將它們丟棄。所以rollout演算法完成起來相對簡單,因為不需要去取樣每個狀態動作對的結果,也不需要估計整個狀態空間或者狀態動作空間的值函式。rollout演算法完成的過程類似於policy iteration或者value iteration。每次通過在當前狀態上計算出每個動作的估計值,在產生模擬經驗的後面的狀態中都跟隨rollout策略\pi而產生。因此在當前狀態計算產生最優的動作之後後面跟隨原定的策略,這就是一個新的最優策略,滿足GPI收斂至最優的條件。

換句話說,rollout演算法是為了優化當前的rollout策略而不是找到一個最優策略。在有些應用中,即使是rollout策略是完全隨機的,演算法也能夠產生不錯的效果。不過直覺上rollout初始策略越好,值函式估計就會越精準,而最後演算法產出的策略也會越好。

這裡也有一個經典的探索與利用的矛盾。因為對當前狀態動作值函式的估計需要一定量的MC模擬產生的經驗。而作為一個decision-time planning演算法,rollout演算法通常需要滿足一定的時間限制。rollout演算法計算量的問題可以通過一些手段來減輕:一,因為每個MC經驗是互相獨立的,因此每個MC經驗可以在獨立的處理器中並行產生。另一種方法是對MC經驗序列進行截斷,不是模擬到目標狀態而是在某個中間狀態停止,使用儲存的狀態值來進行值估計。第三是監視MC模擬過程,對不可能出現或者和已有情況很接近的序列進行提前剪枝。

我們不把rollout演算法當做是learning演算法因為我們並不會儲存一個長期的值或者策略。不過這個演算法也利用了強化學習演算法的一些特點,意識使用類似MCcontrol演算法的過程進行模擬互動,避免了遍歷狀態和對於狀態分佈的依賴,轉而使用的是取樣值而不是期望值。第二是利用了policy improvement的特點來根據當前值函式估計進行貪婪動作。

8.11 Monte Carlo Tree Search

Monte Carlo Tree Search(MCTS)演算法是一個最近的取得驚人成就的decision-time planning演算法。從基礎來說,MCTS演算法是一種上節講的rollout演算法,只不過添加了一種使用從MC模擬序列中累加值估計的方法來連續的指導模擬序列朝著更高反饋的序列進行。這個演算法有很多變種,16.6節會講解Alpha Go中使用的版本。

MCTS演算法每次遇到一個新的狀態都為它選擇一個對應的動作。作為一個rollout演算法,它的執行過程是一個迭代的過程。每次迭代都模擬產生從當前狀態執行到中止狀態的序列(或者知道discounting足夠小)。演算法的核心思想是連續地關注多個從當前狀態延伸部分開始的一些模擬序列。這些延伸是之前一些模擬中取得較高評估值的序列的初始部分。MCTS不是必須保留值函式估計或者從當前動作選擇到下一個選擇的策略,不過很多實現方式都是保持一些下一步執行時有可能有用的值函式。

對於大部分的這類演算法,模擬序列中的動作是通過使用一個簡單的策略產生的。這種策略和簡單些的rollout演算法中一樣也叫作rollout策略。就像其它網格MC演算法一樣,狀態動作對的值是通過從當前動作開始的反饋值的平均來進行估計的。MC值估計值為某些部分的狀態動作對儲存,也就是那些在幾步之內有可能會訪問到的狀態動作對。組成一個以當前狀態為根節點的樹,如下圖所示。MCTS不斷地通過增加根據模擬序列結果來看比較有可能被訪問到的節點到這棵樹上。每個模擬序列會穿過這個樹然後從某個葉子結點延伸出去。在這個葉子結點之外的部分通過rollout策略進行指導動作,在樹內部的狀態有另外的策略。對於樹內部的狀態我們至少有部分動作的估計值,因此可以根據這些動作值和一個策略選擇動作,這個策略叫做tree policy,能夠平衡探索和利用。比如可以利用\epsilon-greedy演算法或者UCB選擇規則。

一個基礎版本的MCTS演算法的迭代包括以下一些步驟:

  1. 選擇。從根節點開始,通過樹策略基於樹上節點的值函式來選擇動作從而穿越樹到達葉子結點。
  2. 延伸。在某些迭代中,樹從被選中的葉子節點開始被新增能夠從葉子結點使用非探索動作到達的一個或多個葉子結點。
  3. 模擬。從被選中的節點開始或者從新新增的節點開始,遵從rollout策略來模擬一個完整的序列。
  4. backup。模擬序列產生的反饋值通過返回上層來更新或者初始化在MCTS演算法迭代過程中附著在樹的邊上的動作值。對於這個樹之外的被rollout策略訪問的動作和狀態不會被儲存值。上圖也包括了從中止狀態計算模擬序列值函式的過程。

MCTS不斷地執行這四個過程知道沒有多餘時間或者其它計算資源耗盡。最後,根據這個樹中的積累資料和某些機制從根節點選擇一個動作。比如有可能選擇值函式最大的動作或者最多訪問次數的動作。到達一個新狀態之後演算法重新執行。有時候是直接從一個新的沒有葉子結點的樹的根節點開始,但很多時候會從之前的MCTS迭代中生成的樹中的某個節點再次開始。除了哪個節點的子孫節點,樹中其它的節點會被拋棄。

把MCTS演算法和本書中講的強化學習演算法結合起來看就能夠理解為什麼它會取得如此驚人的效果。MCTS演算法的基礎是以及蒙特卡洛控制演算法的一個decision-time 規劃演算法。這裡的MC演算法是利用前面介紹的rollout演算法生成模擬。所以演算法集合了線上形式、增量形式、取樣值估計和策略迭代的多個特點。而且還在它的樹的邊上儲存了強化學習演算法計算出來的取樣更新。這會讓MC產生的序列集中在那些初始部分與之前模擬的高反饋序列相同的其它序列上。更進一步的是,通過延伸樹的節點,MCTS有效的延伸了一個儲存部分狀態值函式的查詢表,也就是把記憶體分配給了那些之前產生的高反饋序列的初始部分。於是MCTS避免了全域性優化一個動作值函式的問題而且保留了使用過往經驗指引探索的優勢。

 

8.12 Summary

規劃演算法需要環境的模型。分佈演算法需要環境狀態轉移的概率分佈,取樣模型根據這些概率每次產生一個反饋值和狀態轉移。動態規劃需要狀態分佈是因為它使用了期望更新。而取樣模型是模擬與環境的互動需要的,而在模擬過程中像其它強化學習演算法一樣使用取樣更新。取樣模型的獲得更加簡單。

我們展示了規劃最優動作和學習最優動作之間令人吃驚的親近關係。所以學習和規劃演算法可以直接通過允許它們同時更新值函式來進行融合使用。而且,所有的學習演算法都可以通過將真實經驗改換為模型產生的模擬經驗轉移成規劃演算法。

同樣把增量式規劃演算法與執行動作和模型學習整合起來也很直接。規劃,執行和模型學習通過一種喚醒的模型互動,每個都互相產生對方需要用來更新自己的東西。沒有其它的必須的互動過程。最自然的過程是並行的非同步計算。如果程序必須共享計算資源,那麼可以使用任意方便或者高效的方式來進行。

這一章我們接觸了很多空間搜尋規劃演算法的變化的維度。第一個維度是值更新的規模變化。另一個重要的維度是更新的分佈,也就是搜尋的關注點。使用優先搜尋關注那些值函式最近更新的狀態。on-policy序列取樣關注那些在控制演算法下容易訪問到的狀態。這樣可以跳過某些不需要關注的狀態。

規劃可以關注那些相關的狀態比如在互動過程中真正訪問到的狀態。這種方式最重要的形式就是在決策時的規劃演算法,也就是選擇動作過程的一部分。傳統的啟發式搜尋也是一個例子。另外的例子比如rollout演算法和受益於線上增量取樣值估計和策略優化的MCTS演算法。