強化學習導論 第五章 蒙特卡洛模擬
這一章講蒙特卡洛方法在強化學習中的應用。
在這一章,我們將接觸第一個用於估計value functions,並發現最優policies的方法。和前幾章不一樣的是,這次假設我們並非完全知道環境的動態資訊(轉移概率啦那些)。蒙特卡洛方法只需要經驗知識,即:來自線上或者模擬環境互動過程的樣本序列(包括狀態序列、動作序列、獎勵序列)。從線上的經驗中學習非常酷,因為它不需要任何關於環境動態性質的先驗知識,卻仍然可以獲得最優的行為表現;從模擬互動中學習也是一個很棒的辦法。儘管這個過程仍然需要一個模型,但這個模型只是用來生成樣本轉移過程,而不是生成DP演算法所必需的完整轉移概率資訊。令人驚訝的是:在很多情況下很容易按照想要的概率分佈生成樣本序列,然而卻很難獲得具體形式的概率分佈。
蒙特卡洛方法基於樣本返回值的平均化來解決強化學習問題。為了確保有定義明確的返回值概念,我們只在片段式任務上應用蒙特卡洛方法,也就是說所有的經驗都被分成片段,並且所有的片段最終都會結束。只有當一個片段結束了,value的估計值和policy才能改變。因此蒙特卡洛方法是基於episode為單位的,而非step。“蒙特卡洛”這個詞被廣泛用在利用大量隨機元素作估計的地方。在這裡我們用它來表示基於完全return平均值的方法(和下一章討論的從部分return中學習的方法相反)。
儘管蒙特卡洛方法和DP方法之間存在不同,但是DP方法的思想卻仍然可以遷移到蒙特卡洛方法。我們不僅需要計算相同的value function,實質上也是通過相同的方式得到最優解。正如在DP那一章一樣,在考慮第一個policy evaluation時,我們針對某個任意的policy
5.1 Monte Carlo Policy Evaluation
我們現在開始考慮使用蒙特卡洛方法,基於一個給定的policy學習state-value function。回憶一下某個state的value指的是從當前狀態開始的期望返回值--即長遠累計的discounted獎勵的期望值。從過往經驗資料估計該值的一個很明顯的方法,就是對所有訪問過該狀態之後的返回值進行平均化處理。隨著更多的returns被觀測到,其平均值最終會收斂於期望value--這就是蒙特卡洛方法暗含的思想。
具體來說,假如我們已知一個片段過程集合,這個集合中的每個片段過程都是依據policy 生成,並且都經過了state ,我們希望以此來估計,也就是在policy為 的時候,state 的value。一種名叫“every visit”的蒙特卡洛方法把整個片段集中所有訪問到狀態時的returns取平均,來估計的值。與之相對應的還有一種名叫“first visit”的蒙特卡洛方法,它則是把整個片段集所有第一次訪問到狀態時的returns做平均化處理,來估計的值。這兩種方法非常相似,但是在理論性質上略有不同。後者(“first visit” method)的研究更加廣泛,可以追溯到19世紀40年代,也是我們這一章的重點。我們也將在第七章再次討論"every visit"方法。First-visit MC的過程形式如下圖:
上述兩種方法隨著對狀態的訪問次數趨於無窮大,其最後結果都會趨於。這個結論很容易在first visit MC方法中看出來:在這種情形下,每一個return都是獨立同分布的的估計值。根據大數定律,這些估計值的平均值序列將會收斂於它們的期望value。每一個估計值本身都是無偏估計,它的誤差的標準差會依照下降,其中表示待平均的returns的數量。every visit MC方法在這方面不太直觀,但是它的估計值也會漸進收斂到。
[Example 5.1]
這裡的例子給出了21點,也就是blackjack,目的是為了說明為什麼在這個遊戲中不能用DP,而是要用蒙特卡洛思想。21點遊戲的規則大家自己瞭解,用蒙特卡洛不用DP解決這類問題的原因主要是model很難準確建立。在21點中,玩家和莊家手牌的狀態轉移方式有非常多的可能性,很難一一計算概率。然而我們卻很清楚的知道environment knowledge,這是很神奇的事情:我們明明知道很多環境的變化規則,但是卻往往得不到可以應用的transition probility。
另外,我們可否把反向圖的思想也用在蒙特卡洛演算法這裡呢?答案是可以的。反向圖的頂端根節點是當前待更新的,根節點以下的部分是所有可能的轉移狀態(葉子節點),這些節點的reward和value對頂端根節點的value更新有幫助。對於使用蒙特卡洛方法更新來說,根節點是一個狀態節點,之後就是沿著某個特定片段過程的所有轉移序列,最後是一個終止狀態。如下圖所示:
DP演算法和蒙特卡洛演算法的反向圖的不同之處在於:(1)前者顯示了所有可能的狀態轉移情況,而後者是顯示某個樣本片段中的轉移情況(這裡解釋以下:DP是考慮了所有的狀態轉移可能性,儘管這些可能性都還沒有發生;而蒙特卡洛是實實在在發生的某一種情形。可以用平行宇宙和現實宇宙的對比來類比)。(2)前者只是一步內的轉移情況,而後者是所有步驟的轉移情況。這兩種區別精確反映了這兩種演算法之間根本的差異性。
蒙特卡洛演算法一個重要的事實就是對每個狀態的估計值是相互獨立的。對某一個狀態的估計並不建立在任何其他狀態的估計之上,而DP就是這裡所說的不獨立--即對某一個狀態的估計建立在任何其他狀態的估計之上。換句話說,蒙特卡洛方法並不進行“bootstrap”。
特別的是,我們注意到對單一某個狀態的value估計值的運算開銷是獨立於狀態的總數的。這個特性使得蒙特卡洛方法變得尤其有優勢,特別是當我們只需要一部分狀態的value的時候。我們可以生成很多從這些需要的狀態開始的樣本片段過程,只對這些我們感興趣的狀態做returns的平均,忽略其他狀態。這也是蒙特卡洛方法的第三個優勢(前兩者分別是蒙特卡洛方法可以從實際經驗過程學習,也可以從模擬經驗過程學習)。
5.2 Monte Carlo Estimation of Action Values
這一節我們主要討論使用蒙特卡洛方法對Action Values,也就是的估計。首先有個問題是:為什麼要討論蒙特卡洛方法對Action Values的估計呢?這裡的決定性因素是環境model的有無。
分兩種情況來看:
<1> 有環境model。也就是我們知道環境狀態的轉移概率和reward。這樣的話,我們只需要往前多看一步,看看那個action可以得到最優的reward+next state組合(回憶貝爾曼方程)就行了,和DP中的做法一樣。這種情況下無需估計。
<2> 沒有環境model。這種情況下,我們不知道環境的轉移概率和相應的reward,也就是說我們沒辦法算那個貝爾曼方程右側的迭代。因此我們只能去通過直接估計每個action和state的結合會得到多大的value,以此來決定policy。這種情況下必須估計。
因此,蒙特卡洛方法中的一個重要目標,就是如何估計。如何呢?其實和前一節提到的估計的方法很相似,就是目標換成了。方法依然是我們熟悉的“every visit”和“first visit” 兩種。分別說一下:
(1) "every visit":這個方法關注整個樣本片段集合中所有在訪問狀態時選擇動作的returns,然後求平均值,以此來估計。
(2) “first visit”:顧名思義,這個方法只關注每個片段過程中第一次訪問狀態並選擇動作的return,然後求平均值,以此來估計。
這兩種方法隨著對每一對“state-action”訪問次數趨於無限,都會收斂到真實。
然而我們需要考慮一個嚴重的問題:在所有樣本片段集合中,很多“state-pair”對並不出現,比如當我在一個確定的policy下,有可能某個state下只出現有限的幾個對應的actions,其他的actions都基本不出現。這樣我們根本沒有returns去average,怎麼能估計到某些呢?
為什麼這個問題嚴重?因為我們之所以一開始討論估計,目的就是為了在面對某一個state時,沒有model的幫助,從所有的可能actions中選一個最優的。現在我們都不能保證所有的actions都被考慮到,這個目的自然也不能達成了。
這個問題就是普遍存在的“maintaining exloration”問題。在第二章提到過一點。其實就是應不應該在exploitation的同時也exploration的問題。那麼在這裡為了更好的估計,我們必須得確保一直進行exploration。如何做呢?一個直觀的方法,就是讓每個state-pair對都有一定的概率被選中作為每個片段過程的開始節點。這樣我們就能保證隨著片段樣本數量趨於無限,每個state-pair對都會被訪問到無數次。這是我們做的一個假設前提,叫做“exploring start”。
這個“exploring start”看起來解決了上述問題,但是解決得完美嗎?可以推廣到一般情況嗎?No,這個方法雖然有一定的作用,但是當我們需要直接從與環境的互動中學習策略的時候,就不那麼有幫助了。因為真實情況下我們是不能去指定開始節點的,如果真的出現了很多state-pair訪問不到,也沒辦法指定。那麼還有沒有解決方案呢?答案是肯定的。我們可以從policy下手,也就是在policy的evaluation過程中,只考慮那些對所有actions選擇概率都不為0的policy。在後面幾節會討論這種方法,但是現在先保留之前的“exploring start”假設。
5.3 Monte Carlo Control
做了前兩節的鋪墊,這一節我們來正是使用蒙特卡洛演算法獲得最優policies的近似。這也是自從DP那一章以來我們共同的目的。仍然要提到GPI(generalized policy iteration)這個詞,它出現在前一章DP中。這也說明用蒙特卡洛方法估計最優policies的方法流程和DP是非常相似的:先更迭value function使之逼近當前policy的真實value function,然後基於更新後的value function進行policy improvement,直到最終policy基本不再變化。流程圖如下:
需要注意一個點:中間不再是,而是,也就是action-value function。這個時候,我們仍然需要保證兩個假設前提。第一個:觀測到無限數量的片段過程;第二:保證“exploring start”。這倆前提保證我們可以為每個任意的計算出相應的。
接下來就是policy improvement。和之前的不同,當我們estimate的是時,就不需要額外的model來確定最優的action了,因為我們直接就可以根據下式來確定了:
這樣在每次policy evaluation完畢的時候,都可以根據來確定。又根據(4.2)提到的policy improvement theorem,可知每次得到的都是在整體上優於的,除非它已經是最優policy了。因此,通過上述流程,我們就可以在沒有model先驗知識的情況下,只通過樣本片段的歷史經驗,就可以最終得到最優policy。
然而還有一個小問題需要處理。讀者也許還記得我們之前設定的兩個假設前提條件,這兩個條件有效保證了結果的收斂性。然而,為了獲得更具實際意義的蒙特卡洛演算法,我們必須拋棄掉這兩個假設。現在我們集中考慮如何去掉“infinte number of episodes”假設。
其實上述“infinite number of episodes”問題也出現在DP中了(讀者還記得嗎,最後我們簡化成了value iteration)。有兩種方法解決這個問題:
(1) 設定一個極小誤差範圍,直到兩次policy evaluation的差別小於這個誤差,認為此次policy evaluation結束。這個方法可以有效保證收斂精度,但是需要的episodes數量不少,小規模問題還能行,大規模的就不可取了。
(2) 擯棄evaluation的完整性。其實就是使用value iteration的方式,把policy evaluation的episode數量減少到1個,每次evaluation一次之後,不管誤差有多大,都進行policy improvement。
目前我們得到的蒙特卡洛方法只保留了一個基本假設前提:“exploring start”,演算法虛擬碼如下:
上述這個演算法就叫做“Monte Carlo with Exploring Starts”,也就是“Monte Carlo ES”演算法。該演算法保證了一定會收斂到,且獨立於過程中的policy。
5.4 On-Policy Monte Carlo Control
上一節末尾我們講到目前的“Monte Carlo ES”演算法依然有一個小小的缺點,就是依舊需要一個“exploring start”的前提條件。那麼有沒有辦法來去掉這個前提呢?有兩種方法可以做到:一種叫做on-policy method,另一種叫做off-policy method。這一節先講第一種:on-policy method。
on-policy method有什麼特別的地方呢?它的一個重要特點就是非確定性。也就是說
on-policy method有很多種變體,其中一種就是我們在第二章“多臂賭博機”中討論過的 policies。在這個方法中,所有非greedy actions被選中的概率為,greedy actions被選中的概率為。屬於 policies其中之一,也是其中最接近貪婪演算法的那個。(注: policies指的是對於所有states和actions,,其中)。
為什麼要使用這種概率化的方式呢?因為如果我們每次都確定性地選擇最優的action來更新policy,那麼很可能有大部分的action-state pair都沒有在episodes中出現,這樣最後的average return也不合理。可以證明,通過選用policy,可以優於或者至少和其餘系列的policies一樣好。為什麼要強調這一點呢?因為非greedy actions被選中的概率並不確定,到底那一種最好是很重要的,這決定了最終會不會得到最優policy。證明如下:
令為的policy,也就是所有非greedy actions被選中的概率為,那麼對於所有:
簡單說一下第二行到第三行的推導,前面的都相同,只是比較
的大小。
根據的特點,,我們假設,為了公式清晰,令。易得到下式:
這裡假設(1)non-greedy actions有n-1個,greedy action有1個;
(2)且所有non-greedy的action-value都統一等於次大值:;
(3);代入
之後可以得到其等於
這樣就很明顯了,上式第三行的大於等於號成立。(證畢)
根據policy improvement theorem,可知。
再多說一句關於為什麼需要找到policies集合中最優的:因為在之前的policy improvement過程中,我們是確定性地選擇了唯一的greedy action,並證實了它是最好的policy。所以我們要確保在情形下,依然能夠切實地獲得policy的improvement,那麼就需要徹底找到一個最佳的概率值(最終是)賦予non-greedy actions,使該policy的最大。
最後給出這一節 on-policy 蒙特卡羅演算法虛擬碼:
5.5 Evaluating One Policy While Following Another (Off-policy Policy Evaluation)
這一節的問題很有意思。之前我們在estimate 或者時,需要根據目標policy--,生成一系列episodes,然後再進行policy的evaluation和improvement。現在問題來了,假如我們仍然想estimate 或者,然而給定的episodes缺不是依據或者生成的,而是依據一個不同的policy ,怎麼辦呢?這裡先給出幾個名詞:叫做目標策略(target policy),叫做行為策略(behavior policy),而從behavior policy生成的episodes中學習target policy的過程,叫做off-policy learning。
(我想提醒各位讀者的是,這裡引入的off-policy的思想非常重要,甚至在後面幾章都還有提及,是重頭戲,希望大家可以重視。同時,既然很重要,其難度也不小,所以也要細細品味其中的內涵)
首先,我們要問個問題:好端端的,我們已經在前幾節基本解決了使用蒙特卡羅演算法來estimate 並獲得optimal policy,為什麼這裡還要來談off-policy的問題。這就要從上一節的蛛絲馬跡中發現端倪。在上一節末尾,我們已經可以從的一類policies中找到最優的policy了,但是請注意限定詞“”。其實,我們最終得到的policy,是在妥協了“exploring start”這個假設下的最優policy。為什麼?因為我們必須需要這個假設,沒有這個假設,一切蒙特卡洛演算法的根基就無從談起,這些內容讀者們可以看上一篇,有詳細的介紹。
於是,為了滿足這個“exploring start”假設,on-policy方法就必須要一定概率地去選擇一些次優actions。這也就提出了一個問題:能不能不去妥協“exploring start”假設,還是用之前的greedy策略,每次就選最優的action呢?這就是為什麼要討論off-policy的原因。
在off-policy方法中,我們有兩種policy:一種用於產生episodes,是之前說的behavior policy,姑且叫做;另一種,就是target policy,它是依據episodes得到的value function,得到的greedy policy。behavior policy是已知的,target policy是未知的。為了能夠從生成的episodes中估計,必然是隨機的,也就是,因為必須確保中的所有actions在中都出現。卻可以是確定性的,因為我們想得到完全的最優解。也就是說,把exploration的任務交給,讓它徹底地exploration,而從它產生的中,通過某種方式,使得可以保持徹底的greedy。
(高能預警,下面的這部分自我感覺比較難懂,但是儘量說明白。)
首先我們給出兩個概率表示式,如下:
逐一分析:表示第個episode序列;大寫的和小寫的為了區分在策略和策略下的序列;這兩個式子分別表示在策略和策略下,第一次訪問到狀態s之後的兩個相同序列的發生概率,注意是相同序列。假設把從state開始觀測到的return記作,也就是說這個是在behavior policy下觀測到的,如果我們想要根據這個return來estimate,就需要滿足下列式子:
這裡需要特比說明的有三點:第一,為什麼求和?這個好解釋,因為蒙特卡洛方法就是要作多次returns之後的平均;第二,為什麼要求?這個原因要回顧一下上面的兩個概率表示式。我們這麼來想:假設有兩個事件A和B,已知A發生的概率為,B發生的概率為,現在又已知A的某個相關變數,那麼怎麼求B的那個相關變數呢?其實這裡A的相關變數就可以看成是,B的那個相關變數就是要求的,兩者概率的相對比例和兩個相關變數的相對比例是相同的。第三點,為什麼要除以,這個也好解釋,為了歸一化。
好了,還有一個問題,怎麼得到?這個相對好解決:
要注意這裡為什麼最後可以約掉,是因為前面強調的相同序列。只有在相同序列中,兩種策略下的和才均相同,這樣才相同。從另一個角度看,如果不直接求兩者的相對比例,而是去分別求出和,再試圖相除,就做不到。因為蒙特卡洛演算法面對的問題往往是不知道任何環境動態性質的,也正是因為我們沒有這麼做,才恰好利用了相同序列可以消掉的性質,解決了求這個問題。
5.6 Off-Policy Monte Carlo Control
有了上一節的鋪墊,這一節我們就可以看一下真正的off-policy 蒙特卡洛演算法了。重新回顧一下Off-Policy的思想:使用型別的behavior policy來生成episodes,這些episodes經過了充分的exploration;從這些episodes中按照蒙特卡洛的“every visit”或者“first visit”方法計算,然後根據來計算target policy的。off-policy的優點是分離了exploration和greedy action‘s choice這兩個過程,而之前在on-policy演算法中,它們必須相互妥協,使得最終效果不是很好。
程式應該怎麼寫呢?以下給出了虛擬碼:
解釋一下虛擬碼中的幾個重點:首先是小括號(b)那一句,latest time的含義,指的是,在這個時間點之後,所有的,也就是說只有這個時間點之後的序列,才能被用於計算target policy的,為什麼?請讀者結合前面的內容思考。然後是(c)那部分,為什麼?因為在時間點之後的序列,兩種策略的動作選擇都是相同的,也就是說,因此分子是1。
這種方法是完美的嗎?並不盡然,一個潛在的問題就是每個episode可利用的部分只有尾部,也就是隻有在時間點之後的序列,即最後一個non-greedy action之後,才可以被用來更新。那麼如果non-greedy actions特別多,會使得學習過程很緩慢。這個問題的嚴重性如何評估,需要進一步商榷。
5.7 Incremental Implementation
這一節主要講的就是一個小的trick,回想一下第二節中討論的多臂賭博機問題,那裡提到了把return寫成遞增的形式。這一節也是討論如何通過某種方式,把off-policy方法中的下式:
寫成遞增的形式。這樣寫有個好處就是可以省記憶體和計算時間,因為隨著episodes數量的增加,如果按照原寫法計算,會不斷增加記憶體的負擔,也會不斷增加計算量。而寫成遞增的形式,則無論episodes數量如何增大,我們始終只需要儲存兩個變數:原和增量,就可以不斷更新return了。
以下是數學推導,有興趣的可以一看:
令 ,那麼上式的 可以寫成以下形式: ,於是 令 那麼 最終可得:
5.8 Summary
按慣例,需要總結一下。蒙特卡洛方法的主要思想就是從過往的實際經驗中學習策略。這些過往經驗以若干獨立的樣本片段給出。這種獨特的思想使蒙特卡洛方法擁有DP所不具備的三大優勢:
(1)不需要環境的動態model。實際環境的model有時很複雜,很難準確建立。
(2)可以通過模擬樣本片段來使用。很多情況下,精確的轉移概率模型很難確立,但是往往很容易模擬樣本的走勢。
(3)可以有選擇地專注於真正重要的一部分狀態集合。
還有一個優勢在後幾章將會講到,當環境的馬爾科夫性質不能被嚴格滿足時,使用蒙特卡羅方法比使用DP受到的影響小(這一點我暫時很難給出確切的說明,在後幾章或許可以說的更明白一些)。這是因為蒙特卡洛方法不進行bootstrap,而DP需要bootstrap。
這裡要說明一下bootstrap的含義:在統計學中,bootstrap常常表示在有些的樣本中進行多次有放回抽樣,以獲得足夠估計總體的樣本數量。在這裡指的是有沒有通過估計的方法來引導計算,也就是自舉。DP演算法中,每次value的更新都需要之前的value估計值,而蒙特卡洛演算法中就不需要這些。
蒙特卡洛演算法的基本模式依然是GPI,先policy evaluation,然後policy improvement。其核心思想則提供了另一種policy evaluation的方法:不用model來遞迴計算所有可能性,而是對真實樣本片段經驗過程的returns平均化。我們通常估計而不再是,因為前者可以保證在沒有model的情況下也能進行policy improvement。另外,蒙特卡洛演算法也可以寫成增量形式(前一節內容)。
蒙特卡洛演算法中,保證足夠的exploration是最需要注意的關鍵點。因為如果只是選擇當前對應的最優action,那麼將會導致很多其他的actions永遠沒機會選到。一個解決方案是“exploring start”,這個方案在模擬產生episodes也許可行,但是在從真實經驗中學習時就不可行了,因為我們無法控制start point。於是分化出了兩種學習方式:on-policy和off-policy。on-policy方法一邊exploration一邊在此基礎上選取最優解;off-policy則徹底把exploration和policy improvement過程徹底分開:更徹底地exploration,更徹底地選擇greedy actions,最後得到的optimal policy甚至和behavior policy沒有任何關係。
最後說一下蒙特卡洛演算法和DP演算法的不同:第一點:前者可以從樣本經驗學習,也就是說,它不需要任何準備模型的過程,可以直接在真實情形下學習,而後者必須有一個精確的模型;第二點:前者不需要bootstrap,也就是不基於其他value estimates來更新某個value,後者則是遞迴更新。
在下一章,我們會討論這兩種演算法的某種意義上的結合體:既從經驗中學習,又進行bootstrap過程。