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