1. 程式人生 > >《強化學習Sutton》讀書筆記(七)——列表法的計劃與學習(Planning and Learning with Tabular Methods)

《強化學習Sutton》讀書筆記(七)——列表法的計劃與學習(Planning and Learning with Tabular Methods)

此為第八章 Planning and Learning with Tabular Methods

在上述章節中,我們已經看到了DP是基於模型 (Model-Based) 的,而MC和TD是模型無關的 (Model-Free) 。基於模型的方法中,Planning(下文定義這個詞)是最主要的一步;而對於模型無關的問題,Learning是最核心的步驟。Planning和Learning有很多異同點。比如最大的相同之處就在於它們都需要通過通過回溯的方法,計算值函式,再得到策略。

模型和計劃

模型就是p(s,r|s,a),這是之前已經提到過的。如果

p(s,r|s,a)有依概率分佈的一組非零值,那麼這樣的模型被稱為分散式模型 (Distribution Model) ;否則,如果是確定性的,那麼模型被稱為取樣式模型 (Sample Model) 。(無論哪種)模型都可以被用來模擬 (Simulate) 得到經驗。

Planning是以模型為輸入,通過和environment互動,得到或提升策略的計算過程。注意它和Learning的不同主要在於輸入,Learning的輸入是一系列真實實驗的experience,而Planning則是模型,再通過模型得到模擬的experience。所以Planning的流程是:

Planning的過程

這也可以看到,其實對於策略生成或提升部分,Planning和Learning其實是幾乎一樣的,我們可以用Learning的演算法替換掉Planning中最重要的值函式更新步驟。我們以一個隨機取樣的單步列表法Q-planning演算法虛擬碼為例:

隨機取樣單步列表法Q-planning虛擬碼

可以看到,除了通過一個model(而非互動)得到下一狀態外,Planning和Learning沒有什麼區別。

Dyna:綜合Planning,Acting和Learning

Planning要求以模型為輸入,那麼如果模型未知,手頭只有experience怎麼辦呢?我們就必須通過這些experience生成模型。考慮到時間代價,我們不可能一次性地生成模型再Planning,必須隨著experience的增加,動態地更新模型。因此,對於給定的experience,我們就有兩種方式來得到值函式(或者說策略,因為從值函式可以快速得到策略),一是直接Learning(也稱為直接法),二是先猜測模型,再Planning(也稱為間接法),如下圖所示:

兩種得到最優策略的方法

這兩種方式各有優劣。間接法通常可以在experience數量有限的情況下更加充分地利用它們,得到更好的策略;直接法更加簡單,而且間接法有可能模型本身有偏差。它們兩者誰更優是一個沒有定論的問題。

Dyna是一種把它們綜合起來的方法。它的思路如下圖所示:

Dyna圖示

可以看到,真實實驗的experience一方面直接由Learning得到值函式或策略,另一方面生成了模型,再由模型大量產生模擬的experience,通過Planning得到值函式或策略。實際上,很多時候Planning和Learning的演算法是一致的,所以實際上就是通過模型增加了experience數量,然後對它們一起Learning/Planning。

比如我們以Dyna-Q演算法為例。它的虛擬碼如下:

Dyna-Q虛擬碼

可以看到,(a)-(c)步就是按照當前策略得到取樣,(d)步就是非常正常的Learning演算法,(e)步是這裡的重點,它採取了取樣式的模型思路,因此認為最後一次產生的SR就是模型(S,A)對應得到的結果,即p(S,R|S,A)=1,所以直接把這個結果存下來作為模型;(f)步就是在(e)步的模型基礎上,模擬n次得到n個新的結果,用Planning的演算法(在此例子中和Learning完全相同)用來再次改進值函式。

我們先來看一個使用Dyna-Q的例子,這是一個普通的走迷宮,不使用Planning,使用Planning走5步和使用Planning走50步的結果如下所示:

不同次數的Planning的對比

結果初看令人震驚。不使用Planning需25個episode收斂,而5步和50步的Planning則分別只使用了5個和3個episode就收斂了。不過我個人認為,實際上沒有這麼大的差距,比如50步的Planning實際上每個episode的時間要比沒有Planning的長很多。不過無論如何,為何Planning可以減少episode的數量呢?書本中對比了沒有Planning一步後的策略圖和50步Planning一步後的策略圖,如下所示:

有無Planning的對比

在沒有Planning的方法中,對於第一個episode,由於除G的位置其他位置的Q都是隨機的,R都是0,所以episode除了最後一步,其他步驟對值函式都沒有幫助;對於第二個episode,只有G和G的上一步的R或者Q是不隨機的,所以又多了一步;……以此類推,幾乎每個episode都只能多出一個新的有效的Q。在Planning50步的方法中,對於第一個episode,一樣,除了G以外其他位置的Q和R都是沒有用的,所以,只有最後一步的Q得到了有效的更新;但是,對於第二個episode,由於第一個episode記錄下了模型,雖然對於S附近的模型可能仍比較亂,但對於G附近的模型,已經不太亂了(因為最終成功地走到了G),因此這部分模型幫助第二個episode中,G附近的行為快速地實現了有效的價值提升;這部分G附近的行為價值提升了,又進一步地促進距離G更遠的行為價值提升,所以它們快速傳播開,僅通過一個episode就能完成很大區域的策略制定。因此,雖然每個episode中Planning大大增加了時間,但考慮到它節省了沒有Planning時每個episode大量浪費前面步驟的現象,因此總時間不一定會更長。但它是否一定能節省時間,我還不太明白。

當模型錯誤的時候

在上一節的例子中,(估計出來的)模型的改變比較溫和,尤其在第二個episode之後,模型幾乎總是能被填上正確(符合最佳策略)的值。但這不是常態。模型是可能出錯的,比如環境本身隨機性很強,因此只有很少的樣本被觀察到;比如值函式是使用函式估計的(這是以後的內容),而估計函式不夠合理;再比如環境是不斷變化的,而新的最佳行為還未被觀測到。當模型出錯時,Planning可能會算出一個區域性最優的策略。

有的時候,區域性最優的策略能夠很快檢測到模型的誤差,從而重新探索找到最優解。這種情況往往發生在環境變化導致了最優策略變差的情況下,因為這樣原策略會發現自己行不通了,從而去尋找更好的方案。以一個走迷宮的例子來說明:

環境改變的例子1

在這個例子中,1000個時間片內,Dyna-Q+(下文介紹)和Dyna-Q都趨向於(平行的)直線,表示它們已經找到了(相同的,在這裡也是最佳的)收斂的策略;1000個時間片後,環境發生了變化,原來最佳的策略突然不可行了,所以兩種方法都陷入了一定的困境(曲線斜率幾乎為0),但也同時開始探索,所以最終它們都找到了新的最佳策略。

在這種情況下,演算法能感受到環境變化並重新發現最優解。然而,如果環境變化產生了新的最佳策略,而以前的策略也仍然可行,那麼這時就很難重新收斂到新策略了。以另一個走迷宮的例子來說明:

環境改變的例子2

3000個時間片後,Dyna-Q沒有感受到環境的變化,繼續開發原來的策略。這又回到了最初的explore/exploit的這一強化學習永恆矛盾中。Dyna-Q+之所以能夠發現新的策略,因為它在演算法中經驗性地增加了探索。Dyna-Q+認為,如果我們長期沒有經過某個狀態,那麼這個狀態的模型發生變化的可能性就越大。因此,為了激勵對這些長期沒有采納的行為,Dyna-Q+為它們增加了獎勵,即在原獎勵的基礎上提升κτ,其中κ為係數,τ為連續未訪問的次數。通過這樣的方式增加了探索的代價,但也在需要探索的時候帶來了明顯的收益。

帶優先順序的掃描

在第二節中對比沒有Planning和50步Planning時,不難注意到50步Planning中其實也浪費了不少了步數。在第一個episode中,只有最後一步的Q得到更新;在第二個episode中,必須要先更新倒數第二步的Q,再倒數第三步,……以此類推,才能得到如上圖的結果。否則,如果運氣不好,每次Planning總是在更新那些無法更新的狀態,那麼50步Planning的方法將退化為沒有Planning的方法。這啟示我們應該優先更新那些停止狀態附近的狀態,或者更廣泛地說,那些得到更新的狀態的上一步狀態。

用帶優先順序的掃描改進Dyna-Q,得到如下的虛擬碼:

帶優先順序的Dyna-Q虛擬碼

在虛擬碼中,P表示更新的幅度,當P小於閾值θ時,就不執行迴圈了(因為PQueue為空),無謂的Planning被取消,退化成了沒有Planning的方法;當P大於閾值時,則從(S,A)出發向前回溯,將它們加入到PQueue中,再迴圈從PQueue中取出狀態進行更新。帶優先順序的Dyna-Q大大提升了效率,它和普通Dyna-Q相比如下:

帶優先順序的Dyna-Q和不帶優先順序的Dyna-Q對比

按期望更新和按取樣更新

在前面的章節中,我們提出了很多不同的值函式更新演算法,它們主要可以從三個維度進行分類,第一,狀態值函式還是行為值函式;第二,最優策略還是隨機策略;第三,基於期望更新還是基於取樣更新。前兩個維度可以讓我們把更新物件分成四類:vπ,v,qπ,q。再加上最後一個維度,我們可以一共分出八類的更新方法,如下圖所示(有一種方法不存在):

三個維度七中更新方法回溯圖

Planning的方法可以和任意一種方法做結合,比如之前的Dyna-Q是和基於取樣的q做結合。

在之前介紹基於取樣的更新方法時,我們把基於取樣方法視為基於期望方法的替代品,因為當模型缺失時,基於期望的方法是不可能的。這隱含著一種基於取樣方法不如基於期望方法的感覺。這是對的嗎?基於期望的方法當然可以避免一些取樣帶來的偏差,但同時也意味著巨大的計算量。如果每個狀態的後繼狀態只有1個,那麼取樣法和期望法是一致的;如果每個狀態的後繼有多個,比如平均b個(定義b分支系數 (Branching Factor) ),那麼期望法由於需要累加求期望,因此複雜度是取樣法的b倍。因此,我們可以認為做了一次期望更新,在時間上也可以做b次的取樣更新。

如果我們時間充裕,足夠完成一次期望更新或b次取樣更新,期望更新當然優於取樣更新(因為沒有采樣偏差)。但實際問題中,我們常常沒有時間進行b次取樣更新,也沒有時間進行一次期望更新。下圖給出了一個取樣更新和期望更新在時間和效果上的比較。

取樣更新和期望更新的比較

這張圖的橫座標代表取樣次數(的時間),可以看到,當這個時間小於b次時,期望更新沒有完成,因此誤差一直是(單位)1;當時間大於b次時,期望更新完成了,因此誤差一直是0。對於取樣更新,在b等於2的時候,取樣次數只可能是1或者2,因此曲線從中間的b/2處開始;類似的,取樣更新曲線的起點總是在1/b處。可以看到,當我們的時間足夠取樣b次時,期望更新總是最優的;但對於b很大的情況,我們實際上可以採比b小的多的樣本數量,也能達到類似的精度,這樣就大大節省了時間。因此,對於不同問題,視其複雜程度,可以選擇不同的更新方法。

按軌跡取樣更新

本節我們比較兩種更新的分佈。第一種是古典型的取樣更新,它要求掃描整個狀態(或行為)空間,並在每次更新中更新每個狀態(行為)的值函式。這種方法在問題規模巨大時就會遇到困難,因為我們可以接受的時間範圍內,可能一次更新也無法完成。因為在一些大規模問題中,絕大多數的狀態或者行為是幾乎不可能或者不應該發生的(也就是說在極差的策略下才會發生),更新這些值函式對最優策略幾乎沒有幫助。而掃描這樣的空間時我們卻平等地看待它們,造成了極大的浪費。

第二種方法是基於分佈進行取樣。取樣可以是完全隨機均勻的,比如Dyna-Q,但這樣就和古典型方法區別不大了。更好的方法是在一個On-Policy中,一邊按照策略得到取樣,另一邊立刻更新,因此更新的值函式往往分佈在一次取樣的軌跡附近(比如在迷宮中按照一條取樣的路線前進,那麼只有這條路線附近的值函式被更新了),因此我們把這種方式稱為經驗生成 (Generating Experience) 按軌跡取樣更新 (Update Trajectory Sampling)

幾乎沒有比基於On-Policy取樣分佈來更新 (On-Policy Distribution of Update) 更好的方法了。直覺上它就是有效的,比如在下棋時,我們只會研究幾種最有可能的下法,而非全域性隨機走。在書本第二部中,隨著對值函式應用函式進行估計,它將更加有用。

通過實驗我們可以比較On-Policy的取樣和隨機取樣,它們的區別是,On-Policy從固定的狀態開始,然後按照ϵ-貪心演算法一路模擬下來,得到取樣結果,並走一步就更新;隨機取樣從任意狀態開始,也走一步就更新。這樣,它們就僅在取樣分佈上不同了。它們的結果如下圖所示。

On-Policy取樣和均勻取樣

可以看到,分支數量b越小,狀態(或行為)空間越大,則On-Policy方法收斂越快。沒有看懂出現這種現象的原因,尤其不明白為何uniform最終總是比On-Policy要大。

實時動態規劃

實時動態規劃 (Real-Time Dynamic Programming, RTDP) ,是一個On-Policy基於軌跡取樣的值迭代動態規劃法。和當初的值迭代一樣,它按如下的方式進行狀態值函式的更新: