增强学习(五)----- 时间差分学习(Q learning, Sarsa learning)
?
接下來我們回顧一下動(dòng)態(tài)規(guī)劃算法(DP)和蒙特卡羅方法(MC)的特點(diǎn),對(duì)于動(dòng)態(tài)規(guī)劃算法有如下特性:
- 需要環(huán)境模型,即狀態(tài)轉(zhuǎn)移概率PsaPsa
- 狀態(tài)值函數(shù)的估計(jì)是自舉的(bootstrapping),即當(dāng)前狀態(tài)值函數(shù)的更新依賴于已知的其他狀態(tài)值函數(shù)。
相對(duì)的,蒙特卡羅方法的特點(diǎn)則有:
- 可以從經(jīng)驗(yàn)中學(xué)習(xí)不需要環(huán)境模型
- 狀態(tài)值函數(shù)的估計(jì)是相互獨(dú)立的
- 只能用于episode tasks
而我們希望的算法是這樣的:
- 不需要環(huán)境模型
- 它不局限于episode task,可以用于連續(xù)的任務(wù)
本文介紹的時(shí)間差分學(xué)習(xí)(Temporal-Difference learning, TD learning)正是具備了上述特性的算法,它結(jié)合了DP和MC,并兼具兩種算法的優(yōu)點(diǎn)。
TD Learing思想
在介紹TD learning之前,我們先引入如下簡(jiǎn)單的蒙特卡羅算法,我們稱為constant-αα?MC,它的狀態(tài)值函數(shù)更新公式如下:
?
V(st)←V(st)+α[Rt?V(st)](1)(1)V(st)←V(st)+α[Rt?V(st)]
其中RtRt是每個(gè)episode結(jié)束后獲得的實(shí)際累積回報(bào),αα是學(xué)習(xí)率,這個(gè)式子的直觀的理解就是用實(shí)際累積回報(bào)RtRt作為狀態(tài)值函數(shù)V(st)V(st)的估計(jì)值。具體做法是對(duì)每個(gè)episode,考察實(shí)驗(yàn)中stst的實(shí)際累積回報(bào)RtRt和當(dāng)前估計(jì)V(st)V(st)的偏差值,并用該偏差值乘以學(xué)習(xí)率來更新得到V(St)V(St)的新估值。
現(xiàn)在我們將公式修改如下,把RtRt換成rt+1+γV(st+1)rt+1+γV(st+1),就得到了TD(0)的狀態(tài)值函數(shù)更新公式:
?
V(st)←V(st)+α[rt+1+γV(st+1)?V(st)](2)(2)V(st)←V(st)+α[rt+1+γV(st+1)?V(st)]
為什么修改成這種形式呢,我們回憶一下狀態(tài)值函數(shù)的定義:
?
Vπ(s)=Eπ[r(s′|s,a)+γVπ(s′)](3)(3)Vπ(s)=Eπ[r(s′|s,a)+γVπ(s′)]
容易發(fā)現(xiàn)這其實(shí)是根據(jù)(3)的形式,利用真實(shí)的立即回報(bào)rt+1rt+1和下個(gè)狀態(tài)的值函數(shù)V(st+1)V(st+1)來更新V(st)V(st),這種就方式就稱為時(shí)間差分(temporal difference)。由于我們沒有狀態(tài)轉(zhuǎn)移概率,所以要利用多次實(shí)驗(yàn)來得到期望狀態(tài)值函數(shù)估值。類似MC方法,在足夠多的實(shí)驗(yàn)后,狀態(tài)值函數(shù)的估計(jì)是能夠收斂于真實(shí)值的。
那么MC和TD(0)的更新公式的有何不同呢?我們舉個(gè)例子,假設(shè)有以下8個(gè)episode, 其中A-0表示經(jīng)過狀態(tài)A后獲得了回報(bào)0:
| episode 1 | A-0, B-0 |
| episode 2 | B-1 |
| episode 3 | B-1 |
| episode 4 | B-1 |
| episode 5 | B-1 |
| episode 6 | B-1 |
| episode 7 | B-1 |
| episode 8 | B-0 |
首先我們使用constant-αα?MC方法估計(jì)狀態(tài)A的值函數(shù),其結(jié)果是V(A)=0V(A)=0,這是因?yàn)闋顟B(tài)A只在episode 1出現(xiàn)了一次,且其累計(jì)回報(bào)為0。
現(xiàn)在我們使用TD(0)的更新公式,簡(jiǎn)單起見取λ=1λ=1,我們可以得到V(A)=0.75V(A)=0.75。這個(gè)結(jié)果是如何計(jì)算的呢? 首先,狀態(tài)B的值函數(shù)是容易求得的,B作為終止?fàn)顟B(tài),獲得回報(bào)1的概率是75%,因此V(B)=0.75V(B)=0.75。接著從數(shù)據(jù)中我們可以得到狀態(tài)A轉(zhuǎn)移到狀態(tài)B的概率是100%并且獲得的回報(bào)為0。根據(jù)公式(2)可以得到V(A)←V(A)+α[0+λV(B)?V(A)]V(A)←V(A)+α[0+λV(B)?V(A)],可見在只有V(A)=λV(B)=0.75V(A)=λV(B)=0.75的時(shí)候,式(2)收斂。對(duì)這個(gè)例子,可以作圖表示:
可見式(2)由于能夠利用其它狀態(tài)的估計(jì)值,其得到的結(jié)果更加合理,并且由于不需要等到任務(wù)結(jié)束就能更新估值,也就不再局限于episode task了。此外,實(shí)驗(yàn)表明TD(0)從收斂速度上也顯著優(yōu)于MC方法。
將式(2)作為狀態(tài)值函數(shù)的估計(jì)公式后,前面文章中介紹的策略估計(jì)算法就變成了如下形式,這個(gè)算法稱為TD prediction:
輸入:待估計(jì)的策略ππ
任意初始化所有V(s)V(s),(e.g.,V(s)=0,?s∈s+e.g.,V(s)=0,?s∈s+)
Repeat(對(duì)所有episode):
初始化狀態(tài)?ss
Repeat(對(duì)每步狀態(tài)轉(zhuǎn)移):
a←a←策略ππ下狀態(tài)ss采取的動(dòng)作
采取動(dòng)作aa,觀察回報(bào)rr,和下一個(gè)狀態(tài)s′s′
V(s)←V(s)+α[r+λV(s′)?V(s)]V(s)←V(s)+α[r+λV(s′)?V(s)]
s←s′s←s′
Until?stst?is terminal
Until 所有V(s)V(s)收斂
輸出Vπ(s)Vπ(s)
Sarsa算法
現(xiàn)在我們利用TD prediction組成新的強(qiáng)化學(xué)習(xí)算法,用到?jīng)Q策/控制問題中。在這里,強(qiáng)化學(xué)習(xí)算法可以分為在策略(on-policy)和離策略(off-policy)兩類。首先要介紹的sarsa算法屬于on-policy算法。
與前面DP方法稍微有些區(qū)別的是,sarsa算法估計(jì)的是動(dòng)作值函數(shù)(Q函數(shù))而非狀態(tài)值函數(shù)。也就是說,我們估計(jì)的是策略ππ下,任意狀態(tài)ss上所有可執(zhí)行的動(dòng)作a的動(dòng)作值函數(shù)Qπ(s,a)Qπ(s,a),Q函數(shù)同樣可以利用TD Prediction算法估計(jì)。如下就是一個(gè)狀態(tài)-動(dòng)作對(duì)序列的片段及相應(yīng)的回報(bào)值。
給出sarsa的動(dòng)作值函數(shù)更新公式如下:
?
Q(st,at)←Q(st,at)+α[rt+1+λQ(st+1,at+1)?Q(st,at)](4)(4)Q(st,at)←Q(st,at)+α[rt+1+λQ(st+1,at+1)?Q(st,at)]
可見式(4)與式(2)的形式基本一致。需要注意的是,對(duì)于每個(gè)非終止的狀態(tài)stst,在到達(dá)下個(gè)狀態(tài)st+1st+1后,都可以利用上述公式更新Q(st,At)Q(st,At),而如果stst是終止?fàn)顟B(tài),則要令Q(st+1=0,at+1)Q(st+1=0,at+1)。由于動(dòng)作值函數(shù)的每次更新都與(st,at,rt+1,st+1,at+1)(st,at,rt+1,st+1,at+1)相關(guān),因此算法被命名為sarsa算法。sarsa算法的完整流程圖如下:
算法最終得到所有狀態(tài)-動(dòng)作對(duì)的Q函數(shù),并根據(jù)Q函數(shù)輸出最優(yōu)策略ππ
Q-learning
在sarsa算法中,選擇動(dòng)作時(shí)遵循的策略和更新動(dòng)作值函數(shù)時(shí)遵循的策略是相同的,即??greedy??greedy的策略,而在接下來介紹的Q-learning中,動(dòng)作值函數(shù)更新則不同于選取動(dòng)作時(shí)遵循的策略,這種方式稱為離策略(Off-Policy)。Q-learning的動(dòng)作值函數(shù)更新公式如下:
?
Q(st,at)←Q(st,at)+α[rt+1+λmaxaQ(st+1,a)?Q(st,at)](5)(5)Q(st,at)←Q(st,at)+α[rt+1+λmaxaQ(st+1,a)?Q(st,at)]
可以看到,Q-learning與sarsa算法最大的不同在于更新Q值的時(shí)候,直接使用了最大的Q(st+1,a)Q(st+1,a)值——相當(dāng)于采用了Q(st+1,a)Q(st+1,a)值最大的動(dòng)作,并且與當(dāng)前執(zhí)行的策略,即選取動(dòng)作atat時(shí)采用的策略無關(guān)。?Off-Policy方式簡(jiǎn)化了證明算法分析和收斂性證明的難度,使得它的收斂性很早就得到了證明。Q-learning的完整流程圖如下:
小結(jié)
本篇介紹了TD方法思想和TD(0),Q(0),Sarsa(0)算法。TD方法結(jié)合了蒙特卡羅方法和動(dòng)態(tài)規(guī)劃的優(yōu)點(diǎn),能夠應(yīng)用于無模型、持續(xù)進(jìn)行的任務(wù),并擁有優(yōu)秀的性能,因而得到了很好的發(fā)展,其中Q-learning更是成為了強(qiáng)化學(xué)習(xí)中應(yīng)用最廣泛的方法。在下一篇中,我們將引入資格跡(Eligibility Traces)提高算法性能,結(jié)合Eligibility Traces后,我們可以得到Q(λ),Sarsa(λ)Q(λ),Sarsa(λ)等算法
總結(jié)
以上是生活随笔為你收集整理的增强学习(五)----- 时间差分学习(Q learning, Sarsa learning)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pycharm自定义包的导入
- 下一篇: 增强学习(四) ----- 蒙特卡罗方法