在強化學習(四)用蒙特卡羅法(mc)求解中,我們講到了使用蒙特卡羅法來求解強化學習問題的方法,雖然蒙特卡羅法很靈活,不需要環境的狀態轉化概率模型,但是它需要所有的取樣序列都是經歷完整的狀態序列。如果我們沒有完整的狀態序列,那麼就無法使用蒙特卡羅法求解了。本文我們就來討論可以不使用完整狀態序列求解強化學習問題的方法:時序差分(temporal-difference, td)。
時序差分這一篇對應sutton書的第六章部分和ucl強化學習課程的第四講部分,第五講部分。
**問題:即給定強化學習的5個要素:狀態集$s$, 動作集$a$, 即時獎勵$r$,衰減因子$\gamma$, 給定策略$\pi$, 求解該策略的狀態價值函式$v(\pi)$
控制問題:也就是求解最優的價值函式和策略。給定強化學習的5個要素:狀態集$s$, 動作集$a$, 即時獎勵$r$,衰減因子$\gamma$, 探索率$\epsilon$, 求解最優的動作價值函式$q_$和最優策略$\pi_$
回顧蒙特卡羅法中計算狀態收穫的方法是:$$g_t =r_ + \gamma r_ + \gamma^2r_+... \gamma^r_$$
而對於時序差分法來說,我們沒有完整的狀態序列,只有部分的狀態序列,那麼如何可以近似求出某個狀態的收穫呢?回顧強化學習(二)馬爾科夫決策過程(mdp)中的貝爾曼方程:$$v_(s) = \mathbb_(r_ + \gamma v_(s_) | s_t=s) $$
現在我們有了自己的近似收穫$g_t$的表示式,那麼就可以去求解時序差分的**問題和控制問題了。
時序差分的**問題求解和蒙特卡羅法類似,但是主要有兩個不同點。一是收穫$g_t$的表示式不同,時序差分g(t)的表示式為:$$g(t) = r_ + \gamma v(s_)$$
二是迭代的式子係數稍有不同,回顧蒙特卡羅法的迭代式子是:$$v(s_t) = v(s_t) + \frac(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$$
從上面的例子我們也可以看到蒙特卡羅法和時序差分法求解**問題的區別。
一是時序差分法在知道結果之前就可以學習,也可以在沒有結果時學習,還可以在持續進行的環境中學習,而蒙特卡羅法則要等到最後結果才能學習,時序差分法可以更快速靈活的更新狀態的價值估計,這在某些情況下有著非常重要的實際意義。
二是時序差分法在更新狀態價值時使用的是td 目標值,即基於即時獎勵和下一狀態的預估價值來替代當前狀態在狀態序列結束時可能得到的收穫,是當前狀態價值的有偏估計,而蒙特卡羅法則使用實際的收穫來更新狀態價值,是某一策略下狀態價值的無偏估計,這一點蒙特卡羅法佔優。
三是雖然時序差分法得到的價值是有偏估計,但是其方差卻比蒙特卡羅法得到的方差要低,且對初始值敏感,通常比蒙特卡羅法更加高效。
從上面的描述可以看出時序差分法的優勢比較大,因此現在主流的強化學習求解方法都是基於時序差分的。後面的文章也會主要基於時序差分法來擴充套件討論。
在第二節的時序差分法中,我們使用了用$r_ + \gamma v(s_)$來近似的代替收穫$g_t$。即向前一步來近似我們的收穫$g_t$,那麼能不能向前兩步呢?當然可以,這時我們的收穫$g_t$的近似表示式為:$$g_t^ = r_ + \gamma r_ + \gamma^2v(s_)$$
從兩步,到三步,再到n步,我們可以歸納出n步時序差分收穫$g_t^$表示式為:$$g_t^ = r_ + \gamma r_ + ... + \gamma^ r_ + \gamma^nv(s_) $$
當n越來越大,趨於無窮,或者說趨於使用完整的狀態序列時,n步時序差分就等價於蒙特卡羅法了。
對於n步時序差分來說,和普通的時序差分的區別就在於收穫的計算方式的差異。那麼既然有這個n步的說法,那麼n到底是多少步好呢?如何衡量n的好壞呢?我們在下一節討論。
n步時序差分選擇多少步數作為乙個較優的計算引數是需要嘗試的超引數調優問題。為了能在不增加計算複雜度的情況下綜合考慮所有步數的**,我們引入了乙個新[0,1]的引數$\lambda$,定義$\lambda-$收穫是n從1到$\infty$所有步的收穫乘以權重的和。每一步的權重是$(1-\lambda)\lambda^$,這樣$\lambda-$收穫的計算公式表示為:$$g_t^ = (1-\lambda)\sum\limits_^\lambda^g_t^$$
進而我們可以得到$td(\lambda)$的價值函式的迭代公式:$$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) )$$
每一步收穫的權重定義為$(1-\lambda)\lambda^$的原因是什麼呢?其影象如下圖所示,可以看到隨著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_(s) +1(s_t=s) = \begin 0& + \gamma v(s_) -v(s_t)$$$$v(s_t) = v(s_t) + \alpha\delta_te_t(s)$$
也許有人會問,這前向的式子和反向的式子看起來不同啊,是不是不同的邏輯呢?其實兩者是等價的。現在我們從前向推導一下反向的更新式子。$$\begin g_t^ - v(s_t) &= - v(s_t) + (1-\lambda)\lambda^(r_ + \gamma v(s_)) \\ &+ (1-\lambda)\lambda^(r_ + \gamma r_ + \gamma^2v(s_)) \\ &+ (1-\lambda)\lambda^(r_ + \gamma r_ + \gamma^2 r_ + \gamma^3v(s_)) \\ &+... \\& = - v(s_t) + (\gamma\lambda)^0(r_ + \gamma v(s_) - \gamma\lambda v(s_) ) \\ & + (\gamma\lambda)^1(r_ + \gamma v(s_) - \gamma\lambda v(s_) ) \\ & + (\gamma\lambda)^2(r_ + \gamma v(s_) - \gamma\lambda v(s_) ) \\ &+... \\ & = (\gamma\lambda)^0(r_ + \gamma v(s_) - v(s_t)) \\ & + (\gamma\lambda)^1(r_ + \gamma v(s_) - v(s_)) \\ & + (\gamma\lambda)^2(r_ + \gamma v(s_) - v(s_)) \\ & + ... \\ & = \delta_t + \gamma\lambda \delta_ + (\gamma\lambda)^2 \delta_ + ... \end$$
可以看出前向td誤差和反向的td誤差實際上一致的。
時序差分和蒙特卡羅法比它更加靈活,學習能力更強,因此是目前主流的強化學習求解問題的方法,現在絕大部分強化學習乃至深度強化學習的求解都是以時序差分的思想為基礎的。因此後面我們會重點討論。
強化學習(五)用時序差分法(TD)求解
在強化學習 四 用蒙特卡羅法 mc 求解中,我們講到了使用蒙特卡羅法來求解強化學習問題的方法,雖然蒙特卡羅法很靈活,不需要環境的狀態轉化概率模型,但是它需要所有的取樣序列都是經歷完整的狀態序列。如果我們沒有完整的狀態序列,那麼就無法使用蒙特卡羅法求解了。本文我們就來討論可以不使用完整狀態序列求解強化...
強化學習 五
inverse reinforcement learning 方法與gan在影象生成中有什麼異曲同工之處?答 在gan 中,我們有一些比較好的資料集,也有乙個generator,一開始他根本不知道要產生什麼樣的圖,只能隨機生成。另外我們有乙個discriminator,其用來給生成的圖打分,expe...
強化學習 強化學習基礎
為了應對車載網路中通訊環境快速變化的難題,可以使用強化學習進行解決,這裡對強化學習的基礎進行整理。主要的應用場景為車載網路中資源分配問題。本文源自莫煩python 強化學習章節,有需要請查閱原文 20200413補充了一些內容,來自這篇部落格,是李巨集毅的深度強化學習的筆記。強化學習的主要構成有 a...