強化學習(四)用蒙特卡羅法(MC)求解

劉建平Pinard發表於2018-08-17

    在強化學習(三)用動態規劃(DP)求解中,我們討論了用動態規劃來求解強化學習預測問題和控制問題的方法。但是由於動態規劃法需要在每一次回溯更新某一個狀態的價值時,回溯到該狀態的所有可能的後續狀態。導致對於複雜問題計算量很大。同時很多時候,我們連環境的狀態轉化模型$P$都無法知道,這時動態規劃法根本沒法使用。這時候我們如何求解強化學習問題呢?本文要討論的蒙特卡羅(Monte-Calo, MC)就是一種可行的方法。

    蒙特卡羅法這一篇對應Sutton書的第五章和UCL強化學習課程的第四講部分,第五講部分。

1. 不基於模型的強化學習問題定義

    在動態規劃法中,強化學習的兩個問題是這樣定義的:

    預測問題,即給定強化學習的6個要素:狀態集$S$, 動作集$A$, 模型狀態轉化概率矩陣$P$, 即時獎勵$R$,衰減因子$\gamma$,  給定策略$\pi$, 求解該策略的狀態價值函式$v(\pi)$

    控制問題,也就是求解最優的價值函式和策略。給定強化學習的5個要素:狀態集$S$, 動作集$A$, 模型狀態轉化概率矩陣$P$, 即時獎勵$R$,衰減因子$\gamma$, 求解最優的狀態價值函式$v_{*}$和最優策略$\pi_{*}$ 

    可見, 模型狀態轉化概率矩陣$P$始終是已知的,即MDP已知,對於這樣的強化學習問題,我們一般稱為基於模型的強化學習問題。

    不過有很多強化學習問題,我們沒有辦法事先得到模型狀態轉化概率矩陣$P$,這時如果仍然需要我們求解強化學習問題,那麼這就是不基於模型的強化學習問題了。它的兩個問題一般的定義是:    

    預測問題,即給定強化學習的5個要素:狀態集$S$, 動作集$A$, 即時獎勵$R$,衰減因子$\gamma$,  給定策略$\pi$, 求解該策略的狀態價值函式$v(\pi)$

    控制問題,也就是求解最優的價值函式和策略。給定強化學習的5個要素:狀態集$S$, 動作集$A$, 即時獎勵$R$,衰減因子$\gamma$, 探索率$\epsilon$, 求解最優的動作價值函式$q_{*}$和最優策略$\pi_{*}$ 

    本文要討論的蒙特卡羅法就是上述不基於模型的強化學習問題。

2. 蒙特卡羅法求解特點

     蒙特卡羅這個詞之前的博文也討論過,尤其是在之前的MCMC系列中。它是一種通過取樣近似求解問題的方法。這裡的蒙特卡羅法雖然和MCMC不同,但是取樣的思路還是一致的。那麼如何取樣呢?

    蒙特卡羅法通過取樣若干經歷完整的狀態序列(episode)來估計狀態的真實價值。所謂的經歷完整,就是這個序列必須是達到終點的。比如下棋問題分出輸贏,駕車問題成功到達終點或者失敗。有了很多組這樣經歷完整的狀態序列,我們就可以來近似的估計狀態價值,進而求解預測和控制問題了。

    從特卡羅法法的特點來說,一是和動態規劃比,它不需要依賴於模型狀態轉化概率。二是它從經歷過的完整序列學習,完整的經歷越多,學習效果越好。

3. 蒙特卡羅法求解強化學習預測問題

    這裡我們先來討論蒙特卡羅法求解強化學習控制問題的方法,即策略評估。一個給定策略$\pi$的完整有T個狀態的狀態序列如下:$$S_1,A_1,R_2,S_2,A_2,...S_t,A_t,R_{t+1},...R_T, S_T$$

    回憶下強化學習(二)馬爾科夫決策過程(MDP)中對於價值函式$v_{\pi}(s)$的定義:$$v_{\pi}(s) = \mathbb{E}_{\pi}(G_t|S_t=s ) = \mathbb{E}_{\pi}(R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+...|S_t=s)$$

    可以看出每個狀態的價值函式等於所有該狀態收穫的期望,同時這個收穫是通過後續的獎勵與對應的衰減乘積求和得到。那麼對於蒙特卡羅法來說,如果要求某一個狀態的狀態價值,只需要求出所有的完整序列中該狀態出現時候的收穫再取平均值即可近似求解,也就是:$$G_t =R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+...  \gamma^{T-t-1}R_{T}$$ $$v_{\pi}(s) \approx average(G_t), s.t. S_t=s$$

    可以看出,預測問題的求解思路還是很簡單的。不過有幾個點可以優化考慮。

    第一個點是同樣一個狀態可能在一個完整的狀態序列中重複出現,那麼該狀態的收穫該如何計算?有兩種解決方法。第一種是僅把狀態序列中第一次出現該狀態時的收穫值納入到收穫平均值的計算中;另一種是針對一個狀態序列中每次出現的該狀態,都計算對應的收穫值並納入到收穫平均值的計算中。兩種方法對應的蒙特卡羅法分別稱為:首次訪問(first visit) 和每次訪問(every visit) 蒙特卡羅法。第二種方法比第一種的計算量要大一些,但是在完整的經歷樣本序列少的場景下會比第一種方法適用。

    第二個點是累進更新平均值(incremental mean)。在上面預測問題的求解公式裡,我們有一個average的公式,意味著要儲存所有該狀態的收穫值之和最後取平均。這樣浪費了太多的儲存空間。一個較好的方法是在迭代計算收穫均值,即每次儲存上一輪迭代得到的收穫均值與次數,當計算得到當前輪的收穫時,即可計算當前輪收穫均值和次數。通過下面的公式就很容易理解這個過程:$$\mu_k = \frac{1}{k}\sum\limits_{j=1}^k x_j = \frac{1}{k}(x_k + \sum\limits_{j=1}^{k-1}x_j) =  \frac{1}{k}(x_k + (k-1)\mu_{k-1}) = \mu_{k=1} +  \frac{1}{k}(x_k -\mu_{k-1})$$

    這樣上面的狀態價值公式就可以改寫成:$$N(S_t) = N(S_t)  +1 $$ $$V(S_t) = V(S_t)  + \frac{1}{N(S_t)}(G_t -  V(S_t) )$$

    這樣我們無論資料量是多還是少,演算法需要的記憶體基本是固定的 。

    有時候,尤其是海量資料做分散式迭代的時候,我們可能無法準確計算當前的次數$N(S_t)$,這時我們可以用一個係數$\alpha$來代替,即:$$V(S_t) = V(S_t)  + \alpha(G_t -  V(S_t) )$$

    對於動作價值函式$Q(S_t,A_t)$,也是類似的,比如對上面最後一個式子,動作價值函式版本為:$$Q(S_t, A_t) = Q(S_t, A_t) +\alpha(G_t -  Q(S_t, A_t) )$$

    以上就是蒙特卡羅法求解預測問題的整個過程,下面我們來看控制問題求解。

4. 蒙特卡羅法求解強化學習控制問題

    蒙特卡羅法求解控制問題的思路和動態規劃價值迭代的的思路類似。回憶下動態規劃價值迭代的的思路, 每輪迭代先做策略評估,計算出價值$v_k(s)$,然後基於據一定的方法(比如貪婪法)更新當前策略$\pi$。最後得到最優價值函式$v_{*}$和最優策略$\pi_{*}$。

    和動態規劃比,蒙特卡羅法不同之處體現在三點:一是預測問題策略評估的方法不同,這個第三節已經講了。第二是蒙特卡羅法一般是優化最優動作價值函式$q_{*}$,而不是狀態價值函式$v_{*}$。三是動態規劃一般基於貪婪法更新策略。而蒙特卡羅法一般採用$\epsilon-$貪婪法更新。這個$\epsilon$就是我們在強化學習(一)模型基礎中講到的第8個模型要素$\epsilon$。$\epsilon-$貪婪法通過設定一個較小的ϵ值,使用$1-\epsilon$的概率貪婪地選擇目前認為是最大行為價值的行為,而用$\epsilon$ 的概率隨機的從所有m 個可選行為中選擇行為。用公式可以表示為:$$\pi(a|s)= \begin{cases} \epsilon/m + 1- \epsilon & {if\; a^{*} = \arg\max_{a \in A}Q(s,a)}\\ \epsilon/m & {else} \end{cases}$$

    在實際求解控制問題時,為了使演算法可以收斂,一般$\epsilon$會隨著演算法的迭代過程逐漸減小,並趨於0。這樣在迭代前期,我們鼓勵探索,而在後期,由於我們有了足夠的探索量,開始趨於保守,以貪婪為主,使演算法可以穩定收斂。這樣我們可以得到一張和動態規劃類似的圖:

5. 蒙特卡羅法控制問題演算法流程

    在這裡總結下蒙特卡羅法求解強化學習控制問題的演算法流程,這裡的演算法是線上(on-policy)版本的,相對的演算法還有離線(off-policy)版本的。線上和離線的區別我們在後續的文章裡面會講。同時這裡我們用的是every-visit,即個狀態序列中每次出現的相同狀態,都會計算對應的收穫值。

    線上蒙特卡羅法求解強化學習控制問題的演算法流程如下:

    輸入:狀態集$S$, 動作集$A$, 即時獎勵$R$,衰減因子$\gamma$, 探索率$\epsilon$

    輸出:最優的動作價值函式$q_{*}$和最優策略$\pi_{*}$

    1. 初始化所有的動作價值$Q(s,a) = 0$, 狀態次數$N(s,a) = 0$,取樣次數$k=0$,隨機初始化一個策略$\pi$

    2. k=k+1, 基於策略$\pi$進行第k次蒙特卡羅取樣,得到一個完整的狀態序列: $$S_1,A_1,R_2,S_2,A_2,...S_t,A_t,R_{t+1},...R_T, S_T$$

    3. 對於該狀態序列裡出現的每一狀態行為對$(S_t, A_t)$,計算其收穫$G_t$, 更新其計數$N(s,a)$和行為價值函式$Q(s,t)$:$$G_t =R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+...  \gamma^{T-t-1}R_{T}$$$$N(S_t, A_t) = N(S_t, A_t)  +1 $$$$Q(S_t, A_t) = Q(S_t, A_t) + \frac{1}{N(S_t, A_t)}(G_t -  Q(S_t, A_t) )$$

         4. 基於新計算出的動作價值,更新當前的$\epsilon-$貪婪策略:$$\epsilon = \frac{1}{k}$$$$\pi(a|s)= \begin{cases} \epsilon/m + 1- \epsilon & {if\; a^{*} = \arg\max_{a \in A}Q(s,a)}\\ \epsilon/m & {else} \end{cases}$$

    5. 如果所有的$Q(s,a)$收斂,則對應的所有$Q(s,a)$即為最優的動作價值函式$q_{*}$。對應的策略$\pi(a|s)$即為最優策略$\pi_{*}$。否則轉到第二步。

6.  蒙特卡羅法求解強化學習問題小結

    蒙特卡羅法是我們第二個講到的求解強化問題的方法,也是第一個不基於模型的強化問題求解方法。它可以避免動態規劃求解過於複雜,同時還可以不事先知道環境轉化模型,因此可以用於海量資料和複雜模型。但是它也有自己的缺點,這就是它每次取樣都需要一個完整的狀態序列。如果我們沒有完整的狀態序列,或者很難拿到較多的完整的狀態序列,這時候蒙特卡羅法就不太好用了, 也就是說,我們還需要尋找其他的更靈活的不基於模型的強化問題求解方法。

    下一篇我們討論用時序差分方法來求解強化學習預測和控制問題的方法。

 

(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com) 

相關文章