日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入浅出强化学习:原理入门(待更新)

發布時間:2024/3/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出强化学习:原理入门(待更新) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前看強化學習的一些教學視頻,發現自己對一些強化學習中符號的定義理解不太透徹,例如 \(Q_{target}\),\(Q值\), \(Q估計\)\(Q現實\)\(Q預測\), 現在發現郭憲老師的書,試讀了一下里邊的內容,發現老師講解的很透徹,并且原理解釋的很清楚,因此做此筆記。一是為了監督自己的學習進度,讓自己能夠在閱讀的過程中,能夠更深入的理解。二是做一份自己的筆記,方便后期查閱。
文章內容較長,建議開啟右下角的側邊欄按鈕,食用。

強化學習中常見符號說明:

\(agent\):智能體

\(environment\):環境

\(s/state\):某個狀態

\(S\):所有狀態的集合,狀態空間

\(a/action\):某個動作,行為

\(A\):所有動作的集合,動作空間

\(A(s)\):在狀態\(s\)下的動作集合

\(r/reward\):智能體執行某個動作后到達某個狀態的回報

\(R\):所有獎勵集合

\(t\):第\(t\)步,\(S_t=s\):第\(t\)步的狀態是狀態\(s\)

\(S_t\):第\(t\)步的狀態

\(A_t\):第\(t\)步的動作

\(R_t\):第\(t\)步的獎勵

\(G_t\):第\(t\)步的長期回報,強化學習的目標1:求最大長期回報

\(\alpha\):學習速率,learning rate

\(\gamma\):未來回報的折扣率(discount rate) \(\gamma \in [0,1]\)

\(\lambda\)\(\lambda-return\)中的比例參數 \(\lambda \in [0,1]\)

\(\varepsilon\):在\(\varepsilon-greedy\)策略中,采用隨機動作的概率,\(\varepsilon \in [0,1]\)

\(\pi\):策略policy,策略規定了在狀態\(s\)時,應該選擇動作\(a\),強化學習的目標2:找到最優策略

\(\pi(s)\):策略\(\pi\)在狀態\(s\)下,選擇的行動

\(\pi^*\):最優策略

\(r(s,a)\):在狀態\(s\)下,選擇動作a的獎賞

\(r(s,a,s')\):在狀態\(s\)下,選擇動作\(a\),變成狀態\(s'\)的獎賞

\(p(s'|s,a)\):在狀態\(s\)下,選擇動作\(a\),變成狀態\(s'\)的概率,狀態轉移函數

\(v_\pi(s)\):狀態價值函數,使用策略\(\pi\),狀態\(s\)下的長期獎勵\(G_t\),與策略\(\pi\)是綁定的。

\(q_\pi (s,a)\):狀態動作價值函數,或叫動作值函數,使用策略\(\pi\),狀態\(s\)下,選擇動作\(a\)的長期獎勵\(G_t\)

\(v^*(s)\):最優狀態價值函數

\(q^*(s,a)\):最優狀態動作價值函數,強化學習的目標3:找到最優狀態價值函數,或者最優狀態動作價值函數

\(V(s)\):狀態值函數\(v_\pi(s)\)的集合

\(Q(s,a)\):狀態動作價值函數\(q_\pi (s,a)\)的集合

\(\hat{v}(s,\theta)\):狀態近似值函數

\(\hat{q}(s,a,\theta)\):狀態動作近似值函數,強化學習的目標4:找到最優的狀態近似值函數,或者最優的狀態動作近似值函數

\(\theta\):近似值函數的權重向量(梯度下降求解的參數),強化學習的目標5:求解\(\theta\),求解近似值函數

\(\phi (s)\):狀態近似值函數的特征函數,是一個將狀態\(s\)轉換成計算向量的方法,和\(\theta\)組成狀態近似值函數\(\hat{v}(s,\theta)=\theta ^T \phi (s)\)

\(\phi(s,a)\):狀態動作近似值函數的特征函數,是一個將狀態s,動作a轉化成計算向量的方法,和\(\theta\)組成狀態動作近似值函數\(\hat{q}(s,a,\theta)=\theta ^T \phi (s,a)\)

1. 緒論

1.2 強化學習可以解決什么問題

一句話概述強化學習所能解決的問題:智能決策問題。更確切地說是序貫決策問題(什么是序貫決策問題呢?就是
需要連續不斷地做出決策,才能實現最終目標的問題。)。

1.3 強化學習如何解決問題

在回答強化學習如何解決序貫決策問題之前,我們先看看監督學習是如何解決問題的。從解決問題的角度來看,監督學習解決的是智能感知的問題。
我們依然用一個圖來表示。如圖1.2所示,監督學習最典型的例子是數字手寫體識別,當給出一個手寫數字時,監督學習需要判別出該數字是多少。也就是說,監督學習需要感知到當前的輸入到底長什么樣,當智能體感知到輸入長什么樣時,智能體就可以對它進行分類了。如圖1.2所示,輸入手寫體長得像4,所以智能體就可以判斷它是4了。智能感知其實就是在學習“輸入”長得像什么(特征),以及與該長相一一對應的是什么(標簽)。所以,智能感知必不可少的前提是需要大量長相差異化的輸入以及與輸入相關的標簽。因此,監督學習解決問題的方法就是輸入大量帶有標簽的數據,讓智能體從中學到輸入的抽象特征并分類。

強化學習則不同,強化學習要解決的是序貫決策問題,它不關心輸入長什么樣,只關心當前輸入下應該采用什么動作才能實現最終的目標。再次強調,當前采用什么動作與最終的目標有關。也就是說當前采用什么動作,可以使得整個任務序列達到最優。如何使整個任務序列達到最優呢?這就需要智能體不斷地與環境交互,不斷嘗試,因為智能體剛開始也不知道在當前狀態下哪個動作有利于實現目標。強化學習解決問題的框架可用圖1.3表示。智能體通過動作與環境進行交互時,環境會返給智能體一個當前的回報,智能體則根據當前的回報評估所采取的動作:有利于實現目標的動作被保留,不利于實現目標的動作被衰減。

強化學習和監督學習的共同點是兩者都需要大量的數據進行訓練,但是兩者所需要的數據類型不同。監督學習需要的是多樣化的標簽數據,強化學習需要的是帶有回報的交互數據。

1.4 強化學習算法分類以及發展趨勢

(1)根據強化學習算法是否依賴模型可以分為基于模型的強化學習算法和無模型的強化學習算法。這兩類算法的共同點是通過與環境交互獲得數據,不同點是利用數據的方式不同。基于模型的強化學習算法利用與環境交互得到的數據學習系統或者環境模型,再基于模型進行序貫決策。無模型的強化學習算法則是直接利用與環境交互獲得的數據改善自身的行為。兩類方法各有優缺點,一般來講基于模型的強化學習算法效率要比無模型的強化學習算法效率更高,因為智能體在探索環境時可以利用模型信息。但是,有些根本無法建立模型的任務只能利用無模型的強化學習算法。由于無模型的強化學習算法不需要建模,所以和基于模型的強化學習算法相比,更具有通用性。

(2)根據策略的更新和學習方法,強化學習算法可分為基于值函數的強化學習算法、基于直接策略搜索的強化學習算法以及AC的方法。所謂基于值函數的強化學習方法是指學習值函數,最終的策略根據值函數貪婪得到。也就是說,任意狀態下,值函數最大的動作為當前最優策略。基于直接策略搜索的強化學習算法,一般是將策略參數化,學習實現目標的最優參數。基于AC的方法則是聯合使用值函數和直接策略搜索。

(3)根據環境返回的回報函數是否已知,強化學習算法可以分為正向強化學習和逆向強化學習。在強化學習中,回報函數是人為指定的,回報函數指定的強化學習算法稱為正向強化學習。很多時候,回報無法人為指定,如無人機的特效表演,這時可以通過機器學習的方法由函數自己學出來回報。

1.5 強化學習仿真環境構建

這里就跳過了,

1.5.2 深入剖析gym環境構建
  • reset()函數詳解,reset()為重新初始化函數,它有什么作用呢?
    在強化學習算法中,智能體需要一次次地嘗試并累積經驗,然后從經驗中學到好的動作。每一次嘗試我們稱之為一條軌跡或一個episode,每次嘗試都要到達終止狀態。一次嘗試結束后,智能體需要從頭開始,這就需要智能體具有重新初始化的功能。函數reset()就是用來做這個的。

  • render()函數詳解,render()函數用來渲染環境

    render()函數在這里扮演圖像引擎的角色。我們知道一個仿真環境必不可少的兩部分是物理引擎和圖像引擎。物理引擎模擬環境中物體的運動規律;圖像引擎用來顯示環境中的物體圖像,其實對于強化學習算法而言,可以沒有render()函數,但是,為了便于直觀顯示當前環境中物體的狀態,圖像引擎還是有必要的。另外,加入圖像引擎可以方便我們調試代碼。

  • step()函數詳解

    本函數在仿真器中扮演物理引擎的角色。其輸入是動作a,輸出是:下一步狀態、立即回報、是否終止、調試項。它描述了智能體與環境交互的所有信息,是環境文件中最重要的函數。在本函數中,一般利用智能體的運動學模型和動力學模型計算下一步的狀態和立即回報,并判斷是否達到終止狀態。

1.6 本書主要內容及安排

強化學習算法解決的是序貫決策問題,而一般的序貫決策問題可以利用馬爾科夫決策過程的框架來表述,因此在第2章中我們介紹了馬爾科夫決策過程,即MDP。馬爾科夫決策過程能夠用數學的形式將要解決的問題描述清楚,這也是為什么在介紹強化學習時首先要講MDP的原因。

利用MDP將問題形式化后,就需要找到解決MDP問題的方法。對于模型已知的MDP問題,動態規劃是一個不錯的解。因此在第3章我們會介紹基于動態規劃的強化學習算法,并由此引出廣義策略迭代的方法。廣義策略迭代方法不僅適用于基于模型的方法,也適用于無模型的方法,是基于值函數強化學習算法的基本框架。因此,第3章是第4章基于蒙特卡羅方法、第5章基于時間差分方法和第6章基于值函數逼近方法的基礎。

強化學習算法的核心是計算值函數的期望。值函數是個隨機變量,其期望的計算可通過蒙特卡羅的方法得到。因此,第4章我們介紹了基于蒙特卡羅的強化學習算法。

基于蒙特卡羅的強化學習算法通過蒙特卡羅模擬計算期望,該方法需要等到每次試驗結束后再對值函數進行估計,收斂速度慢。時間差分的方法則只需要一步便更新,效率高、收斂速度快。因此第5章我們對時間差分方法進行了詳細介紹。

第4章到第5章介紹的是表格型強化學習。所謂表格型強化學習是指狀態空間和動作空間都是有限集,動作值函數可用一個表格來描述,表格的索引分別為狀態量和動作量。但是,當狀態空間和動作空間很大,甚至兩個空間都是連續空間時,動作值函數已經無法使用一個表格來描述,這時可以用函數逼近理論對值函數進行逼近。本書第6章詳細介紹了基于值函數逼近的強化學習算法。

強化學習算法的第二大類是直接策略搜索方法。所謂直接策略搜索方法是指將策略進行參數化,然后在參數空間直接搜索最優策略。直接策略搜索方法中,最簡單最直接的方法是策略梯度的方法。在第7章,我們詳細介紹了策略梯度理論。

基于策略梯度方法最具挑戰性的是更新步長的確定,若是更新步長太大,算法容易發散;更新步長太小,收斂速度又很慢。TRPO 的方法通過理論分析得到單調非遞減的策略更新方法。第8章我們對TRPO進行了詳細推導和介紹。當動作空間維數很高時,智能體的探索效率會很低,利用確定性策略可免除對動作空間的探索,提升算法的收斂速度,第9章對確定性策略搜索進行了詳細介紹。

第7章到第9章,我們介紹的是無模型的直接策略搜索方法。對于機器人等復雜系統,無模型的方法隨機初始化很難找到成功的解,因此算法難以收斂。這時,可以利用傳統控制器來引導策略進行搜索。因此第10章介紹了基于引導策略搜索的強化學習算法。在很多實際問題中,往往不知道回報函數。為了學習回報函數,第11章介紹了逆向強化學習的算法。

從第12章開始,我們介紹了最近發展出來的強化學習算法,分別是第12章的組合策略梯度和值函數方法,第13章的值迭代網絡和第14章的PILCO方法及其擴展。

第一篇:強化學習基礎

2. 馬爾可夫決策過程

2.1馬爾可夫決策過程理論講解

強化學習的基本原理:智能體在完成某項任務時,首先通過動作A與周圍環境進行交互,在動作A和環境的作用下,智能體會產生新的狀態,同時環境會給出一個立即回報。如此循環下去,智能體與環境不斷地交互從而產生很多數據。強化學習算法利用產生的數據修改自身的動作策略,再與環境交互,產生新的數據,并利用新的數據進一步改善自身的行為,經過數次迭代學習后,智能體能最終學到完成相應任務的最優動作(最優策略)。

2.1.1 強化學習與監督學習和非監督學習的區別:

在監督學習和非監督學習中,數據是靜態的、不需要與環境進行交互,比如圖像識別,只要給出足夠的差異樣本,將數據輸入深度網絡中進行訓練即可。然而,強化學習的學習過程是動態的、不斷交互的過程,所需要的數據也是通過與環境不斷交互所產生的。所以,與監督學習和非監督學習相比,強化學習涉及的對象更多,比如動作,環境,狀態轉移概率和回報函數等。強化學習更像是人的學習過程:人類通過與周圍環境交互,學會了走路,奔跑,勞動;人類與大自然,與宇宙的交互創造了現代文明。另外,深度學習如圖像識別和語音識別解決的是感知的問題,強化學習解決的是決策的問題。人工智能的終極目的是通過感知進行智能決策。

2.1.2 第一個概念是馬爾科夫性

馬爾科夫性是指系統的下一個狀態 \(s_{t+1}\) 僅與當前狀態 \(s_t\) 有關,而與以前的狀態無關。

定義:狀態 \(s_t\) 是馬爾科夫的,當且僅當 \(P[s_{t+1} |s_t ]=P[s_{t+1} |s_1,..., s_t]\)

定義中可以看到,當前狀態 \(s_t\) 其實是蘊含了所有相關的歷史信息 \(s_1.,. ... s_t\) ,一旦當前狀態已知,歷史信息將會被拋棄。馬爾科夫性描述的是每個狀態的性質,但真正有用的是如何描述一個狀態序列。數學中用來描述隨機變量序列的學科叫隨機過程。所謂隨機過程就是指隨機變量序列。若隨機變量序列中的每個狀態都是馬爾科夫的,則稱此隨機過程為馬爾科夫隨機過程。

2.1.3 第二個概念是馬爾科夫過程

馬爾科夫過程的定義:馬爾科夫過程是一個二元組(S,P),且滿足:S是有限狀態集合,P是狀態轉移概率。狀態轉移概率矩陣為:

\[P= \begin{bmatrix} P_{11}&\cdots&P_{1n}\\ \vdots&\ddots&\vdots\\ P_{n1}&\cdots&P_{nn} \end{bmatrix} \]

下面我們以一個例子來進行闡述。如圖2.2所示為一個學生的7種狀態{娛樂,課程1,課程2,課程3,考過,睡覺,論文},每種狀態之間的轉換概率如圖所示。則該生從課程1開始一天可能的狀態序列為:

  • 課1-課2-課3-考過-睡覺

  • 課1-課2-睡覺

以上狀態序列稱為馬爾科夫鏈。當給定狀態轉移概率時,從某個狀態出發存在多條馬爾科夫鏈。對于游戲或者機器人,馬爾科夫過程不足以描述其特點,因為不管是游戲還是機器人,他們都是通過動作與環境進行交互,并從環境中獲得獎勵,而馬爾科夫過程中不存在動作和獎勵。將動作(策略)和回報考慮在內的馬爾科夫過程稱為馬爾科夫決策過程。

2.1.4 第三個概念是馬爾科夫決策過程

馬爾科夫決策過程由元組 \((S,A,P,R, \gamma)\) 描述,其中:

\(S\) 為有限的狀態集

\(A\) 為有限的動作集

\(P\) 為狀態轉移概率

\(R\) 為回報函數

\(\gamma\) 為折扣因子,用來計算累計回報。跟馬爾科夫過程不同的是,馬爾科夫決策過程的狀態轉移概率是包含動作的,即 \(P_{ss'}^a=P\,[S_{t+1}=s'|S_t=s,A_t=a\,]\)

舉個例子如圖2.3所示。

圖2.3為馬爾科夫決策過程的示例圖,圖2.3與圖2.2對應。在圖2.3中,學生有五個狀態,狀態集為 \(S=\{s1,s2,s3,s4,s5\}\) ,動作集為 \(A=\{玩,退出,學習,發表,睡覺\}\),在圖2.3中立即回報用 \(R\) 標記。強化學習的目標是給定一個馬爾科夫決策過程,尋找最優策略。所謂策略是指狀態到動作的映射,策略常用符號 \(\pi\) 表示,它是指給定狀態s時,動作集上的一個分布,即

\[\pi(a|s)=p[A_t=a|S_t=s] \tag{2.1} \]

這個公式是什么意思呢?策略的定義是用條件概率分布給出的。公式(2.1)的含義是:策略 \(\pi\) 在每個狀態 \(s\) 指定一個動作概率。如果給出的策略 \(\pi\) 是確定性的,那么策略 \(\pi\) 在每個狀態 \(s\) 指定一個確定的動作。

例如其中一個學生的策略為 \(\pi_1(玩|s_1 )=0.8\),是指該學生在狀態 \(s_1\) 時玩的概率為 0.8,不玩的概率是 0.2,顯然這個學生更喜歡玩。另外一個學生的策略為 \(\pi_2(玩|s_1 )=0.3\),是指該學生在狀態 \(s_1\) 時玩的概率是 0.3,顯然這個學生不愛玩。依此類推,每個學生都有自己的策略。強化學習是找到最優的策略,這里的最優是指得到的總回報最大。

當給定一個策略 \(\pi\) 時,我們就可以計算累計回報了。首先定義累計回報:

\[G_t=R_{t+1}+\gamma R_{t+2}+\cdots=\sum_{k=0}^{\infty}\gamma^kR_{t+k+1} \tag{2.2} \]

當給定策略 \(π\) 時,假設從狀態 \(s_1\) 出發,學生狀態序列可能為

\(s_1\rightarrow s_2\rightarrow s_3 \rightarrow s_4 \rightarrow s_5\)

\(s_1\rightarrow s_2\rightarrow s_3\rightarrow s_5\)

\(\vdots\)

此時,在策略 \(\pi\) 下,利用(2.2)式可以計算累計回報 \(G_1\) ,此時 \(G_1\) 有多個可能值。由于策略 \(\pi\) 是隨機的,因此累計回報也是隨機的。為了評價狀態 \(s_1\) 的價值,我們需要定義一個確定量來描述狀態 \(s_1\) 的價值,很自然的想法是利用累計回報來衡量狀態 \(s_1\) 的價值。然而,累計回報 \(G_1\) 是個隨機變量,不是一個確定值,因此無法描述,但其期望是個確定值,可以作為狀態值函數的定義。(數學期望(mean)是試驗中每次可能結果的概率乘以其結果的總和)

(1)狀態-值函數與狀態-行為值函數。

當智能體采用策略 \(\pi\) 時,累計回報服從一個分布,累計回報在狀態\(s\) 處的期望值定義為狀態-值函數:

\[v_\pi(s)=E_\pi[\,\sum_{k=0}^{\infty}\gamma^k R_{t+k+1}|S_t=s\,] \tag{2.3} \]

注意:狀態-值函數是與策略 \(\pi\) 相對應的,這是因為策略 \(\pi\) 決定了累計回報 \(G\) 的狀態分布。

圖2.4是與圖2.3相對應的狀態-值函數圖。圖中空心圓圈中的數值為該狀態下的值函數。即:\(υ_\pi(s_1)=-2.3\)\(υ_\pi(s_2)=-1.3\)\(υ_\pi(s_3)=2.7\)\(υ_\pi(s_4)=7.4\)\(υ_\pi(s_5)=0\)

相應地,狀態-行為值函數為:

\[q_\pi(s,a)=E_\pi[\sum_{k=0}^{\infty}\gamma^k R_{t+k+1}|S_t=s,A_t=a] \tag{2.4} \]

(2.3)式和(2.4)式分別給出了狀態-值函數和狀態-行為值函數的定義計算式,但在實際真正計算和編程的時候并不會按照定義式編程。接下來我們會從不同的方面對定義式進行解讀。

(2)狀態-值函數與狀態-行為值函數的貝爾曼方程。

由狀態-值函數的定義式(2.3)以及定義式(2.2)可以得到狀態-值函數的貝爾曼方程:

\[\begin{array}{l} v(s)=E[G_t|S_t=s]\\ =E[R_{t+1}+\gamma R_{t+2}+\cdots|S_t=s]\\ =E[R_{t+1}+\gamma (R_{t+2}+\gamma R_{t+3}+\cdots)|S_t=s]\\ =E[R_{t+1}+\gamma G_{t+1}|S_t=s]\\ =E[R_{t+1}+\gamma v(S_{t+1})|S_t=s]\\ \end{array} \tag{2.5} \]

這里需要注意的是對哪些變量求期望。同樣我們可以得到狀態-動作值函數的貝爾曼方程:

\[q_\pi(s,a)=E_\pi[R_{t+1}+\gamma q(S_{t+1},A_{t+1})|S_t=s,A_t=a] \tag{2.6} \]

狀態值函數與狀態-行為值函數的具體推導過程如下。圖2.5和圖2.6分別為狀態值函數和行為值函數的具體計算過程。其中空心圓圈表示狀態,實心圓圈表示狀態-行為對。

圖2.5為值函數的計算分解示意圖,圖2.5(B)計算公式為

\[v_\pi(s)=\sum_{a\in A}\pi(a|s)q_\pi(s,a) \tag{2.7} \]

狀態-值函數,是采取每個行為的概率乘以該行為對應的狀態-行為價值的累加。

圖2.5(B)給出了狀態值函數與狀態-行為值函數的關系。圖2.5(C)計算狀態-行為值函數為

\[q_\pi(s,a)=R_s^a+\gamma \sum_{s'}P_{ss'}^a v_\pi(s') \tag{2.8} \]

狀態-行為值函數,是當前狀態 \(s\) 采取行為 \(a\) 所獲得的即時回報,加狀態 \(s\) 采取行為 \(a\) 到達下一個狀態 \(s'\) 的概率乘以下一個狀態 \(s'\) 的狀態價值的累加。

將2.8式代入到2.7式得到:

\[v_\pi(s)=\sum_{a\in A}\pi(a|s) \left( R_s^a+\gamma \sum_{s'\in S}P_{ss'}^a v_\pi(s') \right) \tag{2.9} \]

在圖2.6(C)中,

\[v_\pi(s')=\sum_{a'\in A}\pi(a'|s')q_\pi(s',a') \tag{2.10} \]

下一個狀態 \(s'\) 的狀態-值函數 \(v_\pi(s')\) 就等于在狀態 \(s'\) 下采取每個行為 \(a'\) 的概率乘以該行為 \(a'\) 對應的狀態-行為價值的累加。將(2.10)代入(2.8)中,得到狀態-行為值函數:

\[q_\pi(s,a)=R_s^a+\gamma \sum_{s'}P_{ss'}^a \sum_{a'\in A}\pi(a'|s')q_\pi(s',a') \tag{2.11} \]

公式(2.9)可以在圖2.4中進行驗證。選擇狀態 \(s_4\)處。由圖2.4知道 \(υ(s_4)=7.4\),由公式(2.9)得

\[v(s_4)=0.5*(1+0.2*(-1.3)+0.4*2.7+0.4*7.4)+0.5*10=7.39 \]

保留一位小數為7.4。

計算狀態-值函數的目的是為了構建學習算法從數據中得到最優策略。每個策略對應著一個狀態值函數,最優策略自然對應著最優狀態-值函數。

定義:

  • 最優狀態-值函數 \(υ^*(s)\) 為在所有策略中值最大的值函數,即 $v^*(s)=\underset{\pi}{max}v_\pi(s) $,
  • 最優狀態-行為值函數\(q^*(s,a)\) 為在所有策略中最大的狀態-行為值函數,即 $q^*(s,a)=\underset{\pi}{max}q_\pi(s,a) $

我們由(2.9)式和(2.11)式分別得到最優狀態值函數和最優狀態-行動值函數的貝爾曼最優方程:

\[v^*(s)=\underset{a}{max} R_s^a+\gamma \sum_{s' \in S} P_{ss'}^a v^*(s') \tag{2.12} \] \[q^*(s,a)=R_s^a+\gamma \sum_{s'\in S}P_{ss'}^a max_{a'} q^*(s',a') \tag{2.13} \]

若已知最優狀態-動作值函數,最優策略可通過直接最大化 \(q^*(s,a)\) 來決定。

\[\pi ^*(a|s)=\begin{cases} 1, & \text {if $a$ =$\underset{a \in A}{argmax}q^*(s,a)$} \\ 0, & \text{otherwise} \end{cases} \]

如圖2.7所示為最優狀態值函數示意圖,圖中虛線箭頭所示的動作為最優策略。

圖2.7 最優值函數和最優策略至此,我們將強化學習的基本理論即馬爾科夫決策過程介紹完畢。現在該對強化學習算法進行形式化描述了。

我們定義一個離散時間有限范圍的折扣馬爾科夫決策過程 \(M=(S,A,P,r,ρ_0,γ,T)\),其中 \(S\) 為狀態集,\(A\) 為動作集,\(P:S×A×S→R\) 是轉移概率,\(r:S×A→[-R_{max},R_{max}]\) 為立即回報函數,\(ρ_0:S→R\) 是初始狀態分布,\(\gamma∈[0,1]\) 為折扣因子,\(T\) 為水平范圍(其實就是步數)。\(τ\) 為一個軌跡序列,即 \(τ=(s_0,a_0,s_1,a_1,...)\),累計回報為 \(R=\sum_{t=0}^{T} \gamma^tr_t\) ,強化學習的目標是找到最優策略 \(π\) ,使得該策略下的累計回報期望最大,即 \(\underset{\pi}{max}\int R(\tau)p_\pi(\tau)d\tau\)

2.2 MDP中的概率學基礎講解

本節解釋公式(2.1)隨機策略的定義。在強化學習算法中,隨機策略得到廣泛應用,因為隨機策略耦合了探索。后面要介紹的很多強化學習算法的策略都采用隨機策略,所以,很有必要理解什么是隨機策略。隨機策略常用符號 \(\pi\) 表示,它是指給定狀態 \(s\) 時動作集上的一個分布。要理解分布首先要理解隨機變量。

(1)隨機變量。隨機變量是指可以隨機地取不同值的變量,常用小寫字母表示。在MDP中隨機變量指的是當前的動作,用字母 \(a\) 表示。在圖2.3的例子中,隨機變量可取的值為“玩”、“退出”、“學習”、“發表”和“睡覺”。隨機變量可以是離散的也可以是非離散的,在該例子中隨機變量是離散的。有了隨機變量,我們就可以描述概率分布了。

(2)概率分布。概率分布用來描述隨機變量在每個可能取到的值處的可能性大小。離散型隨機變量的概率分布常用概率質量函數來描述,即隨機變量在離散點處的概率。連續型隨機變量的概率分布則用概率密度函數來描述。在圖 2.3的例子中,指定一個策略 \(\pi\) 就是指定取每個動作的概率。

(3)條件概率。策略 \(π(a|s)\) 是條件概率。條件概率是指在其他事件發生時,我們所關心的事件所發生的概率。在我們的例子中 \(π(a|s)\) 是指在當前狀態處,采取某個動作的概率。當給定隨機變量后,狀態處的累計回報也是隨機變量,而且其分布由隨機策略決定。狀態-值函數定義為該累計回報的期望。下面我們再看看期望和方差的概念

(4)期望和方差。函數 \(f(x)\) 關于某分布 \(P(x)\) 的期望是指,當 \(x\) 由分布 \(P(x)\) 產生、\(f\) 作用于 \(x\) 時,\(f(x)\) 的平均值。對于離散型隨機變量,期望公式為:(概率乘以值)的累加

\[E_{x\backsim P}[\,f(x)\,]=\sum_x P(x)f(x) \]

對于連續型隨機變量,期望通過積分求得:

\[E_{x\backsim P}[\,f(x)\,]=\int p(x)f(x)dx \]

期望的運算是線性的,即:

\[E_x[\alpha f(x)+\beta g(x)]=\alpha E_x[f(x)]+\beta E_x[g(x)] \]

期望的線性運算在后面的很多推導中都會用到。

(5)方差。方差是衡量利用當前概率分布采樣時,采樣值差異的大小,可用如下公式得到:

\[Var(f(x))=E[(f(x)-E[f(x)])^2] \]

從定義我們可以看到,方差越小,采樣值離均值越近,不確定性越小。尤其是方差很小時,采樣值都集中在均值附近,因此不確定性很小(這時,你猜測采樣值是均值,那么該猜測離實際采樣點很近)。方差的平方根被稱為標準差。有了均值和方差,我們現在就可以談一談在強化學習中最常用的概率分布了。

最常用的概率分布也就是最常用的隨機策略。

(1)貪婪策略。

\[\pi^*(a|s)= \begin{cases} 1,& \text{if $a$ = $\underset{a\in A}{arg max}\,q^*(s,a)$}\\ 0,&\text{otherwise} \end{cases} \]

貪婪策略是一個確定性策略,即只有在使得狀態-動作值函數 \(q^*(s,a)\) 最大的動作處取概率1,選其他動作的概率為0。

(2)ε-greedy策略。

\[\pi(a|s)= \begin{cases} 1-\varepsilon+\frac{\varepsilon}{|A(s)|},& \text{if $a$ = $arg max_a\,Q(s,a)$}\\ \frac{\varepsilon}{|A(s)|},&\text{otherwise} \end{cases} \]

ε-greedy策略是強化學習最基本最常用隨機策略。其含義是選取使得動作值函數最大的動作的概率為 \(1-\varepsilon+\frac{\varepsilon}{|A(s)|}\) ,而其他動作的概率為等概率,都為 \(\frac{\varepsilon}{|A(s)|}\) 。ε-greedy平衡了利用(exploitation)和探索(exploration),其中選取動作值函數最大的部分為利用,其他非最優動作仍有概率為探索部分。

(3)高斯策略。一般高斯策略可以寫成 \(\pi_\theta=\mu_\theta+\varepsilon,\,\varepsilon \backsim N(0,\sigma^2)\) 。其中 \(\mu_\theta\) 為確定性部分,\(\varepsilon\) 為零均值的高斯隨機噪聲。高斯策略也平衡了利用和探索,其中利用由確定性部分完成,探索由 \(\varepsilon\) 完成。高斯策略在連續系統的強化學習中應用廣泛。

(4)玻爾茲曼分布。對于動作空間是是離散的或者動作空間并不大的情況,可采用玻爾茲曼分布作為隨機策略,即

\[\pi(a|s,\theta)=\frac{\text{exp}(Q(s,a,\theta))}{\sum_b \text{exp}(h(s,b,\theta))} \]

其中 \(Q(s,a,\theta)\) 為動作值函數。該策略的含義是,動作值函數大的動作被選中的概率大,動作值函數小的動作被選中的概率小。

2.3 基于gym的MDP實例講解

略過。

3 基于模型的動態規劃方法

3.1 基于模型的動態規劃方法理論(回頭補策略迭代,值迭代)

從廣義上講,強化學習是序貫決策問題。但序貫決策問題包含的內容更豐富。它不僅包含馬爾科夫過程的決策,而且包括非馬爾科夫過程的決策。在上一節,我們已經將強化學習納入到馬爾科夫決策過程MDP的框架之內。馬爾科夫決策過程可以利用元組 \((S,A,P,r,γ)\) 來描述,根據轉移概率 \(P\) 是否已知,可以分為基于模型的動態規劃方法和基于無模型的強化學習方法,如圖3.2所示。兩種類別都包括策略迭代算法,值迭代算法和策略搜索算法。不同的是,在無模型的強化學習方法中,每類算法又分為 online 和 offline 兩種。online 和 offline 的具體含義,我們會在下一章中詳細介紹。

基于模型的強化學習可以利用動態規劃的思想來解決。顧名思義,動態規劃中的“動態”蘊含著序列和狀態的變化;“規劃”蘊含著優化,如線性優化,二次優化或者非線性優化。利用動態規劃可以解決的問題需要滿足兩個條件:一是整個優化問題可以分解為多個子優化問題;二是子優化問題的解可以被存儲和重復利用。前面已經講過,強化學習可以利用馬爾科夫決策過程來描述,利用貝爾曼最優性原理得到貝爾曼最優化方程:

\[v^*(s)=\underset{a}{max} R_s^a+\gamma \sum_{s' \in S} P_{ss'}^a v^*(s')\\ q^*(s,a)=R_s^a+\gamma \sum_{s'\in S}P_{ss'}^a max_{a'} q^*(s',a') \tag{3.1} \]

從方程(3.1)中可以看到,馬爾科夫決策問題符合使用動態規劃的兩個條件,因此可以利用動態規劃解決馬爾科夫決策過程的問題。貝爾曼方程(3.1)指出,動態規劃的核心是找到最優值函數。那么,第一個問題是:給定一個策略 \(π\) ,如何計算在策略 \(π\) 下的值函數?其實上章已經講過,具體看這:如何計算在策略 \(π\) 下的值函數 2.1.4 : (2)

這里再重復一下公式 2.9:

\[v_\pi(s)=\sum_{a\in A}\pi(a|s) \left( R_s^a+\gamma \sum_{s'\in S}P_{ss'}^a v_\pi(s') \right) \tag{3.4} \]

狀態 \(s\) 處的值函數 \(υ_π(s)\),可以利用后繼狀態的值函數 \(υ_π(s′)\) 來表示。可是有人會說,后繼狀態的值函數 \(υ_π(s′)\) 也是未知的,那么怎么計算當前狀態的值函數,這不是自己抬自己嗎?沒錯,這正是bootstrapping算法(自舉算法)!

如何求解(3.4)的方程?首先,我們從數學的角度去解釋方程(3.4)。對于模型已知的強化學習算法,方程(3.4)中的 \(P_{ss'}^a\)\(γ\)\(R_s^a\) 都是已知數,\(\pi(a|s)\) 為要評估的策略是指定的,也是已知值。方程(3.4)中唯一的未知數是值函數,從這個角度理解方程(3.4)可知,方程(3.4)是關于值函數的線性方程組,其未知數的個數為狀態的總數,用 \(|S|\) 來表示。

此處,我們使用高斯-賽德爾迭代算法進行求解。即:

\[v_{k+1}(s)=\sum_{a\in A}\pi(a|s) \left( R_s^a+\gamma \sum_{s'\in S}P_{ss'}^a v_\pi(s') \right) \tag{3.5} \]

高斯-賽德爾迭代法的講解請參看 原書3.2 節。這里以及后邊的就略了,重點在后邊。

策略迭代,值迭代算法具體看之前周老師的學習筆記:https://www.cnblogs.com/52dxer/p/14309014.html

4 基于蒙特卡羅的強化學習方法

4.1 基于蒙特卡羅方法的理論

本章我們學習無模型的強化學習算法。

強化學習算法的精髓之一是解決無模型的?爾科夫決策問題。如圖4.1所示,無模型的強化學習算法主要包括蒙特卡羅方法和時間差分方法。本章我們闡述蒙特卡羅方法。

學習蒙特卡羅方法之前,我們先梳理強化學習的研究思路。首先,強化學習問題可以納入馬爾科夫決策過程中,這方面的知識已在第2章闡述。在已知模型的情況下,可以利用動態規劃的方法(動態規劃的思想是無模型強化學習研究的根源,因此重點闡述)解決馬爾科夫決策過程。第3章,闡述了兩種動態規劃的方法:策略迭代和值迭代。這兩種方法可以用廣義策略迭代方法統一:即先進行策略評估,也就是計算當前策略所對應的值函數,再利用值函數改進當前策略。無模型的強化學習基本思想也是如此,即:策略評估(用策略計算值函數)和策略改善(用值函數改善策略)。

\[v_\pi(s)=\sum_{a\in A}\pi(a|s)\left(R_s^a+\gamma \sum_{s'\in S} \color{red}{P_{ss'}^a}v_\pi(s')\right)\tag{4.1} \]

動態規劃方法計算狀態處的值函數時利用了模型 \(P_{ss'}^a\) ,而在無模型強化學習中,模型 \(P_{ss'}^a\) 是未知的。無模型的強化學習算法要想利用策略評估和策略改善的框架,必須采用其他的方法評估當前策略(計算值函數)。

\[v_\pi(s)=E_\pi[G_t|S_t=s]=E_\pi[\,\sum_{k=0}^{\infty}\gamma^k R_{t+k+1}|S_t=s\,] \tag{4.2} \] \[q_\pi(s,a)=E_\pi[\sum_{k=0}^{\infty}\gamma^k R_{t+k+1}|S_t=s,A_t=a] \tag{4.3} \]
4.1.1 蒙特卡洛方法里的策略評估方法

狀態值函數和行為值函數的計算實際上是計算返回值的期望(參見圖4.2),動態規劃的方法是利用模型計算該期望。在沒有模型時,我們可以采用蒙特卡羅的方法計算該期望,即利用隨機樣本估計期望。在計算值函數時,蒙特卡羅方法是利用經驗平均代替隨機變量的期望。此處,我們要理解兩個詞:經驗和平均。

首先來看下什么是“經驗”。當要評估智能體的當前策略時,我們可以利用策略產生很多次試驗,每次試驗都是從任意的初始狀態開始直到終止,比如一次試驗(an episode)為 \(S_1,A_1,R_2,\cdots,S_T\), 計算一次試驗中狀態處的折扣回報返回值為 \(G_t(s)=R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{T-1}R_T\)

那么“經驗”就是指利用該策略做很多次試驗,產生很多幕數據(這里的一幕是一次試驗的意思),如圖4.3所示。

再來看什么是“平均”。這個概念很簡單,平均就是求均值。不過,利用蒙特卡羅方法求狀態處的值函數時,又可以分為第一次訪問蒙特卡羅方法和每次訪問蒙特卡羅方法。

first visit 蒙特卡羅方法是指在計算狀態 \(s\) 處的值函數時,只利用每次試驗中第一次訪問到狀態 \(s\) 時得到的回報求均值。如圖4.3中第一次試驗所示,計算狀態 \(s\) 處的均值時只利用 \(G_{11}\) ,因此第一次訪問蒙特卡羅方法的計算公式為

\[v(s)=\frac{G_{11}(s)+G_{21}(s)+\cdots}{N(s)} \]

every visit 蒙特卡羅方法是指在計算狀態處的值函數時,利用所有訪問到狀態時的回報返回值,即,

\[v(s)=\frac{G_{11}(s)+G_{12}(s)+\cdots+G_{21}(s)+\cdots}{N(s)} \]

根據大數定律:\(v(s)\to v_\pi(s)\,as\,N(s)\to \infty\)

由于智能體與環境交互的模型是未知的,蒙特卡羅方法是利用經驗平均來估計值函數,而能否得到正確的值函數,則取決于經驗——因此,如何獲得充足的經驗是無模型強化學習的核心所在。

在動態規劃方法中,為了保證值函數的收斂性,算法會逐個掃描狀態空間中的狀態。無模型的方法充分評估策略值函數的前提是每個狀態都能被訪問到,因此,在蒙特卡洛方法中必須采用一定的方法保證每個狀態都能被訪問到,方法之一是探索性初始化。

4.1.2 蒙特卡洛方法里的策略改善方法

探索性初始化是指每個狀態都有一定的幾率作為初始狀態。在學習基于探索性初始化的蒙特卡羅方法前,我們還需要先了解策略改善方法,以及便于進行迭代計算的平均方法。下面我們分別介紹蒙特卡羅策略改善方法和可遞增計算均值的方法。

(1)蒙特卡羅策略改善。

蒙特卡羅方法利用經驗平均估計策略值函數。估計出值函數后,對于每個狀態,它通過最大化動作值函數來進行策略的改善。即 \(\pi(s)=argmax_a q(s,a)\)

(2)遞增計算均值的方法如(4.4)式所示。

\[\begin{align*} v_k(s) &=\frac{1}{k}\sum_{j=1}^k G_j(s)\\ &=\frac{1}{k}[G_k(s)+\sum_{j=1}^{k-1}G_j(s)]\\ &=\frac{1}{k}[G_k(s)+(k-1)v_{k-1}(s)]\\ &=v_{k-1}(s)+\frac{1}{k}[G_k(s)+v_{k-1}(s)]\\ \end{align*} \tag{4.4} \]

如圖4.4所示是探索性初始化蒙特卡羅方法的偽代碼,需要注意的是:

  • 第一,第2步中,每次試驗的初始狀態和動作都是隨機的,以保證每個狀態行為對都有機會作為初始狀態。在評估狀態行為值函數時,需要對每次試驗中所有的狀態行為對進行估計;
  • 第二,第3步完成策略評估,第4步完成策略改善。

我們再來討論一下探索性初始化。探索性初始化在迭代每一幕時,初始狀態是隨機分配的,這樣可以保證迭代過程中每個狀態-行為對都能被選中。它蘊含著一個假設:假設所有的動作都被無限頻繁選中。對于這個假設,有時很難成立,或無法完全保證。我們會問,如何保證在初始狀態不變的同時,又能保證每個狀態行為對可以被訪問到?答:精心設計你的探索策略,以保證每個狀態都能被訪問到。可是如何精心地設計探索策略?符合要求的探索策略應該是什么樣的?答:策略必須是溫和的,即對所有的狀態 \(s\)\(a\) 滿足:\(\pi(a|s)>0\) 。也就是說,溫和的探索策略是指在任意狀態下,采用動作集中每個動作的概率都大于零。典型的溫和策略是 \(\varepsilon-soft\) 策略也就是 \(\varepsilon-greedy\) 策略 :

\[\pi(a|s)= \begin{cases} 1-\varepsilon+\frac{\varepsilon}{|A(s)|},& \text{if $a$ = $arg max_a\,Q(s,a)$}\\ \frac{\varepsilon}{|A(s)|},&\text{otherwise} \end{cases} \tag{4.5} \]
4.1.3 on policy和off policy

根據探索策略(行動策略)和評估的策略是否為同一個策略,蒙特卡羅方法又分為 on-policy 和 off-policy。若行動策略和評估及改善的策略是同一個策略,我們稱為 on-policy,可翻譯為同策略。若行動策略和評估及改善的策略是不同的策略,我們稱為off-policy,可翻譯為異策略。接下來我們重點理解這 on-policy 方法和 off-policy 方法。

(1)同策略。

同策略(on-policy)是指產生數據的策略與評估和要改善的策略是同一個策略。比如,要產生數據的策略和評估及要改善的策略都是 \(\varepsilon-soft\) 策略。其偽代碼如圖4.5所示。

(2)異策略。異策略(off-policy)是指產生數據的策略與評估和改善的策略不是同一個策略。我們用 \(\pi\) 表示用來評估和改善的策略,用 \(\mu\) 表示產生樣本數據的策略。

異策略可以保證充分的探索性。例如用來評估和改善的策略 \(\pi\) 是貪婪策略,用于產生數據的探索性策略 $ \mu$ 為探索性策略,如 \(\varepsilon-soft\) 策略。

用于異策略的目標策略和行動策略并非任意選擇的,而是必須滿足一定的條件。這個條件是覆蓋性條件,即行動策略 \(\mu\) 產生的行為覆蓋或包含目標策略 \(\pi\) 產生的行為。利用式子表示:滿足 \(\pi(a|s)>0\) 的任何 \((s,a)\) 均滿足 \(\mu(a|s)>0\)

利用行為策略產生的數據評估目標策略需要利用重要性采樣方法。下面,我們介紹重要性采樣。我們用圖4.6描述重要性采樣的原理。重要性采樣來源于求期望,如圖4.6所示:

如圖4.6所示,當隨機變量 \(z\) 的分布非常復雜時,無法利用解析的方法產生用于逼近期望的樣本,這時,我們可以選用一個概率分布很簡單,很容易產生樣本的概率分布 \(q(z)\) ,比如正態分布。原來的期望可變為

\[\begin{align*} E[f] &=\int f(z)p(z)dz\\ &=\int f(z)\frac{p(z)}{q(z)}q(z)dz\\ &\approx\frac{1}{N}\sum_n\frac{p(z^n)}{q(z^n)}f(z^n),z^n\backsim q(z) \end{align*} \tag{4.7} \]

定義重要性權重:\(\omega^n=p(z^n)/q(z^n)\)

普通的重要性采樣求積分如方程(4.7)所示為

\[E[f]=\frac{1}{N}\sum_n\omega^nf(z^n)\tag{4.8} \]

由式(4.7)可知,基于重要性采樣的積分估計為無偏估計,即估計的期望值等于真實的期望。但是,基于重要性采樣的積分估計的方差無窮大。這是因為原來的被積函數乘了一個重要性權重,改變了被積函數的形狀及分布。盡管被積函數的均值沒有發生變化,但方差明顯發生改變。

在重要性采樣中,使用的采樣概率分布與原概率分布越接近,方差越小。然而,被積函數的概率分布往往很難求得、或很奇怪,因此沒有與之相似的簡單采樣概率分布,如果使用分布差別很大的采樣概率對原概率分布進行采樣,方差會趨近于無窮大。一種減小重要性采樣積分方差的方法是采用加權重要性采樣:

先略了,太難了,數學公式搞得頭大,具體內容看書。

on policy和off policy的優劣之分:5.1章節在時間差分強化學習方法中再次比較了on policy和off policy

來源:https://www.zhihu.com/question/56561878/answer/149892732

理想情況下,強化學習應該直奔最優策略而去--確定性的“狀態-最優行為選擇”。我們稱之為target policy。
這是on-policy的目標,但在實施時,會遭遇探索-利用的矛盾:光利用目前已知的最優選擇,可能學不到最優解,收斂到局部最優;而加入探索又降低了學習效率。\(\varepsilon-greedy\) 算法是這種矛盾下的折中 。
為避免on policy的問題,off policy索性把問題一分為二,采取了從行為策略來學習目標策略的辦法,兩者可以互不干擾。具體來說:先產生某概率分布下的大量行為數據(behavior policy),意在探索。從這些偏離(off)最優策略的數據中尋求target policy。當然這么做是需要滿足數學條件的:假設 \(π\) 是目標策略, \(\mu\) 是行為策略,那么從 \(\mu\) 學到 \(\pi\) 的條件是:\(π(a|s) > 0\) 必然有 \(\mu(a|s) > 0\)成立。
兩種學習策略的關系是:on-policy是off-policy 的特殊情形,其target policy 和behavior policy是一個。
on-policy優點是直接了當,速度快,劣勢是不一定找到最優策略。
off-policy劣勢是曲折,收斂慢,但優勢是更為強大和通用。其強大是因為它確保了數據全面性,所有行為都能覆蓋。甚至其數據來源可以多樣,自行產生、或者外來數據均可。

總結一下:本節重點講解了如何利用MC的方法估計值函數。與基于動態規劃的方法相比,基于MC的方法只是在值函數估計上有所不同,在整個框架上則是相同的,即評估當前策略,再利用學到的值函數進行策略改善。本節需要重點理解on-policy 和off-policy的概念,并學會利用重要性采樣來評估目標策略的值函數。

4.2 統計學基礎知識

聯系我們關于強化學習算法的概念:強化學習是智能體通過與環境交互產生數據,并把從中學到的知識內化為自身行為的過程。學習的過程其實就是數據的處理和加工過程。尤其是值函數的估計,更是利用數據估計真實值的過程,涉及樣本均值,方差,有偏估計等,這些都是統計學的術語。下面做些簡單介紹。

總體:包含所研究的全部數據的集合。

樣本:從總體中抽取的一部分元素的集合。在 episode 強化學習中,一個樣本是指一幕數據。

統計量:用來描述樣本特征的概括性數字度量。如樣本均值,樣本方差,樣本標準差等。在強化學習中,我們用樣本均值衡量狀態值函數。

樣本均值:\(X_1,X_2,X_3,\cdots,X_n\) 為樣本容量為 n 的隨機樣本,它們是獨立同分布的隨機變量,則樣本均值為 \(\bar{X}=\frac{X_1+X_2+\cdots+X_n}{n}\) ,樣本均值也是隨機變量。

樣本方差:\(X_1,X_2,X_3,\cdots,X_n\) 為樣本容量為n的隨機樣本,它們是獨立同分布的隨機變量,則樣本方差為 \(\hat{S^2}=\frac{(X_1-\bar{X})^2+(X_2-\bar{X})^2+\cdots+(X_n-\bar{X})^2}{n}\)

無偏估計:若樣本的統計量等于總體的統計量,則稱該樣本的統計量所對應的值為無偏估計。如總體的均值和方差分別為 \(\mu\)\(\sigma^2\) 時,若 \(E(\bar{X})=\mu\)\(E(\hat{S^2})=\sigma^2\) ,則 \(\bar{X}\)\(\hat{S^2}\) 稱為無偏估計。

略,看原文內容

4.3 基于Python的編程實例

蒙特卡羅方法解決的是無模型的強化學習問題,基本思想是利用經驗平均代替隨機變量的期望。因此,利用蒙特卡羅方法評估策略應該包括兩個過程:模擬和平均。模擬就是產生采樣數據,平均則是根據數據得到值函數。下面我們以利用蒙特卡羅方法估計隨機策略的值函數為例做詳細說明。

4.3.1 隨機策略的樣本產生:

模擬圖4.10為蒙特卡羅方法的采樣過程。該采樣函數包括兩個大循環,第一個大循環表示采樣多個樣本序列,第二個循環表示產生具體的每個樣本序列。需要注意的是,每個樣本序列的初始狀態都是隨機的。因為評估的是隨機均勻分布的策略,所以在采樣的時候,動作都是根據隨機函數產生的。每個樣本序列包括狀態序列,動作序列和回報序列。

# 蒙特卡洛樣本采集(隨機初始化狀態,隨機選擇動作,隨機產生多條軌跡,保存軌跡) def gen_randompi_sample(self,num):state_sample = [ ]action_sample = [ ]reward_sample = [ ]for i in range(num):s_tmp = [ ]a_tmp = [ ]r_tmp = [ ]s=self.states[int(random.random()*len(self.states))] # 隨機初始化每回合的初始狀態done=Falsewhile t==False: #產生一條軌跡,如s1->s2->s3->s7軌跡a=self.actions[int(random.random()*len(self.actions))]done,s_next,r = self.transform(s,a)s_tmp.append(s)a_tmp.append(a)r_tmp.append(r)s=s_nextstate_sample.append(s_tmp) #樣本包含多個狀態樣例action_sample.append(a_tmp)reward_sample.append(r_tmp)return state_sample,action_sample,reward_sample

第一處:對于每條軌跡逆向計算該軌跡的初始狀態處的累計回報,也就是說從軌跡的最后一個狀態開始往前依次計算,最終得到初始狀態處的累計回報為 \(G\),計算公式為 \(G_t=R_{t+1}+\gamma G_{t+1}\)

第二處:正向計算每個狀態所對應的累計函數,計算公式為 \(G_{t+1}=(G_t-R_{t+1})/\gamma\)

第三處:求均值,即累計和對該狀態出現的次數求均值。相應于第1節中的每次訪問蒙特卡羅方法。

下面,我們實現基于蒙特卡羅的強化學習算法。蒙特卡羅強化學習每次迭代評估的都是ε-greedy策略。

# 蒙特卡洛評估 def mc(gamma,state_sample,action_sample,reward_sample):vfunc = dict () # v(s) 狀態值nfunc = dict () # 次數# 初始化,每個狀態值為0,經過的次數為0for s in states:vfunc[s]=0.0nfunc[s]=0.0for iter1 in range(len(state_sample)):G=0.0# 第一處:逆向計算初始狀態的累計回報for step in range(len(state_sample[iter1])-1,-1,-1):G*=gammaG+=reward_sample[iter1][step]# 第二處:正向計算每個狀態處的累計回報for step in range(len(state_sample[iter1])):s=state_sample[iter1][step]vfunc[s]+=Gnfunc[s]+=1.0G-=reward_sample[iter1][step]G/=gamma# 第三處:每個狀態處求經驗平均for s in states:if nfunc[s] > 0.000001:vfunc[s]/=nfunc[s]return vfunc

5 基于時間差分的強化學習方法

5.1 基于時間差分強化學習算法理論講解

第4章我們已經闡述了無模型強化學習最基本的方法蒙特卡羅方法。本章我們闡述另外一個無模型的方法:時間差分方法。

時間差分(Temporal-Difference,簡稱TD)方法(如圖5.1所示)是另一種無模型強化學習方法,也是強化學習理論中最核心的內容。與動態規劃的方法和蒙特卡羅的方法相比,時間差分方法的主要不同在于值函數的估計。

如圖5.2所示為用動態規劃的方法計算值函數。

下面的式(5.1)是值函數估計的計算公式,從中可以看到,用動態規劃方法(DP)計算值函數時用到了當前狀態 \(s\) 的所有后繼狀態 \(s’\) 處的值函數。值函數的計算用到了bootstrapping的方法。所謂 bootstrapping本意是指自舉,此處是指當前值函數的計算用到了后繼狀態的值函數。即用后繼狀態的值函數估計當前值函數。要特別注意的是,此處后繼的狀態是由模型公式 \(p(s',r|S_t,a)\) 計算得到的。由模型公式和動作集,可以計算狀態 \(s\) 所有的后繼狀態 \(s’\) 。當沒有模型時,后繼狀態無法全部得到,只能通過試驗和采樣的方法每次試驗得到一個后繼狀態 \(s’\)

\[V(S_t)\leftarrow E_\pi[R_{t+1}+\gamma V(S_{t+1})]=\sum_a \pi(a|S_t)\sum_{s',r}p(s',r|S_t,a)[r+\gamma \color{red}{V(s')}] \tag{5.1} \]

無模型時,我們可以采用蒙特卡羅的方法利用經驗平均來估計當前狀態的值函數,用它計算值函數的過程如圖5.3所示。

蒙特卡羅方法利用經驗平均估計狀態的值函數。此處的經驗是指一次試驗,而一次試驗要等到終止狀態出現才結束(參見圖5.3)。公式(5.2)中的 \(G_t\) 是狀態處 \(S_t\) 的折扣累積回報值。

\[V(S_t) \leftarrow V(S_t)+\alpha(G_t-V(S_t)) \tag{5.2} \]

相比于動態規劃的方法,蒙特卡羅的方法需要等到每次試驗結束,所以學習速度慢,學習效率不高。通過對兩者的比較,我們很自然地會想到:能不能借鑒動態規劃中bootstrapping的方法,在試驗未結束時就估計當前的值函數呢?

答案是肯定的,這是時間差分方法的精髓。時間差分方法結合了蒙特卡羅的采樣方法(即做試驗)和動態規劃方法的bootstrapping(利用后繼狀態的值函數估計當前值函數),它的計算過程如圖5.4所示。

用時間差分方法(TD)將值函數的公式更新為

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

其中 \(R_{t+1}+\gamma V(S_{t+1})\) 稱為 TD 目標,與(5.2)中的 \(G_t\) 相對應,兩者不同之處是TD目標利用了bootstrapping方法估計當前值函數。\(\delta_t= R_{t+1}+\gamma V(S_{t+1})-V(S_t)\) 稱為TD偏差。

下面我們從原始公式出發,了解動態規劃(DP)、蒙特卡羅方法(MC)和時間差分方法(TD)的不同之處。

下面公式是用三種方法估計值函數的異同點。

DP:期望值由模型來提供,但是利用真值的當前估計值 \(V(S_{t+1})\)

MC:利用采樣平均回報逼近期望

TD:聯合了MC和DP,采樣期望值,并利用真值的當前估計值 \(V(S_{t+1})\)

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

從中可以看到,蒙特卡羅的方法使用的是值函數最原始的定義,該方法利用所有回報的累積和估計值函數;動態規劃方法和時間差分方法則利用一步預測方法計算當前狀態值函數,它倆的共同點是利用了bootstrapping 方法;不同的是,動態規劃方法利用模型計算后繼狀態,時間差分方法利用試驗得到后繼狀態。

從統計學的角來看,蒙特卡羅方法(MC)和時間差分方法(TD)都是利用樣本估計值函數的方法,哪種更好呢?

既然都是統計方法,我們就可以從期望和方差兩個指標對比兩種方法。

首先我們先看看蒙特卡羅方法。蒙特卡羅方法中的返回值 \(G_t=R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{T-1}R_t\) ,其期望便是值函數的定義,因此蒙特卡羅方法是無偏估計。但是,蒙特卡羅方法每次得到的值要等到最終狀態出現,在這個過程中會經歷很多隨機的狀態和動作,每次得到的隨機性很大,因此盡管期望等于真值,但方差無窮大。

我們再來看下時間差分方法。時間差分方法的TD目標為 \(R_{t+1}+\gamma V(S_{t+1})\) ,若 \(V(S_{t+1})\) 采用真實值,則TD估計也是無偏估計,然而在試驗中 \(V(S_{t+1})\) 用的也是估計值,因此時間差分估計方法屬于有偏估計。與蒙特卡羅方法相比,時間差分方法只用到了一步隨機狀態和動作,因此TD目標的隨機性比蒙特卡羅方法中的要小,相應的方差也比蒙特卡羅方法中的方差小。

時間差分方法包括同策略的 Sarsa 方法和異策略的 Q-learning 方法。如圖5.6所示為同策略 Sarsa 強化學習算法,需要注意的是方框中代碼表示同策略中的行動策略和評估的策略都是 \(ε-greedy\) 策略。與蒙特卡羅方法不同的是,它的值函數更新不同。

如圖5.7所示為異策略的 Q-learning 方法。與 Sarsa 方法的不同之處在于,Q-learning 方法是異策略的方法。即行動策略采用 \(ε-greedy\) 策略,而目標策略為貪婪策略。

這里跟Sarsa算法很大不同的是:對第二個action的采樣,在Sarsa中我們要根據target policy進行兩次對action的采樣。在Q-learning中第一個采樣我們是用 \(\varepsilon-greedy\) 采樣出來的,第二個action的采樣,我們是用貪婪策略采樣出來的,是在Q table中取一個收益max的action。然后我們對Q table進行更新,然后當前的狀態進入到下一個狀態。

  • On-policy Learning就是我們的目的是學到最佳策略,在學習過程中我們只利用一種策略,既利用這個策略進行軌跡的采集,也進一步進行策略的優化,都是用的同一個策略。例子:$ \varepsilon?greedy$
  • Off-poilcy Learning就是我們在策略的學習過程中保留兩種不同的策略。第一個策略是我們進行優化的策略,是希望學到最佳的策略。另外一個策略是我們用來探索的策略,因為是用來探索的策略,所以我們可以讓這個策略更加的激進對環境進行探索。所以我們學習的是 target policy:π ,但是我們利用的數據,采集到的軌跡是用第二個策略 behavior policy:μ 產生。

Off-policy Learning的好處:

  • 因為可以利用一個更加激進的behavior policy,所以我們可以學到一個更加優化的策略。
  • 可以從其他的數據中進行學習,因為這些軌跡可能是人,或者其他agent產生的,那么就可以進行一個模仿學習。
  • 我們可以反復利用一些老的策略產生的軌跡。因為探索軌跡的過程中,我們要用到很多的計算機資源,如果我們之前產生的軌跡,對于我們現在優化的軌跡不能利用的話,這樣就浪費了很多資源。

\(TD(\lambda)\) 算法具體看之前寫的文章:https://www.cnblogs.com/52dxer/p/14400336.html

6 基于值函數逼近的強化學習方法

6.1 基于值函數逼近的理論講解

前面已經介紹了強化學習的基本方法:基于動態規劃的方法,基于蒙特卡羅的方法和基于時間差分的方法。這些方法有一個基本的前提條件:狀態空間和動作空間是離散的,而且狀態空間和動作空間不能太大。

這些強化學習方法的基本步驟是先評估值函數,再利用值函數改善當前的策略。其中值函數的評估是關鍵。

對于模型已知的系統,可以利用動態規劃的方法得到值函數;對于模型未知的系統,可以利用蒙特卡羅的方法或時間差分的方法得到值函數。

注意,這時的值函數其實是一個表格。對于狀態值函數,其索引是狀態;對于行為值函數,其索引是狀態-行為對。值函數的迭代更新實際上就是這張表的迭代更新。因此,之前講的強化學習算法又稱為表格型強化學習。對于狀態值函數,其表格的維數為狀態的個數 \(|S|\) ,其中 \(S\) 為狀態空間。若狀態空間的維數很大,或者狀態空間為連續空間,此時值函數無法用一張表格來表示。這時,我們需要利用函數逼近的方法表示值函數,如圖6.1所示。當值函數利用函數逼近的方法表示后,可以利用策略迭代和值迭代方法構建強化學習算法。

在表格型強化學習中,值函數對應著一張表。在值函數逼近方法中,值函數對應著一個逼近函數 \(\hat{v}(s)\) 。從數學角度來看,函數逼近方法可以分為參數逼近和非參數逼近,因此強化學習值函數估計可以分為參數化逼近和非參數化逼近。其中參數化逼近又分為線性參數化逼近和非線性化參數逼近。

本節我們主要介紹參數化逼近。所謂參數化逼近,是指值函數可以由一組參數 \(θ\) 來近似。我們將逼近的值函數寫為 \(\hat{v}(s,\theta)\)

當逼近的值函數結構確定時(如線性逼近時選定了基函數,非線性逼近時選定了神經網絡的結構),那么值函數的逼近就等價于參數的逼近。值函數的更新也就等價于參數的更新。也就是說,我們需要利用試驗數據來更新參數值。那么,如何利用數據更新參數值呢,也就是說如何從數據中學到參數值呢?

我們回顧一下表格型強化學習值函數更新的公式,以便從中得到啟發。

蒙特卡羅方法,值函數更新公式為:

\[Q(s,a)\leftarrow Q(s,a)+\alpha(\color{red}{G_t}-Q(s,a)) \tag{6.1} \]

TD方法值函數更新公式為:

\[Q(s,a)\leftarrow Q(s,a)+\alpha[\color{red}{r+\gamma Q(s',a')}-Q(s,a)] \tag{6.2} \]

\(TD(\lambda)\) 方法值函數更新公式為:

\[Q(s,a)\leftarrow Q(s,a)+\alpha(\color{red}{G_t^\lambda}-Q(s,a)) \tag{6.3} \]

從(6.1)?(6.3)式值函數的更新過程可以看出,值函數更新過程是向著目標值函數靠近。如圖6.2所示為TD方法更新值函數的過程。

從表格型值函數的更新過程,可以看出無論是蒙特卡羅方法還是時間差分方法,都是朝著一個目標值更新的,這個目標值在蒙特卡羅方法中是 \(\color{red}{G_t}\) ,在時間差分方法中是 \(\color{red}{r+\gamma Q(s',a')}\) ,在 \(TD(\lambda)\) 中是 \(\color{red}{G_t^\lambda}\)

將表格型強化學習值函數的更新過程推廣到值函數逼近過程,有如下形式。

函數逼近 \(\hat{v}(s,\theta)\) 的過程是一個監督學習的過程,其數據和標簽對為 \((S_t,U_t)\) ,其中 \(U_t\) 等價于蒙特卡羅方法中的,時間差分方法中的 \(\color{red}{r+\gamma Q(s',a')}\) ,以及 \(TD(\lambda)\) 中的 \(\color{red}{G_t^\lambda}\)

訓練的目標函數為

\[arg\,\underset{\theta}{min}(q(s,a)-\hat{q}(s,a,\theta))^2 \tag{6.4} \]

下面我們比較總結一下表格型強化學習和函數逼近方法的強化學習值函數更新時的異同點。

(1)表格型強化學習在更新值函數時,只有當前狀態 \(S_t\) 處的值函數改變,其他地方的值函數不改變。

(2)值函數逼近方法更新值函數時,更新的是參數 \(\theta\) ,而估計的值函數為 \(\hat{v}(s,\theta)\) ,所以當參數 \(\theta\) 發生改變,任意狀態處的值函數都會發生改變。

值函數更新可分為增量式學習方法和批學習方法。我們先介紹增量式學習方法,其中隨機梯度下降法是最常用的增量式學習方法。

1.增量式學習方法:隨機梯度下降法

由(6.4)式我們得到參數的隨機梯度更新為

\[\theta_{t+1}=\theta_t+\alpha[U_t-\hat{v}(S_t,\theta_t)]\nabla_\theta \hat{v}(S_t,\theta) \tag{6.5} \]

基于蒙特卡羅方法的函數逼近,具體過程如下。

給定要評估的策略 \(\pi\) ,產生一次試驗:

值函數的更新過程實際是一個監督學習的過程,其中監督數據集從蒙特卡羅的試驗中得到,其數據集為 \(<s_1,G_1>,<s_2,G_2>,\cdots,<s_T,G_T>\)

值函數的更新如下。

\[\Delta \theta=\color{red}{\alpha }(G_t-\hat{v}(S_t,\theta))\nabla_\theta \hat{v}(S_t,\theta) \tag{6.6} \]

其中 \(\alpha\) 值比較小。在隨機梯度下降法中,似乎并不清楚為什么每一步采用很小的更新。難道我們不能在梯度的方向上移動很大的距離甚至完全消除誤差嗎?在很多情況下確實可以這樣做,但是通常這并不是我們想要的。請記住,我們的目的并不是在所有的狀態找到精確的值函數,而是一個能平衡所有不同狀態誤差的值函數逼近。如果我們在一步中完全糾正了偏差,那么我們就無法找到這樣的一個平衡了。因此較小的 \(\alpha\) 值可以維持這種平衡。

如圖6.3所示為基于梯度的蒙特卡羅值函數逼近更新過程。蒙特卡羅方法的目標值函數使用一次試驗的整個回報返回值。

我們再看時間差分方法。根據方程(6.5),TD(0)方法中目標值函數為 \(U_t=R_{t+1}+\gamma \hat{v}(S_{t+1},\theta)\),即目標值函數用到了bootstrapping的方法。

我們注意到此時要更新的參數 \(\theta\) 不僅出現在要估計的值函數 \(\hat{v}(S_t,\theta)\) 中,還出現在目標值函數 \(U_t\) 中。若只考慮參數 \(\theta\) 對估計值函數 \(\hat{v}(S_t,\theta)\) 的影響而忽略對目標值函數 \(U_t\) 的影響,這種方法就不是完全的梯度法(只有部分梯度),因此也稱為基于半梯度的 \(TD(0)\) 值函數評估算法,如圖6.4所示。

\[\theta_{t+1}=\theta_t+\alpha [R+\gamma \hat{v}(S',\theta)-\hat{v}(S_t,\theta_t)]\nabla \hat{v}(S_t,\theta_t) \tag{6.7} \]

如圖 6.5 所示為基于半梯度的 Sarsa 算法。與表格型強化學習相比,值函數逼近方法中把對值函數的更新換成了對參數的更新,參數的學習過程為監督學習。

到目前為止,我們還沒有討論要逼近的值函數的形式。值函數可以采用線性逼近也可采用非線性逼近。非線性逼近常用的是神經網絡。

下面我們僅討論線性逼近的值函數:\(\hat{v}(s,\theta)=\theta ^T \phi (s)\),值函數由一組參數 \(\theta\) 來近似。

相比于非線性逼近,線性逼近的好處是只有一個最優值,因此可以收斂到全局最優。其中\(\phi(s)\) 為狀態 \(s\) 處的特征函數,或者稱為基函數。

常用的基函數的類型如下。

多項式基函數,如 \((1,s_1,s_2,s_1s_2,s_1^2,s_2^2,\cdots)\)

傅里葉基函數:\(\phi _i(s)=cos(i\pi s),s\in[0,1]\)

徑向基函數:\(\phi_i(s)=exp(-\frac{||s-c_i||^2}{2\sigma_i^2})\)

將線性逼近值函數代入隨機梯度下降法和半梯度下降法中,可以得到參數的更新公式,不同強化學習方法的參數更新公式如下。

蒙特卡羅方法值函數方法的參數更新公式:

\[\begin{align*}{} \Delta \theta &=\alpha[\color{red}{U_t(s)}-\hat{v}(S_t,\theta_t)]\nabla \hat{v}(S_t,\theta_t)\\ &=\alpha [G_t-\theta ^T \phi]\phi \end{align*} \]

TD(0)線性逼近值函數方法的參數更新公式:

\[\begin{align*}{} \Delta \theta &=\alpha[\color{red}{R+\gamma \theta^T \phi(s')}-\theta^T\phi(s)]\phi (s)\\ &=\alpha \delta \phi(s) \end{align*} \]

正向視角的參數更新公式:

\[\Delta \theta =\alpha(G_t^\lambda -\theta ^T\phi) \phi \]

后向視角的參數更新公式:

\[\begin{align*}{} \delta_t &=R_{t+1}+\gamma \theta^T \phi(s')-\theta ^T\phi (s)\\ E_t&=\gamma \lambda E_{t-1}+\phi(s)\\ \Delta \theta&=\alpha \delta_t E_t \end{align*} \]

前面討論的是增量式方法更新。增量式方法參數更新過程隨機性比較大,盡管計算簡單,但樣本數據的利用效率并不高。

我們再來看下批的方法,盡管它計算復雜,但計算效率高。

所謂批的方法是指給定經驗數據集 \(D=\{<s_1,v_1^\pi>,<s_2,v_2^\pi>,\cdots,<s_T,v_T^\pi>\}\) ,找到最好的擬合函數 \(\hat{v}(s,\theta)\) ,使得 \(Loss(\theta)=\sum_{t=1}^{T}(v_t^\pi-\hat{v}_t^\pi(s_t,\theta))\) 最小。

可利用線性最小二乘逼近:

\[\Delta \theta=\alpha \sum_{t=1}^{T}[v_t^\pi-\theta^T\phi(s_t)]\phi(s_t)=0 \]

最小二乘蒙特卡羅方法參數為

最小二乘差分方法為

最小二乘方法為

略。。。(看原書內容)

6.2 DQN及其變種
6.2.1 DQN方法

本節主要講解 DQN,也就是 DeepMind 發表在 Nature 上的第一篇論文,名字是 Human-level Control through Deep ReinforcementLearning。

平心而論,這篇論文只有兩個創新點,即經驗回放和設立單獨的目標網絡,后面我們會詳細介紹。算法的大體框架是傳統強化學習中的Q-learning。我們已經在第5章時間差分方法中闡述了。為了前后理解方便,我們再重新梳理下。Q-learning方法是異策略時間差分方法。其偽代碼如圖6.6所示。

行動策略采用 \(\varepsilon-greedy\)策略,評估策略采用貪婪策略。

掌握 Q-learning 方法一定要明白兩個概念——異策略和時間差分,以及這兩個概念在Q-learning算法是中如何體現的。下面我們一一介紹。

異策略,是指行動策略(產生數據的策略)和要評估的策略不是一個策略。在圖6.6 的Q-learning 偽代碼中,行動策略(產生數據的策略)是第5行的 \(ε-greedy\) 策略,而要評估和改進的策略是第6行的貪婪策略(每個狀態取值函數最大的那個動作)。

時間差分方法,是指利用時間差分目標來更新當前行為值函數。在圖6.6 的Q-learning偽代碼中,時間差分目標為 \(r_t+\gamma \underset{a}{max}Q(s_{t+1},a)\)

Q-learning算法是1989年由Watkins提出來的,2015年Nature論文提到的DQN就是在Q-learning的基礎上修改得到的。DQN對Q-learning的修改主要體現在以下三個方面。

(1)DQN利用深度卷積神經網絡逼近值函數;

(2)DQN利用了經驗回放訓練強化學習的學習過程;

(3)DQN獨立設置了目標網絡來單獨處理時間差分算法中的TD偏差。

下面,我們對這三個方面做簡要介紹。

(1)DQN 利用卷積神經網絡逼近行為值函數。如圖6.7所示為 DQN 的行為值函數逼近網絡。我們在6.1節已經介紹了值函數的逼近。只不過6.1節中講的是線性逼近,即值函數由一組基函數和一組與之對應的參數相乘得到,值函數是參數的線性函數。而 DQN 的行為值函數利用神經網絡逼近,屬于非線性逼近。雖然逼近方法不同,但都屬于參數逼近。請記住,此處的值函數對應著一組參數,在神經網絡里參數是每層網絡的權重,我們用 \(\theta\) 表示。用公式表示的話值函數為 \(Q(s,a;\color{red}{\theta})\)。請留意,此時更新值函數時其實是更新參數 \(\theta\) ,當網絡結構確定時,\(\theta\) 就代表值函數。DQN所用的網絡結構是三個卷積層加兩個全連接層,整體框架如圖6.7所示。

利用神經網絡逼近值函數的做法在強化學習領域早就存在了,可以追溯到上個世紀 90 年代。當時學者們發現利用神經網絡,尤其是深度神經網絡逼近值函數不太靠譜,因為常常出現不穩定不收斂的情況,所以在這個方向上一直沒有突破,直到DeepMind的出現。

我們要問,DeepMind到底做了什么?

別忘了DeepMind的創始人Hassabis是神經科學的博士。早在2005年,Hassabis就開始琢磨如何利用人的學習過程提升游戲的智能水平,為此他去倫敦大學開始攻讀認知神經科學方向的博士,并很快有了突出成就,在Science、Nature等頂級期刊狂發論文。他當時的研究方向是海馬體——那么,什么是海馬體?為什么要選海馬體?

海馬體是人類大腦中負責記憶和學習的主要部分,從Hassabis學習認知神經科學的目的來看,他選海馬體作為研究方向就是水到渠成的事兒了。現在我們就可以回答,DeepMind到底做了什么?他們將認識神經科學的成果應用到了深度神經網絡的訓練之中!

(2)DQN利用經驗回放訓練強化學習過程。我們睡覺的時候,海馬體會把一天的記憶重放給大腦皮層。利用這個啟發機制,DeepMind團隊的研究人員構造了一種神經網絡的訓練方法:經驗回放。通過經驗回放為什么可以令神經網絡的訓練收斂且穩定?原因是:訓練神經網絡時,存在的假設是訓練數據是獨立同分布的,但是通過強化學習采集的數據之間存在著關聯性,利用這些數據進行順序訓練,神經網絡當然不穩定。經驗回放可以打破數據間的關聯,如圖6.8所示。

在強化學習過程中,智能體將數據存儲到一個數據庫中,再利用均勻隨機采樣的方法從數據庫中抽取數據,然后利用抽取的數據訓練神經網絡。這種經驗回放的技巧可以打破數據之間的關聯性,該技巧在2013年的NIPS已經發布了,2015 年的 Nature 論文則進一步提出了目標網絡的概念,以進一步降低數據間的關聯性。(3)DQN設置了目標網絡來單獨處理時間差分算法中的TD偏差。與表格型的Q-learning算法(圖6.6)不同的是,利用神經網絡對值函數進行逼近時,值函數的更新步更新的是參數(如圖 6.9 所示),DQN 利用了卷積神經網絡。其更新方法是梯度下降法。因此圖6.6中第6行值函數更新實際上變成了監督學習的一次更新過程,其梯度下降法為

\[\theta_{t+1}=\theta_t+\alpha[r+\gamma\underset{a'}{max}Q(s',a';\color{blue}{\theta})-Q(s,a;\color{red}{\theta})]\nabla Q(s',a';\theta) \]

其中,\(r+\gamma\underset{a'}{max}Q(s',a';\color{blue}{\theta})\)\(TD\) 目標,在計算 \(\underset{a'}{max}Q(s',a';\color{blue}{\theta})\) 值時用到的網絡參數為 \(\color{blue}\theta\)

我們稱計算 \(TD\) 目標時所用的網絡為 \(TD\) 網絡。在DQN算法出現之前,利用神經網絡逼近值函數時,計算 \(TD\) 目標的動作值函數所用的網絡參數 \(\color{blue}\theta\),與梯度計算中要逼近的值函數所用的網絡參數 \(\color{red}\theta\) 相同,這樣就容易導致數據間存在關聯性,從而使訓練不穩定。為了解決此問題,DeepMind提出計算 \(TD\) 目標的網絡表示為 \(\color{green}{\theta^-}\);計算值函數逼近的網絡表示為 \(\color{red}\theta\) ;用于動作值函數逼近的網絡每一步都更新,而用于計算 \(TD\) 目標的網絡則是每個固定的步數更新一次。因此值函數的更新變為

\[\theta_{t+1}=\theta_t+\alpha[r+\gamma \underset{a'}{max}Q(s',a';\color{green}{\theta^-})-Q(s,a;\color{red}{\theta})]\nabla Q(s,a'\color{red}{\theta}) \]

最后我們給出DQN的偽代碼,如圖6.10a所示。

下面我們對DQN的偽代碼逐行說明。

第[1]行,初始化回放記憶池 \(D\),可容納的數據條數為\(N\)

第[2]行,隨機初始化動作值函數 \(Q\) 的參數 \(\color{red}\theta\)

第[3]行,用隨機權值 \(\color{red}\theta\) 初始化計算 \(TD\) 目標的動作值函數 \(\hat{Q}\) 的參數 \(\color{green}{\theta^-}\) ,令 \(\color{green}{\theta^-}=\color{red}{\theta}\)

第[4]行,循環每條軌跡;

第[5]行,初始化軌跡的第一個狀態\(s_1=\{x_1\}\),通過預處理得到狀態對應的特征輸入 \(\phi_1=\phi(s_1)\)

第[6]行,循環每條軌跡的每一步;

第[7]行,利用 \(\varepsilon-greedy\) 策略,一定概率隨機選一個動作 \(a_t\)(探索)

第[8]行,若小概率事件沒發生,則用貪婪策略選擇當前值函數最大的那個動作 \(a_t=arg\underset{a}{max} Q(\phi(s_t),a;\theta)\) (利用)

注意:這里選最大動作時用到的值函數網絡與逼近值函數所用的網絡是一個網絡,都對應。

注意:第[7]行和第[8]行是行動策略,即 \(ε-greedy\) 策略。

第[9]行,在仿真器中執行動作 \(a_t\) ,觀測回報 \(r_t\) 以及圖像 \(x_{t+1}\)

第[10]行,設置 \(s_{t+1}=s_t,a_t,x_{t+1}\) ,預處理 \(\phi_{t+1}=\phi(s_{t+1})\)

第[11]行,將軌跡 \((\phi_t,a_t,r_t,\phi_{t+1})\) 儲存在回放記憶池 \(D\) 中;

第[12]行,從回放記憶 \(D\) 中均勻隨機采樣一條軌跡樣本數據,用 \((\phi_j,a_j,r_j,\phi_{j+1})\) 表示;

第[13]行,如果 \(step_{j+1}\) 是一條軌跡的終止狀態,則 \(TD\) 目標值為 \(y_j=r_j\),否則利用 \(TD\) 目標網絡 \(\color{green}{\theta^-}\) 計算 \(TD\) 目標值為 \(y_j=r_j+\gamma\underset{a'}{max}Q(s',a';\color{green}{\theta^-})\)

第[14]行,執行一次梯度下降算法 \(\Delta \theta =\alpha[r+\gamma\underset{a'}{max}Q(s',a';\color{green}{\theta^-})-Q(s,a;\color{red}{\theta})]\nabla Q(s,a;\color{red}{\theta})\)

第[15]行,更新動作值函數逼近的網絡參數 \(\color{red}{\theta}=\color{red}{\theta}+\Delta\theta\)

第[16]行,每隔 \(C\) 步更新一次 \(TD\) 目標網絡權值,即令 \(\color{green}{\theta^-}=\color{red}{\theta}\)

第[17]行,結束每條軌跡內循環;

第[18]行,結束軌跡間循環。

我們可以看到,在第[12]行利用了經驗回放;在第[13]行利用了獨立的目標網絡;第[15]行更新動作值函數逼近網絡參數 \(\color{red}{\theta}\) ;第[17]行更新目標網絡參數 \(\color{green}{\theta^-}\)

6.2.2 Double DQN

上一節我們講了第一個深度強化學習方法DQN,DQN的框架仍然是Q-learning。DQN 只是利用了卷積神經網絡表示動作值函數,并利用了經驗回放和單獨設立目標網絡這兩個技巧。DQN無法克服Q-learning 本身所固有的缺點——過估計。

那么什么是過估計?Q-learning為何具有過估計的缺點呢?

過估計是指估計的值函數比真實值函數要大。一般來說,Q-learning之所以存在過估計的問題,根源在于Q-learning中的最大化操作。Q-learning評估值函數的數學公式如下有兩類。

  • 對于表格型,值函數評估的更新公式為
\[Q(s_t,a_t)\leftarrow Q(s_t,a_t)+\alpha\left[r_t+\gamma \underset{a}{max} Q(s_{t+1},a)-Q(s_t,a_t)\right] \]

●對于基于函數逼近的方法的值函數更新公式為

\[\theta_{t+1}=\theta_t+\alpha\left[R_{t+1}+\gamma \underset{a}{max} Q(S_{t+1},a;\theta_t)-Q(S_t,A_t;\theta_t) \right] \nabla_{\theta_t} Q(S_t,A_t;\theta_t) \]

從以上兩個式子我們知道,不管是表格型還是基于函數逼近的方法,值函數的更新公式中都有max操作。max操作使得估計的值函數比值函數的真實值大。如果值函數每一點的值都被過估計了相同的幅度,即過估計量是均勻的,那么由于最優策略是貪婪策略,即找到最大的值函數所對應的動作,這時候最優策略是保持不變的。也就是說,在這種情況下,即使值函數被過估計了,也不影響最優的策略。強化學習的目標是找到最優的策略,而不是要得到值函數,所以這時候就算是值函數被過估計了,最終也不影響我們解決問題。

然而,在實際情況中,過估計量并非是均勻的,因此值函數的過估計會影響最終的策略決策,從而導致最終的策略并非最優,而只是次優。為了解決值函數過估計的問題,Hasselt 提出了 Double Q-learning 的方法。所謂Double Q-learning 是將動作的選擇和動作的評估分別用不同的值函數來實現。那么,什么是動作的選擇?什么是動作的評估?我們做些簡要的說明。

  • 動作選擇 在Q-learning的值函數更新中,TD目標為
\[Y_t^Q=R_{t+1}+\gamma \underset{a}{max}Q(S_{t+1},a;\theta_t) \]

在求TD目標 \(Y_t^Q\) 的時候,我們首先需要選擇一個動作即 \(a^*\) ,該動作 \(a^*\) 應該滿足在狀態 \(S_{t+1}\)\(Q(S_{t+1},a)\) 最大,這就是動作選擇。

  • 動作評估 動作評估是指選出 \(a^*\) 后,利用 \(a^*\) 處的動作值函數構造TD目標。一般Q-learning利用同一個參數 \(\theta_t\) 來選擇和評估動作。Double Q-learning分別用不同的行為值函數選擇和評估動作。Double Q-learning的TD目標公式為

    \[Y_t^{DoubleQ}=R_{t+1}+\gamma Q\left[S_{t+1},\underset{a}{argmax}Q(S_{t+1},a;\theta_t);\theta_t'\right] \]
  • 從該公式我們看到,動作的選擇所用的動作值函數為 \(\underset{a}{argmax}Q(S_{t+1},a;\theta_t)\) ,這時動作值函數網絡的參數為 \(\theta_t\) 。當選出最大的動作 \(a^*\) 后,動作評估的公式為:

    \[Y_t^{DoubleQ}=R_{t+1}+\gamma Q(S_{t+1},a^*;\theta_t') \]
  • 動作評估所用的動作值函數網絡參數為 \(\theta_t'\) 。將Double Q-learning的思想應用到DQN中,則得到Double DQN即DDQN,其TD目標為

    \[Y_t^{DoubleQ}=R_{t+1}+\gamma Q\left[S_{t+1},\underset{a}{argmax}Q(S_{t+1},a;\theta_t^-)\right] \]

參考:

on policy和off policy的優劣之分:https://www.zhihu.com/question/56561878/answer/149892732

強化學習的數學符號:https://www.jianshu.com/p/a7ed0c301ff2

總結

以上是生活随笔為你收集整理的深入浅出强化学习:原理入门(待更新)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。