1. 程式人生 > >無模型學習(MC、TDL)

無模型學習(MC、TDL)

上一節講的是在已知模型的情況下,通過動態規劃來解決馬爾科夫決策過程(MDP)問題。具體的做法有兩個:一個是策略迭代,一個是值迭代。

從這一節開始,我們將要進入模型未知的情況下,如何去解決MDP問題。 模型未知,即狀態轉移概率 PssaP^a_{ss′} 這些我們是不知道的。所以我們無法直接利用如下Bellman方程來求解V和Q值得到最優策略。 在這裡插入圖片描述

所以,為了能夠從環境中學習,我們需要讓agent與environment互動,得到一些經歷(樣本)。然後通過這些經歷來進行策略評估與策略迭代,從而最終得到最優策略。

這種做法的理論是從蒙特卡羅方法中來的。所以我們先講蒙特卡羅學習。接著從蒙特卡羅的缺點出發,進一步講解了時序差分學習以及λ時序差分強化學習。

Monte-Carlo Learning(蒙特卡羅學習)

蒙特卡羅方法又叫做統計模擬方法,它使用隨機數(或偽隨機數)來解決計算問題。 比如下圖,矩形的面積我們可以輕鬆得到,但是對於陰影部分的面積計算困難。所以為了計算陰影部分的面積,我們可以在矩形上均勻地撒豆子,然後統計在陰影部分的豆子數佔總的豆子數的比例,就可以估算出陰影部分的面積。

在這裡插入圖片描述

對於無模型強化學習,雖然我們不知道狀態轉移概率P,但是這個概率是真實存在的。我們可以直接去嘗試、不斷取樣,然後會得到獎賞,通過獎賞來評估值函式。這個想法與蒙特卡羅方法的思想是一致的,我們可以嘗試很多次,最後估計的V值就會很接近真實的V值了。

episode

episode就是經歷,每條episode就是一條從起始狀態到結束狀態的經歷(路徑)。 在這裡插入圖片描述 首先我們要得到的是某一個狀態s的平均收穫。所以我們說的episode要經過狀態s。所以上圖中第二條路徑沒有經過狀態s,對於s來說就不能使用它了。而且最後我們episode都是要求達到終點的,才能算是一個episode

在這裡插入圖片描述

蒙特卡羅學習是指在不清楚MDP狀態轉移概率及即時獎勵的情況下,直接從經歷完整的Episode來學習狀態價值,通常情況下某狀態的價值等於在多個Episode中以該狀態算得的所有收穫的平均。 在蒙特卡羅方法中,計算狀態s在每一個樣本中的回報的均值分為first visit 和every visit兩種方法。

first visit: 在計算狀態s處的值函式時,只利用每次實驗(episode)中第一次訪問到狀態s時返回的值。如上圖所示,計算s出的均值只利用了G11( G表示從s開始一直到終點的所有R之和 ),因此計算公式如下: 在這裡插入圖片描述 every visit : 在計算狀態s處的值函式時,利用所有訪問到狀態s時的回報返回值。即: 在這裡插入圖片描述

所以,蒙特卡羅學習就是指不基於模型本身,而是直接從經歷過的episode中進行學習,通過不同episode的平均收穫值替代價值函式

Monte-Carlo Policy Evaluation(蒙特卡羅策略評估)

蒙特卡羅策略評估使用多個episodes的平均獲得值來代替這個狀態價值函式。 在這裡插入圖片描述 N(s)表示狀態s出現的次數。每次狀態s出現,N(s)加1。

上面的做法需要等到所有的episodes都經歷完了,再去計算V(s)。 其實可以使用Incremental mean(累進更新平均值)。具體的做法就是: 對於每來一個episode:S1,A1,R2,S2,A2,...,St,At,Rt+1,...,SkS_1,A_1,R_2,S_2,A_2,...,S_t,A_t,R_{t+1},...,S_k 對於episode裡的每一個狀態StS_t,有一個收穫GtG_t。每碰到一次StS_t,使用下面的式子計算狀態的平均價值V(s): 在這裡插入圖片描述 在這裡插入圖片描述

Temporal-Difference Learning(時序差分學習)

TD Learning中會把GtG_t寫成遞迴的形式。這樣,每走一步都可以更新一次V。 而蒙特卡羅中,卻需要走完整個episode,才能得到GtG_t,從而更新一次V。 蒙特卡羅學習方法的更新是這樣的: 在這裡插入圖片描述 在TD learning中,演算法在估計GtG_t時,用的是離開該狀態時的即時獎勵Rt+1R_{t+1}與下一個狀態St+1S_{t+1}的預估狀態價值乘以折扣因子γ組成:(用目標值Rt+1+γV(St+1)R_{t+1}+γV(S_{t+1})代替GtG_t 區別: 蒙特卡羅每次更新都需要等到agent到達終點之後再更新; 而對於TD learning來說,agent每走一步它都可以更新一次,不需要等到到達終點之後才進行更新

MC、TDL、DP 總結

Monte-Carlo, Temporal-Difference 和Dynamic Programming這三種學習方法都是用來計算狀態價值的。 它們的區別在於: 前兩種是在無模型下常用的方法,而MC方法又需要一個完整的episode來更新狀態價值,TD則不需要完整的episode(單步更新)。 DP方法則是基於模型的計算狀態價值的方法。它通過計算一個狀態S所有可能的轉移狀態S’及其轉移概率以及對應的即時獎勵來計算這個狀態S的價值。也正是因為它知道整個模型的情況(知道狀態轉移概率與即時獎勵),所以它才能夠這樣子計算全面的情況。

下圖中的這顆樹,代表了整個狀態與動作空間。對於蒙特卡羅方法來說,要更新一次V值,需要有一個完整的樣本(即圖中紅色部分就是一個樣本)。這條路徑經過了三個狀態,所以可以更新三個狀態的V值。 在這裡插入圖片描述 下圖的紅色部分是TDL每次更新所需要的。對於MC和TDL來說,它們都是無模型的,所以它們只能通過嘗試來近似真實值。 在這裡插入圖片描述 這是動態規劃的V值計算,由於知道了模型,所以可以直接計算期望V值。 在這裡插入圖片描述