在強化學習(三)用動態規劃(DP)求解中,咱們討論了用動態規劃來求解強化學習預測問題和控制問題的方法。可是因爲動態規劃法須要在每一次回溯更新某一個狀態的價值時,回溯到該狀態的全部可能的後續狀態。致使對於複雜問題計算量很大。同時不少時候,咱們連環境的狀態轉化模型$P$都沒法知道,這時動態規劃法根本無法使用。這時候咱們如何求解強化學習問題呢?本文要討論的蒙特卡羅(Monte-Calo, MC)就是一種可行的方法。html
蒙特卡羅法這一篇對應Sutton書的第五章和UCL強化學習課程的第四講部分,第五講部分。算法
在動態規劃法中,強化學習的兩個問題是這樣定義的:app
預測問題,即給定強化學習的6個要素:狀態集$S$, 動做集$A$, 模型狀態轉化機率矩陣$P$, 即時獎勵$R$,衰減因子$\gamma$, 給定策略$\pi$, 求解該策略的狀態價值函數$v(\pi)$分佈式
控制問題,也就是求解最優的價值函數和策略。給定強化學習的5個要素:狀態集$S$, 動做集$A$, 模型狀態轉化機率矩陣$P$, 即時獎勵$R$,衰減因子$\gamma$, 求解最優的狀態價值函數$v_{*}$和最優策略$\pi_{*}$ 函數
可見, 模型狀態轉化機率矩陣$P$始終是已知的,即MDP已知,對於這樣的強化學習問題,咱們通常稱爲基於模型的強化學習問題。post
不過有不少強化學習問題,咱們沒有辦法事先獲得模型狀態轉化機率矩陣$P$,這時若是仍然須要咱們求解強化學習問題,那麼這就是不基於模型的強化學習問題了。它的兩個問題通常的定義是: 學習
預測問題,即給定強化學習的5個要素:狀態集$S$, 動做集$A$, 即時獎勵$R$,衰減因子$\gamma$, 給定策略$\pi$, 求解該策略的狀態價值函數$v(\pi)$優化
控制問題,也就是求解最優的價值函數和策略。給定強化學習的5個要素:狀態集$S$, 動做集$A$, 即時獎勵$R$,衰減因子$\gamma$, 探索率$\epsilon$, 求解最優的動做價值函數$q_{*}$和最優策略$\pi_{*}$ url
本文要討論的蒙特卡羅法就是上述不基於模型的強化學習問題。htm
蒙特卡羅這個詞以前的博文也討論過,尤爲是在以前的MCMC系列中。它是一種經過採樣近似求解問題的方法。這裏的蒙特卡羅法雖然和MCMC不一樣,可是採樣的思路仍是一致的。那麼如何採樣呢?
蒙特卡羅法經過採樣若干經歷完整的狀態序列(episode)來估計狀態的真實價值。所謂的經歷完整,就是這個序列必須是達到終點的。好比下棋問題分出輸贏,駕車問題成功到達終點或者失敗。有了不少組這樣經歷完整的狀態序列,咱們就能夠來近似的估計狀態價值,進而求解預測和控制問題了。
從特卡羅法法的特色來講,一是和動態規劃比,它不須要依賴於模型狀態轉化機率。二是它從經歷過的完整序列學習,完整的經歷越多,學習效果越好。
這裏咱們先來討論蒙特卡羅法求解強化學習控制問題的方法,即策略評估。一個給定策略$\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) )$$
以上就是蒙特卡羅法求解預測問題的整個過程,下面咱們來看控制問題求解。
蒙特卡羅法求解控制問題的思路和動態規劃價值迭代的的思路相似。回憶下動態規劃價值迭代的的思路, 每輪迭代先作策略評估,計算出價值$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。這樣在迭代前期,咱們鼓勵探索,而在後期,因爲咱們有了足夠的探索量,開始趨於保守,以貪婪爲主,使算法能夠穩定收斂。這樣咱們能夠獲得一張和動態規劃相似的圖:
在這裏總結下蒙特卡羅法求解強化學習控制問題的算法流程,這裏的算法是在線(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,a)$:$$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_{*}$。不然轉到第二步。
蒙特卡羅法是咱們第二個講到的求解強化問題的方法,也是第一個不基於模型的強化問題求解方法。它能夠避免動態規劃求解過於複雜,同時還能夠不事先知道環境轉化模型,所以能夠用於海量數據和複雜模型。可是它也有本身的缺點,這就是它每次採樣都須要一個完整的狀態序列。若是咱們沒有完整的狀態序列,或者很難拿到較多的完整的狀態序列,這時候蒙特卡羅法就不太好用了, 也就是說,咱們還須要尋找其餘的更靈活的不基於模型的強化問題求解方法。
下一篇咱們討論用時序差分方法來求解強化學習預測和控制問題的方法。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)