機器學習與深度學習系列連載: 第三部分 強化學習(五) 不基於模型的控制(SARSA、Q-Learning)

不基於模型的控制

通過本篇的學習,我們將會學習到如何訓練一個Agent,使其能夠在完全未知的環境下較好地完成任務,得到儘可能多的獎勵。

1.簡介 Introduction

上一篇主要講解了在模型未知的情況下如何進行預測。所謂的預測就是評估一個給定的策略,也就是確定一給定策略下的狀態(或狀態行爲對)的價值函數。這篇的內容主要是在模型未知的條件下如何優化價值函數,這一過程也稱作模型無關的控制。

現實中有很多此類的例子,比如控制一個大廈內的多個電梯使得效率最高;控制直升機的特技飛行,機器人足球世界盃上控制機器人球員,圍棋遊戲等等。所有的這些問題要麼我們對其模型運行機制未知,但是我們可以去經歷、去試;要麼是雖然問題模型是已知的,但問題的規模太大以至於計算機無法高效的計算,除非使用採樣的辦法。本節的內容就專注於解決這些問題。

根據優化控制過程中是否利用已有或他人的經驗策略來改進我們自身的控制策略,我們可以將這種優化控制分爲兩類:

根據優化控制過程中是否利用已有或他人的經驗策略來改進我們自身的控制策略,我們可以將這種優化控制分爲兩類:

  • 一類是現時策略學習(On-policy Learning)
    其基本思想是個體已有一個策略,並且遵循這個策略進行採樣,或者說採取一系列該策略下產生的行爲,根據這一系列行爲得到的獎勵,更新狀態函數,最後根據該更新的價值函數來優化策略得到較優的策略。由於要優化的策略就是當前遵循的策略,這裏姑且將其翻譯爲“現時策略”。

  • 另一類是離線策略學習(Off-policy Learning)
    其基本思想是,雖然個體有一個自己的策略,但是個體並不針對這個策略進行採樣,而是基於另一個策略進行採樣,這另一個策略可以是先前學習到的策略,也可以是人類的策略等一些較爲優化成熟的策略,通過觀察基於這類策略的行爲,或者說通過對這類策略進行採樣,得到這類策略下的各種行爲,繼而得到一些獎勵,然後更新價值函數,即在自己的策略形成的價值函數的基礎上觀察別的策略產生的行爲,以此達到學習的目的。這種學習方式類似於“站在別人的肩膀上可以看得更遠”。由於這些策略是已有的策略,這裏姑且翻譯爲“離線策略”。

2. 現時策略蒙特卡洛控制 On-Policy Monte-Carlo Control

我們使用的主要思想仍然是動態規劃的思想。先來回顧下動態規劃是如何進行策略迭代的。
(1) 通用策略迭代(複習)
在這裏插入圖片描述

通用策略迭代的核心是在兩個交替的過程之間進行策略優化。一個過程是策略評估,另一個是改善策略。如上圖的三角形區域所示,從一個策略π和一個價值函數V開始,每一次箭頭向上代表着利用當前策略進行價值函數的更新,每一次箭頭向下代表着根據更新的價值函數貪婪地選擇新的策略,說它是貪婪的,是因爲每次都採取轉移到可能的、狀態函數最高的新狀態的行爲。最終將收斂至最優策略和最優價值函數。

注意使用動態規劃算法來改善策略是需要知道某一狀態的所有後續狀態及狀態間轉移概率:

在這裏插入圖片描述

(2) 不基於模型控制的兩個條件

那麼這種方法是否適用於模型未知的蒙特卡洛學習呢?答案是否定的,這其中至少存在兩個問題。

  • 其一是在模型未知的條件下無法知道當前狀態的所有後續狀態,進而無法確定在當前狀態下采取怎樣的行爲更合適。
    解決這一問題的方法是,使用狀態行爲對下的價值Q(s,a)來代替狀態價值 :目的是可以改善策略而不用知道整個模型,只需要知道在某個狀態下采取什麼什麼樣的行爲價值最大即可。具體是這樣:我們從一個初始的Q和策略π\pi開始,先根據這個策略更新每一個狀態行爲對的q值,s隨後基於更新的Q確定改善的貪婪算法。
    在這裏插入圖片描述

  • 還存在一個問題,即當我們每次都使用貪婪算法來改善策略的時候,將很有可能由於沒有足夠的採樣經驗而導致產生一個並不是最優的策略,我們需要不時的嘗試一些新的行爲,這就是探索(Exploration)

(3) 示例——貪婪行爲選擇

如圖:在你面前有兩扇門,考慮如下的行爲、獎勵並使用貪婪算法改善策略

在這裏插入圖片描述

你打開左側門得到即時獎勵爲0:V(left) = 0;

你打開右側門得到即時獎勵1:V(right) = +1;

在使用貪婪算法時,接下來你將會繼續打開右側的門,而不會嘗試打開左側門

你打開右側門得到即時獎勵+3:V(right) = +2;

你打開右側門得到即時獎勵+2:V(right) = +2;

這種情況下,打開右側門是否就一定是最好的選擇呢?答案顯而易見是否定的。因此完全使用貪婪算法改善策略通常不能得到最優策略。爲了解決這一問題,我們需要引入一個隨機機制,以一定的概率選擇當前最好的策略,同時給以其它可能的行爲一定的機率,這就是Ɛ-貪婪探索。

(4) Ɛ-貪婪探索

Ɛ-貪婪探索的目標使得某一狀態下所有可能的行爲都有一定非零機率被選中執行,也就保證了持續的探索,1-\epsilon的概率下選擇當前認爲最好的行爲,而\epsilon的概率在所有可能的行爲中選擇(也包括那個當前最好的行爲)。數學表達式如下:

在這裏插入圖片描述

定理:使用Ɛ-貪婪探索策略,對於任意一個給定的策略\pi,我們在評估這個策略的同時也總在改善它。

證明:
在這裏插入圖片描述

注:在證明上述定理過程中使用的不等式是在經過合理、精心設計的。

解決了上述兩個問題,我們最終看到蒙特卡洛控制的全貌:使用Q函數進行策略評估,使用Ɛ-貪婪探索來改善策略。該方法最終可以收斂至最優策略。如下圖所示:

在這裏插入圖片描述

圖中每一個向上或向下的箭頭都對應着多個Episode。也就是說我們一般在經歷了多個Episode之後才進行依次Q函數更新或策略改善。實際上我們也可以在每經歷一個Episode之後就更新Q函數或改善策略。但不管使用那種方式,在Ɛ-貪婪探索算下我們始終只能得到基於某一策略下的近似Q函數,且該算法沒沒有一個終止條件,因爲它一直在進行探索。因此我們必須關注以下兩個方面:

  • 一方面我們不想丟掉任何更好信息和狀態
  • 另一方面隨着我們策略的改善我們最終希望能終止於某一個最優策略,因爲事實上最優策略不應該包括一些隨機行爲選擇。爲此引入了另一個理論概念:GLIE。

(5) GLIE
GLIE(Greedy in the Limit with Infinite Exploration),直白的說是在有限的時間內進行無限可能的探索。具體表現爲:所有已經經歷的狀態行爲對(state-action pair)會被無限次探索;另外隨着探索的無限延伸,貪婪算法中Ɛ值趨向於0。例如如果我們取\epsilon = 1/k(k爲探索的Episode數目),那麼該Ɛ貪婪蒙特卡洛控制就具備GLIE特性。

基於GLIE的蒙特卡洛控制流程如下:

  1. 對於給定策略π\pi,採樣第k個Episode: S1,A1,R2,...,STπ{{ S_{1}, A_{1}, R_{2}, ..., S_{T} }} ~ \pi
  2. 對於該Episode裏出現的每一個狀態行爲對StAtS_t和A_t,更其計數和Q函數:N(St,At)N(St,At)+1Q(St,At)+1N(St,At)(GtQ(St,At))N(S_t, A_t) \leftarrow N(S_t, A_t) + 1 , Q(S_t, A_t) \leftarrow + \frac{1}{N(S_t, A_t)} (G_t - Q(S_t, A_t))
  3. 基於新的Q函數改善以如下方式改善策略:ϵ1/k,πϵgreedy(Q)\epsilon \leftarrow 1/k , \pi \leftarrow \epsilon-greedy(Q)

定理:GLIE蒙特卡洛控制能收斂至最優的狀態行爲價值函數。

(6) 舉例- 21點遊戲的最優策略

該圖最終給出了二十一點比賽時的最優策略

最優策略是這樣:

  • 當你手上有可用A時,大多數情況下當你的牌面和達到17或18時停止要牌,如果莊家可見的牌面在2-9之間,你選擇17,其它條件選擇18;
  • 當你手上沒有A時,最優策略提示大多數情況下牌面和達到16就要停止叫牌,當莊家可見的牌面在2-7時,這一數字更小至13甚至12。這種極端情況下,寧願停止叫牌等待讓莊家的牌爆掉。

在這裏插入圖片描述

3.現時策略時序差分控制 On-Policy Temporal-Difference Control

TD相比MC有很多優點:低變異性,可以在線實時學習,可以學習不完整Episode等。因此很自然想到是否可以在控制問題上使用TD學習而不是MC學習?答案是肯定的。

(1) SARSA
SARSA的名稱來源於下圖所示的序列描述:針對一個狀態S,以及一個特定的行爲A,進而產生一個狀態行爲對(SA),與環境交互,環境收到個體的行爲後會告訴個體即時獎勵R以及後續進入的狀態S’;接下來個體遵循現有策略產生一個行爲A’,根據當前的狀態行爲價值函數得到後一個狀態行爲對(S’A’)的價值(Q),利用這個Q值更新前一個狀態行爲對(SA)的價值。
在這裏插入圖片描述

更直觀的解釋是這樣:一個Agent處在某一個狀態S,在這個狀態下它可嘗試各種不同的行爲,當遵循某一策略時,會根據當前策略選擇一個行爲A,個體實際執行這個行爲,與環境發生實際交互,環境會根據其行爲給出即時獎勵R,並且進入下一個狀態S’,在這個後續狀態S’,再次遵循當前策略,產生一個行爲A’,此時,個體並不執行該行爲,而是通過自身當前的狀態行爲價值函數得到該S’A’狀態行爲對的價值,利用該價值同時結合個體S狀態下采取行爲A所獲得的即時獎勵來更新個體在S狀態下采取A行爲的(狀態)行爲價值。

與蒙特卡洛控制不同的時,每一個時間步,也就是在單個Episode內每一次個體在狀態S_t採取一個行爲後都要更新Q值,同樣使用\epsilon-貪婪探索的形式來改善策略。

在這裏插入圖片描述

  • 現時策略控制的SARSA算法

在這裏插入圖片描述

注:
算法中的Q(s,a)是以一張大表存儲的,這不適用於解決規模很大的問題;

對於每一個Episode,在S狀態時採用的行爲A是基於當前策略的,同時該行爲也是實際Episode發生的行爲,在更新SA狀態行爲對的價值循環裏,個體並不實際執行在S’下的A’行爲,而是將行爲A’留到下一個循環執行。

定理:滿足如下兩個條件時,Sarsa算法將收斂至最優行爲價值函數。

條件一:任何時候的策略πt(as)\pi_t(a|s)符合GLIE特性;

條件二:步長係數αt滿足:
t=1at=t=1at2<\sum_{t=1}^{\infty}{a_t} = \infty 且 \sum_{t=1}^{\infty}{a_t^2} < \infty

(2) 舉例- 格子的世界

已知:如圖所示,環境是一個10*7的長方形格子世界,同時有一個起始位置S和一個終止目標位置G,水平下方的數字表示對應的列中有一定強度的風,當該數字是1時,個體進入該列的某個格子時,會按圖中箭頭所示的方向自動移動一格,當數字爲2時,表示順風移動2格,以此類推模擬風的作用。任何試圖離開格子世界的行爲都會使得個體停留在移動前的位置。對於個體來說,它不清楚整個格子世界的構造,即它不知道格子是長方形的,也不知道邊界在哪裏。也不清楚起始位置、終止目標位置的具體爲止。對於它來說,每一個格子就相當於一個封閉的房間,在沒推開門離開當前房間之前它無法知道會進入哪個房間。個體具備記住曾經去過的格子的能力。格子可以執行的行爲是朝上、下、左、右移動一步。

在這裏插入圖片描述

問題:個體如何才能找到最短從起始格子S到終止目標格子G的最短路線?

解答:首先將這個問題用強化學習常用的語言重新描述下。這是一個不基於模型的控制問題,即個體在不清楚模型機制條件下試圖尋找最優策略的問題。在這個問題中,環境信息包括格子世界的形狀是10*7的長方形;起始和終止格子的位置,可以用二維或一維的座標描述,同時還包括個體在任何時候所在的格子位置。風的設置是環境動力學的一部分,它與長方形的邊界共同及個體的行爲共同決定了個體下一步的狀態。個體從環境觀測不到自身位置、起始位置以及終止位置信息的座標描述,個體在與環境進行交互的過程中學習到自身及其它格子的位置關係。個體的行爲空間是離散的四個方向。可以設置個體每行走一步獲得即時獎勵爲-1,直到到達終止目標位置的即時獎勵爲0,藉此希望找到最優策略。衰減係數λ可設爲1。

其最優路線如下圖所示:

在這裏插入圖片描述

個體通過學習發現下面的行爲序列(共15步)能夠得到最大程度的獎勵: -14

R,R,R,R,R,R,R,R,R,D,D,D,D,L,L

在個體找到這個最優行爲序列的早期,由於個體對環境一無所知,SARSA算法需要嘗試許多不同的行爲,因此在一開始的2000多步裏,個體只能完成少數幾個完整的Episode,但隨着個體找到一條鏈接起點到終點的路徑,其快速優化策略的能力就顯現的很明顯了,因爲它不需要走完一個Episode才能更新行爲價值,而是每走一步就根據下一個狀態能夠得到的最好價值來更新當前狀態的價值。

在實踐環節,我們使用Python編寫具體的SARSA代碼。讀者可以根據這些代碼深入理解SARSA的核心思想。

(3) n-步SARSA

我們學習了n-步收穫,這裏類似的引出一個n-步Sarsa的概念。觀察下面一些列的式子:

在這裏插入圖片描述
這裏的qtq_t對應的是一個狀態行爲對<st,at><s_t, a_t>,表示的是在某個狀態下采取某個行爲的價值大小。如果n = 1,則表示狀態行爲對<st,at><s_t, a_t>的Q價值可以用兩部分表示,一部分是離開狀態st得到的即時獎勵Rt+1R_{t+1},即時獎勵只與狀態有關,與該狀態下采取的行爲無關;另一部分是新狀態行爲對<st+1,at+1><s_{t+1}, a_{t+1}>的Q價值:環境給了個體一個新狀態st+1s_{t+1},觀察在st+1s_{t+1}狀態時基於當前策略得到的行爲at+1a_{t+1}時的Q(st+1,at+1)Q(s_{t+1}, a_{t+1}),後續的Q價值考慮衰減係數。當n = 2時,就向前用2步的即時獎勵,然後再用新狀態的Q價值代替;如果n=n = \infty,則表示一直用即時獎勵計算Q值,直至Episode結束,個體進入終止狀態,獲得終止狀態的即時獎勵。

定義n-步Q收穫(Q-return):

在這裏插入圖片描述

這個定義公式裏沒有體現出狀態行爲對的概念,理解起來容易與之前的n-步G收穫混淆,其實Q本身是包含行爲的,也就是在當前策略下基於某一個狀態產生的行爲。Q收穫與G收穫是有一定關係的,這可以結合第二章的Bellman方程來理解

可以把n-步Sarsa用n-步Q收穫來表示,如下式:
在這裏插入圖片描述

假如我們給n-步Q收穫的每一個收穫分配一個權重,如下圖引入參數λ分配權重,並按權重對每一步Q收穫求和,那麼將得到qλq^\lambda收穫,它結合了所有n-步Q收穫:

在這裏插入圖片描述

(4) Sarsa(λ)

  • Sarsa(λ)前向認識:
    如果用某一狀態的qλq^\lambda收穫來更新狀態行爲對的Q值,那麼可以表示稱如下的形式:
    在這裏插入圖片描述

這就是前向認識Sarsa(λ),使用它更新Q價值需要遍歷完整的Episode.

  • Sarsa(λ)反向認識:
    與上一講對於TD(λ)的反向認識一樣,引入效用追蹤(Eligibility Trace)概念,不同的是這次的E值針對的不是一個狀態,而是一個狀態行爲對:
    在這裏插入圖片描述

它體現的是一個結果與某一個狀態行爲對的因果關係,與得到結果最近的狀態行爲對,以及那些在此之前頻繁發生的狀態行爲對對得到這個結果的影響最大。

下式是引入ET概念的SARSA(\lambda)之後的Q值更新描述:
在這裏插入圖片描述

引入ET概念,同時使用SARSA(λ)SARSA(\lambda)將可以更有效的在線學習,因爲不必要學習完整的Episode,數據用完即可丟棄。ET通常也是更多應用在在線學習算法中(online algorithm)。

具體的SARSA(λ)SARSA(\lambda)算法如下:

在這裏插入圖片描述

這裏要提及一下的是E(s,a)在每瀏覽完一個Episode後需要重新置0,這體現了ET僅在一個Episode中發揮作用;其次要提及的是算法更新Q和E的時候針對的不是某個Episode裏的Q或E,而是針對個體掌握的整個狀態空間和行爲空間產生的Q和E。

實際如果是基於查表的方式實現該算法,其速度明顯比Sarsa要慢。畢竟帶E的算法主要應用於在線更新。

下圖則用了格子世界的例子具體解釋了Sarsa和Sarsa(λ)算法區別:假定最左側圖描述的路線是個體採取兩種算法中的一個得到的一個完整Episode的路徑。爲了下文更方便描述、解釋兩個算法之間的區別,先做幾個合理的小約定:1)認定每一步的即時獎勵爲0,直到終點處即時獎勵爲1;2)根據算法,除了終點以外的任何狀態行爲對的Q值可以是任意的,但我們設定所有的Q值均爲0;3)該路線是第一次找到終點的路線。

在這裏插入圖片描述

Sarsa(0)算法:

由於是現時策略學習,一開始個體對環境一無所知,即Q值均爲0,它將隨機選取移步行爲。在到達終點前的每一個位置S,個體依據當前策略,產生一個移步行爲,執行該行爲,環境會將其放置到一個新位置S’,同時給以即時獎勵0,在新的位置S’上,根據當前的策略它會產生新位置下的一個行爲,個體不執行該行爲,僅僅在表中查找新狀態下新行爲的Q’值,由於Q=0,依據更新公式,它將把剛纔離開的位置以及對應的行爲的狀態行爲對價值Q<S,A>更新爲0。如此直到個體最到達終點位置S_G,它獲得一個即時獎勵1,此時個體會依據公式更新其到達終點位置前所在那個位置(暫用S_H表示,也就是圖中終點位置下方,向上的箭頭所在的位置)時採取向上移步的那個狀態行爲對價值Q<S_H,A_{up}>值,它將不再是0,這是個體在這個Episode中唯一一次用非0數值來更新Q值。這樣完成一個Episode,此時個體已經並只進行了一次有意義的行爲價值函數的更新;同時依據新的價值函數產生了新的策略。這個策略絕大多數與之前的相同,只是當個體處在某一個特殊位置時將會有一個確定的行爲:直接向上移步,這個位置就是與終點相鄰的下方的格子。這裏請不要誤認爲Sarsa算法只在經歷一個完整的Episode之後才更新,在這個例子中,由於我們的設定,它每走一步都會更新,只是多數時候更新的數據和原來一樣罷了。

此時如果要求個體繼續學習,則環境將其放入起點。個體的第二次尋路過程一開始與首次一樣都是盲目隨機的,直到其進入終點位置下方的位置S_H,在這個位置,個體更新的策略要求其選擇向上的行爲直接進入終點位置S_G。

同樣,經過第二次的尋路,個體瞭解到到達終點下方的位置S_H價值比較大,因爲在這個位置直接採取向上移步的行爲就可以拿到到達終點的即時獎勵。因此它會將其通過移動一步可以到達S_H的其它位置以及相應的到達 S_H 位置索要採取的行爲這一狀態行爲對的價值提升。如此反覆,如果採用greedy策略更新,個體最終將得到一條到達終點的路徑,不過這條路徑的倒數第二步永遠是在終點位置的下方。如果採用Ɛ-greedy策略更新,那麼個體還會嘗試到終點位置的左上右等其它方向的相鄰位置價值也比較大,此時個體每次完成的路徑可能都不一樣。通過重複多次搜索,這種Q值的實質性的更新將覆蓋越來越多的狀態行爲對,個體在早期採取的隨機行爲的步數將越來越少,直至最終實質性的更新覆蓋到起始位置。此時個體將能直接給出一條確定的從起點到終點的路徑。

Sarsa(λ)算法:

該算法同時還針對每一次Episode維護一個關於狀態行爲對<S,A>的E表,初始時E表值均爲0。當個體首次在起點S_0決定移動一步A_0(向右)時,它被環境告知新位置爲S_1,此時發生如下事情:首先個體會做一個標記,使E<S_0, A_0>的值增加1,表明個體剛剛經歷過這個事件<S_0, A_0>;其次它要估計這個事件的對於解決整個問題的價值,也就是估計TD誤差,此時依據公式結果爲0,說明個體認爲在起點處向右走沒什麼價值,這個“沒有什麼價值”有兩層含義:不僅說明在 S_0處往右目前對解決問題沒有積極幫助,同時表明個體認爲所有能夠到達 S_0狀態的狀態行爲對的價值沒有任何積極或消極的變化。隨後個體將要更新該Episode中所有已經經歷的Q<S,A>值,由於存在E值,那些在<S_0,A_0> 之前近期發生或頻繁發生的<S,A>的Q值將改變得比其他Q值明顯些,此外個體還要更新其E值,以備下次使用。對於剛從起點出發的個體,這次更新沒有使得任何Q值發生變化,僅僅在E<S_0, A_0>處有了一個實質的變化。隨後的過程類似,個體有意義的發現就是對路徑有一個記憶,體現在E裏,具體的Q值沒發生變化。這一情況直到個體到達終點位置時發生改變。此時個體得到了一個即時獎勵1,它會發現這一次變化(從S_H採取向上行爲A_H到達S_G)價值明顯,它會計算這個TD誤差爲1,同時告訴整個經歷過程中所有<s,a>,根據其與<S_H,A_H>的密切關係更新這些狀態行爲對的價值Q(上圖右所示),個體在這個Episode中經歷的所有狀態行爲對的Q值都將得到一個非0的更新,但是那些在個體到達S_H之前就近發生以及頻繁發生的狀態行爲對的價值提升得更加明顯。

在圖示的例子中沒有顯示某一狀態行爲頻發的情況,如果個體在尋路的過程中繞過一些彎,多次到達同一個位置,並在該位置採取的相同的動作,最終個體到達終止狀態時,就產生了多次發生的<s,a>,這時的<s,a>的價值也會得到提升。也就是說,個體每得到一個即時獎勵,同時會對所有歷史事件的價值進行依次更新,當然那些與該事件關係緊密的事件價值改變的較爲明顯。這裏的事件指的就是狀態行爲對。在同一狀態採取不同行爲是不同的事件。

當個體重新從起點第二次出發時,它會發現起點處向右走的價值不再是0。如果採用greedy策略更新,個體將根據上次經驗得到的新策略直接選擇右走,並且一直按照原路找到終點。如果採用Ɛ-greedy策略更新,那麼個體還會嘗試新的路線。

由於爲了解釋方便,做了一些約定,這會導致問題並不要求個體找到最短一條路徑,如果需要找最短路徑,需要在每一次狀態轉移時給個體一個負的獎勵。

Sarsa(λ)算法裏在狀態每發生一次變化後都對整個狀態空間和行爲空間的Q和E值進行更新,而事實上在每一個Episode裏,只有個體經歷過的狀態行爲對的E纔可能不爲0,爲什麼不僅僅對該Episode涉及到的狀態行爲對進行更新呢?理論上是可以僅對Episode裏涉及的狀態行爲對的E和Q進行更新的,不過這要額外維護一個表,而往這個額外的表裏添加新的狀態行爲對的E和Q值比更新總的狀態行爲空間要麻煩,特別是在早期個體沒有一個較好的策略的時候需要花費很長很長時間才能找到終點位置,這在一定程度上反而沒有更新狀態空間省時。不過隨着學習深入、策略得到優化,此表的規模會變小。

4. 離線策略學習 Off-Policy Learning

現時策略學習的特點就是當前遵循的策略就是個體學習改善的策略。離線策略學習(Off-Policy Learning)則指的是在遵循一個策略μ(as)\mu(a|s)的同時評估另一個策略π(as)\pi(a|s),也就是計算確定這另一個策略下的狀態價值函數vπ(s)v_{\pi}(s)或狀態行爲價值函數qπ(s,a)q_{\pi}(s, a)。爲什麼要這麼做呢?因爲這樣可以較容易的從人類經驗或其他個體的經驗中學習,也可以從一些舊的策略中學習,可以比較兩個策略的優劣。其中可能也是最主要的原因就是遵循一個探索式策略的基礎上優化現有的策略。同樣根據是否經歷完整的Episode可以將其分爲基於蒙特卡洛的和基於TD的。基於蒙特卡洛的離線策略學習僅有理論上的研究價值,在實際中毫無用處。在解釋這一結論時引入了“重要性採樣(importance sampling)”這個概念,這裏就不詳述了,有興趣的讀者可以參考原講義。這裏主要講解常用的TD下的離線策略學習。

(1) 離線策略TD學習
離線策略TD學習的任務就是使用TD方法在遵循一個策略μ(as)\mu(a|s)的同時評估另一個策略π(as)\pi(a|s)。具體數學表示爲:

在這裏插入圖片描述

這個公式可以這樣解釋:個體處在狀態S_t中,基於策略μ\mu產生了一個行爲AtA_t,執行該行爲後進入新的狀態St+1S_{t+1},那麼在當前策略下如何根據新狀態的價值調整原來狀態的價值呢?離線策略的方法就是,在狀態StS_t時比較分別依據另一個策略π\pi和當前遵循的策略μ\mu產生行爲A_t的概率大小,如果策略π\pi得到的概率值與遵循當前策略μ\mu得到的概率值接近,說明根據狀態St+1S_{t+1}價值來更新StS_t的價值同時得到兩個策略的支持,這一更新操作比較有說服力。同時也說明在狀態StS_t時,兩個策略有接近的概率選擇行爲AtA_t

假如這一概率比值很小,則表明如果依照被評估的策略,選擇AtA_t的機會很小,這時候我們在更新StS_t價值的時候就不能過多的考慮基於當前策略得到的狀態St+1S_{t+1}的價值。同樣概率比值大於1時的道理也類似。這就相當於借鑑被評估策略的經驗來更新我們自己的策略。

(2) Q-Learning

基於TD(0)的Q-學習(Q-learning)。它的要點在於,更新一個狀態行爲對的Q價值時,採用的不是當前遵循策略的下一個狀態行爲對的Q價值,而是採用的待評估策略產生的下一個狀態行爲對的Q價值。公式如下:

在這裏插入圖片描述

式中,紅色部分的TD目標是基於另一個估策略π\pi產生的行爲A’得到的Q價值。Q學習最主要的表現形式是:個體遵循的策略是基於當前狀態行爲價值函數Q(s,a)的一個ϵgreedy\epsilon-greedy策略,而目標策略是基於當前狀態行爲價值函數Q(s,a)不包含ϵ\epsilon的單純greedy策略:
在這裏插入圖片描述

這樣Q學習的TD目標值可以被大幅簡化:
在這裏插入圖片描述

這樣在狀態 S_t 依據Ɛ-greedy遵循策略得到的行爲AtA_t的Q價值將朝着St+1S_{t+1}狀態所具有的最大Q價值的方向做一定比例的更新。這種算法能夠使greedy策略\pi最終收斂到最佳策略。由於個體實際與環境交互的時候遵循的是ϵgreedy\epsilon-greedy策略,它能保證經歷足夠豐富的新狀態。
定理:Q學習控制將收斂至最優狀態行爲價值函數:Q(s,a)q(s,a)Q(s,a) \rightarrow q_*(s,a)

下圖是Q學習具體的更新公式和圖解:
在這裏插入圖片描述

在這裏插入圖片描述

下圖是Q學習的算法流程:

在這裏插入圖片描述

(1) 示例——懸崖行走
圖中懸崖用灰色的長方形表示,在其兩端一個是起點,一個是目標終點。途中從懸崖指向起點的箭頭提示懸崖同時也是終止狀態。可以看出最優路線是貼着懸崖上方行走。

在這裏插入圖片描述

個人體會 該例體現出早期Q學習得到的策略要比SARSA要差一些,但後期最終總能找到最優策略。兩者的曲線都有一定的起伏,說明兩者都有一定的探索,即遵循的策略都是ϵgreedy\epsilon-greedy執行的,但Q學習在進行價值評估時採用的是greedy而不是再是ϵgreedy\epsilon-greedy方法確定要觀察的狀態S’。

5 總結DP與TD關係

下面兩張圖概括了各種DP算法和各種TD算法,同時也揭示了各種不同算法之間的區別和聯繫。總的來說TD是採樣+有數據引導(bootstrap),DP是全寬度+實際數據。如果從Bellman期望方程角度看:聚焦於狀態本身價值的是迭代法策略評估(DP)和TD學習,聚焦於狀態行爲對價值函數的則是Q-策略迭代(DP)和SARSA;如果從針對狀態行爲價值函數的Bellman優化方程角度看,則是Q-價值迭代(DP)和Q學習。

在這裏插入圖片描述

在這裏插入圖片描述

本專欄圖片、公式很多來自David Silver主講的UCL-Course強化學習視頻公開課和臺灣大學李宏毅老師的深度強化學習課程,在這裏,感謝這些經典課程,向他們致敬!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章