1. 程式人生 > >強化學習導論 第六章 瞬時時間差分法

強化學習導論 第六章 瞬時時間差分法

這一次開第六章,Temporal-Difference 方法,簡稱TD,可以翻譯為瞬時差分法。

TD方法在強化學習演算法中有很重要的地位,因為它是一個集大成的演算法。TD綜合了第五章所說的蒙特卡洛演算法和第四章所說的DP演算法的特點,既可以從真實經驗序列學習,無需環境模型,又可以根據已得到的估計值來更新新的估計值(bootstrap)。這是目前我們需要在腦海中構建的關於TD的一個基本特徵。

但是雖然TD綜合了蒙特卡洛和DP的特點,終歸也有區別。區別在哪?區別在於policy evaluation(也叫做prediction)的過程,也就是根據某一個policy \pi不斷更新其對應的value function v_\pi

的過程。熟悉前面內容的讀者們肯定知道,policy evaluation之後還有一個policy improvement(也叫做control)過程,在這個過程中,TD、monte carlo、DP則沒有太大的區別,都是採取基於generalized policy iteration (GPI) 的一些變體。因此,我們接下來重點關注它們在policy evaluation過程的區別。

6.1 TD Prediction

我們先來比較一下TD prediction過程和蒙特卡洛 prediction過程的區別:

首先上一個公式:V(S_t)\leftarrow V(S_t) + \alpha [G_t-V(S_t)]

上式體現了蒙特卡洛演算法的value更新規則,我們叫做constant-\alpha

蒙特卡洛演算法。這裡我們暫且不考慮多個episode之後的平均化操作,僅就一個episode來說,裡面出現的每一個S_t對應的value,需要根據這個episode徹底結束之後得到的G_t來更新,注意這裡的重點是“等待episode結束”。

再來看TD的更新規則公式(具體應該是TD(0)演算法,TD類演算法中的其中一種:

V(S_t)\leftarrow V(S_t)+\alpha [R_{t+1}+\gamma V(S_{t+1})-V(S_t)]

找不同,發現前面的G_t被換成了R_{t+1}+\gamma V(S_{t+1}),這就是區別所在。也就是說,TD演算法“不等到episode結束”,而是在下一個時間點,就拿剛剛得到的reward資訊和之前V(S_{t+1})的estimate來更新V(S_t)了。敏感的讀者在這裡好像還會嗅到一絲DP的含義:拿之前的估計值作為基準,估計新的值,是不是bootstrap!也是DP最大的一個特點。這就是為什麼說TD綜合了蒙特卡洛和DP的特點。

為了更好地說明,再來一個公式:

v_{\pi}(s) &=&E_{\pi}[G_t|S_t=s]\;\;\;\;\;\;\;\;\;\;(1)\\&=&E_{\pi}[\sum_{k=0}^{\infty}{\gamma^kR_{t+k+1}|S_t=s} ]\\&=&E_{\pi}[R_{t+1}+\gamma\sum_{k=0}^{\infty}{\gamma^kR_{t+k+2}}| S_t=s]\\&=&E_{\pi}[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_t=s]\;\;\;\;\;(2)

這是第三章講貝爾曼方程時的公式。可以看出,蒙特卡洛演算法是把(1)作為估計目標,然而expect return是不知道的,因此蒙特卡洛演算法用每個樣本的return來近似代替;DP把(2)作為估計目標,然而v_{\pi}(S_{t+1})是不知道的,於是就拿之前的估計值代替;TD則是兩個方式都用了:首先它用了取樣的方式來算(2),其次用之前的估計值V(S_{t+1})來代替真實的v_{\pi}(S_{t+1})

下面給出TD(0)的虛擬碼:

從back-up方式來看,DP使用的是full-backup,它基於所有可能的後續狀態分佈;而蒙特卡洛和TD使用的是sample back-up,它只基於當前發生的唯一的後續轉移情況。

6.2 Advantages of TD Prediction Methods

這一小節討論一下TD的優點。TD集成了蒙特卡洛和DP的特點,但是這種整合是好是壞呢?有什麼優勢呢?

首先有一點很明顯,就是TD比DP是有優勢的:不需要環境建模,不需要那些複雜的轉移概率。其次,TD比蒙特卡洛有優勢的一點是TD無需等待episode結束,可以實時計算。這一點非常重要,因為有時候一個episode會特別長,或者對於連續性任務來說,壓根就沒有episode,這時候TD的即時性就非常重要。

但是這樣就代表TD演算法是可靠的嗎?雖然TD保證了即時性,那麼它有沒有保證正確性呢?幸運的是這一點是成立的。當上面的step-size parameter \alpha恆定且足夠小或者逐漸遞減但是滿足隨即近似理論,最終的結果都是可以保證收斂的。隨機近似理論第二章提到過:

\sum_{k=1}^{\infty}{}\alpha _k(a)=\infty\;\;\;\;\;\;\;\;and \;\;\;\;\;\;\;\sum_{k=1}^{\infty}{}\alpha _k^2(a) < \infty

隨之而來的問題是:如果TD和蒙特卡洛演算法都能最終收斂,那麼誰更快呢?事實上,沒有理論證明誰更快,但是在實際的隨機任務中,通常TD會更快一點。

我們在此給出一個例子,直觀感受一下TD和MC的演算法特點。

『例』
我們把這個例子叫做“random walk”,隨機走動,從C開始出發,往左往右走的概率相同,只有到達最右側reward是1,其他狀態都是0。為了直觀比較這兩種演算法對於value function的估計值和真實值的誤差,我們需要知道真實value。這個例子故意特殊設計,使真實value很好算:每個狀態的真實value就是從該狀態起,到達最右側的概率。於是 v(A)=1/6; v(B)=2/6; v(C)=3/6; v(D)=4/6; v(E)=5/6。一些實驗結果如下:

上圖是固定 \alpha =0.1情況下,隨著episode數量增加,TD的估計值逐漸逼近真實值。
下圖是當取不同的 \alpha時,TD和constant- \alpha MC的誤差收斂曲線隨著episodes數量的變化趨勢.

6.3 Optimality of TD(0)

這一節討論一下TD(0)演算法最優解的特點以及和蒙特卡洛最優解的比較

(ps:這一節說的TD都特指TD(0)演算法,MC都特指constant-\alpha蒙特卡洛演算法)

 

在之前我們談到的兩種演算法的更新規則都是單次的,也就是說,對於MC演算法,每個episode結束之後更新一次value;對於TD,每個time step都更新一次相應state的value。根據前面的random walk案例,可以看出隨著\alpha的不同,MC和TD每次的收斂結果都不一樣,我們先記住這個結論,後面要對比。

現在我們引入另外一種更新規則:“batch updating”。因為在實際問題中有時並沒有很多episodes,很可能我們手裡就只有十幾個episodes,這個時候,如何進行TD或者蒙特卡洛呢?我們可以把所有這一批episodes中關於每個state的更新增量,全部算完加和,然後更新一次value function。然後再走一遍所有的episodes,用新的value function再算一次增量和,再更新一次value function,直到value 收斂。

注意,注意,在這種“batch updating”操作下,TD演算法的收斂結果卻不受stepsize \alpha的影響,只要\alpha足夠小,每次batch updating的結果都一樣,這個結論和前面TD在常規更新規則下的結論不一樣。但是在constant-\alpha 蒙特卡洛演算法中,收斂結果在兩種更新規則下均不確定。為了更好地理解這兩種不同的結論,我們看兩個例子,一步步來解釋清楚兩種演算法背後的機制的不同。

「例1」“batch updating”版本的random walk 在“batch updating”版本的“random walk”遊戲裡,有一點很不一樣:每一個新產生的episode,都會和之前所有經過的episodes一起算作新的batch,然後整體更新value。這個更新設定是為了凸顯MC和TD之間某種本質的不同。
下圖給出了這種更新情況下,MC(蒙特卡洛)演算法和TD演算法的收斂誤差比較,可以直觀看出,TD全方位無死角秒殺MC:

 

RMS error指的是“root mean-squared error”,也就是“均方根誤差”。從圖中可以看出,隨著新加入的episode不斷增加,TD的效果一直保持比MC強。

 

在batch updating操作下,從不斷減小估計值和真實訓練資料之間的誤差這個角度來說,MC的value估計可以說是最優的。但是很明顯TD的效果一直比MC好,為什麼TD竟然能比MC的最優估計還要好?原因是MC的最優是有限制的,而TD的最優更適合這種“不斷新增新資料”的更新規則。

為了更好地說明上述結論,我們再來看一個例子:

「例2」
假如我們有8個短episode,分別是

拿第一個來說,就是A狀態轉移到B狀態,reward是0,B狀態轉移到終止狀態,reward也是0。現在問題是V(A),V(B)分別是多少?很顯然,V(B)=3/4,這個毫無疑問,但是V(A)呢?有的人說既然A狀態轉移到B狀態的概率是100%,而B狀態的value是3/4,那麼毫無疑問,A狀態的value也是3/4。完美!看起來是對的,還有別的答案嗎?有的人又說了,V(A)也可能是0啊,因為根據MC的演算法,所有的episode中,從A開始到episode結束的return就是0啊。嗯,也沒問題啊。
那麼這兩個V(A),究竟那個是對的?
答案是:都對,只是做法不同而已。前者是TD的做法,後者是MC的做法。
我們進一步仔細討論一下。對於前者,其思路是這樣的:


注意到這個圖其實就是第三章提到的馬爾可夫狀態轉移圖。知道了V(B),構造了狀態之間的轉移關係,得到V(A),這其實對應的就是之前TD(0)公式的“差分”部分:
R_{t+1}+\gamma V(S_{t+1})-V(S_t)
對於後者,思路就是按照正常MC演算法,算出真實return的均值,為0。誠然,在這個例子中,MC得到的估計值和真實值之間的誤差是0,貌似是理想的。可是,面對新加入的episode,當進行“batch updating”時,你願意得到那個答案呢?其實第一個才是更合理的, 儘管它在當前的誤差並不比MC小,但是它可以在新的資料加入時,逐漸得到更小的誤差,它的泛化能力更強,也可以說TD能學到這批episode資料背後的規律。為什麼呢?因為它引入了相鄰變數之間的聯絡,說白了也就是引入了DP的bootstrap思想,而這個區別幫助TD找到了資料背後的規律。

這個例子很好的說明了MC和TD在演算法機制上的不同。我們詳細說一下:

  • MC可以在固定的訓練資料上得到誤差最小的估計值。從統計學角度講,MC的估計值是無偏估計,也就是如果有無限的樣本,MC最終的估計結果一定是正確的;然而對於不斷增加的樣本數,每一個新加入的樣本,與其他已有樣本之間都是相互獨立的,由於episode的長度不一定,MC演算法每次都要等到episode序列結束,在等待過程中會引入大量的不確定性,最終的估計結果則自然帶有很大的波動,也就是方差會很大。
  • TD可以在不斷增加的資料上更快地得到誤差較小的估計值。仍然從統計學角度看,TD的估計值是有偏的,因為它使用了別的狀態的value 估計來更新當前狀態的value,如果別的狀態的value不是真實值,那麼自然會引入一些偏差;然而由於TD只需要一步之後的結果,因此引入的波動性很小。另外,根據上個例子的結論,可以看出TD可以學到當前資料相關的馬爾可夫模型的最大似然估計:模型中狀態間的轉移概率,就是當前觀測序列中的轉移概率,模型中的期望reward,就是當前觀測序列中reward的均值,並依據這個模型估計給出絕對正確的value。因為一旦模型是對的,那麼value的估計值就一定是正確的。這個過程也叫做“確定性等價估計”,因為它等同於假定潛在模型是確定性的,而非近似的。

上述總結也能說明為什麼TD要比蒙特卡洛快很多(batch updating下)。因為TD總是在更新成更匹配資料的模型,估計值也越來越準確;而MC的已有估計結果會收到下一個episode隨機性的影響。這也能一定程度上解釋為何之前NonBatch規則下TD也比蒙特卡洛快,因為雖然NonBatch規則下TD並不能獲得“確定性等價估計”,但也可以認為是粗略朝這個方向在更新估計值。

從適用性來說,蒙特卡洛演算法更適合非馬爾可夫性質的任務,TD演算法更適合具備馬爾可夫性質的任務 。蒙特卡洛演算法要求episode必須是離散的且必須有terminate state,TD則沒這個要求。

6.4 Sarsa: On-policy TD Control

這一節開始,我們用TD代替第五章的MC,仍然按照GPI模式,整合到整個policy iteration過程中。TD在這裡扮演的角色和MC一樣,是policy evaluation部分。同樣的,TD演算法也需要平衡exploration和exploitation,因此也分成on-policy和off-policy兩類。這一節是講on-policy,下一節講off-policy。

第一步,就是用估算q_{\pi}(s,a)代替v_{\pi}(s,a)。結合如下更新公式:

Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha [R_{t+1}+\gamma Q(S_{t+1},A_{t+1})-Q(S_t,A_t)]

可知,如果我們要更新某個狀態-動作對(S_t,A_t)的Q,需要一個五元tuple<S_t,A_t,R_{t+1},S_{t+1},A_{t+1}>,這也是Sarsa名字的來歷(哈哈 有意思)。

第二步,確保Sarsa可以收斂。同on-policy的蒙特卡洛演算法一樣,Sarsa的收斂條件也是當所有的state-action pair都被訪問過無限次,因此需要採取Non-deterministic型別的\varepsilon -greedy或者\varepsilon -softpolicies。

依然是給出虛擬碼:

 

6.5 Q-learning: Off-policy TD control

 

Q-learning如果拿第五章的off-policy MC演算法來對比,就更容易理解了。Q-learning最簡單的形式是one-step Q-learning,定義如下:

Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha [R_{t+1}+\gamma \max_aQ(S_{t+1},a)-Q(S_t,A_t)]

注意和on-policy TD的區別:\gamma \max_aQ(S_{t+1},a),這表明在更新當前Q(S_t,A_t)時,不再用當前已經發生的下一步S_{t+1},A_{t+1}(由behavior policy生成),而是從target policy在S_{t+1}時結合所有可能的a得到的\{Q(S_{t+1},a)\}集合中選出最大的那個Q。

Q-learning 虛擬碼如下:

 

6.6 Games, Afterstates, and Other Special Cases

 

這一節主要討論一個叫做Afterstates的概念。

我們都知道state、state-action pair,那麼afterstate和這兩者的不同就是把這state和action合起來,構成一個afterstate集合。根據afterstate集合,又可以衍生出afterstate value function。

為什麼要這麼幹呢?因為在很多棋類遊戲比如tic-tac-toe中,(1)很多情況下,某個state經過某個action之後的狀態是確定性的;(2)很多state經過不同的action之後,會得到同樣的afterstate,而只維護一個afterstate就能夠減少很多多餘的state-action pair。

 

上圖給出了tic-tac-toe遊戲中一種典型的兩種state-pair最後得到同一個afterstate的情況。

 

這種簡化技巧可以減少agent的學習時間,還能應對某些不太容易使用state或者state-pair的任務。