強化學習--值函數近似和策略梯度
前兩節內容都是強化學習的一些基礎理論 ,只能解決一些中小規模的問題,實際情況下很多價值函數需要一張大表來存儲,獲取某一狀態或動作價值的時候通常需要一個查表操作,這對於某些狀態或動作空間很大的問題幾乎無法求解,而許多實際問題擁有大量狀態或動作,甚至是連續的狀態和動作。那么,如何解決實際問題呢?主要有兩種方法:值函數近似和策略梯度。
1. 值函數近似
強化學習可以用來解決大規模問題,例如西洋雙陸棋(Backgammon)有\(10^{20}\)個狀態空間,圍棋AlphaGo有\(10^{170}\)狀態空間,機器人控制以及無人機控制需要的是一個連續狀態空間。如何才能將強化學習應用到這類大規模的問題中,進而進行預測和控制呢?
(1)使用值函數近似的解決思路可以是這樣的:
①、通過函數近似來估計實際的價值函數:
其中,\(\omega\)表示函數的參數,如神經網絡的參數;
②、把從已知狀態學到的函數通用化推廣到那些未碰到的狀態中;
③、使用蒙特卡洛算法或時序差分學習來更新函數參數。
(2)值函數近似的類型:

①、針對狀態,輸出這個狀態的近似狀態價值;
②、針對狀態動作對,輸出狀態動作對的近似動態價值;
③、針對狀態,輸出一個向量,向量中每一個元素是該狀態下采取一種可能動作的動作價值;注:此時不能用於連續的動作。
(3)有哪些函數近似器?
所有和機器學習相關的算法都可以應用到強化學習中來,其中線性回歸和神經網絡在強化學習里應用比較廣泛,主要是因為這兩類方法針對狀態可導。
強化學習應用的場景其數據通常是非靜態的(non-stationary)和非獨立同分布(non-iid)的,因為一個狀態數據是可能是持續流入的,而且下一個狀態通常與前一個狀態是高度相關的。因此,函數近似器也需要適用於非靜態、非獨立同分布的數據。
注:iid: independent and identically distributed 獨立和均勻分布
獨立:每次抽樣之間是沒有關系的,不會相互影響;就像拋骰子每次拋到幾就是幾這就是獨立的,但如果要兩次拋的和大於8,其余的不算,那么第一次拋和第二次拋就不獨立了,因為第二次拋的時候結果是和第一次相關的。
同分布:每次抽樣,樣本都服從同樣一個分布;拋骰子每次得到任意點數的概率都是1/6,這就是同分布的。但如果第一次拋一個6面的色子,第二次拋一個正12面體的色子,就不再是同分布了。
(4)值函數近似的目標:
尋找參數向量\(\omega\),從而最小化近似值函數\(\hat v(s,\omega)\)和真實的值函數\(v_{\pi}(s)\)的均方誤差(mean squared error,MSE):
然后使用隨機梯度下降對梯度進行更新。每一步,參數朝着實際的價值函數進行一度程度地逼近。
1.1 線性函數近似
1.1.1 狀態價值函數近似
用一個特征向量表示一個狀態:
通過對特征的線性求和來近似狀態價值函數:
這樣,目標函數可以表示為:
使用隨機梯度下降可以收斂至全局最優解。
參數更新規則比較簡單:
即:參數更新量=步長*預測誤差*特征值;
“查表”方法是一個特殊的線性價值函數近似方法:每一個狀態看成一個特征,個體具體處在某一個狀態時,該狀態特征取1,其余取0。參數的數目就是狀態數,也就是每一個狀態特征有一個參數。

事實上,之前所列的公式都不能直接用於強化學習,因為公式里都有一個實際價值函數\(v_{\pi}(S)\),但在強化學習環境中,只有即時獎勵,沒有真實的價值函數,因此不能直接使用上述公式,需要找到能代替\(v_{\pi}(S)\)的目標值。
①、對於蒙特卡洛算法,目標值就是回報:
其中,回報\(G_t\)是真實狀態價值的無偏估計,可以把它看成是監督學習的標簽數據,這時,訓練數據集可以是:\(<S_1,G_1>, <S_2,G_2>, ..., <S_T,G_T>\);
②、對於時序差分學習,目標值就是TD目標:
其中,TD目標值是真實狀態價值的有偏估計;這時,訓練集是:\(<S_1,R_2+\gamma \hat v(S_2,\omega)>, <S_2,R_3+\gamma \hat v(S_3,\omega)>..., <S_{T-1},R_T>\);
1.1.2 動作價值函數近似
動作價值函數近似和上述狀態價值函數近似類似。
動作價值函數近似表示為:
用一個特征向量表示一個狀態動作對:
通過對特征的線性求和來近似動作價值函數:
這樣,目標函數可以表示為:
使用隨機梯度下降可以收斂至全局最優解。
參數更新規則比較簡單:
同樣,需要找到能代替\(q_{\pi}(S,A)\)的目標值。
①、對於蒙特卡洛算法,目標值就是回報:
其中,回報\(G_t\)是真實動作價值的無偏估計;
②、對於時序差分學習,目標值就是TD目標:
其中,TD目標值是真實動作價值的有偏估計;
在上一講中,我們講到,在無模型情況下,對策略評估時,使用狀態動作對下的動作價值函數對策略進行評估。

從一系列參數開始,得到一個在狀態動作對下近似的動作價值函數,在\(\epsilon-greedy\)策略下產生一個動作,執行該動作得到一個即時獎勵,以此數據計算目標值,進行近似函數參數的更新,再利用這個策略得到后續的狀態和對應的目標值,每經歷一次狀態就更新一次次數,如此反復進行策略的優化,同時逼近最優價值函數。
策略評估:使用動作價值函數近似方法來進行近似策略評估,特別是早期誤差會較大,而且這種近似無法最終收斂於最優策略對應的行為價值函數,只能在其周圍震盪;
策略改善:使用\(\epsilon-greedy\)策略。
1.2 深度神經網絡近似
在計算機視覺、語音識別領域,深度神經網絡可以直接從場景數據(如圖像,聲音)中提取出高層特征,實現端到端的學習,無需再人工設計特征。一個自然的想法時能否用深度學習來為強化學習的原始輸入數據進行建模。
深度強化學習的基本思想是用神經網絡擬合強化學習中的價值函數和策略函數,是深度學習與強化學習相結合的產物。在這里,講到的使用深度神經網絡對價值函數進行近似的方法稱為基於價值函數的深度強化學習。
用深度神經網絡來近似動作價值函數\(Q\)時,網絡的輸入為狀態數據,如原始的游戲畫面,輸出值為在當前狀態下執行各種動作所得到的最大\(Q\)函數值。但是深度學習用於強化學習將面臨以下挑戰:
①、有監督學習一般要求訓練樣本之間是相互獨立的,在強化學習中,經常遇到的是前后高度相關的狀態序列。在某個狀態下執行一個動作后進入下一個狀態,前后兩個狀態存在着明顯的概率關系,不是獨立的;
②、在強化學習中,隨着學習到新的動作,樣本數據的概率分布會發生變化,而在深度學習中,要求訓練樣本的概率分布是固定的;
即深度學習中一般要求樣本滿足獨立同分布,而強化學習不滿足。
2013年,DeepMind公司提出了一種用深度神經網絡打Atari游戲的方法,僅通過觀察游戲畫面和得分,就可以學會打這種游戲。該方法使用深度卷積神經網絡擬合動作價值函數,即\(Q\)函數,成為深度\(Q\)網絡(DQN),它是第一個成功具有通用性的深度強化學習算法。
早在1995年,人們就開始嘗試將神經網絡與強化學習進行結合,比如當時Gerald Tesauro提出的TD-gammon方法,用多層感知器模型逼近狀態價值函數,然而,此時只對西洋雙陸棋有較好的效果,對於國際象棋等效果非常差,不具有通用性。
關於Atari游戲示例:
接下來主要講一下DQN。
網絡的輸入為經過處理后的若干幀游戲圖像畫面,輸出為在這種狀態下執行各種動作的動作價值函數,即\(Q\)函數。
輸入輸出有兩種形式:
①、將狀態和動作當成神經網絡的輸入,然后輸出狀態動作對對應的\(Q\)值;
②、只輸入狀態值,輸出所有動作值對應的\(Q\)值;
這里,采用的是第②種方法,因為如果按第①種方法輸入狀態動作對的話,神經網絡的每一次前向傳播只是來計算一個動作的\(Q\)值,導致成本會隨動作數量而線性增加。而采用第②種方法,能夠計算給定狀態下所有可能動作的\(Q\)值且只需要通過網絡進行一次前向傳播,提高了計算效率。
DQN的網絡架構如下所示:
在圖中,輸入的是經過處理的84*84的游戲圖像畫面,然后經過2個卷積層,2個全連接層,最后網絡的輸出是在輸入狀態下執行每個動作的\(Q\)函數值。
卷積神經網絡用於近似最優\(Q\)函數:
其中,\(\omega\)是網絡參數。
對於網絡結構,針對不同的問題可以有不同的設置。
總之,用神經網絡來表示\(Q\)值非常簡單,\(Q\)值也就是變成\(Q\)網絡來表示。
那么,怎么訓練\(Q\)網絡呢?
神經網絡的訓練是一個最優化問題,最優化一個損失函數,也就是標簽和網絡輸出的偏差,目標是讓損失函數最小化。因此,需要有樣本,即大量有標簽的數據,然后通過反向傳播使用梯度下降的方法來更新網絡參數。
所以,要訓練\(Q\)網絡,要能夠為\(Q\)網絡提供有標簽的樣本。
那么,問題變為:如何為\(Q\)網絡提供有標簽的樣本?
答案是利用\(Q-learning\)算法,依靠的是目標\(Q\)值,即即時獎勵和其后繼狀態執行動作的最大\(Q\)值:
所以,可以目標\(Q\)值當作標簽。那么,損失函數是:
其中,\(s',a'\)分別是下一個狀態和動作。
DQN的一個創新是使用了經驗回放(Experience Replay)機制。
①、動機:深度神經網絡作為有監督學習模型,要求數據滿足獨立同分布,而Atari游戲得到的訓練樣本是一個時間序列,樣本之間存在相關性,而且訓練樣本的概率分布不固定,為了解決上述問題,提出了經驗回放機制。
②、具體做法:在每個時間點存儲智能體的經驗\(e_t=(s_t,a_t,r_{t+1},s_{t+1})\)形成回放記憶序列\(D={e_1,...,e_N}\),將這些數據存儲起來,訓練神經網絡時從\(D\)中隨機采樣得到每次迭代所用的訓練樣本,並使用隨機梯度下降算法更新網絡參數。

③、作用:經驗回放機制通過重復采樣歷史數據增加了數據的使用效率,同時打破按照動作序列執行時前后兩個時間步樣本之間的依賴關系,即減少了數據之間的相關性。
DQN算法偽代碼:
在上述DQN中,每次迭代時\(Q\)值與\(Q-learning\)的目標值(目標\(Q\)值)之間存在相關性,因為它們由同一個\(Q\)網絡預測產生。因此,在2015年,2013年提出DQN的Volodymyr Mnih等人為消除上述的相關性,對DQN進行了改進,提出了固定\(Q\)函數的策略,即使用另外一個\(Q\)網絡(稱為目標\(Q\)網絡)來計算訓練時的目標函數值,目標\(Q\)網絡周期性地與\(Q\)網絡進行同步。
DQN方法的其他改進:
在這里就不對這些改進方法進行一一介紹了,有興趣的可以查看相關論文。
2. 策略梯度
上面見了對價值函數進行近似的參數化表達,包括狀態價值函數和動作價值函數,隨后一個策略可以直接從價值函數中產生,比如使用\(\epsilon -greedy\)探索方法。但是,如果動作集合是連續的或維數很高,這種方法將面臨問題。
這時,可以直接參數化策略本身,同時參數化的策略將不再是一個概率集合而是一個函數:
策略函數確定了在給定的狀態和一定的參數設置下,執行任何可能動作的概率,事實上它是一個概率密度函數。在實際應用策略產生動作時,是按照這個概率分布進行動作采樣的。策略函數里的參數決定了概率分布的形態。
目的是利用參數化的策略函數,通過調整這些參數來得到一個較優策略,遵循這個策略產生的行為將得到較多的獎勵。具體的機制是設計一個目標函數,對其使用梯度上升(Gradient Ascent)算法優化參數以最大化獎勵。
(1)目標函數
目標:用一個參數\(\theta\)建模策略\({\pi}_{\theta}(s,a)\),尋找最優的參數\(\theta\)。
但是,如何尋找呢?
值函數近似時,優化的目標是使值函數的輸出接近目標值。
策略梯度算法是通過最大化回報逼近最優策略。
因此,我們需要設計一個目標函數來評估策略的好壞。
針對不同的問題類型,有3種典型的目標函數:
①、Start Value
要有起始狀態,並且能夠得到完整的episode,即在有限步之后能到達終止狀態。根據當前的策略函數執行動作可以得到的一個完整的episode,然后計算這個episode的累計回報值:
②、Average Value
對於連續環境條件,不存在一個起始狀態,,此時計算狀態價值的數學期望:即考慮智能體在某時刻處在某狀態下的概率,也就是智能體在該時刻的狀態分布,針對每個可能的狀態計算從該時刻開始一直持續與環境交互下去能夠得到的獎勵,按該時刻各狀態的概率分布求和:
其中,\(d^{{\pi}_{\theta}}\)是在當前策略下,馬爾可夫鏈關於狀態的一個靜態分布(stationary distribution),可以理解為狀態\(s\)出現的概率。
③、Average Reward Per Time-Step(單步平均回報)
每執行一個動作的立即回報的均值,即在各種狀態時,執行各種動作的回報的概率求和。
也就是說:在某一時刻,首先得到智能體處於所有狀態的可能性;
然后每一種狀態下執行所有動作能夠得到的即時獎勵
最后所有獎勵按概率求和。
其實上述三個式子的目標都是同一個目標,都是試圖描述(衡量)智能體在某一時刻的價值。
(2)目標函數優化
確定了目標函數之后,接下來就是優化策略參數使得目標函數值最大化;也就是得到一組參數向量\(\theta\),使得目標函數最大。如果策略函數可到,則可以根據樣本計算目標函數的梯度值,用梯度上升法(因為要求目標函數的極大值,因此,要將梯度下降改為梯度上升)更新策略函數的參數。此時,問題的關鍵就變成了如何計算目標函數對策略參數的梯度值。
策略梯度定理:
對於一個可導的策略函數\({\pi}_{\theta}\),無論采用上述三種定義的哪種目標函數,策略的梯度都可以寫為:
其中,定義\({\nabla}_{\theta}log{{\pi}_{\theta}(s,a)}\)為score函數。
(3)策略函數的構造
策略函數的構造對離散動作和連續動作有不同的處理。
①、對於離散型動作,策略函數給出的是執行每個動作的概率,所有動作的概率之和為1。這可以看成是多分類問題,根據輸入的狀態確定要執行的動作的類型。通常采用Softmax策略。
使用Softmax策略時,可以把動作看成是多個特征在一定權重下的線性代數和:\(\phi (s,a)^{\top} \theta\);
然后執行某一具體動作的概率為:
②、對於連續型動作,無法將所有的動作都列舉出來,輸出執行每個動作的概率值,只能得到動作的概率密度函數。在運行時,動作參數根據概率分布采樣得到,即生成服從此分布的一個隨機數作為最后的動作參數。通常采用高斯策略。
使用高斯策略時,通常對於均值有一個參數化表示,可以是一些狀態特征的線性代數求和:
方差可以是固定值\(\sigma ^2\),也可以參數化表示。
動作對應於某一個具體的數值,該數值從以均值為\(\mu (s)\),標准差為\(\sigma\)的高斯分布中隨機采樣產生:
(4)蒙特卡洛策略梯度
針對具有完整episode的情況,應用策略梯度定理,使用隨機梯度上升來更新參數,然后通過采用的方式,使用\(t\)時刻的回報作為當前策略下動作價值的無偏估計。
算法過程是這樣的:
①、隨機初始化策略函數的參數\(\theta\);
②、對當前策略下的一個episode:
從\(t=1\)到\(t=T-1\)間的每一個時刻,計算智能體獲得的回報;
③、使用隨機梯度上升更新參數\(\theta\);
④、重復每一個episode,直到結束。
偽代碼如下所示:

(5) Actor-Critic算法
雖然Actor-Critic算法里用到了價值函數的近似,但是,其核心還是策略梯度,所以直接在該策略梯度章節里講。
Actor-Critic的字面意思是“演員-評論”,相當於演員在演戲的同時有評論家指點繼而演員演得越來越好。
Actor-Critic包含兩部分:
①、Actor:策略函數,負責產生動作;以Critic所指導的方向更新策略參數\(\theta\);
②、Critic:價值函數,負責評價Actor產生的動作的好壞;更新動作價值函數參數\(\omega\);
Actor-Critic的網絡結構圖如下:

大致流程是:
①、Actor根據目前的狀態,輸出一個動作,
②、Actor輸出的狀態和動作一起輸入到Critic中,Critic如時序差分學習的策略評價方法,通過估計動作價值函數來對Actor輸出的動作進行評價,並更新參數\(\omega\);
③、Actor根據Critic輸出的動作價值函數,來更新自己的策略\({\pi}_{\theta}(s)\)的參數\(\theta\);
這里給一個Actor-Critic的算法流程總結,Critic使用神經網絡計算TD誤差並更新網絡參數,Actor也使用神經網絡來更新網絡參數。
算法輸入:迭代輪數\(T\),狀態特征維度\(n\),動作集\(A\), 步長\(α,β\),衰減因子\(γ\),探索率\(\epsilon\),Critic網絡結構和Actor網絡結構;
輸出:Actor 網絡參數\(\theta\),Critic網絡參數\(\omega\);
1、隨機初始化所有的狀態和動作對應的價值\(Q\), 隨機初始化Critic網絡的所有參數\(w\)。隨機初始化Actor網絡的所有參數\(\theta\)。
2、for \(i\) from 1 to \(T\),進行迭代。
a) 初始化\(S\)為當前狀態序列的第一個狀態,得到其特征向量\(\phi (S)\);
b) 在Actor網絡中使用\(\phi(S)\)作為輸入,輸出動作\(A\),基於動作\(A\)得到新的狀態\(S′\),即時獎勵\(R\);
c) 在Critic網絡中分別使用\(\phi(S),\phi(S')\)作為輸入,得到\(Q\)值輸出\(V(S),V(S')\);
d) 計算TD誤差\(\delta = R+\gamma V(S')-V(S)\);
e) 使用均方差損失函數\({\sum {(R + \gamma V(S') - V(S,\omega ))} ^2}\)作Critic網絡參數\(\omega\)的梯度更新;
f) 更新Actor網絡參數\(\theta\) :
(6)基於梯度策略的DRL分類
基於梯度策略的DRL分類如下:
在這里就不對各個方法進行一一介紹了,有興趣的可以查看相關論文。
聲明
本博客所有內容僅供學習,不為商用,如有侵權,請聯系博主,謝謝。
參考資料
[3] 機器學習原理、算法與應用,雷明
[4] 人工智能:一種現代的方法(第3版)
[5] An Introduction to Reinforcement Learning
[6] Algorithms for Reinforcement Learning
[8] 基於值函數和策略梯度的深度強化學習綜述,計算機學報,劉建偉、高峰、羅雄麟
[9] Playing Atari with Deep Reinforcement Learning,2013
[10] Human-level control through deep reinforcement learning,2015
[11] Actor-Critic
] 人工智能:一種現代的方法(第3版)
[5] An Introduction to Reinforcement Learning
[6] Algorithms for Reinforcement Learning
[8] 基於值函數和策略梯度的深度強化學習綜述,計算機學報,劉建偉、高峰、羅雄麟
[9] Playing Atari with Deep Reinforcement Learning,2013
[10] Human-level control through deep reinforcement learning,2015
[11] Actor-Critic