1. 程式人生 > >強化學習(RLAI)讀書筆記第十一章 Off-policy Methods with Approximation

強化學習(RLAI)讀書筆記第十一章 Off-policy Methods with Approximation

本書第五章就已經講解過分別使用on-policy和off-policy方法來解決GPI框架裡固有的explore和exploit的矛盾。前兩章已經講了on-policy情形下對於函式近似的拓展,本章繼續講解off-policy下對函式近似的拓展,但是這個拓展比on-policy時更難更不同。在第六第七章中講到的off-policy方法可以拓展到函式近似的情況下,但是這些方法在半梯度法下不能像在on-policy下一樣良好地收斂。這一章我們將會討論收斂的問題並且更進一步觀察線性函式近似的理論。介紹一個可學習性(learnability)的概念以及討論能夠在off-policy下提供更強收斂性的新演算法。

函式近似下的off-policy演算法主要有兩個難點。第一個在網格形式下就有,另一個是源自函式近似方法。第一個難點就是對於更新目標的修正,另一個就是解決更新的分佈的問題。第五章和第七章的方法以及可以解決第一個修正更新目標的問題,儘管這些方法會帶來很大的方差但是在網格下和函式近似下都是必不可少的。這些方法到函式近似的拓展就可以解決第一個難點。

第二個在函式近似off-policy演算法中的難點需要額外的方法來解決,因為off-policy下產生的更新分佈不是根據on-policy分佈。而on-policy分佈對於半梯度方法的穩定性很重要。大致兩種方法可以解決這個問題。第一種是再次使用importance sampling的方法將更新的分佈變形至on-policy的分佈,這樣就能夠保證(線性逼近下)半梯度法的收斂性。另一種方法是使用真正的不需要依賴特定分佈就保證收斂的梯度下降法。我們這兩種方法都提供了。

11.1 Semi-gradient Methods

先進行描述如何把先前表格型off-policy情形下的演算法改編為半梯度法。這些方法解決了off-policy下的第一個難題也就是更新目標的修正。這些方法在某些情形下會發散,但是依然能夠成功使用。首先記住這些方法能夠在表格情形下保證收斂至漸進無偏的值,而表格情形是函式逼近的一種特殊情況。所以依然有可能將這些演算法與某些特徵選擇方法結合來達到類似的收斂效果。

為了將第七章中很多off-policy演算法改編為半梯度的形式,我們只需要簡單的把對於一個值函式列表的更新改編為對近似函式和其梯度的使用以及對引數w_{t}的更新。每一步中的importance sampling ratio為:

比如一步狀態值函式演算法也就是半梯度off-policy TD(0)演算法的更新和on-policy形式的更新沒有什麼不同,除了增加了取樣比重:

其中誤差\delta_{t}可以分為episodic和continuing兩種情形:

而對於使用動作值函式的情況,一步演算法是半梯度Expected Sarsa演算法:

這個演算法沒有使用importance sampling。對於表格形式下這很好理解,因為只學習了一個動作A_{t}的值函式,而不需要考慮其它動作。使用函式逼近這個概念就不那麼清晰,因為可能有不同的狀態動作對會改變當前值函式的估計,而這些對需要被不同對待。

在這些演算法的多步形式中,狀態值函式和動作值函式演算法都需要importance sampling。比如n步半梯度expected Sarsa演算法:

其中反饋也有episodic和continuing兩種形式(感覺此處有誤,個人感覺這似乎不是expected Sarsa而是普通Sarsa):

這裡寫的不太規範因為最後t+n可能大於T。

以及第七章還有一種不需要importance sampling的演算法:n步tree-backup演算法。它的半梯度法如下:

11.2 Examples of Off-policy Divergence

這節開始討論第二個off-policy使用函式近似下的難題,也就是更新的分佈不同於on-policy的分佈。描述了一些指導性的反例來說明半梯度法和其它一些演算法的不穩定性和發散性。

例子描述略過。結論是,引數更新的穩定性和步長引數無關,只需要步長是大於0。更大或者更小的步長只會影響引數w走向無窮大的速度而不是它是否會發散。

例子中的關鍵部分就是這個狀態的轉移一直重複的發生而沒有在其它轉移上進行過更新。這是一種off-policy下可能的情況,因為行為策略可能在別的轉以上都選擇了目標策略不會選擇的動作。這個簡單的例子說明了off-policy發散的原因,但是它並不完全,這只是一個MDP過程的片段。還有個例子叫做Baird's counterexample的使用狀態值函式V的例子。這個例子說明了只要是bootstrapping和半梯度法函式近似在不遵循on-policy分佈的時候進行結合,那麼引數都不會收斂。

對於Q-learning來說也有一個表示其發散的例子。而Q-learning如果收斂那麼他就是最能夠保證收斂的control演算法。因此進行了一些修補,只要是使用和目標策略足夠相近的策略就可以保證引數收斂比如動作策略是目標策略的\epsilon-greedy策略。目前還沒有發現在這種情況下Q-learning會發散。

那麼我們改變策略,並不是每一步僅進行一次值函式更新而是每一步都找到一個最好的最小平方差的值函式估計。但是這樣依然不能夠保證穩定性。

 

11.3 The Deadly Triad

目前討論的不穩定性和發散的風險都來源於對以下三個元素的組合,因此叫它們deadly triad:

  • 函式近似:一種強大可拓展對於有著超過儲存和計算極限大小的函式空間的問題的泛化方式。
  • 自舉:使用當前的估計值來組成更新目標值,而不是僅僅依賴完整的獎勵值序列(如MC方法那樣)。
  • off-policy 訓練:在一個不同於目標策略下的分佈的轉移上進行訓練。比如DP演算法遍歷每個狀態而不關心當前目標策略。

需要提到這個風險不是因為control演算法或者GPI。這個風險的原因很難分析,但是不論如何簡單的例子,只要使用了這三種元素的組合那麼就會導致不穩定。也不是來源於環境的不確定性或者學習演算法,因為它對於知道了所有環境模型細節的DP演算法依然嚴重。如果只使用這三個元素之二,那麼這種不穩定性就可以避免。因此來看看可以放棄哪一項。

對於function approximation來說是這三個元素裡最清楚的不能被放棄的一個。我們需要能夠延伸到大型問題以及更有表現力的演算法。

不使用bootstrapping是有可能的,只不過犧牲了計算效率和資料效率。使用MC方法需要記錄每次轉移的細節和最後中止狀態的獎勵。而使用boostrap和eligibility traces可以立刻處理產生的資料,能夠節省很多空間和通訊。而放棄bootstrapping在資料效率方面的損失也是巨大的。bootstrapping能夠帶來更快速的學習因為它能夠利用狀態的屬性以及識別一個狀態的能力。另一方面bootstrapping能夠修補狀態表示較差和其帶來的更差的泛化表示的問題。一個較差的狀態表示也會導致偏差,這就是bootstrapping演算法會導致更差的漸進逼近上限的原因。

而最後,off-policy學習。常常on-policy就已經夠用了。對於不需要環境模型的強化學習演算法,可以直接使用Sarsa演算法而不是Q-learning演算法。off-policy將行為從目標函式中分隔開,這可以看成一種方便但不是必須的。不過off-policy在很多其他方面很有作用。

11.4 Linear Value-function Geometry

為了更好的理解off-policy學習的穩定性難題,可以更加抽象的思考值函式逼近而不考慮學習演算法。可以想象所有可能的狀態值函式的一個空間,所有的函式都是從狀態到實數值v的對映:S\rightarrow R。大部分的值函式都不表示一個策略,更重要的是大部分的值函式不能夠使用函式逼近器來表示,因為使用了比狀態世紀少了很多的引數。

考慮有三個狀態S = \{ s_{1},s_{2},s_{3} \}和兩個引數w=(w_{1},w_{2})^{T}。因此可以把所有的值函式當做是一個三維空間的點。而每個引數向量w=(w_{1},w_{2})^{T}就是一個二位空間的一個點,同樣也是對於每個狀態賦予值的值函式v_{w}。普通的值函式和引數空間表示的值函式關係很複雜,但這裡我們只考慮線性值函式逼近的情況,因此只是一個簡單的平面,如同下圖。

考慮一個固定策略\pi,其真值v_{\pi}比較複雜無法在引數平面中表示,用在平面上方的一個點表示。那麼哪個能夠使用引數表示的函式是最接近這個真實函式的?這個問題有好幾個不同的答案。首先需要一個測量兩種函式之間距離的方法。定義了一個距離範數:,那麼\overline{VE}就可以簡單的使用表示。定義一個投影操作\prod來將任意的值函式投影到在我們定義的範數意義上最接近的可以在引數平面表示的值函式投影:

距離真值函式最近的投影即為上式所述。這是使用MC方法漸進得到的結果,雖然收斂很慢。

使用TD演算法會得到另外的答案。回憶起貝爾曼等式中值函式為:

只有真正的值函式才能滿足上述等式。因此如果使用近似值函式來替換等式中的v,左邊和右邊的差值可以看作是近似值與真實值之間的差值,我們叫做在狀態s時的Bellman error:

Bellman error是TD error的期望值。每一個狀態上的bellman error寫為一個向量則叫做Bellman error vector。這個向量的總的範樹叫做最小均方Bellman誤差:

總的來說不可能使這個誤差值歸為0,但是對於線性函式逼近來說有一個唯一的係數w使得其最小。這個在引數平面上的點一般是和最小化\overline{VE}的點不同。貝爾曼誤差向量在上圖中也有表示,它作為對近似值函式實施Bellman operator B_{\pi}得到。貝爾曼操作符定義為:

對於v來說貝爾曼誤差向量可以寫作。如果對引數平面的點實施bellman operator那麼一般會得到一個平面外的點。最終會慢慢收斂到真值函式v_{\pi},也是唯一一個對於Bellman operator的不動點:

這也是bellman等式的另一種寫法。

我們比較關注Bellman error vector投影到引數平面的結果。這個結果的範數值是另一種評估近似值函式誤差的方式。對於任意的近似值函式v,我們定義一個最小均方投影貝爾曼誤差:

對於線性近似函式總有一個近似的值函式\overline{PBE}為0。這也就是之前說的TD不動點w_{TD}。之前也說道,這個點在半梯度TD演算法off-policy訓練下不總是穩定的。一般也會與最小化\overline{BE}\overline{VE}的點不同。

 

11.5 Gradient Descent in the Bellman Error

現在考慮最小化這些誤差的方法,一般使用隨機梯度下降法。這些方法在期望上一直是在往目標函式減小的方向移動因此一般能夠獲得較好的收斂性。這些本書中已經描述的方法裡,只有MC方法中使用的是真正的SGD演算法。這個演算法在on-policy和off-policy下都能夠穩定的收斂,儘管收斂速度可能比使用了自舉的半梯度法更慢。但是使用了自舉的並不是真正的SGD法。半梯度法有可能在off-policy下發散,但是真正的SGD不會。

我們考慮目標函式Bellman error的起源和限制。儘管這個誤差經常使用,但我們得出的結論是這是個錯誤而且不會產生好的學習演算法。首先考慮的不是Bellman error而是更直接的TD error。考慮直接把TD error平方的期望值作為目標函式,那麼一個可能的函式叫做最小均方TD誤差:

最後一個等式是SGD方法需要的形式。那麼使用標準的SGD方法得到引數的更新迭代為:

可以看到除了最後一項前面的和半梯度下降TD演算法一樣。這裡它變成了真正的SGD演算法並且有很好的收斂性保證。把這個演算法叫做naive residual-gradient演算法。儘管它能保證收斂但不能保證收斂到需要的地方。

還有個更好的方法似乎可以是直接最小化Bellman error。因此可以嘗試重複之前的推導:

這個更新和取樣的方式叫做residual-gradient algorithm。如果只是簡單地在所有的期望的部分使用取樣值替代,那麼這個等式會退化到naive residual-gradient演算法。這個方式會是naive的原因在於等式中前後兩項都有下一狀態S_{t}的值函式。為了得到這個結果的無偏取樣,需要下一狀態的兩個獨立的估計值,但是在正常的與環境互動的過程中只能得到一個。這裡有兩種方式來使得這個方法起效。一是在確定性的環境中使用,因為對於確定性環境來說,兩次取樣下一狀態的值肯定是一樣的。另一種方式是從當前狀態中得到下一狀態的兩個獨立估計值。這在與環境真實互動的時候是不可能的,但是在模擬環境裡是可能的。作為一個真正的SGD方法,這個演算法會線上性和非線性情況下都收斂。而線上性情況下,收斂結果一定會是能夠最小化\overline{BE}的點。

但是這個方法的收斂性依然有三個不太讓人滿意的地方。第一就是實際經驗中這個方法很慢,比半梯度法慢得多。第二個地方就是演算法似乎依然會收斂到錯誤的值。第三點下一節說。

11.6 The Bellman Error is Not Learnable

這一章所說的可學習性的概念和機器學習中常用的不一樣。機器學習裡說的可學習是隻能夠高效學習,意味著能夠從樣例中在多項式時間內完成學習而不是指數級時間。但是在這裡,科學系性質的是是否能夠學習到,而不關心樣例的數量或者時間。結果是強化學習中很多明顯關注的量都不能夠從有限數量的經驗資料中學習到。這些量定義的很好而且能夠根據環境內部結構的給定值時得到,但是不能夠從觀察到的特徵向量動作和獎勵序列中計算出或者估計到。所以說他們是不可學習的。從這個意義上Bellman error目標函式是不可學習的。

舉了個栗子(略)。栗子說明了沒有辦法學習出MDP是否是確定性的以及狀態數量。同樣也說明了\overline{VE}是不可學習的。但是雖然是這樣,但是擁有相同資料分佈的MDP也會擁有相同的最優引數。因此\overline{VE}依然是個有用的目標,因為最小化這個目標的引數是可學習的。

再介紹個確定可以學習的目標函式,那就是每個反饋與值估計之間的均方誤差:

可以看出除了後面一項方差,兩個目標函式是一樣的,因此也會擁有一樣的最優引數解。

然後回到\overline{BE}。這個值像\overline{VE}一樣可以MDP的知識中得到但是不能夠從資料中學習到。但是它不像\overline{VE}的地方是它的最小值解也是不可學習的。我們也考慮了另外的使用自舉的目標函式PBE和TDE,他們是可以學習的,他們的最優解一般和\overline{BE}互相之間都是不一樣的。

因此\overline{BE}是不可學習的,這使得\overline{BE}只能用於基於模型的設定中。residual-gradient演算法只能夠最小化\overline{BE}因為它能夠允許取樣兩次同一狀態的不同值,而且必須是同一狀態而只是狀態特徵向量相同的狀態。因此並沒有辦法可以做到。所以最小化\overline{BE}需要首先能夠取得MDP的一些固有屬性。這是個很重要的限制。因此我們更多關注\overline{PBE}

11.7 Gradient-TD Methods

現在考慮使用SGD演算法最小化\overline{PBE}。作為一個真SGD方法,Gradient-TD方法即使在off-policy訓練和非線性函式逼近下都擁有較好的收斂特性。線性情況下有一個特殊的解,TD固定點w_{TD},在這個點\overline{PBE}為0。這個解可以通過使用最小平方的方法接觸,但是這是個平方複雜度的方法。因此我們選擇使用SGD方法,可以得到線性複雜度和收斂特性。Gradient-TD法距離達到這個目標很接近,只需要一個線性大致兩倍的計算複雜度。

為PBE目標函式推導SGD方法(線性情況),可以先把目標函式寫為矩陣形式:

目標相對於係數w的梯度為:

為了把其變為SGD方法,我們需要進行某些量的取樣並將其當做它的期望值。上面的三個變數矩陣都可以寫成期望的形式:

這也就是半梯度法TD(0)更新部分的期望。前一項是這個更新的轉置,得到:

最終中間一個因子是下面的量的逆,即:

於是把上述公式進行替代得到:

我們不能將式子中的每個值進行取樣然後相乘,這樣會得到有偏的估計值。有個想法是將這三個期望值分別進行估計之後再將他們組合起來得到梯度的無偏估計。這可以使用,但是需要大量的計算資源,特別是對於前兩項期望的儲存。

考慮獨立儲存某些估計值然後將它們同取樣值進行組合是一個好的方法並且也用在了Gradient-TD法裡。Gradient-TD法估計並存儲前兩項的積。這些銀子是個dxd的矩陣和一個d維向量,所以他們的積是一個d維向量,就和引數w一樣。因此得到v:

這線上性監督學習裡很常見。標準的SGD方法漸進地找到能夠最小化期望平方誤差的向量v。也叫作最小平方均值規則(LMS):

我們可以使用這個方法達到每步線性複雜度的儲存和更新。

因此在有了儲存的v的情況下,使用SGD演算法更新引數w_{t}的公式為:

這個演算法叫做GTD2.如果其中的內積首先計算過,那麼整個演算法就是線性複雜度。

而還有一個稍微改進的演算法可以在使用v之間更多一些分析之後得到,也就是:

同樣在計算內積之後是個線性複雜度的方法。這個演算法可以叫做TDC或者GTD(0)。

GTD2和TDC演算法都包含了兩個部分的演算法,更新w的部分和更新v的部分。前一個部分依賴於第二部分的完成,而第二部分的計算不收到第一部分的影響。這種非對稱依賴性叫做cascade。我們在cascade裡一般假設第二部分的計算比第一部分更快。這些方法的收斂性證明裡更能看出這一點。

Gradient-TD演算法目前是研究最充分而且廣泛使用的穩定的off-policy的演算法。在這之上還有很多研究。

11.8 Emphatic-TD Methods

然後我們轉到第二個最主要的能夠獲得簡單高效的帶函式逼近的off-policy學習的策略。線性半梯度TD演算法在on-policy分佈下高效而穩定。但是在off-policy學習中,我們重新為每個狀態轉移使用importance sampling賦予權重,但是狀態分佈依然是行為策略下的分佈。一個簡單的想法是能夠重新賦予每個狀態權重,這樣就能把反饋改變至符合on-policy的分佈。這樣之後就能夠使用on-policy下的方法得到穩定而收斂的結果。這就是Emphatic-TD方法。

實際上on-policy distribution是個不那麼正確的概念,因為可以有很多個on-policy的分佈,每一個都能夠保證演算法收斂。考慮一個undiscounted的episodic問題。每個episode結束的方式是由環境轉移概率決定的,但是episode有可能有不同的起始方式。無論episode是如何開始的,如果所有的狀態轉移都是根據目標策略,那麼狀態分佈就是一個on-policy分佈。

如果是一個有discounting的情況,那麼它可以被看作是一個目標狀態的部分或者概率結束。比如如果\gamma = 0.9,那麼我們可以認為每一步都有0.1的概率到達結束狀態然後立即從下一狀態重新啟動。這種思考discounting的方式有個更一般的概念叫做pseudo termination,也就是一個不會影響狀態轉移序列的終止狀態。但是它會影響學習過程以及正在學習的量。這種偽結束狀態的方式對於off-policy來說是很重要的。因為重啟是可選的,而且中止狀態讓我們不需要維持讓每個狀態轉移都在當前策略分佈下。也就是說,如果我們不把新狀態看作是重啟,那麼discounting會迅速帶給我們一個有限值的on-policy分佈。(????)

一步Emphatic-TD演算法如下:

這個演算法理論上會收斂到最優解,但是實際上並不會。因為方差太大。

11.9 Reducing Variance

off-policy學習演算法本質上就會帶來比on-policy方法更大的方差。因為我們有很多在期望形勢下很穩定的演算法,因此我們想要找到減少方差的方法。因為off-policy方法會使用到相對概率,而相對概率是獨立的,雖然他們的期望值是1但實際上的值會有很大的方差。因為相對概率會乘以更新步長,因此有時候會進行特別大的更新,這是不應該的。依賴平均梯度的SGD方法效果很好,但是直接使用一個梯度取樣的經常會不穩定。

第五章看到了使用weighted Importance sampling能夠帶來比ordinary importance sampling演算法更低的更新方差。但是將其應用到函式逼近裡是很困難的,而且可能需要線性時間複雜度。

Tree Backup演算法表明不使用Importance Sampling更新off-policy演算法是可行的。

另外,還有的策略是允許目標策略部分根據行為策略來定,這樣就不會導致兩個策略有很大的出入也就不需要相對概率。

 

11.10 Summary

off-policy學習是一個很大的挑戰。表格形式的Q-learning演算法讓off-policy看起來很容易,而且也有expected Sarsa和tree backup這種延伸演算法。但是這一章我們可以看到這種延伸對於函式逼近來說會帶來更多的挑戰而且迫使我們深入對強化學習演算法的理解。

使用off-policy方法的願意之一是給出解決exploit和explore矛盾更靈活的方法。另一個原因是將學習過程從行為策略中解放,而且避免目標策略的tyranny。TD學習方法可以使用一個數據流來並行學習多個經驗。但是不是所有的情形下都適用。

這張我們把挑戰分為兩個部分。第一部分是從行為策略中得到更新目標。這可以直接使用在表格情形下得到的方法,儘管會增加方差和拖慢學習速度。

另一個部分是半梯度TD法在利用自舉時帶來的不穩定性。嘗試了幾種方法。第一是直接使用真正的SGD方法而非半梯度法。但是我們得出結論這個方法在很多情形下不適用。而且也是不可能得出結果的,因為\overline{BE}的梯度是不能只通過特徵向量的經驗而不使用MDP內部特性來學習得到。第二種是在Bellman error的投影上使用SGD法,也就是Gradient-TD方法。這個方法中\overline{PBE}的梯度是可以學習的。複雜度是線性。第三是最新的解決方法,也就是Emphatic-TD法,重新定義了reweighting更新的方法。這樣能夠儲存那些使得on-policy學習能夠在簡單的半梯度法下保持穩定的特性。

這個部分依然有很多研究潛力。