加強學習(五)----- 時間差分學習(Q learning, Sarsa learning)

接下來咱們回顧一下動態規劃算法(DP)和蒙特卡羅方法(MC)的特色,對於動態規劃算法有以下特性:算法

  • 須要環境模型,即狀態轉移機率\(P_{sa}\)
  • 狀態值函數的估計是自舉的(bootstrapping),即當前狀態值函數的更新依賴於已知的其餘狀態值函數。

相對的,蒙特卡羅方法的特色則有:bootstrap

  • 能夠從經驗中學習不須要環境模型
  • 狀態值函數的估計是相互獨立的
  • 只能用於episode tasks

而咱們但願的算法是這樣的:app

  • 不須要環境模型
  • 它不侷限於episode task,能夠用於連續的任務

本文介紹的時間差分學習(Temporal-Difference learning, TD learning)正是具有了上述特性的算法,它結合了DP和MC,併兼具兩種算法的優勢。函數

TD Learing思想

在介紹TD learning以前,咱們先引入以下簡單的蒙特卡羅算法,咱們稱爲constant-\(\alpha\) MC,它的狀態值函數更新公式以下:
\[ V(s_t) \leftarrow V(s_t) + \alpha[R_t - V(s_t)] \tag {1}\]
其中\(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)的狀態值函數更新公式:
\[V(s_t) \leftarrow V(s_t) + \alpha[r_{t+1} + \gamma V(s_{t+1}) - V(s_t)] \tag {2}\]學習

爲何修改爲這種形式呢,咱們回憶一下狀態值函數的定義:
\[V^{\pi}(s)=E_{\pi}[r(s'|s,a)+\gamma V^{\pi}(s')] \tag {3}\]
容易發現這實際上是根據(3)的形式,利用真實的當即回報\(r_{t+1}\)和下個狀態的值函數\(V(s_{t+1})\)來更新\(V(s_t)\),這種就方式就稱爲時間差分(temporal difference)。因爲咱們沒有狀態轉移機率,因此要利用屢次實驗來獲得指望狀態值函數估值。相似MC方法,在足夠多的實驗後,狀態值函數的估計是可以收斂於真實值的。spa

那麼MC和TD(0)的更新公式的有何不一樣呢?咱們舉個例子,假設有如下8個episode, 其中A-0表示通過狀態A後得到了回報0:blog

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。terminal

如今咱們使用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)收斂。對這個例子,能夠做圖表示:
屏幕快照 2016-01-05 下午9.48.30.png-24.1kB
可見式(2)因爲可以利用其它狀態的估計值,其獲得的結果更加合理,而且因爲不須要等到任務結束就能更新估值,也就再也不侷限於episode task了。此外,實驗代表TD(0)從收斂速度上也顯著優於MC方法。it

將式(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算法估計。以下就是一個狀態-動做對序列的片斷及相應的回報值。
屏幕快照 2016-01-06 下午9.28.07.png-17.3kB
給出sarsa的動做值函數更新公式以下:
\[Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha[r_{t+1} + \lambda Q(s_{t+1}, a_{t+1}) - Q(s_t,a_t)] \tag {4}\]

可見式(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算法的完整流程圖以下:
屏幕快照 2016-01-06 下午9.52.57.png-61kB
算法最終獲得全部狀態-動做對的Q函數,並根據Q函數輸出最優策略\(\pi\)

Q-learning

在sarsa算法中,選擇動做時遵循的策略更新動做值函數時遵循的策略是相同的,即\(\epsilon-greedy\)的策略,而在接下來介紹的Q-learning中,動做值函數更新則不一樣於選取動做時遵循的策略,這種方式稱爲離策略(Off-Policy)。Q-learning的動做值函數更新公式以下:
\[Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha[r_{t+1} + \lambda \max _{a} Q(s_{t+1}, a) - Q(s_t,a_t)] \tag {5}\]
能夠看到,Q-learning與sarsa算法最大的不一樣在於更新Q值的時候,直接使用了最大的\(Q(s_{t+1},a)\)值——至關於採用了\(Q(s_{t+1},a)\)值最大的動做,而且與當前執行的策略,即選取動做\(a_t\)時採用的策略無關。 Off-Policy方式簡化了證實算法分析和收斂性證實的難度,使得它的收斂性很早就獲得了證實。Q-learning的完整流程圖以下:
屏幕快照 2016-01-09 上午12.35.01.png-140.7kB

小結

本篇介紹了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

相關文章
相關標籤/搜索