接下來我們回顧一下動態規划算法(DP)和蒙特卡羅方法(MC)的特點,對於動態規划算法有如下特性:
- 需要環境模型,即狀態轉移概率\(P_{sa}\)
- 狀態值函數的估計是自舉的(bootstrapping),即當前狀態值函數的更新依賴於已知的其他狀態值函數。
相對的,蒙特卡羅方法的特點則有:
- 可以從經驗中學習不需要環境模型
- 狀態值函數的估計是相互獨立的
- 只能用於episode tasks
而我們希望的算法是這樣的:
- 不需要環境模型
- 它不局限於episode task,可以用於連續的任務
本文介紹的時間差分學習(Temporal-Difference learning, TD learning)正是具備了上述特性的算法,它結合了DP和MC,並兼具兩種算法的優點。
TD Learing思想
在介紹TD learning之前,我們先引入如下簡單的蒙特卡羅算法,我們稱為constant-\(\alpha\) MC,它的狀態值函數更新公式如下:
其中\(R_t\)是每個episode結束后獲得的實際累積回報,\(\alpha\)是學習率,這個式子的直觀的理解就是用實際累積回報\(R_t\)作為狀態值函數\(V(s_t)\)的估計值。具體做法是對每個episode,考察實驗中\(s_t\)的實際累積回報\(R_t\)和當前估計\(V(s_t)\)的偏差值,並用該偏差值乘以學習率來更新得到\(V(S_t)\)的新估值。
現在我們將公式修改如下,把\(R_t\)換成\(r_{t+1} + \gamma V(s_{t+1})\),就得到了TD(0)的狀態值函數更新公式:
為什么修改成這種形式呢,我們回憶一下狀態值函數的定義:
容易發現這其實是根據(3)的形式,利用真實的立即回報\(r_{t+1}\)和下個狀態的值函數\(V(s_{t+1})\)來更新\(V(s_t)\),這種就方式就稱為時間差分(temporal difference)。由於我們沒有狀態轉移概率,所以要利用多次實驗來得到期望狀態值函數估值。類似MC方法,在足夠多的實驗后,狀態值函數的估計是能夠收斂於真實值的。
那么MC和TD(0)的更新公式的有何不同呢?我們舉個例子,假設有以下8個episode, 其中A-0表示經過狀態A后獲得了回報0:
index | samples |
---|---|
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-\(\alpha\) MC方法估計狀態A的值函數,其結果是\(V(A)=0\),這是因為狀態A只在episode 1出現了一次,且其累計回報為0。
現在我們使用TD(0)的更新公式,簡單起見取\(\lambda=1\),我們可以得到\(V(A)=0.75\)。這個結果是如何計算的呢? 首先,狀態B的值函數是容易求得的,B作為終止狀態,獲得回報1的概率是75%,因此\(V(B)=0.75\)。接着從數據中我們可以得到狀態A轉移到狀態B的概率是100%並且獲得的回報為0。根據公式(2)可以得到\(V(A) \leftarrow V(A) + \alpha[0 + \lambda V(B) - V(A)]\),可見在只有\(V(A)=\lambda V(B)=0.75\)的時候,式(2)收斂。對這個例子,可以作圖表示:
可見式(2)由於能夠利用其它狀態的估計值,其得到的結果更加合理,並且由於不需要等到任務結束就能更新估值,也就不再局限於episode task了。此外,實驗表明TD(0)從收斂速度上也顯著優於MC方法。
將式(2)作為狀態值函數的估計公式后,前面文章中介紹的策略估計算法就變成了如下形式,這個算法稱為TD prediction:
輸入:待估計的策略\(\pi\)
任意初始化所有\(V(s)\),(\(e.g.,V(s)=0,\forall s\in s^{+}\))
Repeat(對所有episode):
初始化狀態 \(s\)
Repeat(對每步狀態轉移):
\(a\leftarrow\)策略\(\pi\)下狀態\(s\)采取的動作
采取動作\(a\),觀察回報\(r\),和下一個狀態\(s'\)
\(V(s) \leftarrow V(s) + \alpha[r + \lambda V(s') - V(s)]\)
\(s\leftarrow s'\)
Until \(s_t\) is terminal
Until 所有\(V(s)\)收斂
輸出\(V^{\pi}(s)\)
Sarsa算法
現在我們利用TD prediction組成新的強化學習算法,用到決策/控制問題中。在這里,強化學習算法可以分為在策略(on-policy)和離策略(off-policy)兩類。首先要介紹的sarsa算法屬於on-policy算法。
與前面DP方法稍微有些區別的是,sarsa算法估計的是動作值函數(Q函數)而非狀態值函數。也就是說,我們估計的是策略\(\pi\)下,任意狀態\(s\)上所有可執行的動作a的動作值函數\(Q^{\pi}(s,a)\),Q函數同樣可以利用TD Prediction算法估計。如下就是一個狀態-動作對序列的片段及相應的回報值。
給出sarsa的動作值函數更新公式如下:
可見式(4)與式(2)的形式基本一致。需要注意的是,對於每個非終止的狀態\(s_t\),在到達下個狀態\(s_{t+1}\)后,都可以利用上述公式更新\(Q(s_t,A_t)\),而如果\(s_t\)是終止狀態,則要令\(Q(s_{t+1}=0,a_{t+1})\)。由於動作值函數的每次更新都與\((s_t, a_t,r_{t+1},s_{t+1},a_{t+1})\)相關,因此算法被命名為sarsa算法。sarsa算法的完整流程圖如下:
算法最終得到所有狀態-動作對的Q函數,並根據Q函數輸出最優策略\(\pi\)
Q-learning
在sarsa算法中,選擇動作時遵循的策略和更新動作值函數時遵循的策略是相同的,即\(\epsilon-greedy\)的策略,而在接下來介紹的Q-learning中,動作值函數更新則不同於選取動作時遵循的策略,這種方式稱為離策略(Off-Policy)。Q-learning的動作值函數更新公式如下:
可以看到,Q-learning與sarsa算法最大的不同在於更新Q值的時候,直接使用了最大的\(Q(s_{t+1},a)\)值——相當於采用了\(Q(s_{t+1},a)\)值最大的動作,並且與當前執行的策略,即選取動作\(a_t\)時采用的策略無關。 Off-Policy方式簡化了證明算法分析和收斂性證明的難度,使得它的收斂性很早就得到了證明。Q-learning的完整流程圖如下:
小結
本篇介紹了TD方法思想和TD(0),Q(0),Sarsa(0)算法。TD方法結合了蒙特卡羅方法和動態規划的優點,能夠應用於無模型、持續進行的任務,並擁有優秀的性能,因而得到了很好的發展,其中Q-learning更是成為了強化學習中應用最廣泛的方法。在下一篇中,我們將引入資格跡(Eligibility Traces)提高算法性能,結合Eligibility Traces后,我們可以得到\(Q(\lambda),Sarsa(\lambda)\)等算法
參考資料
[1] R.Sutton et al. Reinforcement learning: An introduction, 1998