1. 程式人生 > >強化學習(RLAI)讀書筆記第五章蒙特卡洛方法

強化學習(RLAI)讀書筆記第五章蒙特卡洛方法

第五章:蒙特卡洛方法

和前幾章講的不一樣,蒙特卡洛方法不需要對環境進行完全的建模,而只需要經驗,也就是實際或者模擬的與環境進行互動的整個樣本序列,包括狀態動作和反饋資訊。從實際互動中學習並不需要對環境建模,而從模擬互動中學習也只需要能夠產生相應的轉移樣本而不是完整的環境狀態轉移概率分佈。而且很多的例子中產生相應的互動例子很容易,得到概率分佈卻很難。

蒙特卡洛方法採用平均樣本反饋的方法來解決強化學習問題。為了保證得到定義好的reward值,我們只在episodic tasks上使用蒙特卡洛方法。也就是假設每個任務都能分為一個個episode,每個episode結束以後才進行值更新和策略的改進。因此蒙特卡洛法是以一個episode為單位來計算,而不是以每一步(online)來計算。

和第二章的bandit問題類似,蒙特卡洛法用的也是為每個狀態或者狀態動作對平均反饋的方式。但是在這個方法中有很多個狀態,而且不同狀態之間相互聯絡,同時每個動作的選擇都在學習中,因此這個問題是非穩態且是associative search的。

為了解決這種非穩態,我們使用了第四章介紹的GPI框架。也就是在樣本反饋中計算值函式,同時對策略進行改進最終達到最優。

 

5.1 Monte Carlo Prediction

首先考慮在給定策略下估計狀態值函式的問題。狀態的值是從該狀態開始之後得到反饋的期望,一個簡單的計算方式就是將從該狀態開始的反饋值加起來求平均。隨著計算次數增加,最終平均值會逼近期望值。這個想法在蒙特卡洛法中一直得到應用。

假設給定了一堆在策略\pi下經過狀態s的序列樣本,我們想要評估在策略\pi下狀態s的值函式v_{\pi}(s)。每次轉移到狀態s都叫做對s的一次訪問(visit)。s有可能在樣本中被訪問多次,因此我們把第一次訪問s的時間叫做對s的first-vist。首次訪問蒙特卡洛法(first-visit MC method)把第一次訪問狀態s後得到的反饋值進行平均,而每次訪問蒙特卡洛法(every-visit MC method)是把所有訪問s後的反饋值進行平均。隨著訪問次數趨近於無窮,這兩種方法的估計值都會收斂至目標值。

練習5.1 因為最後兩步停止了要牌不會爆掉而且點數很大容易獲勝。 前面一直在要牌,容易爆掉。 在沒有11點的牌但是卻總點數大於12的情況下繼續要牌更容易爆。

練習5.2 不會,因為每個狀態只會經過一次。

DP方法需要完全瞭解環境建模,而且需要知道採取動作之後下一個狀態的轉移分佈,但是有的問題中很難去產生下一狀態的概率分佈。因此即使對於有環境建模的問題,蒙特卡洛方法只需要生成狀態序列的做法也是一個很大的優點。

對於蒙特卡洛方法來說,它的backup diagrams會是一條直線。因為每一個序列的狀態軌跡都只有所有可能的其中一條,因此它的backup diagrams是從根節點狀態開始,採取一個動作轉移到一個狀態一直到結束狀態。而不像是DP演算法中把所有的可能性都考慮到。

關於蒙特卡洛法估計值函式的另一個重要特點是,這個方法對每個狀態值的估計是獨立的。換句話說,蒙特卡洛法並沒有使用bootstrap。

而且蒙特卡洛法估計每一個單個的狀態值的時候,計算複雜性和整個狀態的數量無關。所以對於只關注某幾個狀態的時候蒙特卡洛法特別實用,這是蒙特卡洛法對比DP法的第三個優點。

 

5.2 Monte Carlo Estimation of Action Values

如果沒有對環境的建模,那麼評估狀態動作值函式相對於狀態值函式就會更有效。如果有了環境模型,那麼只需要狀態值函式就可以得到一個貪心策略,但是如果沒有環境模型,只有狀態值函式是做不到確定一個貪心策略的。因此我們的目標是估計q_{*},使用的是policy evaluation方法。

對於評估狀態動作值函式q_{\pi}(s,a)來說,計算方法和上節講的類似,只不過是把遍歷每個狀態改為遍歷每個狀態動作對。只不過這裡存在一個問題,那就是直接這麼評估狀態動作對,可能會導致有的狀態動作對永遠不會被訪問。但是為了選擇最好的動作,我們需要變數當前狀態所有的動作,而不只是當前選擇的動作。這就是之前第二章提到的保持explore的問題,為了解決這個問題有一個方法叫做exploring starts。這個方法是以一個狀態動作對作為互動的開始,而每一個狀態動作對都有可能作為開始,之後才遵循策略\pi。只要episode的次數足夠多,那麼最終會讓狀態動作值函式達到收斂。

exploring starts的方法有時候有用但不值得依賴。最好的方法是保證在一個每個狀態的每一個動作都有非0概率選擇到的策略下進行取樣。

練習5.3  同樣是一條線。

 

5.3 Monte Carlo Control

現在考慮用蒙特卡洛法用在control中,也就是逼近最優策略。依然採用的是DP演算法中提出的GPI的想法。其中policy evaluation使用的是前兩節講的方法。首先假設問題中有無限多個數量的episode而且都是使用exploring starts的方法。policy improvement是通過讓策略保持與當前狀態動作值保持貪心。也就是:

\pi(s)\doteq argmax_{a}q(s,a)

每次進行policy improvement都讓下一個策略\pi_{k+1}作為以q_{\pi_{k}}為基礎的貪心策略。Policy Improvement Theorem會保證最終策略收斂至最優策略。蒙特卡洛方法通過這樣的方式做到了在沒有環境建模的情況下收斂至最優策略和最優值函式。為了保證收斂我們做了兩個假設,一是保證每個episode都是用exploring starts開始,二是保證每次policy evaluation都能在有限步後計算完成。

為了讓演算法更通用,現在需要拿掉這兩個假設。這裡只考慮拿掉假設二。假設二中利用了為值函式的變化設定上限的方式。也就是兩次值函式之間的變化小於一個上限後即認為計算完成。只要變化上限設定的足夠小,那麼就能夠保證值函式能夠正確收斂。第二種拿掉假設二的方法就是我們不必在每次policy improvement之前都完全計算完成policy evaluation。value iteration就是一個例子。

對於蒙特卡洛方法而言,每次episode之後進行一次policy evaluation和一次policy improvement是很自然的。有一個很簡單的方法就是遵循這個方式,叫做Monte Carlo ES。

練習5.4 儲存一個訪問次數N並每次更新,然後把Q的計算改為增量式。

在Monte Carlo ES中,無論是遵循什麼策略,演算法對每次產生的狀態動作對的反饋都進行了平均。也就是說演算法最終一定會收斂到最優策略,因為只有達到最優時策略才會穩定不變。

 

5.4 Monte Carlo Control without Exploring Starts

接下來考慮使用Monte Carlo Control的第一個假設,也就是假設使用exploring starts。解決的辦法就只有考慮能夠遍歷所有可能的狀態動作對。有兩種情況,一種是on-policy的情況,另一種是off-policy。on-policy是指當前正在被evaluate和improvement的策略就是用來做決策的策略,而off-policy是指指導決策的策略與正在被評估改進的策略不是同一個策略。對於on-policy的問題就只能夠選擇評估和改進soft的策略。soft的意思是指在每個狀態s,採取每個動作a的概率都大於0,但是策略需要慢慢地接近最優的貪心策略。比如之前討論過的\epsilon-greedy演算法就是一種soft的策略。在所有\epsilon-soft的策略中,\epsilon-greedy演算法是最接近最優的貪心演算法的。

on-policy的蒙特卡洛控制依然是使用GPI的框架。沒有了exploring starts的設計就沒法直接在改進策略的時候選擇貪心的動作,但是GPI框架不要求策略必須是一個貪心策略,只需要這個策略越來越接近貪心最優的策略即可。在我們的演算法中,將策略最終改進至一個\epsilon-greedy的策略。

policy improvement theorem保證演算法最終得到的策略是所有的\epsilon-soft演算法中效果最好的。實際上演算法保證了每一步都會得到一個更好的策略,直到演算法達到最優。而且這個過程不依賴狀態動作值函式在每一步是如何計算出來的,不過依賴於計算結果的正確性。雖然我們只取得了所有\epsilon-soft策略中的最優策略,但是我們成功拿掉了ES的假設。

 

5.5 Off-policy Prediction via Importance Sampling

所有的強化學習控制過程面臨一個困境:演算法既要通過執行最優動作來學習動作值,但是有需要執行非最優的動作來遍歷所有的動作。有個很直接的方法是使用兩個策略,一個用來決策當前動作,而另一個被進行評估和改進。正在被評估和改進的叫做目標策略,決定執行動作的叫做行為策略。這個過程叫做off-policy學習。

這本書接下來的部分on-policy和off-policy都會考慮。首先考慮簡單點的on-policy演算法。off-policy演算法一般會有更大的方差而且更難收斂。但是off-policy會應用更廣泛且更厲害,因為on-policy可以認為是一種目標策略和行為策略相同的off-policy的演算法。

首先考慮對off-policy情況下的策略進行估計。假設有一個目標策略\pi和一個行為策略b,兩個策略不相同但是都是固定不變的。我們假設策略\pi中所有動作選擇的可能都要在b中也可能被選擇到,這個假設叫做收斂假設。根據這個假設,在b與\pi不一樣的時候,b的選擇一定是隨機的。而策略\pi往往是確定性的。

幾乎所有的off-policy都會用到一個叫做importance sampling的技術將一個分佈中得到的取樣用來評估另一個取樣的期望值。這個技術是根據狀態變化的軌跡發生在目標策略和行為策略中的相對概率來加權平均反饋值。這個相對概率叫做Importance-Sampling ratio。假設從時間t開始在一個策略\pi下得到一個序列A_{t}, S_{t+1}, A_{t+1},..., S_{T},那麼這個序列發生的概率為:

其中p是環境的狀態轉移分佈概率。而這個軌跡序列在目標策略和行為策略中的相對概率為:

因為我們想要得到目標策略的值函式,但是根據動作策略做動作得到的是動作策略的值函式取樣,使用了Importance Sampling ratio進行修正之後就可以得到目標策略的期望, 即E[\rho_{t:T-1}G_{t}|S_{t}=s ] = v_{\pi}(s)

假設不同episode時間下標統一,然後使用\tau(s)表示所有第一次訪問狀態s的時間步集合。那麼我們根據平均值很容易得到目標策略的狀態值函式V(s)\doteq\dfrac{\sum_{t\in\tau(s)}\rho_{t:T(t)-1}G_{t}}{|\tau(s)|},這種計算方式叫做ordinary importance sampling。還有另外一種求和的方式是使用相對概率係數進行加權求和,即V(s)\doteq\dfrac{\sum_{t\in\tau(s)}\rho_{t:T(t)-1}G_{t}}{\sum_{t\in\tau(s)}\rho_{t:T(t)-1}},這種方式叫做weighted importance sampling。

對於只有一個觀察值的時候,加權求和的結果是這個觀察值本身。所以這個方法的值函式期望是v_{b}(s)而不是v_{\pi}(s),因此統計上是有偏估計。相反的是不加權求和的結果期望是無偏的,但是它有可能很極端,也就是方差會很大。特別是有些情況比如軌跡序列本身和目標策略產生的序列很接近,但是相對概率是10,這樣就可能遠離期望的結果。正式的說就是,ordinary importance sampling的期望是無偏的,但是方差是有可能沒有上限的因為相對比值是沒有上限的。相反weighted importance sampling的方法期望是有偏的但是方差會逐漸趨近於0,即使比例有可能是無窮大。所以在實際應用中一般會選擇weighted importance sampling。不過ordinary 的方法很容易用到近似演算法中,第二部分會講到。

不過對於every-visit的演算法,這兩種估計演算法都是有偏的但是方差都會收斂到0。但是實際中還是使用every-visit更多,因為這樣不需要記錄某個狀態是否被訪問過。

練習5.5 10  5

練習5.6  q(s,a)\doteq\dfrac{\rho_{t:T(t)-1}G_{t}}{\sum_{t\in\tau(s,a)}\rho_{t:T(t)-1}}

練習5.7 ordinary 方差一開始就會很明顯的體現,weighted方法可能剛開始的時候前幾個例子的方差恰好不明顯。

練習5.8 依然會無限大   因為使用every-visit方法後每一項的方差更大,加起來也就更大。

 

5.6 Incremental Implementation

使用第二章講的增量式的方法也可以把蒙特卡洛預測法改寫成增量式的形式。對於on-policy來說和第二章講的方法沒有區別,可以直接使用。對於off-policy而言可能需要區分ordinary方法和weighted方法。不過對於ordinary方法來說改動也很小,只是把每次增量的部分改為使用相對概率係數修正後的版本即可。

對於weighted求和的off-policy的方法,需要進行一些不同的改變。假設我們有一個狀態開始的很多個返回值序列G_{1}, G_{2}, ..., G_{n-1}並且對應每個都有一個相對概率係數W_{i}(e.g, W_{i}=\rho_{t_{i}:T(t_{i})-1})。那麼該狀態的值函式估計定義為

V_{n}\doteq\dfrac{\sum_{k=1}^{n-1}W_{k}G_{k}}{\sum_{k=1}^{n-1}W_{k}}, n\geq 2。為了得到增量式的形式就必須計算每次的係數和,則增量形式寫為:

這個演算法本身是為off-policy下使用weighted求和準備的,但是使用on-policy演算法也可以使用,只需要把係數都寫為1。

練習5.9 略 5.10 略

5.7 Off-policy Monte Carlo Control

現在考慮第二種形式的蒙特卡洛控制演算法,也就是off-policy形式的控制演算法。off-policy分為目標策略和行為策略兩個策略,分開的其中一個好處是目標策略可以使確定性的,而行為策略可以不斷地取樣所有可能的演算法。策略無關的蒙特卡洛控制演算法利用了前兩節講到的off-policy求值函式的方法,這個方法要求行為策略在每個狀態執行每個動作的概率都大於0,因此行為策略需要是\epsilon-soft的。

下面的圖片中展示了演算法的虛擬碼,演算法基於GPI框架和weighted importance sampling用來逼近最優策略\pi_{*}和最優動作狀態值函式q_{*}。其中\pi \approx \pi_{*}是根據Q值得到的最優貪婪策略。Q是q_{\pi}的估計值。其中行為策略可以是任意策略,但是需要滿足能夠遍歷所有狀態動作對的要求。使用soft策略即可。策略\pi會在所有訪問過的狀態上逼近最優策略,而且在這期間行為策略b可以是變化的,即使是在一個episode中間變化。

這個演算法有個潛在的問題。演算法每次都是在一個episode的結尾進行更新,episode中所有的動作都是greedy的。如果裡面的動作有一些不是貪婪的,那麼訓練可能會變得很慢。目前還不清楚這個問題的嚴重性,不過使用下面的TD演算法可以解決。

練習5.11 因為目標策略是確定性的,因為分子永遠是1。

 

5.10 Summary

這章講述了從episode的取樣中學習值函式和最優策略的蒙特卡洛方法。這個方法相比DP演算法有三個優點:一、可以直接通過與環境的互動來進行學習而不需要建模。二、可以通過模擬或者取樣模型進行學習。三、可以很容易地只關注其中一些狀態的值函式。 可能還有第四個優點那就是蒙特卡洛演算法不使用bootstrap。

在設計蒙特卡洛演算法時使用了GPI框架,也就是一邊policy evaluation一邊policy improvement的方法讓值和策略都逼近最優。蒙特卡洛方法不需要知道環境的狀態轉移概率分佈,因此需要關注狀態動作值函式的估計。蒙特卡洛方法把PE和PI在一次episode結束之後進行交替進行,而且可以寫為增量形式。

保持足夠的探索是蒙特卡洛控制需要考慮的。exploring starts的演算法在模擬的時候可能有用,但實際應用的時候不太合適。另外的解決方案,在on-policy上是需要使策略一直是soft的,在off-policy上可以使用一個soft的行為函式而評估一個確定性的目標函式。

off-policy prediction是指在一個不同於目標策略的動作策略下評估行為策略的值函式。可以使用Importance Sampling的方法來把行為策略的反饋轉化為目標策略的反饋。ordinary importance sampling演算法使用簡單的加權反饋的平均,而weighted importance Sampling使用的是加權反饋的加權平均。ordinary方法方差大但是無偏,weighted法方差是有限的但是有偏,不過實際中常用weighted法。另外off-policy演算法仍然有一個未解決的難題。

本章的蒙特卡洛演算法和DP演算法主要有兩個不同,一個是MC演算法是從經驗取樣中直接學習不需要環境模型。二是MC演算法不使用bootstrap。兩個特點相關但是也可以分開。