1. 程式人生 > >強化學習(五)用時序差分法(TD)求解

強化學習(五)用時序差分法(TD)求解

bili 通過 信號 老鼠 不同的 有著 ren emp 重定義

    在強化學習(四)用蒙特卡羅法(MC)求解中,我們講到了使用蒙特卡羅法來求解強化學習問題的方法,雖然蒙特卡羅法很靈活,不需要環境的狀態轉化概率模型,但是它需要所有的采樣序列都是經歷完整的狀態序列。如果我們沒有完整的狀態序列,那麽就無法使用蒙特卡羅法求解了。本文我們就來討論可以不使用完整狀態序列求解強化學習問題的方法:時序差分(Temporal-Difference, TD)。

    時序差分這一篇對應Sutton書的第六章部分和UCL強化學習課程的第四講部分,第五講部分。

1. 時序差分TD簡介

    時序差分法和蒙特卡羅法類似,都是不基於模型的強化學習問題求解方法。所以在上一篇定義的不基於模型的強化學習控制問題和預測問題的定義,在這裏仍然適用。

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

    控制問題:也就是求解最優的價值函數和策略。給定強化學習的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}$$

    而對於時序差分法來說,我們沒有完整的狀態序列,只有部分的狀態序列,那麽如何可以近似求出某個狀態的收獲呢?回顧強化學習(二)馬爾科夫決策過程(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)。這樣我們只需要兩個連續的狀態與對應的獎勵,就可以嘗試求解強化學習問題了。

    現在我們有了自己的近似收獲$G_t$的表達式,那麽就可以去求解時序差分的預測問題和控制問題了。

2. 時序差分TD的預測問題求解

    時序差分的預測問題求解和蒙特卡羅法類似,但是主要有兩個不同點。一是收獲$G_t$的表達式不同,時序差分G(t)的表達式為:$$G(t) = R_{t+1} + \gamma V(S_{t+1})$$

    二是叠代的式子系數稍有不同,回顧蒙特卡羅法的叠代式子是:$$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,1,B,1 ②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 目標值,即基於即時獎勵和下一狀態的預估價值來替代當前狀態在狀態序列結束時可能得到的收獲,是當前狀態價值的有偏估計,而蒙特卡羅法則使用實際的收獲來更新狀態價值,是某一策略下狀態價值的無偏估計,這一點蒙特卡羅法占優。

    三是雖然時序差分法得到的價值是有偏估計,但是其方差卻比蒙特卡羅法得到的方差要低,且對初始值敏感,通常比蒙特卡羅法更加高效。

    從上面的描述可以看出時序差分法的優勢比較大,因此現在主流的強化學習求解方法都是基於時序差分的。後面的文章也會主要基於時序差分法來擴展討論。

3. n步時序差分

    在第二節的時序差分法中,我們使用了用$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的好壞呢?我們在下一節討論。

4. $TD(\lambda)$

    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), \;\;s.t.\; \lambda,\gamma \in [0,1]$$

    此時我們$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誤差實際上一致的。

5. 時序差分的控制問題求解

    現在我們回到普通的時序差分,來看看它控制問題的求解方法。回想上一篇蒙特卡羅法在線控制的方法,我們使用的是$\epsilon-$貪婪法來做價值叠代。對於時序差分,我們也可以用$\epsilon-$貪婪法來價值叠代,和蒙特卡羅法在線控制的區別主要只是在於收獲的計算方式不同。時序差分的在線控制(on-policy)算法最常見的是SARSA算法,我們在下一篇單獨講解。

    而除了在線控制,我們還可以做離線控制(off-policy),離線控制和在線控制的區別主要在於在線控制一般只有一個策略(最常見的是$\epsilon-$貪婪法)。而離線控制一般有兩個策略,其中一個策略(最常見的是$\epsilon-$貪婪法)用於選擇新的動作,另一個策略(最常見的是貪婪法)用於更新價值函數。時序差分的離線控制算法最常見的是Q-Learning算法,我們在下下篇單獨講解。

6. 時序差分小結

    時序差分和蒙特卡羅法比它更加靈活,學習能力更強,因此是目前主流的強化學習求解問題的方法,現在絕大部分強化學習乃至深度強化學習的求解都是以時序差分的思想為基礎的。因此後面我們會重點討論。

    下一篇我們會討論時序差分的在線控制算法SARSA。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]

強化學習(五)用時序差分法(TD)求解