在強化學習(四)用蒙特卡羅法(MC)求解中,咱們講到了使用蒙特卡羅法來求解強化學習問題的方法,雖然蒙特卡羅法很靈活,不須要環境的狀態轉化機率模型,可是它須要全部的採樣序列都是經歷完整的狀態序列。若是咱們沒有完整的狀態序列,那麼就沒法使用蒙特卡羅法求解了。本文咱們就來討論能夠不使用完整狀態序列求解強化學習問題的方法:時序差分(Temporal-Difference, TD)。html
時序差分這一篇對應Sutton書的第六章部分和UCL強化學習課程的第四講部分,第五講部分。算法
時序差分法和蒙特卡羅法相似,都是不基於模型的強化學習問題求解方法。因此在上一篇定義的不基於模型的強化學習控制問題和預測問題的定義,在這裏仍然適用。bootstrap
預測問題:即給定強化學習的5個要素:狀態集$S$, 動做集$A$, 即時獎勵$R$,衰減因子$\gamma$, 給定策略$\pi$, 求解該策略的狀態價值函數$v(\pi)$app
控制問題:也就是求解最優的價值函數和策略。給定強化學習的5個要素:狀態集$S$, 動做集$A$, 即時獎勵$R$,衰減因子$\gamma$, 探索率$\epsilon$, 求解最優的動做價值函數$q_{*}$和最優策略$\pi_{*}$ 函數
回顧蒙特卡羅法中計算狀態收穫的方法是:$$G_t =R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+... \gamma^{T-t-1}R_{T}$$post
而對於時序差分法來講,咱們沒有完整的狀態序列,只有部分的狀態序列,那麼如何能夠近似求出某個狀態的收穫呢?回顧強化學習(二)馬爾科夫決策過程(MDP)中的貝爾曼方程:$$v_{\pi}(s) = \mathbb{E}_{\pi}(R_{t+1} + \gamma v_{\pi}(S_{t+1}) | S_t=s) $$學習
這啓發咱們能夠用$R_{t+1} + \gamma v(S_{t+1})$來近似的代替收穫$G_t$, 通常咱們把$R_{t+1} + \gamma V(S_{t+1})$稱爲TD目標值。$R_{t+1} + \gamma V(S_{t+1}) -V(S_t)$稱爲TD偏差,將用TD目標值近似代替收穫$G(t)$的過程稱爲引導(bootstrapping)。這樣咱們只須要兩個連續的狀態與對應的獎勵,就能夠嘗試求解強化學習問題了。3d
如今咱們有了本身的近似收穫$G_t$的表達式,那麼就能夠去求解時序差分的預測問題和控制問題了。htm
時序差分的預測問題求解和蒙特卡羅法相似,可是主要有兩個不一樣點。一是收穫$G_t$的表達式不一樣,時序差分G(t)的表達式爲:$$G(t) = R_{t+1} + \gamma V(S_{t+1})$$blog
二是迭代的式子係數稍有不一樣,回顧蒙特卡羅法的迭代式子是:$$V(S_t) = V(S_t) + \frac{1}{N(S_t)}(G_t - V(S_t) )$$
因爲在時序差分咱們沒有完整的序列,也就沒有對應的次數$N(S_t)$,通常就用一個[0,1]的係數$\alpha$代替。這樣時序差分的價值函數迭代式子是:$$V(S_t) = V(S_t) + \alpha(G_t - V(S_t) )$$$$Q(S_t, A_t) = Q(S_t, A_t) +\alpha(G_t - Q(S_t, A_t) )$$
這裏咱們用一個簡單的例子來看看蒙特卡羅法和時序差分法求解預測問題的不一樣。
假設咱們的強化學習問題有A,B兩個狀態,模型未知,不涉及策略和行爲。只涉及狀態轉化和即時獎勵。一共有8個完整的狀態序列以下:
① A,0,B,0 ②B,1 ③B,1 ④ B,1 ⑤ B,1 ⑥B,1 ⑦B,1 ⑧B,0
只有第一個狀態序列是有狀態轉移的,其他7個只有一個狀態。設置衰減因子$\gamma =1$。
首先咱們按蒙特卡羅法來求解預測問題。因爲只有第一個序列中包含狀態A,所以A的價值僅能經過第一個序列來計算,也就等同於計算該序列中狀態A的收穫:$$V(A) = G(A) = R_A + \gamma R_B = 0$$
對於B,則須要對其在8個序列中的收穫值來平均,其結果是6/8。
再來看看時序差分法求解的過程。其收穫是在計算狀態序列中某狀態價值時是應用其後續狀態的預估價值來計算的,對於B來講,它老是終止狀態,沒有後續狀態,所以它的價值直接用其在8個序列中的收穫值來平均,其結果是6/8。
對於A,只在第一個序列出現,它的價值爲:$$V(A) = R_A + \gamma V(B) = \frac{6}{8}$$
從上面的例子咱們也能夠看到蒙特卡羅法和時序差分法求解預測問題的區別。
一是時序差分法在知道結果以前就能夠學習,也能夠在沒有結果時學習,還能夠在持續進行的環境中學習,而蒙特卡羅法則要等到最後結果才能學習,時序差分法能夠更快速靈活的更新狀態的價值估計,這在某些狀況下有着很是重要的實際意義。
二是時序差分法在更新狀態價值時使用的是TD 目標值,即基於即時獎勵和下一狀態的預估價值來替代當前狀態在狀態序列結束時可能獲得的收穫,是當前狀態價值的有偏估計,而蒙特卡羅法則使用實際的收穫來更新狀態價值,是某一策略下狀態價值的無偏估計,這一點蒙特卡羅法佔優。
三是雖然時序差分法獲得的價值是有偏估計,可是其方差卻比蒙特卡羅法獲得的方差要低,且對初始值敏感,一般比蒙特卡羅法更加高效。
從上面的描述能夠看出時序差分法的優點比較大,所以如今主流的強化學習求解方法都是基於時序差分的。後面的文章也會主要基於時序差分法來擴展討論。
在第二節的時序差分法中,咱們使用了用$R_{t+1} + \gamma v(S_{t+1})$來近似的代替收穫$G_t$。即向前一步來近似咱們的收穫$G_t$,那麼能不能向前兩步呢?固然能夠,這時咱們的收穫$G_t$的近似表達式爲:$$G_t^{(2)} = R_{t+1} + \gamma R_{t+2} + \gamma^2V(S_{t+2})$$
從兩步,到三步,再到n步,咱們能夠概括出n步時序差分收穫$G_t^{(n)}$表達式爲:$$G_t^{(n)} = R_{t+1} + \gamma R_{t+2} + ... + \gamma^{n-1} R_{t+n} + \gamma^nV(S_{t+n}) $$
當n愈來愈大,趨於無窮,或者說趨於使用完整的狀態序列時,n步時序差分就等價於蒙特卡羅法了。
對於n步時序差分來講,和普通的時序差分的區別就在於收穫的計算方式的差別。那麼既然有這個n步的說法,那麼n究竟是多少步好呢?如何衡量n的好壞呢?咱們在下一節討論。
n步時序差分選擇多少步數做爲一個較優的計算參數是須要嘗試的超參數調優問題。爲了能在不增長計算複雜度的狀況下綜合考慮全部步數的預測,咱們引入了一個新[0,1]的參數$\lambda$,定義$\lambda-$收穫是n從1到$\infty$全部步的收穫乘以權重的和。每一步的權重是$(1-\lambda)\lambda^{n-1}$,這樣$\lambda-$收穫的計算公式表示爲:$$G_t^{\lambda} = (1-\lambda)\sum\limits_{n=1}^{\infty}\lambda^{n-1}G_t^{(n)}$$
進而咱們能夠獲得$TD(\lambda)$的價值函數的迭代公式:$$V(S_t) = V(S_t) + \alpha(G_t^{\lambda} - V(S_t) )$$$$Q(S_t, A_t) = Q(S_t, A_t) +\alpha(G_t^{\lambda}- Q(S_t, A_t) )$$
每一步收穫的權重定義爲$(1-\lambda)\lambda^{n-1}$的緣由是什麼呢?其圖像以下圖所示,能夠看到隨着n的增大,其第n步收穫的權重呈幾何級數的衰減。當在T時刻到達終止狀態時,未分配的權重所有給予終止狀態的實際收穫值。這樣可使一個完整的狀態序列中全部的n步收穫的權重加起來爲1,離當前狀態越遠的收穫其權重越小。
從前向來看$TD(\lambda)$, 一個狀態的價值$V(S_t) $由$G_t$獲得,而$G_t$又間接由全部後續狀態價值計算獲得,所以能夠認爲更新一個狀態的價值須要知道全部後續狀態的價值。也就是說,必需要經歷完整的狀態序列得到包括終止狀態的每個狀態的即時獎勵才能更新當前狀態的價值。這和蒙特卡羅法的要求同樣,所以$TD(\lambda)$有着和蒙特卡羅法同樣的劣勢。當$\lambda =0 $ 時,就是第二節講到的普通的時序差分法,當$\lambda =1 $ 時,就是蒙特卡羅法。
從反向來看$TD(\lambda)$,它能夠分析咱們狀態對後續狀態的影響。好比老鼠在依次連續接受了3 次響鈴和1 次亮燈信號後遭到了電擊,那麼在分析遭電擊的緣由時,究竟是響鈴的因素較重要仍是亮燈的因素更重要呢?若是把老鼠遭到電擊的緣由認爲是以前接受了較屢次數的響鈴,則稱這種歸由於頻率啓發(frequency heuristic) 式;而把電擊歸因於最近少數幾回狀態的影響,則稱爲就近啓發(recency heuristic) 式。
若是給每個狀態引入一個數值:效用(eligibility, E) 來表示該狀態對後續狀態的影響,就能夠同時利用到上述兩個啓發。而全部狀態的效用值總稱爲效用跡(eligibility traces,ES)。定義爲:$$E_0(s) = 0$$$$E_t(s) = \gamma\lambda E_{t-1}(s) +1(S_t=s) = \begin{cases} 0& {t<k}\\ (\gamma\lambda)^{t-k}& {t\geq k} \end{cases}, \;\;s.t.\; \lambda,\gamma \in [0,1], s\; is\; visited \;once\;at\; time\; k$$
此時咱們$TD(\lambda)$的價值函數更新式子能夠表示爲:$$\delta_t = R_{t+1} + \gamma v(S_{t+1}) -V(S_t)$$$$V(S_t) = V(S_t) + \alpha\delta_tE_t(s)$$
也許有人會問,這前向的式子和反向的式子看起來不一樣啊,是否是不一樣的邏輯呢?其實二者是等價的。如今咱們從前向推導一下反向的更新式子。$$\begin{align} G_t^{\lambda} - V(S_t) &= - V(S_t) + (1-\lambda)\lambda^{0}(R_{t+1} + \gamma V(S_{t+1})) \\ &+ (1-\lambda)\lambda^{1}(R_{t+1} + \gamma R_{t+2} + \gamma^2V(S_{t+2})) \\ &+ (1-\lambda)\lambda^{2}(R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \gamma^3V(S_{t+3})) \\ &+... \\& = - V(S_t) + (\gamma\lambda)^0(R_{t+1} + \gamma V(S_{t+1}) - \gamma\lambda V(S_{t+1}) ) \\ & + (\gamma\lambda)^1(R_{t+2} + \gamma V(S_{t+2}) - \gamma\lambda V(S_{t+2}) ) \\ & + (\gamma\lambda)^2(R_{t+3} + \gamma V(S_{t+3}) - \gamma\lambda V(S_{t+3}) ) \\ &+... \\ & = (\gamma\lambda)^0(R_{t+1} + \gamma V(S_{t+1}) - V(S_t)) \\ & + (\gamma\lambda)^1(R_{t+2} + \gamma V(S_{t+2}) - V(S_{t+1})) \\ & + (\gamma\lambda)^2(R_{t+3} + \gamma V(S_{t+3}) - V(S_{t+2})) \\ & + ... \\ & = \delta_t + \gamma\lambda \delta_{t+1} + (\gamma\lambda)^2 \delta_{t+2} + ... \end{align}$$
能夠看出前向TD偏差和反向的TD偏差實際上一致的。
如今咱們回到普通的時序差分,來看看它控制問題的求解方法。回想上一篇蒙特卡羅法在線控制的方法,咱們使用的是$\epsilon-$貪婪法來作價值迭代。對於時序差分,咱們也能夠用$\epsilon-$貪婪法來價值迭代,和蒙特卡羅法在線控制的區別主要只是在於收穫的計算方式不一樣。時序差分的在線控制(on-policy)算法最多見的是SARSA算法,咱們在下一篇單獨講解。
而除了在線控制,咱們還能夠作離線控制(off-policy),離線控制和在線控制的區別主要在於在線控制通常只有一個策略(最多見的是$\epsilon-$貪婪法)。而離線控制通常有兩個策略,其中一個策略(最多見的是$\epsilon-$貪婪法)用於選擇新的動做,另外一個策略(最多見的是貪婪法)用於更新價值函數。時序差分的離線控制算法最多見的是Q-Learning算法,咱們在下下篇單獨講解。
時序差分和蒙特卡羅法比它更加靈活,學習能力更強,所以是目前主流的強化學習求解問題的方法,如今絕大部分強化學習乃至深度強化學習的求解都是以時序差分的思想爲基礎的。所以後面咱們會重點討論。
下一篇咱們會討論時序差分的在線控制算法SARSA。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)