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


接下來我們回顧一下動態規划算法(DP)和蒙特卡羅方法(MC)的特點,對於動態規划算法有如下特性:

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

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

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

而我們希望的算法是這樣的:

  • 不需要環境模型
  • 它不局限於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方法,在足夠多的實驗后,狀態值函數的估計是能夠收斂於真實值的。

那么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)收斂。對這個例子,可以作圖表示:
屏幕快照 2016-01-05 下午9.48.30.png-24.1kB
可見式(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算法估計。如下就是一個狀態-動作對序列的片段及相應的回報值。
屏幕快照 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM