久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

強(qiáng)化學(xué)習(xí)極簡入門:通俗理解MDP、DP MC TC和Q學(xué)習(xí),、策略梯度,、PPO

 netouch 2025-02-01

前言

22年底/23年初ChatGPT大火,在寫《ChatGPT技術(shù)原理解析》的過程中

  1. 發(fā)現(xiàn)ChatGPT背后技術(shù)涉及到了RL/RLHF,,于是又深入研究RL,,研究RL的過程中又發(fā)現(xiàn)里面的數(shù)學(xué)公式相比ML/DL更多
  2. 于此激發(fā)我一邊深入RL,一邊重修微積分,、概率統(tǒng)計(jì),、最優(yōu)化
    前者成就了本篇RL極簡入門,后者成就了另兩篇數(shù)學(xué)筆記:概率統(tǒng)計(jì)極簡入門(23修訂版),、一文通透優(yōu)化算法(23修訂版)

如上篇ChatGPT筆記所說,本文最早是作為ChatGPT筆記的第一部分的,,但RL細(xì)節(jié)眾多,,如果想完全在上篇筆記里全部介紹清楚,最后篇幅將長之又長同時(shí)還影響完讀率,,為了避免因?yàn)槠拗贫鴮?dǎo)致RL很多細(xì)節(jié)闡述的不夠細(xì)致,故把RL相關(guān)的部分從上文中抽取出來獨(dú)立成本文

  • 一方面,,原有內(nèi)容「第一部分 RL基礎(chǔ):什么是RL與MRP,、MDP,,和第四部分 策略學(xué)習(xí):從策略梯度到TRPO,、PPO算法」繼續(xù)完善、改進(jìn),,完善記錄見本文文末
  • 二方面,,在原有內(nèi)容上新增了以下這兩部分內(nèi)容的詳細(xì)闡述:
    第二部分 RL進(jìn)階之三大表格求解法:DP、MC,、TD
    第三部分 價(jià)值學(xué)習(xí):從n步Sarsa算法到Q-learning,、DQN

另,本文有兩個(gè)特色

  1. 定位入門,。過去一個(gè)多月,,我翻遍了十來本RL中文書,以及網(wǎng)上各種RL資料
    有的真心不錯(比如sutton的RL書,但此前從來沒有接觸過RL的不建議一上來就看該書,,除非你看過本文之后)
    其余大部分要么就是堆砌概念/公式,,要么對已經(jīng)入門的不錯,但對還沒入門的初學(xué)者極度不友好,,比如
    \rightarrow  很多背景知識甚至公式說明,、符號說明沒有交待
    \rightarrow  且經(jīng)常有的書一套符號表示,另一本書又是另一套符號表示,,導(dǎo)致很多初學(xué)者一開始以為看懂了,,結(jié)果看到另一本書不同的符號表示后,又陷入了自我懷疑(因?yàn)槌鯇W(xué)者最開始還沒法一眼看出其實(shí)各種符號表示的本質(zhì)都是一樣的),,經(jīng)??吹迷评镬F里、不勝其煩

    本文會假定大部分讀者此前從來沒有接觸過RL,,會盡可能多舉例,、多配圖、多交待,,100個(gè)臺階,,一步一步拾級而上,不出現(xiàn)任何斷層
  2. 推導(dǎo)細(xì)致,。本文之前,,99%的文章都不會把PPO算法從頭推到尾,本文會把PPO從零推到尾,,按照“RL-策略梯度-重要性采樣(重要性權(quán)重)-增加基線(避免獎勵總為正)-TRPO(加進(jìn)KL散度約束)-PPO(解決TRPO計(jì)算量大的問題)”的順序逐步介紹每一步推導(dǎo)
    且為徹底照顧初學(xué)者,,本文會解釋/說明清楚每一個(gè)公式甚至符號,包括推導(dǎo)過程中不省任何一個(gè)必要的中間推導(dǎo)步驟,,十步推導(dǎo)絕不略成三步

總之,,大部分寫書、寫教材,、寫文章的人過了那個(gè)從不懂到懂的過程,,所以懂的人寫給不懂的人看,處處都是用已懂的思維去寫,,而不是用怎么從不懂到懂的思維 去寫,,?未來三年 奮筆疾書,不斷給更多初學(xué)者普及AI和RL技術(shù)

第一部分 RL基礎(chǔ):什么是RL與MRP,、MDP

1.1 入門強(qiáng)化學(xué)習(xí)所需掌握的基本概念

1.1.1 什么是強(qiáng)化學(xué)習(xí):依據(jù)策略執(zhí)行動作-感知狀態(tài)-得到獎勵

強(qiáng)化學(xué)習(xí)里面的概念,、公式,相比ML/DL特別多,,初學(xué)者剛學(xué)RL時(shí),,很容易被接連不斷的概念,、公式給繞暈,而且經(jīng)常忘記概念與公式符號表達(dá)的一一對應(yīng),。

為此,,我建議學(xué)習(xí)RL的第一步就是一定要扎實(shí)關(guān)于RL的一些最基本的概念、公式(不要在扎實(shí)基礎(chǔ)的階段圖快或圖圇吞棗,,不然后面得花更多的時(shí)間,、更大的代價(jià)去彌補(bǔ)),且把概念與公式的一一對應(yīng)關(guān)系牢記于心,,這很重要,。當(dāng)然,為最大限度的提高本文的可讀性,,我會盡可能的多舉例,、多配圖。

另,,RL里面存著大量的數(shù)學(xué),,考慮到可以為通俗而增加篇幅,但不為了介紹而介紹式的增加篇幅,,故

話休絮煩,,下面進(jìn)入正題,且先直接給出強(qiáng)化學(xué)習(xí)的定義和其流程,,然后再逐一拆解,、說明,。

所謂強(qiáng)化學(xué)習(xí)(Reinforcement Learning,簡稱RL),,是指基于智能體在復(fù)雜,、不確定的環(huán)境中最大化它能獲得的獎勵,從而達(dá)到自主決策的目的,。

經(jīng)典的強(qiáng)化學(xué)習(xí)模型可以總結(jié)為下圖的形式(你可以理解為任何強(qiáng)化學(xué)習(xí)都包含這幾個(gè)基本部分:智能體,、行為,、環(huán)境,、狀態(tài),、獎勵):

e8fc39f9f7f291dc8b121858a201545b.png

一般的文章在介紹這些概念時(shí)很容易一帶而過,,這里我把每個(gè)概念都逐一解釋下

  • Agent,,一般譯為智能體,,就是我們要訓(xùn)練的模型,,類似玩超級瑪麗的時(shí)候操縱馬里奧做出相應(yīng)的動作,,而這個(gè)馬里奧就是Agent
  • action(簡記為a),,玩超級瑪麗的時(shí)候你會控制馬里奧做三個(gè)動作,,即向左走、向右走和向上跳,,而馬里奧做的這三個(gè)動作就是action
  • Environment,,即環(huán)境,它是提供reward的某個(gè)對象,,它可以是AlphaGo中的人類棋手,,也可以是自動駕駛中的人類駕駛員,甚至可以是某些游戲AI里的游戲規(guī)則
  • reward(簡記為r),,這個(gè)獎賞可以類比為在明確目標(biāo)的情況下,,接近目標(biāo)意味著做得好則獎,遠(yuǎn)離目標(biāo)意味著做的不好則懲,,最終達(dá)到收益/獎勵最大化,,且這個(gè)獎勵是強(qiáng)化學(xué)習(xí)的核心
  • State(簡介為s),可以理解成環(huán)境的狀態(tài),,簡稱狀態(tài)

總的而言,,Agent依據(jù)策略決策從而執(zhí)行動作action,然后通過感知環(huán)境Environment從而獲取環(huán)境的狀態(tài)state,,進(jìn)而,,最后得到獎勵reward(以便下次再到相同狀態(tài)時(shí)能采取更優(yōu)的動作),然后再繼續(xù)按此流程“依據(jù)策略執(zhí)行動作-感知狀態(tài)--得到獎勵”循環(huán)進(jìn)行,。

1.1.2 RL與監(jiān)督學(xué)習(xí)的區(qū)別和RL方法的分類

此外,,RL和監(jiān)督學(xué)習(xí)(supervised learning)的區(qū)別:

  • 監(jiān)督學(xué)習(xí)有標(biāo)簽告訴算法什么樣的輸入對應(yīng)著什么樣的輸出(譬如分類、回歸等問題)
    所以對于監(jiān)督學(xué)習(xí),,目標(biāo)是找到一個(gè)最優(yōu)的模型函數(shù),,使其在訓(xùn)練數(shù)據(jù)集上最小化一個(gè)給定的損失函數(shù),,相當(dāng)于最小化預(yù)測誤差
    最優(yōu)模型 = arg minE {  [損失函數(shù)(標(biāo)簽,模型(特征)] }

    RL沒有標(biāo)簽告訴它在某種情況下應(yīng)該做出什么樣的行為,只有一個(gè)做出一系列行為后最終反饋回來的reward,,然后判斷當(dāng)前選擇的行為是好是壞
    相當(dāng)于RL的目標(biāo)是最大化智能體策略在和動態(tài)環(huán)境交互過程中的價(jià)值,,而策略的價(jià)值可以等價(jià)轉(zhuǎn)換成獎勵函數(shù)的期望,即最大化累計(jì)下來的獎勵期望
    最優(yōu)策略 = arg maxE {  [獎勵函數(shù)(狀態(tài),動作)] }
     
  • 監(jiān)督學(xué)習(xí)如果做了比較壞的選擇則會立刻反饋給算法
    RL的結(jié)果反饋有延時(shí),,有時(shí)候可能需要走了很多步以后才知道之前某步的選擇是好還是壞
  • 監(jiān)督學(xué)習(xí)中輸入是獨(dú)立分布的,,即各項(xiàng)數(shù)據(jù)之間沒有關(guān)聯(lián)
    RL面對的輸入總是在變化,每當(dāng)算法做出一個(gè)行為,,它就影響了下一次決策的輸入

進(jìn)一步,,RL為得到最優(yōu)策略從而獲取最大化獎勵,有

  • 基于值函數(shù)的方法,,通過求解一個(gè)狀態(tài)或者狀態(tài)下某個(gè)動作的估值為手段,,從而尋找最佳的價(jià)值函數(shù),找到價(jià)值函數(shù)后,,再提取最佳策略
    比如Q-learning,、DQN等,適合離散的環(huán)境下,,比如圍棋和某些游戲領(lǐng)域
  • 基于策略的方法,,一般先進(jìn)行策略評估,即對當(dāng)前已經(jīng)搜索到的策略函數(shù)進(jìn)行估值,,得到估值后,,進(jìn)行策略改進(jìn),不斷重復(fù)這兩步直至策略收斂

    比如策略梯度法(policy gradient,,簡稱PG),,適合連續(xù)動作的場景,比如機(jī)器人控制領(lǐng)域
    以及Actor-Criti(一般被翻譯為演員-評論家算法),,Actor學(xué)習(xí)參數(shù)化的策略即策略函數(shù),,Criti學(xué)習(xí)值函數(shù)用來評估狀態(tài)-動作對,不過,,Actor-Criti本質(zhì)上是屬于基于策略的算法,,畢竟算法的目標(biāo)是優(yōu)化一個(gè)帶參數(shù)的策略,只是會額外學(xué)習(xí)價(jià)值函數(shù),,從而幫助策略函數(shù)更好的學(xué)習(xí)

    此外,,還有對策略梯度算法的改進(jìn),,比如TRPO算法,、PPO算法,當(dāng)然PPO算法也可稱之為是一種Actor-Critic架構(gòu),,下文會重點(diǎn)闡述

可能你還有點(diǎn)懵懵懂懂,,沒關(guān)系,,畢竟還有不少背景知識還沒有交待,比如RL其實(shí)是一個(gè)馬爾可夫決策過程(Markov decision process,,MDP),,而為說清楚MDP,得先從隨機(jī)過程,、馬爾可夫過程(Markov process,,簡稱MP)開始講起,故為考慮邏輯清晰,,我們還是把整個(gè)繼承/脈絡(luò)梳理下,。

1.2 什么是馬爾科夫決策過程

1.2.1 MDP的前置知識:隨機(jī)過程、馬爾可夫過程,、馬爾可夫獎勵

如HMM學(xué)習(xí)最佳范例中所說,,有一類現(xiàn)象是確定性的現(xiàn)象,比如紅綠燈系統(tǒng),,紅燈之后一定是紅黃,、接著綠燈、黃燈,,最后又紅燈,,每一個(gè)狀態(tài)之間的變化是確定的

但還有一類現(xiàn)象則不是確定的,比如今天是晴天,,誰也沒法百分百確定明天一定是晴天還是雨天,、陰天(即便有天氣預(yù)報(bào))

對于這種假設(shè)具有M個(gè)狀態(tài)的模型

  1. 共有M^2個(gè)狀態(tài)轉(zhuǎn)移,因?yàn)槿魏我粋€(gè)狀態(tài)都有可能是所有狀態(tài)的下一個(gè)轉(zhuǎn)移狀態(tài)
  2. 每一個(gè)狀態(tài)轉(zhuǎn)移都有一個(gè)概率值,,稱為狀態(tài)轉(zhuǎn)移概率,,相當(dāng)于從一個(gè)狀態(tài)轉(zhuǎn)移到另一個(gè)狀態(tài)的概率
  3. 所有的M^2個(gè)概率可以用一個(gè)狀態(tài)轉(zhuǎn)移矩陣表示

下面的狀態(tài)轉(zhuǎn)移矩陣顯示的是天氣例子中可能的狀態(tài)轉(zhuǎn)移概率: 

也就是說,如果昨天是晴天,,那么今天是晴天的概率為0.5,,是多云的概率為0.375、是雨天的概率為0.125,,且這三種天氣狀態(tài)的概率之和必為1,。

接下來,我們來抽象建模下,。正如概率論的研究對象是靜態(tài)的隨機(jī)現(xiàn)象,,而隨機(jī)過程的研究對象是隨時(shí)間演變的隨機(jī)現(xiàn)象(比如天氣隨時(shí)間的變化):

  • 隨機(jī)現(xiàn)象在某時(shí)刻t的取值是一個(gè)向量隨機(jī)變量,用S_t表示
    比如上述天氣轉(zhuǎn)移矩陣便如下圖所示

\begin{bmatrix} s_1\rightarrow s_1,s_1\rightarrow s_2,s_1\rightarrow s_3& \\ s_2\rightarrow s_1,s_2\rightarrow s_2,s_2\rightarrow s_3 & \\ s_3\rightarrow s_1,s_3\rightarrow s_2,s_3\rightarrow s_3 & & \end{bmatrix}

  • 在某時(shí)刻t的狀態(tài)S_t通常取決于t時(shí)刻之前的狀態(tài),,我們將已知?dú)v史信息(S_1,\cdots ,S_t)時(shí)下一個(gè)時(shí)刻的狀態(tài)S_{t+1}的概率表示成P(S_{t+1}|S_1,\cdots ,S_t)
    如此,,便可以定義一個(gè)所有狀態(tài)對之間的轉(zhuǎn)移概率矩陣

P=\begin{bmatrix} P(s_1|s_1) \ P(s_2|s_1) \ P(s_3|s_1) \cdots P(s_n|s_1)&\\ P(s_1|s_2) \ P(s_2|s_2) \ P(s_3|s_2) \cdots P(s_n|s_2) &\\ \cdots \cdots \cdots &\\ \cdots \cdots \cdots &\\P(s_1|s_n) \ P(s_2|s_n) \ P(s_3|s_n) \cdots P(s_n|s_n) \end{bmatrix}

  • 當(dāng)且僅當(dāng)某時(shí)刻的狀態(tài)只取決于上一時(shí)刻的狀態(tài)時(shí),一個(gè)隨機(jī)過程被稱為具有馬爾可夫性質(zhì),,即P(S_{t+1}|S_t) = P(S_{t+1}|S_1,\cdots ,S_t),,當(dāng)然了,,雖說當(dāng)前狀態(tài)只看上一個(gè)狀態(tài),但上一個(gè)狀態(tài)其實(shí)包含了更上一個(gè)狀態(tài)的信息,,所以不能說當(dāng)下與歷史是無關(guān)的
  • 而具有馬爾可夫性質(zhì)的隨機(jī)過程便是馬爾可夫過程

在馬爾可夫過程的基礎(chǔ)上加入獎勵函數(shù)R和折扣因子\gamma,,就可以得到馬爾可夫獎勵過程(Markov reward process,MRP),。其中

  • 獎勵函數(shù),,某個(gè)狀態(tài)s的獎勵R(s),是指轉(zhuǎn)移到該狀態(tài)s時(shí)可以獲得獎勵的期望,,有R(s) = E[R_{t+1}|S_t = s]
    注意,,有的書上獎勵函數(shù)和下面回報(bào)公式中的R_{t+1}的下標(biāo)t+1寫為t,其實(shí)嚴(yán)格來說,,先有t時(shí)刻的狀態(tài)/動作之后才有t+1時(shí)刻的獎勵,,但應(yīng)用中兩種下標(biāo)法又都存在,讀者注意辨別
  • 此外,,實(shí)際中,,因?yàn)橐粋€(gè)狀態(tài)可以得到的獎勵是持久的,所有獎勵的衰減之和稱為回報(bào),,可用G表示當(dāng)下即時(shí)獎勵和所有持久獎勵等一切獎勵的加權(quán)和(考慮到一般越往后某個(gè)狀態(tài)給的回報(bào)率越低,,也即獎勵因子或折扣因子越小,用\gamma表示),,從而有

    \begin{aligned}G_t &= R_{t+1} + \gamma \cdot R_{t+2}+ \gamma ^2\cdot R_{t+3} + \gamma ^3\cdot R_{t+4}+\cdots \\&= R_{t+1} + \gamma (R_{t+2}+ \gamma \cdot R_{t+3} + \gamma ^2\cdot R_{t+4}+\cdots) \\&= R_{t+1} + \gamma G_{t+1} \end{aligned}

    舉個(gè)例子,,一個(gè)少年在面對“上大學(xué)、去打工,、在家啃老”這三種狀態(tài),,哪一種更能實(shí)現(xiàn)人生的價(jià)值呢?
    相信很多人為長遠(yuǎn)發(fā)展都會選擇上大學(xué),,因?yàn)樯磉呌刑嗳艘驗(yàn)樯狭舜髮W(xué),,而好事連連,比如讀研讀博留學(xué)深造,、進(jìn)入大廠,、娶個(gè)漂亮老婆、生個(gè)聰明孩子
    當(dāng)然了,,上大學(xué)好處肯定多多,,但上大學(xué)這個(gè)狀態(tài)對上面4件好事所給予的貢獻(xiàn)必然是逐級降低,畢竟越往后,,越會有更多或更重要的因素成就更后面的好事,,總不能所有好事都百分百歸功于最開頭選擇了“上大學(xué)”這個(gè)狀態(tài)/決策嘛

而一個(gè)狀態(tài)的期望回報(bào)就稱之為這個(gè)狀態(tài)的價(jià)值,所有狀態(tài)的價(jià)值則組成了所謂的價(jià)值函數(shù),用公式表達(dá)為V(s) = E[G_t|S_t=s],,展開一下可得

\begin{aligned} V(s) &= E[G_t|S_t=s] \\& = E[R_{t+1} + \gamma G_{t+1}|S_t =s]\\& = E[R_{t+1}|S_t =s] + \gamma E[G_{t+1}|S_t =s]\\& = E[R_{t+1}|S_t = s] + \gamma E[V(S_{t+1})|S_t = s] \end{aligned}

在上式最后一個(gè)等式中

  • 前半部分表示當(dāng)前狀態(tài)得到的即時(shí)獎勵E[R_{t+1}|S_t = s] = R(s)
  • 后半部分表示當(dāng)前狀態(tài)得到的所有持久獎勵\gamma E[V(S_{t+1})|S_t = s],可以根據(jù)從狀態(tài)s出發(fā)的轉(zhuǎn)移概率得到『至于上述推導(dǎo)的最后一步,,在于E[G_{t+1}|S_t = s]等于E[V(S_{t+1})|S_t = s)]

    有個(gè)別朋友在我維護(hù)的Machine Learning讀書會群里說,,對上述推導(dǎo)最后一步的推導(dǎo)過程有疑問,考慮到本文追求詳盡細(xì)致,,加之大部分資料都是把這個(gè)當(dāng)結(jié)論默認(rèn)的,,故還是把這個(gè)推導(dǎo)過程詳細(xì)寫一下
    \begin{aligned} E[G_{t+1}|S_t = s] &= \sum G_{t+1}P\left \{ G_{t+1}|S_t = s \right \} \\& = \sum G_{t+1}\sum_{s
    可能又有同學(xué)對上述第二個(gè)等式怎么來的又有疑問了,怎么推導(dǎo)呢,?我們只需推導(dǎo)出P\left \{ G_{t+1}|S_t = s \right \} = \sum_{s
    推導(dǎo)過程如下
    \begin{aligned} P\left \{ G_{t+1}|S_t=s \right \} &= \frac{P\left \{ G_{t+1},S_t=s \right \}}{P(S_t=s)} \\&= \frac{\sum_{s

從而,,綜合前后兩個(gè)部分可得

V(s) = R(s) + \gamma \sum_{s

而這就是所謂的貝爾曼方程(bellman equation)。該公式精準(zhǔn)而簡潔,,其背后濃縮了很多信息,為形象起見,,舉個(gè)例子

比如狀態(tài)S_1得到的即時(shí)獎勵為R_{s1},,然后接下來,,有

  • P_{12}的概率引發(fā)狀態(tài)S_2,此時(shí)狀態(tài)S_2得到的即時(shí)獎勵為R_{s2}
    對于S_2,,接下來有P_{24}的概率引發(fā)狀態(tài)S_4(S_4的即時(shí)獎勵為R_{s4},后續(xù)無持久獎勵),,有P_{25}的概率引發(fā)狀態(tài)S_5(S_5的即時(shí)獎勵為R_{s5},,后續(xù)無持久獎勵)
  • P_{13}的概率引發(fā)狀態(tài)S_3,此時(shí)狀態(tài)S_3得到的即時(shí)獎勵為R_{s3}
    對于S_3,接下來有P_{36}的概率引發(fā)狀態(tài)S_6(S_6的即時(shí)獎勵為R_{s6},后續(xù)無持久獎勵),有P_{37}的概率引發(fā)狀態(tài)S_7(S_7的即時(shí)獎勵為R_{s7},,后續(xù)無持久獎勵) 

其中折扣因此為\gamma,,那么因狀態(tài)S_1而得到的一切獎勵為

R_{s1} + \gamma (P_{12}R_{s2} + P_{13}R_{s3}) + \gamma^2(P_{24} R_{s4} + P_{25} R_{s5}) + \gamma^2(P_{36} R_{s6} + P_{37}R_{s7}) \\ = R_{s1} + \gamma (P_{12}R_{s2} + P_{13}R_{s3}) + \gamma^2(P_{24} R_{s4} + P_{25} R_{s5} + P_{36} R_{s6} + P_{37}R_{s7})

類似的,因狀態(tài)S_2得到的一切獎勵為R_{s2} + \gamma (P_{24}R_{s4} + P_{25}R_{s5})

為更加形象起見,,再舉一個(gè)生活中最常見的“吃飯-抽煙/剔牙”例子
比如你吃完飯后你自己的心情愉悅值即獎勵+5,然后下一個(gè)狀態(tài),有

  • 0.6的概率是抽煙(抽煙帶來的心情愉悅值即獎勵+7,,要不說 飯后一支煙 賽過活神仙呢)
  • 0.4的概率是剔牙(剔牙帶來的獎勵值+3)

假設(shè)折扣因子\gamma(上文說過了,,就是一個(gè)狀態(tài)對后續(xù)狀態(tài)的貢獻(xiàn)程度)為0.5,且假定

  • 吃飯的狀態(tài)定義為s_1,則R_{s1} = 5
  • 抽煙的狀態(tài)定義為s_2,,則R_{s2} = 7,,且由于抽煙之后無后續(xù)狀態(tài),所以G_{s2}也是7
  • 剔牙的狀態(tài)定義為s_3,,則R_{s3} = 3,,且由于剔牙之后無后續(xù)狀態(tài),,所以G_{s3}也是3

從而有:

當(dāng)從s_1 \rightarrow s_2時(shí),G_{s1} = R_{s1} + \gamma R_{s2} = 5 + 0.5 \times 7 = 8.5
當(dāng)從s_1 \rightarrow s_3時(shí),,G

由于狀態(tài)s_2和狀態(tài)s_3沒有后續(xù)狀態(tài),,所以s_2s_3對應(yīng)的狀態(tài)值函數(shù)分別為

v_{s2} = R_{s2} = 7

v_{s3} = R_{s3} = 3

再根據(jù)貝爾曼方程V(s) = R(s) + \gamma \sum_{s,可得狀態(tài)s_1的狀態(tài)價(jià)值函數(shù)為

\begin{aligned} V(s1) &= R_{s1} + \gamma (P_{12}R_{s2} + P_{13}R_{s3}) \\&= 5+ 0.5 \times (0.6\times 7 + 0.4 \times 3) \\&= 7.7 \end{aligned}

當(dāng)然,,你也可以如此計(jì)算(可以很明顯的看出,,計(jì)算量不如上述過程簡潔,所以一般優(yōu)先按上述方式計(jì)算)

\begin{aligned} V(s1) &= E[G_t|S_t=s] \\& = p_{12} \times G^{s2}_{s1} + p_{13} \times G^{s3}_{s1} \\& = P_{12} (R_{s1} + \gamma R_{s2}) + P_{13} (R_{s1} + \gamma R_{s3})\\& = 0.6(5 + 0.5\times 7) + 0.4(5+0.5\times 3) \\& = 7.7 \end{aligned}

上述例子的狀態(tài)比較少所以計(jì)算量不大,,但當(dāng)狀態(tài)一多,,則貝爾曼方程的計(jì)算量還是比較大的,,而求解較大規(guī)模的馬爾可夫獎勵過程中的價(jià)值函數(shù)時(shí),可以用的方法包括:動態(tài)規(guī)劃,、蒙特卡洛方法,、時(shí)序差分(temporal difference,簡稱TD)方法
當(dāng)然,,其中細(xì)節(jié)還是不少的,,下文第二部分會詳述這三大方法

1.2.2 馬爾可夫決策過程(MDP):馬爾可夫獎勵(MRP) + 智能體動作因素

根據(jù)上文我們已經(jīng)得知,,在隨機(jī)過程的基礎(chǔ)上

  • 增加馬爾可夫性質(zhì),即可得馬爾可夫過程
  • 而再增加獎勵,,則得到了馬爾可夫獎勵過程(MRP)
  • 如果我們再次增加一個(gè)來自外界的刺激比如智能體的動作,,就得到了馬爾可夫決策過程(MDP)
    通俗講,MRP與MDP的區(qū)別就類似隨波逐流與水手劃船的區(qū)別

在馬爾可夫決策過程中,,S_{t}(S是狀態(tài)的集合)和R_{t}(R是獎勵的集合)的每個(gè)可能的值出現(xiàn)的概率只取決于前一個(gè)狀態(tài)S_{t-1}和前一個(gè)動作A_{t-1}(A是動作的集合),,并且與更早之前的狀態(tài)和動作完全無關(guān)

換言之,當(dāng)給定當(dāng)前狀態(tài)S_{t}(比如S_t =s),,以及當(dāng)前采取的動作A_t(比如A_t = a),,那么下一個(gè)狀態(tài)S_{t+1}出現(xiàn)的概率,可由狀態(tài)轉(zhuǎn)移概率矩陣表示如下

\begin{aligned}P_{ss

假定在當(dāng)前狀態(tài)和當(dāng)前動作確定后,,其對應(yīng)的獎勵則設(shè)為R_{t+1} = r,,故sutton的RL一書中,給的狀態(tài)轉(zhuǎn)移概率矩陣類似為

p(s

從而可得獎勵函數(shù)即為(之前不小心把\sum_{r\in R}^{}r放在最后了,,后根據(jù)讀者的反饋?zhàn)隽诵拚?/em>)

\begin{aligned}R(s,a) &= E[R_{t+1} | S_t = s,A_t = a] \\&=\sum_{r\in R}^{}r \sum_{s

考慮到后來有讀者對上面這個(gè)公式有疑惑,,所以解釋下推導(dǎo)步驟

  1. 首先,計(jì)算在狀態(tài)s下采取動作a后,,轉(zhuǎn)移到下一個(gè)狀態(tài)s并獲得獎勵r的概率,,表示為p(s
  2. 然后,我們對所有可能的下一個(gè)狀態(tài)s求和
  3. 并對所有可能的獎勵r求和(不少情況下,,即使?fàn)顟B(tài)轉(zhuǎn)移和動作是已知的,,獎勵r仍然可能是隨機(jī)的,比如買股票,,股票價(jià)格隨機(jī)波動,,導(dǎo)致購買之后的盈虧也具有隨機(jī)性)

整個(gè)過程相當(dāng)于將不同狀態(tài)轉(zhuǎn)移概率與對應(yīng)的獎勵r相乘并相加,以得到條件期望


當(dāng)然,,如果獎勵是確定性的,,則可以簡化公式,去掉對r的求和,,即:

R(s,a) = \sum p(s

相當(dāng)于此時(shí)只需要計(jì)算在狀態(tài)s下采取動作a后,,轉(zhuǎn)移到下一個(gè)狀態(tài)s的概率乘以確定的獎勵r,然后對所有可能的下一個(gè)狀態(tài)s求和以得到條件期望

至于過程中采取什么樣的動作就涉及到策略policy,,策略函數(shù)可以表述為\pi函數(shù)(當(dāng)然,,這里的\pi跟圓周率沒半毛錢關(guān)系)

  • 從而可得a=\pi (s),意味著輸入狀態(tài)s,,策略函數(shù)\pi輸出動作a
  • 此外,,還會有這樣的表述:a = \pi _{\theta }(s),相當(dāng)于在輸入狀態(tài)gif.latex?s確定的情況下,輸出的動作a只和參數(shù)\theta有關(guān),,這個(gè)\theta就是策略函數(shù)\pi的參數(shù)
  • 再比如這種\pi (a|s) = P(A_t = a| S_t = s),,相當(dāng)于輸入一個(gè)狀態(tài)s下,智能體采取某個(gè)動作a的概率

通過上文,,我們已經(jīng)知道不同狀態(tài)出現(xiàn)的概率不一樣(比如今天是晴天,,那明天是晴天,還是雨天,、陰天不一定),,同一狀態(tài)下執(zhí)行不同動作的概率也不一樣(比如即便在天氣預(yù)報(bào)預(yù)測明天大概率是天晴的情況下,你大概率不會帶傘,,但依然不排除你可能會防止突然下雨而帶傘)

而有了動作這個(gè)因素之后,,我們重新梳理下價(jià)值函數(shù)

  • 首先,通過“狀態(tài)價(jià)值函數(shù)”對當(dāng)前狀態(tài)進(jìn)行評估

    \begin{aligned} V_{\pi}(s) &= E_\pi [G_t|S_t = s] \\& = E_\pi [R_{t+1} + \gamma G_{t+1} | S_t = s] \\& = E_\pi [R_{t+1} + \gamma V_\pi (S_{t+1}) | S_t = s] \end{aligned}

    相當(dāng)于從狀態(tài)?s出發(fā)遵循策略\pi能獲得的期望回報(bào)
  • 其次,,通過“動作價(jià)值函數(shù)”對動作的評估

    \begin{aligned} Q_\pi (s,a) &= E_\pi [G_t | S_t=s,A_t = a] \\& = E_\pi [R_{t+1} + \gamma G_{t+1}| S_t=s,A_t = a] \\& = E_\pi [R_{t+1} + \gamma Q_\pi (S_{t+1},A_{t+1})| S_t=s,A_t = a] \end{aligned}

    相當(dāng)于對當(dāng)前狀態(tài)s依據(jù)策略?\pi執(zhí)行動作?a得到的期望回報(bào),,這就是大名鼎鼎的?Q函數(shù),得到?Q函數(shù)后,,進(jìn)入某個(gè)狀態(tài)要采取的最優(yōu)動作便可以通過?Q函數(shù)得到?

當(dāng)有了策略,、價(jià)值函數(shù)和模型3個(gè)組成部分后,就形成了一個(gè)馬爾可夫決策過程(Markov decision process),。如下圖所示,,這個(gè)決策過程可視化了狀態(tài)之間的轉(zhuǎn)移以及采取的動作。

且通過狀態(tài)轉(zhuǎn)移概率分布,,我們可以揭示狀態(tài)價(jià)值函數(shù)和動作價(jià)值函數(shù)之間的聯(lián)系了

  • 在使用策略\pi時(shí),,狀態(tài)s的價(jià)值等于在該狀態(tài)下基于策略\pi采取所有動作的概率與相應(yīng)的價(jià)值相乘再求和的結(jié)果

    V_{\pi}(s) = \sum_{a \in A}^{}\pi (a|s)Q_\pi (s,a)

    我猜可能有讀者會問怎么來的,簡略推導(dǎo)如下

    \begin{aligned} V_{\pi}(s) &= E_\pi [G_t|S_t = s] \\& = \sum_{a \in A}^{}\pi (a|s)E_\pi [G_t|S_t = s,A_t = a]\\& = \sum_{a \in A}^{}\pi (a|s)Q_\pi (s,a) \end{aligned}

  • 而使用策略\pi時(shí),,在狀態(tài)s下采取動作a的價(jià)值等于當(dāng)前獎勵R(s,a),,加上經(jīng)過衰減的所有可能的下一個(gè)狀態(tài)的狀態(tài)轉(zhuǎn)移概率與相應(yīng)的價(jià)值的乘積

    Q_\pi (s,a) = R(s,a) + \gamma \sum_{s

    針對這個(gè)公式 大部分資料都會一帶而過,但不排除會有不少讀者問怎么來的,,考慮到對于數(shù)學(xué)公式咱們不能想當(dāng)然靠直覺的自認(rèn)為,,所以還是得一五一十的推導(dǎo)下

    \begin{aligned} Q_\pi (s,a) &= E[G_t|S_t = s,A_t = a] \\&= E[R_{t+1} + \gamma G_{t+1} | S_t =s,A_t = a] \\&= E[R_{t+1}|S_t = s,A_t = a] + \gamma E[ G_{t+1} | S_t =s,A_t = a] \\&= R(s,a) + \gamma \sum_{s

    上述推導(dǎo)過程總共五個(gè)等式,,其中,,第三個(gè)等式到第四個(gè)等式依據(jù)的是E[ G_{t+1} | S_t =s,A_t = a] = \sum_{s ,至于第四個(gè)等式到第五個(gè)等式依據(jù)的是狀態(tài)轉(zhuǎn)移概率矩陣的定義P_{ss

接下來,,把上面V_\pi (s)Q_\pi (s,a)的計(jì)算結(jié)果互相代入,,可得馬爾可夫決策的貝爾曼方程

V_{\pi}(s) = \sum_{a \in A}^{}\pi (a|s)\left [ R(s,a) + \gamma \sum_{s

Q_\pi (s,a) = R(s,a) + \gamma \sum_{s

上述過程可用下圖形象化表示(配圖來自文獻(xiàn)21)

第二部分 RL進(jìn)階之三大表格求解法:DP、MC,、TD

2.1 動態(tài)規(guī)劃法

2.1.1 什么是動態(tài)規(guī)劃

上文簡單介紹過動態(tài)規(guī)劃,,其核心思想在于復(fù)雜問題的最優(yōu)解劃分為多個(gè)小問題的最優(yōu)解的求解問題,就像遞歸一樣,,且子問題的最優(yōu)解會被儲存起來重復(fù)利用

舉個(gè)例子,,輸入兩個(gè)整數(shù)n和sum,,從數(shù)列1,2,,3.......n 中隨意取幾個(gè)數(shù),,使其和等于sum,要求將其中所有的可能組合列出來,。

注意到取n,,和不取n個(gè)區(qū)別即可,,考慮是否取第n個(gè)數(shù)的策略,,可以轉(zhuǎn)化為一個(gè)只和前n-1個(gè)數(shù)相關(guān)的問題。

  • 如果取第n個(gè)數(shù),那么問題就轉(zhuǎn)化為“取前n-1個(gè)數(shù)使得它們的和為sum-n”,,對應(yīng)的代碼語句就是sumOfkNumber(sum - n, n - 1),;
  • 如果不取第n個(gè)數(shù),那么問題就轉(zhuǎn)化為“取前n-1個(gè)數(shù)使得他們的和為sum”,,對應(yīng)的代碼語句為sumOfkNumber(sum, n - 1)

所以其關(guān)鍵代碼就是

	list1.push_front(n);      //典型的01背包問題
	SumOfkNumber(sum - n, n - 1);   //“放”n,前n-1個(gè)數(shù)“填滿”sum-n
	list1.pop_front();
	SumOfkNumber(sum, n - 1);     //不“放”n,前n-1個(gè)數(shù)“填滿”sum

其實(shí),這是一個(gè)典型的0-1背包問題,,其具體描述為:有N件物品和一個(gè)容量為V的背包。放入第i件物品耗費(fèi)的費(fèi)用是C_i(也即占用背包的空間容量),,得到的價(jià)值是W_i,,求解將哪些物品裝入背包可使價(jià)值總和最大。

簡單分析下:這是最基礎(chǔ)的背包問題,,特點(diǎn)是每種物品僅有一件,,可以選擇放或不放。用子問題定義狀態(tài):即F[i, v]表示前gif.latex?i件物品恰放入一個(gè)容量為v的背包可以獲得的最大價(jià)值

對于“將前i件物品放入容量為v的背包中”這個(gè)子問題,,若只考慮第i件物品的策略(放或不放),,那么就可以轉(zhuǎn)化為一個(gè)只和前i-1件物品相關(guān)的問題。即: 

  • 如果不放第i件物品,,那么問題就轉(zhuǎn)化為“前i-1件物品放入容量為v的背包中”,,價(jià)值為F[i-1, v]
  • 如果放第i件物品,,那么問題就轉(zhuǎn)化為“前i-1件物品放入剩下的容量為v-C_i的背包中”,,此時(shí)能獲得的最大價(jià)值就是F[i-1, v-C_i]再加上通過放入第i件物品獲得的價(jià)值W_i

 則其狀態(tài)轉(zhuǎn)移方程便是:

  • F[i, v] = max \left \{ F[i-1, v], F[i-1, v-C_i ] + W_i \right \}

通過上述這兩個(gè)個(gè)例子,,相信你已經(jīng)看出一些端倪,具體而言,,動態(tài)規(guī)劃一般也只能應(yīng)用于有最優(yōu)子結(jié)構(gòu)的問題,。最優(yōu)子結(jié)構(gòu)的意思是局部最優(yōu)解能決定全局最優(yōu)解(對有些問題這個(gè)要求并不能完全滿足,故有時(shí)需要引入一定的近似),。簡單地說,,問題能夠分解成子問題來解決。

動態(tài)規(guī)劃算法一般分為以下4個(gè)步驟:

  1. 描述最優(yōu)解的結(jié)構(gòu)
  2. 遞歸定義最優(yōu)解的值
  3. 按自底向上的方式計(jì)算最優(yōu)解的值   //此3步構(gòu)成動態(tài)規(guī)劃解的基礎(chǔ),。
  4. 由計(jì)算出的結(jié)果構(gòu)造一個(gè)最優(yōu)解      //此步如果只要求計(jì)算最優(yōu)解的值時(shí),,可省略

換言之,,動態(tài)規(guī)劃方法的最優(yōu)化問題的倆個(gè)要素:最優(yōu)子結(jié)構(gòu)性質(zhì),,和子問題重疊性質(zhì)

  • 最優(yōu)子結(jié)構(gòu)
    如果問題的最優(yōu)解所包含的子問題的解也是最優(yōu)的,我們就稱該問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)(即滿足最優(yōu)化原理),。意思就是,總問題包含很多個(gè)子問題,,而這些子問題的解也是最優(yōu)的,。
  • 重疊子問題
    子問題重疊性質(zhì)是指在用遞歸算法自頂向下對問題進(jìn)行求解時(shí),,每次產(chǎn)生的子問題并不總是新問題,有些子問題會被重復(fù)計(jì)算多次,。動態(tài)規(guī)劃算法正是利用了這種子問題的重疊性質(zhì),,對每一個(gè)子問題只計(jì)算一次,然后將其計(jì)算結(jié)果保存在一個(gè)表格中,,當(dāng)再次需要計(jì)算已經(jīng)計(jì)算過的子問題時(shí),只是在表格中簡單地查看一下結(jié)果,,從而獲得較高的效率

更多請參看此文(上面闡述什么是DP的內(nèi)容就來自此文):通俗理解動態(tài)規(guī)劃:由淺入深DP并解決LCS問題(23年修訂版)

2.1.2 通過動態(tài)規(guī)劃法求解最優(yōu)策略

如果你之前沒接觸過RL,,你確實(shí)可能會認(rèn)為DP只存在于數(shù)據(jù)結(jié)構(gòu)與算法里,實(shí)際上

  • 最早在1961年,,有人首次提出了DP與RL之間的關(guān)系
  • 1977年,,又有人提出了啟發(fā)式動態(tài)規(guī)劃,強(qiáng)調(diào)連續(xù)狀態(tài)問題的梯度下降法
  • 再到1989年,,Watkins明確的將RL與DP聯(lián)系起來,,并將這一類強(qiáng)化學(xué)習(xí)方法表征為增量動態(tài)規(guī)劃

下面,,我們考慮如何求解最優(yōu)策略v_*(s)

  1. 首先,最優(yōu)策略可以通過最大化q_\pi (s,a)找到
    Q_\pi (s,a) = R(s,a) + \gamma \sum_{s
  2. 當(dāng)a= argmax \left \{ Q_*(s,a) \right \}時(shí),,\pi _*(a|s) = 1

綜合上述兩點(diǎn),,可得

v_{*}(s) = max \left \{ R(s,a) + \gamma \sum_{s

另,考慮到

\begin{aligned}R(s,a) &= E[R_{t+1} | S_t = s,A_t = a] \\&= \sum_{r\in R}^{}r\sum_{s

故也可以如sutton的RL一書上,,這樣寫滿足貝爾曼最優(yōu)方程的價(jià)值函數(shù)V_*(s)

\begin{aligned} v_*(s) &= max E[R_{t+1} + \gamma v_*(S_{t+1}) | S_t =s,A_t =a] \\&= max \sum_{s

相當(dāng)于當(dāng)知道獎勵函數(shù)和狀態(tài)轉(zhuǎn)換函數(shù)時(shí),,便可以根據(jù)下一個(gè)狀態(tài)的價(jià)值來更新當(dāng)前狀態(tài)的價(jià)值,意味著可以把計(jì)算下一個(gè)可能狀態(tài)的價(jià)值當(dāng)成一個(gè)子問題,,而把計(jì)算當(dāng)前狀態(tài)的價(jià)值看做當(dāng)前問題,,這不剛好就可以用DP來求解了

于是,sutton的RL一書上給出了DP求解最優(yōu)策略的算法流程

  • 1.初始化
       對s\in S,,任意設(shè)定V(s)\in \mathbb{R}以及\pi (s) \in A(s)
  • 2.策略評估
       循環(huán):
              \Delta \leftarrow 0
              對每一個(gè)s\in S循環(huán):
                      v \leftarrow V(s)
                      V(s) \leftarrow \sum_{s
                      \Delta \leftarrow max(\Delta ,|v - V(s)|)
        直到\Delta <\theta (一個(gè)決定估計(jì)精度的小正數(shù))
  • 3. 策略改進(jìn)
    policy-stable \leftarrow true
    對每一個(gè)s\in S:
              old-actiton \leftarrow \pi (s)
              \pi (s) \leftarrow argmax_{(a)} \left \{ \sum_{s
              如果old-action \neq \pi (s),,那么policy-stable \leftarrow false
    如果policy-stable為true,那么停止并返回V \approx v_*以及\pi \approx \pi _*,;否則跳轉(zhuǎn)到2

2.2 蒙特卡洛法

蒙特卡洛(monte carlo,,簡稱MC)方法,也稱為統(tǒng)計(jì)模擬方法,,就是通過大量的隨機(jī)樣本來估算或近似真實(shí)值,,比如近似估算圓的面經(jīng)、近似定積分,、近似期望,、近似隨機(jī)梯度

比如先看估算圓的面積,,如下圖

可以通過這個(gè)式子來近似計(jì)算:圓的面積/ 正方形的面積 = 圓中點(diǎn)的個(gè)數(shù)/正方形中點(diǎn)的個(gè)數(shù)

類似的,,我們也可以用蒙特卡洛方法來估計(jì)一個(gè)策略在一個(gè)馬爾可夫決策過程中的狀態(tài)價(jià)值,。考慮到 一個(gè)狀態(tài)的價(jià)值是它的期望回報(bào),,那么如果我們用策略在MDP上采樣很多條序列,,然后計(jì)算從這個(gè)狀態(tài)出發(fā)的回報(bào)再求其期望是否就可以了?好像可行,!公式如下:

V_\pi (s) = E_\pi [G_t|S_t = s] = \frac{1}{N} \sum_{i=1}^{N}G_{t}^{(i)}

再看下如何估算定積分的值『如果忘了定積分長啥樣的,,可以通過RL所需數(shù)學(xué)基礎(chǔ)的其中一篇筆記《概率統(tǒng)計(jì)極簡入門:通俗理解微積分/期望方差/正態(tài)分布前世今生(23修訂版)》回顧下,比如積分可以理解為由無數(shù)個(gè)無窮小的面積組成的面積S』

如上圖,,我們可以通過隨機(jī)取4個(gè)點(diǎn),,然后類似求矩形面積那樣(底x高),從而用4個(gè)面積f(x)(b-a)的期望來估算定積分\int_{a}^,f(x)dx的值,,為讓對面積的估算更準(zhǔn)確,我們可以取更多的點(diǎn),比如N,,當(dāng)N \rightarrow \propto時(shí)

\int_{a}^,f(x)dx = \lim_{N\rightarrow \propto } \frac{1}{N}(b-a)\sum_{i-1}^{N}f(x_i)

 接下來

  1. 假設(shè)令q(x) = \begin{cases} \frac{1}{a-b} & \text{ , } x\in [a,b] \\ 0 & \text{ } \end{cases},且f^*(x) = \begin{cases} \frac{f(x)}{q(x)} & \text{ if } q(x) \neq 0 \\ 0 & \text{ if } q(x) = 0 \end{cases}
  2. 且考慮到對于連續(xù)隨機(jī)變量X,,其概率密度函數(shù)為p(x),,期望為E[X] = \int_{-\propto }^{\propto }xp(x)dx

則有

\int_{a}^f(x)dx = \int_{a}^,f^*(x)q(x)dx = E_{x\sim f_{X}(x)}[f^*(x)]]

跟蒙特卡洛方法關(guān)聯(lián)的還有一個(gè)重要性采樣,,下文很快會講到

2.3 時(shí)序差分法及與DP、MC的區(qū)別

當(dāng)面對狀態(tài)價(jià)值函數(shù)的求解時(shí)

\begin{aligned} V_{\pi}(s) &= E_\pi [G_t|S_t = s] \\& = E_\pi [R_{t+1} + \gamma G_{t+1} | S_t = s] \\& = E_\pi [R_{t+1} + \gamma V_\pi (S_{t+1}) | S_t = s] \end{aligned}

上述公式總共三個(gè)等式

  • 動態(tài)規(guī)劃(DP)會把上述第三個(gè)等式的估計(jì)值作為目標(biāo),,不是因?yàn)镈P要求需要環(huán)境模型本身提供期望值,,而是因?yàn)檎鎸?shí)的v_\pi (S_{t+1})是未知的,所以只能使用當(dāng)前的估計(jì)值V_\pi (S_{t+1})來替代

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

    且DP求解狀態(tài)S_t的狀態(tài)值函數(shù)時(shí),,需要利用所有后續(xù)狀態(tài)S_{t+1}

    V_{\pi}(s) = \sum_{a \in A}^{}\pi (a|s)\left [ r(s,a) + \gamma \sum_{s

  • 蒙特卡洛方法(MC)會上述把第一個(gè)等式的估計(jì)值作為目標(biāo),,畢竟第一個(gè)等式中的期望值是未知的,所以我們用樣本回報(bào)來代替實(shí)際的期望回報(bào)
     

    但MC求解狀態(tài)S_t的狀態(tài)值函數(shù)時(shí),,需要等一個(gè)完整序列結(jié)束,,因?yàn)橹挥械酱藭r(shí),G_t才是已知的

    V(S_t) \leftarrow V(S_t) + \alpha [G_t - V(S_t)]

有學(xué)員在我講的ChatGPT原理課上對上述這行公式表達(dá)了疑問,,故再詳細(xì)解釋下

在狀態(tài)價(jià)值函數(shù)的估計(jì)中,我們實(shí)際上并不知道真正的期望回報(bào),,因此我們通過多次試驗(yàn)和觀察,,以樣本回報(bào)來近似這個(gè)期望回報(bào)


V_\pi (s) \approx (1 / N) \sum Gt,其中 N 是樣本數(shù),, Gt 是在狀態(tài) s 下的回報(bào)
但這種方法的問題在于,,需要等到一個(gè)episode,才能得到Gt

即反饋來的太晚了 不夠及時(shí)(RL中 經(jīng)常會遇到獎勵延后性的問題)
總之,,我們在評估某個(gè)狀態(tài)的回報(bào)時(shí),,不得不用一種預(yù)期回報(bào)來表達(dá),即對回報(bào)的估計(jì)V(St)


但V(St)終究是估計(jì)的,,既然是估計(jì)的就一定有誤差,,怎么糾偏呢,當(dāng)然是通過隨著時(shí)間的推移,,得到的真實(shí)回報(bào)Gt來糾偏了

所以V(St) ← V(St) + α[Gt ? V(St)] 的含義是
新的估計(jì)等于
原來的估計(jì),,加上實(shí)際回報(bào)和估計(jì)回報(bào)之間的差距(誤差)乘以一個(gè)學(xué)習(xí)率

換言之,用V(St)+α[Gt?V(St)] 更新原來的價(jià)值估計(jì)V(St),,α代表的學(xué)習(xí)率
如果學(xué)習(xí)率為1,,則新價(jià)值估計(jì)V(St) = G(t),原來的價(jià)值估計(jì)直接廢棄
如果學(xué)習(xí)率為0,則不進(jìn)行任何更新,,原來的價(jià)值估計(jì)不變


最終目的是讓預(yù)測的回報(bào)越來越接近真實(shí)的回報(bào),,從而更好的選擇更優(yōu)策略、更優(yōu)動作
類比現(xiàn)實(shí)生活中,,當(dāng)我們的預(yù)測越來越準(zhǔn)確時(shí),,之后就不用再老用真實(shí)回報(bào)去更新預(yù)測值了,而是直接相信預(yù)測的

  • 而時(shí)序差分(TD)呢,,它既要采樣得到上述第一個(gè)等式的期望值,,而且還要通過使用上述第三個(gè)等式中當(dāng)前的估計(jì)值V來替代真實(shí)值v_\pi
    且TD每過一個(gè)time step就利用獎勵R_{t+1}和值函數(shù)V(S_{t+1}) 更新一次(當(dāng)然,這里所說的one-step TD 方法,,也可以兩步一更新,,三步一更新….)
    考慮到G_t = R_{t+1} + \gamma V(S_{t+1}),可得

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

    此更新法也叫TD(0)法,,或者一步時(shí)序差分法,,R_{t+1} + \gamma V{S_{t+1}}被稱為TD目標(biāo),\delta = R_{t+1} + \gamma V_\pi (S_{t+1}) - V(S_t)被稱為TD誤差

    TD與DP一致的是,,
    時(shí)序差分方法也無需等待交互的最終結(jié)果,,而可以基于下一個(gè)時(shí)刻的收益R_{t+1}和估計(jì)值V(S_{t+1})就可以更新當(dāng)前狀態(tài)的價(jià)值函數(shù)
    不需像MC等到N步以后即等一個(gè)完整序列結(jié)束后才能更新V(S_t)
    就像不同學(xué)生做題,有的學(xué)生則是TD派:做完一題就問老師該題做的對不對 然后下一題即更新做題策略,,有的學(xué)生是MC派:做完全部題才問老師所有題做的對不對 然后下一套試卷更新做題策略

    TD與DP不一致的是,,TD俗稱無模型的RL算法,不需要像DP事先知道環(huán)境的獎勵函數(shù)和狀態(tài)轉(zhuǎn)移函數(shù)(和MC一樣,,可以直接從與環(huán)境互動的經(jīng)驗(yàn)中學(xué)習(xí)策略,,事實(shí)上,很多現(xiàn)實(shí)環(huán)境中,,其MDP的狀態(tài)轉(zhuǎn)移概率無從得知)

總之,,TD結(jié)合了DP和MC,與DP一致的點(diǎn)時(shí)與MC不一致,,與DP不一致的點(diǎn)時(shí)恰又與MC一致,,某種意義上來說,結(jié)合了前兩大方法各自的優(yōu)點(diǎn),,從而使得在實(shí)際使用中更靈活,,具體而言如下圖所示

順帶再舉一個(gè)例子,好比行軍打仗時(shí),,為了得到更好的行軍路線,,將軍派一人前去探路

  • MC的做法相當(dāng)于一條道走到黑 沒走個(gè)10公里不回頭
  • DP相當(dāng)于所有道比如10條道 每條道都走個(gè)1公里 不錯過任何一條可能成為最好道的可能,最后10條道都走完1公里后才返回匯報(bào)/反饋
  • TD則相當(dāng)于先選一條道走個(gè)1公里即返回匯報(bào)/反饋,,之后再走下一條道的1公里

為承上啟下更為總結(jié),,再說一個(gè)問題,即七月ChatGPT課群里有學(xué)問提問:校長 在A2C算法中,這個(gè)優(yōu)勢函數(shù)中的計(jì)算A(s,a) =Q(s,a) - V(s) 其中這個(gè)Q(s,a)和V(s)是由神經(jīng)網(wǎng)絡(luò)模擬出來的嗎

關(guān)于什么是優(yōu)勢函數(shù) 下文會具體闡述,,咱們就用上文的知識來一步步推導(dǎo)

\begin{aligned} Q_\pi (s,a) &= E[G_t|S_t = s,A_t = a] \\&= E[R_{t+1} + \gamma G_{t+1} | S_t =s,A_t = a] \\&= E[R_{t+1}|S_t = s,A_t = a] + \gamma E[ G_{t+1} | S_t =s,A_t = a] \\&= R(s,a) + \gamma \sum_{s

從而求解Q時(shí),,算是實(shí)際獎勵R + V,而V通過critic網(wǎng)絡(luò)學(xué)習(xí)(比如通過蒙特卡洛或時(shí)序差分)

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

從而A(s, a) = Q(s,a) - V(s)便能比較好的求解了
相當(dāng)于如春天所說,,實(shí)踐中只需要V(s)用神經(jīng)網(wǎng)絡(luò)來實(shí)現(xiàn)就行,,因?yàn)镼(s,a)已經(jīng)可以被V(s)和R表示了,不需要再另外實(shí)現(xiàn)

2.4 RL的分類:基于模型(Value-base/Policy-based)與不基于模型

根據(jù)問題求解思路,、方法的不同,,我們可以將強(qiáng)化學(xué)習(xí)分為

  • 基于模型的強(qiáng)化學(xué)習(xí)(Model-based RL),可以簡單的使用動態(tài)規(guī)劃求解,,任務(wù)可定義為預(yù)測和控制,,預(yù)測的目的是評估當(dāng)前策略的好壞,即求解狀態(tài)價(jià)值函數(shù)V_\pi (S),,控制的目的則是尋找最優(yōu)策略\pi ^*V_*(s)

    在這里“模型”的含義是對環(huán)境進(jìn)行建模,,具體而言,是否已知其PR,,即p(sR(s,a)的取值
    \rightarrow 如果有對環(huán)境的建模,,那么智能體便可以在執(zhí)行動作前得知狀態(tài)轉(zhuǎn)移的情況即p(s和獎勵R(s,a),也就不需要實(shí)際執(zhí)行動作收集這些數(shù)據(jù),;
    \rightarrow 否則便需要進(jìn)行采樣,,通過與環(huán)境的交互得到下一步的狀態(tài)和獎勵,然后僅依靠采樣得到的數(shù)據(jù)更新策略
  • 無模型的強(qiáng)化學(xué)習(xí)(Model-free RL),,又分為
    基于價(jià)值的強(qiáng)化學(xué)習(xí)(Value-based RL),,其會學(xué)習(xí)并貪婪的選擇值最大的動作,即a = \underset{a}{\arg \max}\ Q(s,a),,最經(jīng)典的便是off-policy模式的Q-learning和on-policy模式的SARSA,一般得到的是確定性策略,,下文第三部分重點(diǎn)介紹

    基于策略的強(qiáng)化學(xué)習(xí)(Policy-based RL),,其對策略進(jìn)行進(jìn)行建模\pi (s,a)并優(yōu)化,一般得到的是隨機(jī)性策略,,下文第四部分會重點(diǎn)介紹

第三部分 價(jià)值學(xué)習(xí):從n步Sarsa算法到Q-learning,、DQN

3.1 TD(0)控制/Sarsa(0)算法與TD(n)控制/n步Sarsa算法

既然上文可以用時(shí)序差分來估計(jì)狀態(tài)價(jià)值函數(shù),那是否可以用類似策略迭代的方法來評估動作價(jià)值函數(shù)呢,?畢竟在無模型的RL問題中,,動作價(jià)值函數(shù)比狀態(tài)價(jià)值函數(shù)更容易被評估

如果用類似TD(0)控制的思路尋找最優(yōu)的動作價(jià)值函數(shù)并提取出最優(yōu)策略,便被稱作Sarsa(0)算法,,所以,,Sarsa所做出的改變很簡單,它將原本時(shí)序差分方法更新V的過程,變成了更新Q,,即可以如下表達(dá)

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)]

此外,,上文說過,“TD每過一個(gè)time step就利用獎勵R_{t+1}和值函數(shù)V(S_{t+1}) 更新一次,,當(dāng)然,,這里所說的one-step TD 方法,也可以兩步一更新,,三步一更新”,,這個(gè)所謂的多步一更新我們便稱之為N步時(shí)序差分法 

首先,我們先回復(fù)下回報(bào)公式的定義,,即為(根據(jù)前幾項(xiàng)可以看出:\gamma的上標(biāo)加t+1即為R的下標(biāo),,反過來,當(dāng)最后一項(xiàng)R的下標(biāo)T確定后,,自然便可以得出\gamma的上標(biāo)為T -t -1)

G_t = R_{t+1} + \gamma R_{t+2} + \gamma ^2 R_{t+3}+\cdots + \gamma ^{T-t-1}R_T

從而有

  • 單步回報(bào):G_{t:t+1} = R_{t+1} + \gamma V_t(S_{t+1}),,即為TD(0)控制/Sarsa(0)算法
  • 兩步回報(bào):G_{t:t+2} = R_{t+1} + \gamma R_{t+2} + \gamma ^2V_{t+1}(S_{t+2})
  • n步回報(bào):G_{t:t+n} = R_{t+1} + \gamma R_{t+2} + \cdots + \gamma ^{n-1}R_{t+n} + \gamma ^nV_{t+n-1}(S_{t+n})
    此時(shí),類似于TD(0)預(yù)測

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

    有以下狀態(tài)值更新規(guī)則

    V_{t+n}(S_t) = V_{t+n-1}(S_t) + \alpha \left [ G_{t:t+n} - V_{t+n-1}(S_t) \right ],0\leq t < T

    而對于其他任意狀態(tài)s(s\neq S_t)的價(jià)值估計(jì)保持不變:V_{t+n}(S) = V_{t+n-1}(S)

類似的,,當(dāng)用n步時(shí)序差分的思路去更新Q函數(shù)則就是所謂的n步Sarsa算法,,當(dāng)我們重新根據(jù)動作價(jià)值的估計(jì)定義如下的b步方法的回報(bào)為

G_{t:t+n} = R_{t+1} + \gamma R_{t+2} + \cdots + \gamma ^{n-1}R_{t+n} + \gamma ^nQ_{t+n-1}(S_{t+n},A_{t+n}) \\ n\geq 1,0\leq t < T-n

如此,便可以得到如下Q的更新方式

Q_{t+n}(S_t) = Q_{t+n-1}(S_t,A_t) + \alpha \left [ G_{t:t+n} - Q_{t+n-1}(S_t,A_t) \right ],0\leq t < T

3.2 Q-learning

3.2.1 重要性采樣:讓同策略完成到異策略的轉(zhuǎn)變

Q-learning介紹得閑闡明一個(gè)問題,,即所謂的同策略學(xué)習(xí)與異策略學(xué)習(xí)

首先,,先來明確兩個(gè)概念:

  • 行動遵循的行動策略與被評估的目標(biāo)策略是同一個(gè)策略(如果要學(xué)習(xí)的智能體和與環(huán)境交互的智能體是相同的),則稱之為同策略,,比如上文介紹的Sarsa
  • 行動遵循的行動策略和被評估的目標(biāo)策略是不同的策略(或如果要學(xué)習(xí)的智能體和與環(huán)境交互的智能體不是相同的),,則稱之為異策略,比如即將介紹的Q-learning

而異策略就是基于重要性采樣的原理實(shí)現(xiàn)的(但反過來,,不是說只要采用了重要性采用,,就一定是異策略,比如下文將講的PPO算法),,即通過使用另外一種分布,,來逼近所求分布的一種方法

但具體怎么操作呢?為說明怎么變換的問題,,再舉一個(gè)例子,。

假設(shè)有一個(gè)函數(shù)f(x)x需要從分布p中采樣,,應(yīng)該如何怎么計(jì)算??(??)的期望值呢,?

如果分布p不能做積分,那么只能從分布p盡可能多采樣更多的x^{i},,然后全都代入到f(x),,按照蒙特卡洛方法的原則取它的平均值就可以得到近似??(??)的期望值:

\mathbb{E}_{x \sim p}[f(x)] \approx \frac{1}{N} \sum_{i=1}^N f(x^i)

當(dāng)不能在分布p中采樣數(shù)據(jù),,而只能從另外一個(gè)分布q中去采樣數(shù)據(jù)時(shí)(q可以是任何分布),就需要做些變換,,如下三步

  1. 首先,,期望值\mathbb{E}_{x \sim p}[f(x)]的另一種寫法是\int f(x) p(x) \mathrm3squ974rbx,對其進(jìn)行變換,,如下式所示

    \int f(x) p(x) \mathrm3squ974rbx=\int f(x) \frac{p(x)}{q(x)} q(x) \mathrm3squ974rbx=\mathbb{E}_{x \sim q}[f(x){\frac{p(x)}{q(x)}}]

  2. 整理下可得(左邊是分布p,,右邊是分布q):

    \mathbb{E}_{x \sim p}[f(x)]=\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]

  3. 如此,便就可以從q里面采樣 x,,再計(jì)算f(x) \frac{p(x)}{q(x)},,再取期望值

所以就算我們不能從p里面采樣數(shù)據(jù),但只要能從q里面采樣數(shù)據(jù),,就可以計(jì)算從p采樣x,,然后代入f 以后的期望值

3.2.2 Sarsa算法與Q-learning更新規(guī)則的對比

和Sarsa(0)算法的更新規(guī)則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)]有點(diǎn)像,Q-learning的動作價(jià)值函數(shù)更新規(guī)則如下

Q\left(S_{t}, A_{t}\right) = Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma \max _{a

啥意思呢,,一步步來看

  1. Q學(xué)習(xí)有兩種策略:目標(biāo)策略和行為策略
    目標(biāo)策略是我們需要學(xué)習(xí)的策略,,一般用\pi表示,直接在Q表格上使用貪心策略,,取它下一步能得到的所有狀態(tài),,即

    \pi\left(s_{t+1}\right) = \underset{a^{\prime}}{\arg \max}\sim Q\left(s_{t+1}, a^{\prime}\right)

    行為策略 \mu可以是一個(gè)隨機(jī)的策略,與環(huán)境交互(采集軌跡或數(shù)據(jù)),,但我們采取 \varepsilon-貪心策略,,讓行為策略不至于是完全隨機(jī)的,它是基于Q表格逐漸改進(jìn)的
  2. 我們可以構(gòu)造 Q學(xué)習(xí)目標(biāo),,Q學(xué)習(xí)的下一個(gè)動作都是通過arg max 操作選出來的(不管行為策略怎么探索,、去哪探索,反正就是取獎勵最大化下的策略),,于是我們可得

    \begin{aligned} R_{t+1}+\gamma Q\left(S_{t+1}, A^{\prime}\right) &=R_{t+1}+\gamma Q\left(S_{t+1},\arg \max ~Q\left(S_{t+1}, a^{\prime}\right)\right) \\ &=R_{t+1}+\gamma \max _{a^{\prime}} Q\left(S_{t+1}, a^{\prime}\right) \end{aligned}

再次總結(jié)一下其與Sarsa的區(qū)別

  • 在Sarsa算法中,,新動作用于更新動作價(jià)值函數(shù),并且用于下一時(shí)刻的執(zhí)行工作,,這意味著行動策略與目標(biāo)策略屬于同一個(gè)策略
  • 但在Q-learning算法中,,使用確定性策略選出的新動作只用于動作價(jià)值函數(shù),而不會被真正執(zhí)行,,當(dāng)動作價(jià)值函數(shù)更新后,得到新狀態(tài),,并基于新狀態(tài)由\varepsilon-貪心策略選擇得到執(zhí)行行動,,這意味著行動策略與目標(biāo)策略不屬于同一個(gè)策略

3.3 DQN

// 待更

第四部分 策略學(xué)習(xí):從策略梯度、Actor-Criti到TRPO,、PPO算法

4.1 策略梯度與其突出問題:采樣效率低下

本節(jié)推導(dǎo)的核心內(nèi)容參考自Easy RL教程等資料(但修正了原教程上部分不太準(zhǔn)確的描述,,且為讓初學(xué)者更好懂,,補(bǔ)充了大量的解釋說明和心得理解,倪老師則幫拆解了部分公式),。

另,,都說多一個(gè)公式則少一個(gè)讀者,本文要打破這點(diǎn),,雖然本節(jié)推導(dǎo)很多,,但每一步推導(dǎo)都有介紹到,不會省略任何一步推導(dǎo),,故不用擔(dān)心看不懂(對本文任何內(nèi)容有任何問題,,都?xì)g迎隨時(shí)留言評論)。

4.1.1 什么是策略梯度和梯度計(jì)算/更新的流程

策略梯度的核心算法思想是:

  • 參數(shù)為\theta的策略\pi_{\theta }接受狀態(tài)s,,輸出動作概率分布,,在動作概率分布中采樣動作,執(zhí)行動作(形成運(yùn)動軌跡\tau),,得到獎勵r,,跳到下一個(gè)狀態(tài)
  • 在這樣的步驟下,可以使用策略\pi收集一批樣本,,然后使用梯度下降算法學(xué)習(xí)這些樣本,,不過當(dāng)策略\pi的參數(shù)更新后,這些樣本不能繼續(xù)被使用,,還要重新使用策略\pi與環(huán)境互動收集數(shù)據(jù)

比如REINFORCE算法便是常見的策略梯度算法,,類似下圖所示(下圖以及本節(jié)大部分配圖/公式均來自easy RL教程)

接下來,詳細(xì)闡述,。首先,,我們已經(jīng)知道了策略函數(shù)可以如此表示:a = \pi _{\theta }(s)

其中,\pi _{\theta}可以理解為一個(gè)我們所熟知的神經(jīng)網(wǎng)絡(luò)

  • 當(dāng)你對神經(jīng)網(wǎng)絡(luò)有所了解的話,,你一定知道通過梯度下降求解損失函數(shù)的極小值(忘了的,,可以復(fù)習(xí)下:首先通過正向傳播產(chǎn)生擬合值,與標(biāo)簽值做“差”計(jì)算,,產(chǎn)生誤差值,,然后對誤差值求和產(chǎn)生損失函數(shù),最后對損失函數(shù)用梯度下降法求極小值,,而優(yōu)化的對象就是神經(jīng)網(wǎng)絡(luò)的參數(shù)\theta
  • 類比到\pi _{\theta}這個(gè)問題上,,現(xiàn)在是正向傳播產(chǎn)生動作,然后動作在環(huán)境中產(chǎn)生獎勵值,,通過獎勵值求和產(chǎn)生評價(jià)函數(shù),,此時(shí)可以針對評價(jià)函數(shù)做梯度上升(gradient ascent),畢竟能求極小值,,便能求極大值,,正如誤差能最小化,,獎勵/得分就能最大化

如何評價(jià)策略的好壞呢?

假設(shè)機(jī)器人在策略\pi_{\theta }的決策下,,形成如下的運(yùn)動軌跡(類似你玩三國爭霸時(shí),,你控制角色在各種不同的游戲畫面/場景/狀態(tài)下作出一系列動作,而當(dāng)完成了系統(tǒng)布置的某個(gè)任務(wù)時(shí)則會得到系統(tǒng)給的獎勵,,如此,,運(yùn)動軌跡用 \tau 表示,從而\tau表示為一個(gè)狀態(tài)s,、動作a,、獎勵值r不斷遷移的過程) 

\tau = (s_{1},a_{1},r_{1},s_{2},a_{2},r_{2},...,s_{t},a_{t},r_{t})

可能有讀者注意到了,既然獎勵是延后的,,s_t/a_t后的獎勵怎么用r_t而非r_{t+1}呢,,事實(shí)上,sutton RL書上用S_0,A_0,R_1,S_1,A_1,R_2,S_2,A_2,R_3,\cdots,S_t,A_t,R_{t+1}表示整條軌跡,,其實(shí)這樣更規(guī)范,,但考慮到不影響大局和下文的推導(dǎo),本筆記則暫且不細(xì)究了

給定智能體或演員的策略參數(shù)\theta,,可以計(jì)算某一條軌跡\tau發(fā)生的概率為『軌跡\tau來源于在特定的環(huán)境狀態(tài)下采取特定動作的序列,,而特定的狀態(tài)、特定的動作又分別采樣自智能體的動作概率分布p_{\theta }(a_{t}|s_{t}),、狀態(tài)的轉(zhuǎn)換概率分布p(s_{t+1}|s_t,a_t)

\begin{aligned} p_{\theta}(\tau) &=p\left(s_{1}\right) p_{\theta}\left(a_{1} | s_{1}\right) p\left(s_{2} | s_{1}, a_{1}\right) p_{\theta}\left(a_{2} | s_{2}\right) p\left(s_{3} | s_{2}, a_{2}\right) \cdots \\ &=p\left(s_{1}\right) \prod_{t=1}^{T} p_{\theta}\left(a_{t} | s_{t}\right) p\left(s_{t+1} | s_{t}, a_{t}\right) \end{aligned}

其中,,有的資料也會把p_{\theta }(a_{t}|s_{t})寫成為\pi _{\theta }(a_{t}|s_{t}),但由于畢竟是概率,,所以更多資料還是寫為p_{\theta }(a_{t}|s_{t}) 

如何評價(jià)策略呢,?這個(gè)策略評價(jià)函數(shù)為方便理解也可以稱之為策略價(jià)值函數(shù),就像上文的狀態(tài)價(jià)值函數(shù),、動作價(jià)值函數(shù),,說白了,評估策略(包括狀態(tài),、動作)的價(jià)值,,就是看其因此得到的期望獎勵

故考慮到期望的定義,由于每一個(gè)軌跡 \tau 都有其對應(yīng)的發(fā)生概率,,對所有\tau出現(xiàn)的概率與對應(yīng)的獎勵進(jìn)行加權(quán)最后求和,,即可得期望值:

\bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau)=\mathbb{E}_{\tau \sim p_{\theta}(\tau)}[R(\tau)]

上述整個(gè)過程如下圖所示

通過上文已經(jīng)知道,想讓獎勵越大越好,,可以使用梯度上升來最大化期望獎勵,。而要進(jìn)行梯度上升,先要計(jì)算期望獎勵\bar{R}_{\theta}的梯度,。

考慮對 \bar{R}_{\theta}做梯度運(yùn)算『再次提醒,,忘了什么是梯度的,可以通過一文通透優(yōu)化算法:從梯度下降、SGD到牛頓法,、共軛梯度(23修訂版)復(fù)習(xí)下

\nabla \bar{R}_{\theta}=\sum_{\tau} R(\tau) \nabla p_{\theta}(\tau)

其中,,只有 p_{\theta}(\tau)與 \theta 有關(guān)。再考慮到\nabla f(x)=f(x)\nabla \log f(x),,可得

\frac{\nabla p_{\theta}(\tau)}{p_{\theta}(\tau)}= \nabla \log p_{\theta}(\tau)

從而進(jìn)一步轉(zhuǎn)化,,可得\nabla\bar{R}_{\theta}=\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right],表示期望的梯度等于對數(shù)概率梯度的期望乘以原始函數(shù)

Em,,怎么來的,?別急,具體推導(dǎo)是

\begin{aligned} \nabla \bar{R}_{\theta}&=\sum_{\tau} R(\tau) \nabla p_{\theta}(\tau)\\&=\sum_{\tau} R(\tau) p_{\theta}(\tau) \frac{\nabla p_{\theta}(\tau)}{p_{\theta}(\tau)} \\&= \sum_{\tau} R(\tau) p_{\theta}(\tau) \nabla \log p_{\theta}(\tau) \\ &=\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] \end{aligned}

上述推導(dǎo) 總共4個(gè)等式3個(gè)步驟,,其中,,第一步 先分母分子都乘以一個(gè)p_{\theta}(\tau),第二步 把\frac{\nabla p_{\theta}(\tau)}{p_{\theta}(\tau)}= \nabla \log p_{\theta}(\tau)代入計(jì)算,,第三步 根據(jù)期望的定義E[X] = \sum_{i}^{}p_ix_i做個(gè)簡單轉(zhuǎn)換,,此處的X就是R(\tau )


此外,本文一讀者在23年2.24日的留言說,,還想了解\nabla f(x)=f(x)\nabla \log f(x)是怎么推導(dǎo)而來的,,這個(gè)式子可以通過如下推導(dǎo)得到

首先,對函數(shù)f(x)取對數(shù)得:

\log f(x)

對上式求導(dǎo)數(shù)得:

\frac3squ974rb{dx}\log f(x) = \frac{1}{f(x)}\frac3squ974rb{dx}

將等式兩邊同乘以f(x),,得到:

f(x) \frac3squ974rb{dx} \log f(x) = \frac3squ974rb{dx}

這個(gè)等式表明,,我們可以用\nabla \log f(x)來表示\nabla f(x),即:

\nabla f(x)=f(x)\nabla \log f(x)

然不巧的是,,期望值\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right]無法計(jì)算,,按照蒙特卡洛方法近似求期望的原則,可以采樣N條軌跡\tau并計(jì)算每一條軌跡的值,,再把每一條軌跡的值加起來除以N取平均,,即(\tau^{n}上標(biāo)n代表第n條軌跡,而a_{t}^{n},、s_{t}^{n}則分別代表第n條軌跡里時(shí)刻t的動作,、狀態(tài))

\begin{aligned} \mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] &\approx \frac{1}{N} \sum_{n=1}^{N} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(\tau^{n}\right) \\ &=\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) \end{aligned}

任何必要的中間推導(dǎo)步驟咱不能省,大部分文章基本都是一筆帶過,,但本文為照顧初學(xué)者甚至更初級的初學(xué)者,,\nabla \log p_{\theta}(\tau)中間的推導(dǎo)過程還是要盡可能逐一說明下:

  1. 首先,通過上文中關(guān)于某一條軌跡\tau發(fā)生概率的定義,,可得

    p_\theta (\tau ) = p(s_{1}) \prod_{t=1}^{T_{n}}p(s_{t+1}|s_t,a_t)p_{\theta }(a_{t}|s_{t})

  2. 然后兩邊都取對數(shù),,可得

    logp_\theta (\tau ) = logp(s_1)\prod_{t=1}^{T_{n}} p(s_{t+1}|s_t,a_t)p_{\theta }(a_{t}|s_{t})

    由于乘積的對數(shù)等于各分量的對數(shù)之和,,故可得

    logp_\theta (\tau ) = logp(s_1) + \sum_{t=1}^{T_n}(logp(s_{t+1}|s_t,a_t) + logp_{\theta }(a_{t}|s_{t}))

  3. 接下來,取梯度可得

    \begin{aligned} \nabla \log p_{\theta}(\tau) &= \nabla \left(\log p(s_1)+ \sum_{t=1}^{T_n}\log p(s_{t+1}|s_t,a_t) + \sum_{t=1}^{T_n}\log p_{\theta}(a_t|s_t) \right) \\ &= \nabla \log p(s_1)+ \nabla \sum_{t=1}^{T_n}\log p(s_{t+1}|s_t,a_t) + \nabla \sum_{t=1}^{T_n}\log p_{\theta}(a_t|s_t) \\ &=\nabla \sum_{t=1}^{T_n}\log p_{\theta}(a_t|s_t)\\ &=\sum_{t=1}^{T_n} \nabla\log p_{\theta}(a_t|s_t) \end{aligned}

    上述過程總共4個(gè)等式,,在從第2個(gè)等式到第3個(gè)等式的過程中,,之所以消掉了

    \nabla \log p(s_1)+ \nabla \sum_{t=1}^{T_n}\log p(s_{t+1}|s_t,a_t)

    是因?yàn)槠渑c\theta無關(guān)(環(huán)境狀態(tài)不依賴于策略),其對\theta的梯度為0,。

完美,!這就是所謂的策略梯度定理,我們可以直觀地理解該公式

\nabla \bar{R}_{\theta}=\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)

  1. 即在采樣到的數(shù)據(jù)里面,,采樣到在某一個(gè)狀態(tài)s_t 要執(zhí)行某一個(gè)動作a_t,,(s_t,a_t)是在整個(gè)軌跡\tau的里面的某一個(gè)狀態(tài)和動作的對
  2. 為了最大化獎勵,假設(shè)在s_t執(zhí)行a_t,,最后發(fā)現(xiàn)\tau的獎勵是正的,,就要增加在 s_t 執(zhí)行 a_t的概率。反之,,如果在s_t執(zhí)行 a_t 會導(dǎo)致 \tau 的獎勵變成負(fù)的,, 就要減少在  s_t執(zhí)行 a_t 的概率
  3. 最后,用梯度上升來更新參數(shù),,原來有一個(gè)參數(shù)\theta,,把 \theta 加上梯度\nabla \bar{R}_{\theta},當(dāng)然要有一個(gè)學(xué)習(xí)率 \eta(類似步長,、距離的含義),,學(xué)習(xí)率的調(diào)整可用 Adam、RMSProp等方法調(diào)整,,即

\theta \leftarrow \theta+\eta \nabla \bar{R}_{\theta}

有一點(diǎn)值得說明的是...,,為了提高可讀性,還是舉個(gè)例子來說明吧,。

比如到80/90后上大學(xué)時(shí)喜歡玩的另一個(gè)游戲CF(即cross fire,,10多年前我在東華理工的時(shí)候也經(jīng)常玩這個(gè),另一個(gè)是DNF),,雖然玩的是同一個(gè)主題比如沙漠戰(zhàn)場,,但你每場的發(fā)揮是不一樣的,即便玩到同一個(gè)地方(比如A區(qū)埋雷的地方),,你也可能會控制角色用不同的策略做出不同的動作,,比如

  • 在第一場游戲里面,我們在狀態(tài)s_1采取動作 a_1,,在狀態(tài)s_2采取動作 a_2,。且你在同樣的狀態(tài)s_1?下,不是每次都會采取動作a_1?的,所以我們要記錄,,在狀態(tài) s_1^1 采取 a_1^1,、在狀態(tài) s_2^1 采取 a_2^1等,整場游戲結(jié)束以后,,得到的獎勵是 R(\tau^1)
  • 在第二場游戲里面,,在狀態(tài)s_1^2采取a_1^2?,在狀態(tài) s_2^2采取 a_2^2,,采樣到的就是\tau^2,得到的獎勵是R(\tau^2)

這時(shí)就可以把采樣到的數(shù)據(jù)用梯度計(jì)算公式把梯度算出來

  1. 也就是把每一個(gè)sa的對拿進(jìn)來,,計(jì)算在某一個(gè)狀態(tài)下采取某一個(gè)動作的對數(shù)概率\log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right),,對這個(gè)概率取梯度\nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)
  2. 然后在梯度前面乘一個(gè)權(quán)重R\left(\tau^{n}\right),權(quán)重就是這場游戲的獎勵,,這也是和一般分類問題的區(qū)別所在

  3. 計(jì)算出梯度后,,就可以通過\theta \leftarrow \theta+\eta \nabla \bar{R}_{\theta}更新模型了 

4.1.2 避免采樣的數(shù)據(jù)僅能用一次:重要性采樣(為采樣q解決p從而增加重要性權(quán)重)

然而策略梯度有個(gè)問題,在于\mathbb{E}_{\tau \sim p_{\theta}(\tau)}是對策略 \pi_{\theta}采樣的軌跡 \tau求期望,。一旦更新了參數(shù),,從\theta 變成 \theta,在對應(yīng)狀態(tài)s下采取動作的概率 p_\theta(\tau)就不對了,,之前采樣的數(shù)據(jù)也不能用了,。

換言之,策略梯度是一個(gè)會花很多時(shí)間來采樣數(shù)據(jù)的算法,,其大多數(shù)時(shí)間都在采樣數(shù)據(jù),。智能體與環(huán)境交互以后,接下來就要更新參數(shù),,我們只能更新參數(shù)一次,,然后就要重新采樣數(shù)據(jù), 才能再次更新參數(shù),。

0dbb490df24a8ddc53d81df6b09c9c76.png

這顯然是非?;〞r(shí)間的,怎么解決這個(gè)問題呢,?為避免采樣到的數(shù)據(jù)只能使用一次的問題,,還記得上文介紹過的重要性采樣否,使得

  1. 可以用另外一個(gè)策略\pi_{\theta與環(huán)境交互,,用\theta采樣到的數(shù)據(jù)去訓(xùn)練\theta
  2. 假設(shè)我們可以用 \theta采樣到的數(shù)據(jù)去訓(xùn)練\theta,,我們可以多次使用\theta采樣到的數(shù)據(jù),可以多次執(zhí)行梯度上升,,可以多次更新參數(shù)\theta,, 都只需要用\theta采樣到的同一批數(shù)據(jù)

故基于重要性采樣的原則,我們可以用另外一個(gè)策略\pi _{\theta^{,與環(huán)境做互動采樣數(shù)據(jù)來訓(xùn)練\theta,,從而間接計(jì)算R(\tau) \nabla \log p_{\theta}(\tau),,而當(dāng)我們轉(zhuǎn)用\theta去采樣數(shù)據(jù)訓(xùn)練\theta

  1. 只需在R(\tau) \nabla \log p_{\theta}(\tau)的基礎(chǔ)上補(bǔ)上一個(gè)重要性權(quán)重:\frac{p_{\theta}(\tau)}{p_{\theta^{\prime}}(\tau)},這個(gè)重要性權(quán)重針對某一個(gè)軌跡\tau\theta算出來的概率除以這個(gè)軌跡\tau\theta^{算出來的概率
  2. 注意,,上面例子中的p/q與此處的p_{\theta}(\tau)/p_{\theta^{\prime}}(\tau)沒有任何聯(lián)系,,前者只是為了說明重要性權(quán)重的兩個(gè)普通的分布而已

最終加上重要性權(quán)重之后,可得

\nabla \bar{R}_{\theta}=\mathbb{E}_{\tau \sim p_{\theta^{\prime}(\tau)}}\left[\frac{p_{\theta}(\tau)}{p_{\theta^{\prime}}(\tau)} R(\tau) \nabla \log p_{\theta}(\tau)\right]

怎么來的,?完整推導(dǎo)如下

\begin{aligned}\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] &= \sum_{\tau} \left[R(\tau) \nabla \log p_{\theta}(\tau)\right]p_{\theta}(\tau) \\ &= \sum_{\tau} \left[\frac{p_{\theta}(\tau)}{p_{\theta}^\prime(\tau)}R(\tau) \nabla \log p_{\theta}(\tau)\right]p_{\theta}^\prime(\tau) \\ &= \mathbb{E}_{\tau \sim p_{\theta^{\prime}(\tau)}}\left[\frac{p_{\theta}(\tau)}{p_{\theta^{\prime}}(\tau)} R(\tau) \nabla \log p_{\theta}(\tau)\right] \\ & = \nabla \bar{R}_{\theta}\end{aligned}

4.2 引入優(yōu)勢演員-評論家算法(Advantage Actor-Criti):為避免獎勵總為正增加基線

4.2.1 什么是優(yōu)勢函數(shù):不斷鼓勵并探索高于平均預(yù)期回報(bào)的動作從而指導(dǎo)策略更新

梯度的計(jì)算好像差不多了,?但實(shí)際在做策略梯度的時(shí)候,并不是給整個(gè)軌跡\tau都一樣的分?jǐn)?shù),,而是每一個(gè)狀態(tài)-動作的對會分開來計(jì)算,,但通過蒙特卡洛方法進(jìn)行隨機(jī)抽樣的時(shí)候,可能會出問題,,比如在采樣一條軌跡時(shí)可能會出現(xiàn)

  • 問題1:所有動作均為正獎勵
  • 問題2:出現(xiàn)比較大的方差(另,,重要性采樣時(shí),采樣的分布與當(dāng)前分布之間也可能會出現(xiàn)比較大的方差,,具體下一節(jié)詳述)

對于第一個(gè)問題,,舉個(gè)例子,比如在某一一個(gè)狀態(tài),,可以執(zhí)行的動作有a,、b、c,,但我們可能只采樣到動作b或者只采樣到動作c,,沒有采樣到動作a

  1. 但不管采樣情況如何,現(xiàn)在所有動作的獎勵都是正的,,所以采取a,、b、 c的概率都應(yīng)該要提高
  2. 可實(shí)際最終b,、c的概率按預(yù)期提高了,,但因?yàn)閍沒有被采樣到,所以a的概率反而下降了
  3. 然而問題是a不一定是一個(gè)不好的動作,,它只是沒有被采樣到

為了解決獎勵總是正的的問題,,也為避免方差過大,需要在之前梯度計(jì)算的公式基礎(chǔ)上加一個(gè)基準(zhǔn)線bb指的baseline,,非上面例子中的b,,這個(gè)所謂的基準(zhǔn)線b可以是任意函數(shù),只要不依賴于動作a即可』 

\nabla \bar{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}\left(R\left(\tau^{n}\right)-b\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right)

上面說b可以是任意函數(shù),,這個(gè)“任意”吧,,對初學(xué)者而言可能跟沒說一樣,,所以b到底該如何取值呢

  • b有一種選擇是使用軌跡上的獎勵均值,即b = \frac{1}{T}\sum_{t=0}^{T}R_t(\tau )
    從而使得R(\tau)-b有正有負(fù)
    當(dāng)R(\tau)大于平均值b時(shí),,則R(\tau)-b為正,,則增加該動作的概率
    當(dāng)R(\tau)小于平均值b時(shí),則R(\tau)-b為負(fù),,則降低該動作的概率
    如此,,對于每條軌跡,平均而言,,較好的50%的動作將得到獎勵,,避免所有獎勵均為正或均為負(fù),同時(shí),,也減少估計(jì)方差
  • b還可以是狀態(tài)價(jià)值函數(shù)V_{\pi}(s_{t})
    可曾還記得2.1節(jié)介紹過的所謂Actor-Criti算法(一般被翻譯為演員-評論家算法)

    Actor學(xué)習(xí)參數(shù)化的策略即策略函數(shù),,Criti通過學(xué)習(xí)一個(gè)狀態(tài)價(jià)值函數(shù),來盡可能準(zhǔn)確地預(yù)測從當(dāng)前狀態(tài)開始,,遵循某個(gè)策略可以獲得的預(yù)期總回報(bào)(即未來的累積折扣獎勵),并將其用于更好地?cái)M合真實(shí)的回報(bào),,在學(xué)習(xí)過程中,,Critic試圖減小預(yù)測的價(jià)值和實(shí)際經(jīng)驗(yàn)回報(bào)之間的差距,以此來改進(jìn)我們的策略「更多可以再看下ChatGPT原理技術(shù)解析一文中的此部分:3.2.2 如何通過deepspeed Chat的實(shí)現(xiàn)更好的理解Actor-Critic架構(gòu)中的Critic網(wǎng)絡(luò),,可解決你心中不少疑惑

    當(dāng)然,,Actor-Criti本質(zhì)上是屬于基于策略的算法,畢竟算法的目標(biāo)是優(yōu)化一個(gè)帶參數(shù)的策略(實(shí)際用到PPO算法時(shí),,會計(jì)算一個(gè)策略損失),,只是會額外學(xué)習(xí)價(jià)值函數(shù)(相應(yīng)的,運(yùn)用PPO算法時(shí),,也會計(jì)算一個(gè)價(jià)值損失),,從而幫助策略函數(shù)更好的學(xué)習(xí),而學(xué)習(xí)優(yōu)勢函數(shù)的演員-評論家算法被稱為優(yōu)勢演員-評論家(Advantage Actor-Criti,,簡稱A2C)算法

而這個(gè)R(\tau)-b一般被定義為優(yōu)勢函數(shù)(Advantage Function)A^{\theta}(s_t,a_t),,是對一個(gè)動作在平均意義上比其他動作好多少的度量,有幾點(diǎn)值得注意

  1. 在考慮到評估動作的價(jià)值,,就看其因此得到的期望獎勵,,故一般有A_\pi (s,a) = Q_\pi (s,a) - V_\pi (s),此舉意味著在選擇一個(gè)動作時(shí),,根據(jù)該動作相對于特定狀態(tài)下其他可用動作的執(zhí)行情況來選擇,,而不是根據(jù)該動作的絕對值

    且通常我們只學(xué)習(xí)V_\pi (s)比如通過時(shí)序差分法估計(jì)」,然后通過V_\pi (s)與獎勵的結(jié)合來估計(jì)Q_\pi,,即Q_\pi = R+ \gamma V_{\pi }(s_{t+1}),,從而可得

    A_\pi (s,a) = Q_\pi (s,a) - V_\pi (s) = R + \gamma V_{\pi }(s_{t+1}) - V_\pi (s)

    總之,A^{\theta }(s_{t},a_{t})要估測的是在狀態(tài)s_{t}采取動作a_{t}是好的還是不好的:即
    \rightarrow  如果A^{\theta }(s_{t},a_{t})是正的(即大于0),意味著在狀態(tài) s_{t} 采取動作 a_{t} 獲得的回報(bào)比在狀態(tài) s_{t} 采取任何其他可能的動作獲得的回報(bào)都要好,,要增加概率
    \rightarrow  如果A^{\theta }(s_{t},a_{t})是負(fù)的(即小于0),,意味著在狀態(tài) s_{t} 采取動作 a_{t} 得到的回報(bào)比其他動作的平均回報(bào)要差,要減少概率
  2. 最終在更新梯度的時(shí)候,,如下式所示『我們用演員\theta去采樣出s_{t}a_{t},,采樣出狀態(tài)跟動作的對(s_{t},a_{t}),計(jì)算這個(gè)狀態(tài)跟動作對的優(yōu)勢A^{\theta }(s_{t},a_{t})

    \mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta}}\left[A^{\theta}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right]

4.2.2 引入之前介紹的重要性采樣

進(jìn)一步,,由于A^{\theta}(s_t,a_t)是演員\theta與環(huán)境交互的時(shí)候計(jì)算出來的,,基于重要性采樣的原則,當(dāng)從 \theta 換到 \theta 的時(shí)候,,就需要在

\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta}}\left[A^{\theta}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right]

基礎(chǔ)上,, A^{\theta}(s_t,a_t)變換成A^{\theta,一變換便得加個(gè)重要性權(quán)重(即把s_{t},、a_{t}\theta采樣出來的概率除掉 s_{t},、a_{t}\theta^{采樣出來的概率),公式如下『Easy RL紙書第1版上把下面公式中的A^{\theta寫成了A^{\theta}(s_t,a_t)

\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(s_{t}, a_{t}\right)}{p_{\theta^{\prime}}\left(s_{t}, a_{t}\right)} A^{\theta

接下來,,我們可以拆解p_{\theta}(s_{t}, a_{t})p_{\theta,,即

\begin{aligned} p_{\theta}\left(s_{t}, a_{t}\right)&=p_{\theta}\left(a_{t}|s_{t}\right) p_{\theta}(s_t) \\ p_{\theta

于是可得公式

\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} \frac{p_{\theta}\left(s_{t}\right)}{p_{\theta^{\prime}}\left(s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right]

這里需要做一件事情,假設(shè)模型是\theta的時(shí)候,,我們看到s_{t}的概率,,跟模型是\theta^{的時(shí)候,看到s_{t}的概率是差不多的,,即p_{\theta}(s_t)=p_{\theta,。

為什么可以這樣假設(shè)呢?一種直觀的解釋就是p_{\theta}(s_t)很難算,,這一項(xiàng)有一個(gè)參數(shù)\theta,,需要拿\theta去跟環(huán)境做互動,算s_{t}出現(xiàn)的概率,。 尤其是如果輸入是圖片的話,,同樣的s_{t}根本就不會出現(xiàn)第二次。我們根本沒有辦法估這一項(xiàng),,所以就直接無視這個(gè)問題,。


但是p_{\theta}(a_t|s_t)是很好算,我們有\theta這個(gè)參數(shù),,它就是個(gè)網(wǎng)絡(luò),。我們就把s_{t}帶進(jìn)去,s_{t}就是游戲畫面,。 我們有個(gè)策略的網(wǎng)絡(luò),,輸入狀態(tài)s_{t},,它會輸出每一個(gè)a_{t}的概率。所以,,我們只要知道\theta\theta的參數(shù)就可以算\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)},。 

所以,實(shí)際上在更新參數(shù)的時(shí)候,,我們就是按照下式來更新參數(shù):

\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right]

從而最終可以從梯度\nabla f(x)=f(x) \nabla \log f(x)來反推目標(biāo)函數(shù),,當(dāng)使用重要性采樣的時(shí)候,要去優(yōu)化的目標(biāo)函數(shù)如下式所示,,把它記J^{\theta^{\prime}}(\theta)

J^{\theta^{\prime}}(\theta)=\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right]

終于大功告成,!

4.3 基于信任區(qū)域的TRPO:加進(jìn)KL散度解決兩個(gè)分布相差大或步長難以確定的問題

好巧不巧,看似大功告成了,,但重要性采樣還是有個(gè)問題,。具體什么問題呢,為更好的說明這個(gè)問題,,我們回到上文的那個(gè)例子中,。

還是那兩個(gè)分布:pq,,當(dāng)不能從p里面很好的采樣數(shù)據(jù),,而能從 q里面很好的采樣數(shù)據(jù)時(shí),基于重要性采樣的原則,,雖然我們可以把 p換成任何的 q,但是在實(shí)現(xiàn)上,,p和 q的差距不能太大,,差距太大,會出問題

\mathbb{E}_{x \sim p}[f(x)]=\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]

比如,,雖然上述公式成立,,但如果不是計(jì)算期望值,而是

  • 計(jì)算方差時(shí)\operatorname{Var}_{x \sim p}[f(x)]和 \operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]是不一樣的

因?yàn)閮蓚€(gè)隨機(jī)變量的平均值相同,,并不代表它們的方差相同


此話怎講,?以下是推導(dǎo)過程:

將?????? f(x)f(x) \frac{p(x)}{q(x)}分別代入方差的公式

\operatorname{Var}[X]=E\left[X^{2}\right]-(E[X])^{2}

則分別可得(且考慮到不排除會有比初級更初級的初學(xué)者學(xué)習(xí)本文,,故把第二個(gè)公式拆解的相對較細(xì))

\operatorname{Var}_{x \sim p}[f(x)]=\mathbb{E}_{x \sim p}\left[f(x)^{2}\right]-\left(\mathbb{E}_{x \sim p}[f(x)]\right)^{2}

\begin{aligned} \operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] &=\mathbb{E}_{x \sim q}\left[\left(f(x) \frac{p(x)}{q(x)}\right)^{2}\right]-\left(\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]\right)^{2} \\ &= \int \left(f(x) \frac{p(x)}{q(x)}\right)^{2} q(x) dx - \left(\mathbb{E}_{x \sim p}[f(x)]\right)^{2} \\ &= \int f(x)^{2} \frac{p(x)}{q(x)} p(x)dx - \left(\mathbb{E}_{x \sim p}[f(x)]\right)^{2} \\ &=\mathbb{E}_{x \sim p}\left[f(x)^{2} \frac{p(x)}{q(x)}\right]-\left(\mathbb{E}_{x \sim p}[f(x)]\right)^{2} \end{aligned}

上述兩個(gè)公式前后對比,,可以很明顯的看出

  • 后者的第一項(xiàng)多乘了\frac{p(x)}{q(x)},如果\frac{p(x)}{q(x)}差距很大,,f(x)\frac{p(x)}{q(x)}的方差就會很大

所以結(jié)論就是,,如果我們只要對分布p采樣足夠多次,對分布q采樣足夠多次,,得到的期望值會是一樣的,。但是如果采樣的次數(shù)不夠多,,會因?yàn)樗鼈兊姆讲畈罹嗫赡苁呛艽蟮模跃涂赡艿玫讲顒e非常大的結(jié)果,。

這意味著什么呢,,意味著我們目前得到的這個(gè)公式里

J^{\theta^{\prime}}(\theta)=\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right]

如果 p_{\theta}\left(a_{t} | s_{t}\right)與 p_{\theta相差太多,即這兩個(gè)分布相差太多,,重要性采樣的結(jié)果就會不好,。怎么避免它們相差太多呢?這就是TRPO算法所要解決的,。

2015年John Schulman等人提出了信任區(qū)域策略優(yōu)化(Trust Region Policy Opimization,,簡稱TRPO),表面上,,TRPO的出現(xiàn)同時(shí)解決了兩個(gè)問題,,一個(gè)是解決重要性采樣中兩個(gè)分布差距太大的問題,一個(gè)是解決策略梯度算法中步長難以確定的問題

  • 關(guān)于前者,,在1.2.2節(jié)得到的目標(biāo)函數(shù)基礎(chǔ)上(下圖第一個(gè)公式),,增加了一個(gè)KL散度約束(如下圖第二個(gè)公式)

    J^{\theta^{\prime}}(\theta)=\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right]

    \begin{aligned} J_{\mathrm{TRPO}}^{\theta^{\prime}}(\theta)=\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right],\mathrm{KL}\left(\theta, \theta^{\prime}\right)<\delta \end{aligned}

    至此采樣效率低效的問題通過重要性采樣(重要性權(quán)重)、以及增加KL散度約束解決了

    KL散度(KL divergence),,也稱相對熵,,而相對熵 = 交叉熵 - shannon熵,其衡量的是兩個(gè)數(shù)據(jù)分布pq之間的差異

    D_{KL}(P||Q) = E_x log\frac{P(x)}{Q(x)}

    下圖左半邊是一組原始輸入的概率分布曲線p(x),,與之并列的是重構(gòu)值的概率分布曲線q(x),,下圖右半邊則顯示了兩條曲線之間的差異


    順帶從零推導(dǎo)下KL散度的公式

    1 所謂概率:對于x,可以定義概率分布為p(x)q(x)

    2 所謂信息:對p(x)取對數(shù),,加符號得正值 I(p) = -logp(x),,概率越高,包含的信息越小,,因?yàn)槭录絹碓酱_定,;相反,概率越低,,包含的信息越多,,因?yàn)槭录哂泻艽蟮牟淮_定性

    3 所謂Shannon熵(熵是信息的平均,直觀上,,Shannon熵是信息在同一分布下的平均):p(x)I(p)平均,,即

    \begin{aligned} H(p) &= E_{x\sim P} [I(p)] \\&= \sum p(x)I(p) \\&= - \sum p(x)logp(x) \end{aligned}

    4 所謂交叉熵Cross-Entropy(直觀上,交叉熵是信息在不同分布下的平均),,即指p(x)I(q)平均,,即

    \begin{aligned} H(p,q) &= E_{x\sim P} [I(q)] \\&= \sum p(x)I(q) \\&= - \sum p(x)logq(x) \end{aligned}

    5 所謂相對熵或KL散度 = 交叉熵 - shannon熵,即

    \begin{aligned} D_{KL}(p||q) &= H(p,q) - H(p) \\&= -\sum p(x)logq(x) + \sum p(x)logp(x) \\&= -\sum p(x)log\frac{q(x)}{p(x)} \\&= \sum p(x)log\frac{p(x)}{q(x)} \end{aligned}

    所以如果在KL散度表達(dá)式的最前面加個(gè)負(fù)號,,再結(jié)合Jensen不等式自然有

    \begin{aligned} -D_{KL}(p||q) &= \sum p(x)log\frac{q(x)}{p(x)} \\& \leq log \sum p(x)\frac{q(x)}{p(x)} \\&= log1 \\&= 0 \end{aligned}

  • 關(guān)于后者,,具體而言,,當(dāng)策略網(wǎng)絡(luò)是深度模型時(shí),沿著策略梯度更新參數(shù),,很有可能由于步長太長,,策略突然顯著變差,進(jìn)而影響訓(xùn)練效果

    這是1.2.1節(jié),,我們已經(jīng)得到的策略梯度計(jì)算,、策略梯度更新公式如下(別忘了,,學(xué)習(xí)率 \eta類似步長,、距離的含義)分別如下

    \nabla \bar{R}_{\theta}=\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)

    \theta \leftarrow \theta+\eta \nabla \bar{R}_{\theta}

    對這個(gè)問題,我們考慮在更新時(shí)找到一塊信任區(qū)域(trust region),,在這個(gè)區(qū)域上更新策略時(shí)能夠得到安全性保證,,這就是TRPO算法的主要思想

本質(zhì)上,,其實(shí)這兩個(gè)問題是同一個(gè)問題(簡言之,避免兩個(gè)分布相差大即意味著避免步長過大),。舉個(gè)例子,,比如爬兩面都是懸崖的山,左右腳交替往前邁步,,無論哪只腳向前邁步都是一次探索

  1. 為盡快到達(dá)山頂且不掉下懸崖,,一方面 你會選擇最陡峭的方向,二方面 你會用目光選擇一片信任區(qū)域,,從而盡量遠(yuǎn)離懸崖邊,,在信任區(qū)域中,首先確定要探索的最大步長(下圖的黃色圓圈),,然后找到最佳點(diǎn)并從那里繼續(xù)搜索
  2. 好,,現(xiàn)在問題的關(guān)鍵變成了,怎么確定每一步的步長呢,?如果每一步的步長太小,則需要很長時(shí)間才能到達(dá)峰值,,但如果步長太大,,就會掉下懸崖(像不像兩個(gè)分布之間差距不能太大)
  3. 具體做法是,從初始猜測開始可選地,,然后動態(tài)地調(diào)整區(qū)域大小,。例如,如果新策略和當(dāng)前策略的差異越來越大,,可以縮小信賴區(qū)域,。怎么實(shí)現(xiàn)?KL散度約束!

d7fff6ebbf9a42d3ba9c04e1c924d476.png

總之,,TRPO就是考慮到連續(xù)動作空間無法每一個(gè)動作都搜索一遍,,因此大部分情況下只能靠猜,。如果要猜,就最好在信任域內(nèi)部去猜,。而TRPO將每一次對策略的更新都限制了信任域內(nèi),,從而極大地增強(qiáng)了訓(xùn)練的穩(wěn)定性。

至此,,PG算法的采樣效率低下,、步長難以確定的問題都被我們通過TRPO給解決了。但TRPO的問題在哪呢,?

TRPO的問題在于把 KL 散度約束當(dāng)作一個(gè)額外的約束,,沒有放在目標(biāo)里面,導(dǎo)致TRPO很難計(jì)算,,總之因?yàn)樾湃斡虻挠?jì)算量太大了,,John Schulman等人于2017年又推出了TRPO的改進(jìn)算法:PPO

4.4 近端策略優(yōu)化PPO:解決TRPO的計(jì)算量大的問題

4.4.1 什么是近端策略優(yōu)化PPO與PPO-penalty

如上所述,PPO算法是針對TRPO計(jì)算量的大的問題提出來的,,正因?yàn)镻PO基于TRPO的基礎(chǔ)上改進(jìn),,故PPO也解決了策略梯度不好確定學(xué)習(xí)率Learning rate (或步長Step size) 的問題。畢竟通過上文,,我們已經(jīng)得知

  1. 如果 step size 過大, 學(xué)出來的 Policy 會一直亂動,,不會收斂;但如果 Step Size 太小,,想完成訓(xùn)練,,我們會等到地老天荒
  2. 而PPO 利用 New Policy 和 Old Policy 的比例,限制了 New Policy 的更新幅度,,讓策略梯度對稍微大點(diǎn)的 Step size 不那么敏感

具體做法是,,PPO算法有兩個(gè)主要的變種:近端策略優(yōu)化懲罰(PPO-penalty)和近端策略優(yōu)化裁剪(PPO-clip),其中PPO-penalty和TRPO一樣也用上了KL散度約束,。

近端策略優(yōu)化懲罰PPO-penalty的流程如下

  1. 首先,,明確目標(biāo)函數(shù),通過上節(jié)的內(nèi)容,,可知咱們需要優(yōu)化J^{\theta^{\prime}}(\theta),,讓其最大化

    J^{\theta^{\prime}}(\theta)=\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right]

  2. 接下來,先初始化一個(gè)策略的參數(shù)\theta,,在每一個(gè)迭代里面,,我們用前一個(gè)訓(xùn)練的迭代得到的actor的參數(shù)\theta 與環(huán)境交互,采樣到大量狀態(tài)-動作對,, 根據(jù)\theta 交互的結(jié)果,,估測A^{\theta

  3. 由于目標(biāo)函數(shù)牽涉到重要性采樣,而在做重要性采樣的時(shí)候,p_{\theta}\left(a_{t} | s_{t}\right)不能與p_{\theta相差太多,,所以需要在訓(xùn)練的時(shí)候加個(gè)約束,,這個(gè)約束就好像正則化的項(xiàng)一樣,是 \theta與 \theta輸出動作的 KL散度,,用于衡量 \theta 與 \theta 的相似程度,,我們希望在訓(xùn)練的過程中,學(xué)習(xí)出的 \theta 與 \theta 越相似越好
    所以需要最后使用 PPO 的優(yōu)化公式:\\J_{\mathrm{PPO}}^{\theta^{\prime}}(\theta)=J^{\theta^{\prime}}(\theta)-\beta \mathrm{KL}\left(\theta, \theta^{\prime}\right)


    當(dāng)然,,也可以把上述那兩個(gè)公式合二為一『如此可以更直觀的看出,,PPO-penalty把KL散度約束作為懲罰項(xiàng)放在了目標(biāo)函數(shù)中(可用梯度上升的方法去最大化它),此舉相對TRPO減少了計(jì)算量』

J_{\mathrm{PPO}}^{\theta^{\prime}}(\theta)=\mathbb{E}_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right]-\beta \mathrm{KL}\left(\theta, \theta^{\prime}\right)

上述流程有一個(gè)細(xì)節(jié)并沒有講到,,即\beta是怎么取值的呢,,事實(shí)上,\beta是可以動態(tài)調(diào)整的,,故稱之為自適應(yīng)KL懲罰(adaptive KL penalty),,具體而言

  • 先設(shè)一個(gè)可以接受的 KL 散度的最大值KL_{max}
    假設(shè)優(yōu)化完\\J_{\mathrm{PPO}}^{\theta^{\prime}}(\theta)=J^{\theta^{\prime}}(\theta)-\beta \mathrm{KL}\left(\theta, \theta^{\prime}\right)以后,KL 散度值太大導(dǎo)致\mathrm{KL}(\theta,\theta\mathrm{KL}_{\max}' src='https://latex.csdn.net/eq?%5Cmathrm%7BKL%7D%28%5Ctheta%2C%5Ctheta%27%29%3E%5Cmathrm%7BKL%7D_%7B%5Cmax%7D'>,,意味著 \theta\theta差距過大(即學(xué)習(xí)率/步長過大),,也就代表后面懲罰的項(xiàng)\beta \mathrm{KL}(\theta ,\theta 懲罰效果太弱而沒有發(fā)揮作用,故增大懲罰把\beta增大
  • 再設(shè)一個(gè) KL 散度的最小值KL_{min}
    如果優(yōu)化完\\J_{\mathrm{PPO}}^{\theta^{\prime}}(\theta)=J^{\theta^{\prime}}(\theta)-\beta \mathrm{KL}\left(\theta, \theta^{\prime}\right)以后,,KL散度值比最小值還要小導(dǎo)致\mathrm{KL}(\theta,\theta,,意味著 \theta與 \theta 差距過小,也就代表后面這一項(xiàng)\beta \mathrm{KL}(\theta ,\theta 的懲罰效果太強(qiáng)了,,我們怕它只優(yōu)化后一項(xiàng),,使\theta與 \theta 一樣,這不是我們想要的,,所以減小懲罰即減小\beta

關(guān)于\beta的具體取值,,在2017年發(fā)表的PPO論文是如下闡述的

總之,近端策略優(yōu)化懲罰可表示為

\begin{aligned} &J_{\text{PPO}}^{\theta

4.4.2 PPO算法的另一個(gè)變種:近端策略優(yōu)化裁剪PPO-clip

如果覺得計(jì)算 KL散度很復(fù)雜,,則還有一個(gè) PPO2算法,,即近端策略優(yōu)化裁剪PPO-clip。近端策略優(yōu)化裁剪的目標(biāo)函數(shù)里面沒有 KL 散度,,其要最大化的目標(biāo)函數(shù)為(easy RL上用\theta ^k代替\theta ,,為上下文統(tǒng)一需要,本筆記的文字部分統(tǒng)一用\theta

\begin{aligned} J_{\mathrm{PPO2}}^{\theta

整個(gè)目標(biāo)函數(shù)在min這個(gè)大括號里有兩部分,,最終對比兩部分那部分更小,就取哪部分的值,,這么做的本質(zhì)目標(biāo)就是為了讓p_{\theta }(a_{t}|s_{t})p_{\theta可以盡可能接近,,不致差距太大。

換言之,,這個(gè)裁剪算法和KL散度約束所要做的事情本質(zhì)上是一樣的,,都是為了讓兩個(gè)分布之間的差距不致過大,,但裁剪算法相對好實(shí)現(xiàn),別看看起來復(fù)雜,,其實(shí)代碼很好寫

// ratios即為重要性權(quán)重,,exp代表求期望,括號里的environment_log_probs代表用于與環(huán)境交互的策略
ratios = torch.exp(log_probs - environment_log_probs)

// 分別用sur_1,、sur_2來計(jì)算公式的兩部分
// 第一部分是重要性權(quán)重乘以優(yōu)勢函數(shù)
sur_1 = ratios * advs

// 第二部分是具體的裁剪過程
sur_2 = torch.clamp(ratios, 1 - clip_eps, 1 + clip_eps) * advs

// 最終看誰更小則取誰
clip_loss = -torch.min(sur_1,sur_2).mean()

回到公式,,公式的第一部分我們已經(jīng)見過了,好理解,,咱們來重點(diǎn)分析公式的第二部分

{clip}\left(\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta

  • 首先是clip括號里的部分,,如果用一句話簡要闡述下其核心含義就是:如果p_{\theta }(a_{t}|s_{t})p_{\theta之間的概率比落在范圍(1- \varepsilon)(1+\varepsilon)之外,\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta將被剪裁,,使得其值最小不小于(1- \varepsilon),,最大不大于(1+\varepsilon)

    1798baf5dba54e21a19508e82d407a8a.png

  • 然后是clip括號外乘以A^{\theta ,如果A^{\theta 大于0,,則說明這是好動作,,需要增大p_{\theta }(a_{t}|s_{t}),但\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta最大不能超過(1+\varepsilon),;如果A^{\theta 小于0,,則說明該動作不是好動作,需要減小p_{\theta }(a_{t}|s_{t}),,但\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta最小不能小過(1- \varepsilon)

最后把公式的兩個(gè)部分綜合起來,,針對整個(gè)目標(biāo)函數(shù)

\begin{aligned} J_{\mathrm{PPO2}}^{\theta

  • 如果A^{\theta 大于0且\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta大于(1+\varepsilon)
    則相當(dāng)于第二部分是(1+\varepsilon)\timesA^{\theta ,和第一部分\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta\timesA^{\theta 對比
    取更小值當(dāng)然是(1+\varepsilon)的截?cái)嘀担?nbsp;(1+\varepsilon)\timesA^{\theta  
  • 如果A^{\theta 大于0且\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta小于(1- \varepsilon)
    則相當(dāng)于第二部分是(1- \varepsilon)\timesA^{\theta ,,和第一部分\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta\timesA^{\theta 對比
    取更小值當(dāng)然是原函數(shù)值: \frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta\timesA^{\theta  

反之,,如果A^{\theta 小于0,則最終目標(biāo)函數(shù)的取值為了更小則和A^{\theta 大于0時(shí)反過來,,畢竟加了個(gè)負(fù)號自然一切就不同了,,為方便初學(xué)者一目了然,咱們還是把計(jì)算過程列出來,,即

  • 如果A^{\theta 小于0且\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta大于(1+\varepsilon)
    則相當(dāng)于第二部分是(1+\varepsilon)\timesA^{\theta ,,和第一部分\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta\timesA^{\theta 對比
    取更小值當(dāng)然是原函數(shù)的值: \frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta\timesA^{\theta^{k}}\left(s_{t}, a_{t}\right)  
  • 如果A^{\theta 小于0且\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta小于(1- \varepsilon)
    則相當(dāng)于第二部分是(1- \varepsilon)\timesA^{\theta ,和第一部分\frac{p_{\theta }(a_{t}|s_{t})}{p_{\theta\timesA^{\theta 對比
    取更小值當(dāng)然是(1- \varepsilon)的截?cái)嘀担?img alt='(1- \varepsilon)' src='http://image109.360doc.com/DownloadImg/2025/02/0107/293730146_362_20250201072733387.png'>\timesA^{\theta

4.4.3 PPO算法的一個(gè)簡單實(shí)現(xiàn):對話機(jī)器人

綜上,,PPO算法是一種具體的Actor-Critic算法實(shí)現(xiàn),,比如在對話機(jī)器人中,輸入的prompt是state,,輸出的response是action,,想要得到的策略就是怎么從prompt生成action能夠得到最大的reward,也就是擬合人類的偏好。具體實(shí)現(xiàn)時(shí),,可以按如下兩大步驟實(shí)現(xiàn)

  1. 首先是Make Experience 部分,,利用 SFT 、Actor,、RM,、Critic模型計(jì)算生成 Experience(包括sequence、action_logits,、value,、adv、reward),,存入 buffer 中
    具體做法是定義4個(gè)模型:Actor(action_logits),、SFT(sft_logits)、Critic(value),、RM「r(x, y)」,,和kl_div、reward,、優(yōu)勢函數(shù)adv
    從prompt庫中采樣出來的prompt在經(jīng)過SFT(微調(diào)過GPT3/GPT3.5的模型稱之為SFT)做generate得到一個(gè)response,,這個(gè)『prompt + response』定義為sequence(這個(gè)采樣的過程是批量采樣進(jìn)行g(shù)enerate,得到一個(gè)sequence buffer),,然后這個(gè)sequence buffer的內(nèi)容做batched之后輸入給4個(gè)模型做inference

    這4個(gè)模型分別為Actor,、SFT、Critic,、RM,,其中:
    Actor和SFT都是175B的模型,且Actor參數(shù)由SFT初始化(SFT是baseline),,Actor輸出action_logits,,SFT輸出sft_logits
    sft_logits和action_logits做kl_div,為了約束actor模型的更新step不要偏離原始模型SFT太遠(yuǎn)

    Critic和RM是6B的模型,,Critic參數(shù)由RM初始化
    Critic輸出標(biāo)量value,,RM輸出標(biāo)量r(x, y),由r(x, y)和kl_div計(jì)算得到reward,,reward和value計(jì)算得到adv
  2. 之后是參數(shù)更新部分,,利用 Experience 計(jì)算價(jià)值損失(value loss)?和策略損失(policy loss),即通過pg_loss和value_loss優(yōu)化迭代
    Actor的流程是取出sequence,,然后inference生成新的logits,,再和sequence對應(yīng)的之前的logits計(jì)算ratio,和adv計(jì)算出pg_loss,,也就是actor的loss,,然后反向傳播,,優(yōu)化器迭代
    Critic的流程是取出sequence,然后inference得到新的value,,和old_value做clip_value,再和reward(本質(zhì)是return)計(jì)算value loss,,然后反向傳播,,優(yōu)化器迭代

因篇幅所限,如果對本節(jié)的這個(gè)實(shí)現(xiàn)沒有太明白,,沒事,,不用急,更多細(xì)節(jié)和代碼實(shí)現(xiàn)請參閱此文從零實(shí)現(xiàn)帶RLHF的類ChatGPT:逐行解析微軟DeepSpeed Chat的源碼

后記

1.6日決定只是想寫個(gè)ChatGPT通俗導(dǎo)論,,但為了講清楚其中的PPO算法,,更考慮到之后還會再寫一篇強(qiáng)化學(xué)習(xí)極簡入門,故中途花了大半時(shí)間去從頭徹底搞懂RL,,最終把網(wǎng)上關(guān)于RL的大部分中英文資料都翻遍之外(詳見參考文獻(xiàn)與推薦閱讀),,還專門買了這幾本書以系統(tǒng)學(xué)習(xí)

  • 第1本,《白話強(qiáng)化學(xué)習(xí)與pytorch》,,偏通俗,,對初學(xué)者友好,缺點(diǎn)是部分內(nèi)容混亂,,且對部分前沿/細(xì)節(jié)比如PPO算法闡述不足,,畢竟19年出版的了
  • 第2本,《Eazy RL強(qiáng)化學(xué)習(xí)教程》,,基于臺大李宏毅等人的公開課,,雖有不少小問題且其對MDP和三大表格求解法的闡述比較混亂,但其對策略梯度和PPO的闡述于初學(xué)入門而言還不錯的
  • ?第3本,,《動手學(xué)強(qiáng)化學(xué)習(xí)》,,張偉楠等人著,概念講解,、公式定義都很清晰,,且配套代碼實(shí)現(xiàn),當(dāng)然 如果概念講解能更細(xì)致則會對初學(xué)者更友好
  • 第4本,,《深度強(qiáng)化學(xué)習(xí)》,,王樹森等人著,偏原理講解(無代碼),,此書對于已對RL有一定了解的是不錯的選擇
  • 第5本,,《強(qiáng)化學(xué)習(xí)2》,權(quán)威度最高但通俗性不足,,當(dāng)然 也看人,,沒入門之前你會覺得此書晦澀,,入門之后你會發(fā)現(xiàn)經(jīng)典還是經(jīng)典、不可替代,,另書之外可配套七月的強(qiáng)化學(xué)習(xí)2帶讀課
  • 第6本,,《深度強(qiáng)化學(xué)習(xí):基于Python的理論與實(shí)踐》,理論講的清楚,,代碼實(shí)踐也還可以
  • 第7本,,《強(qiáng)化學(xué)習(xí)(微課版)》,這本書是作為RL教材出版的,,所以有教材的特征,,即對一些關(guān)鍵定理會舉例子展示實(shí)際計(jì)算過程,比如馬爾可夫決策的計(jì)算過程,,對初學(xué)者友好

總之,,RL里面的概念和公式很多(相比ML/DL,RL想要機(jī)器/程序具備更好的自主決策能力),,而

  • 一方面,,?絕大部分的資料沒有站在初學(xué)者的角度去通俗易懂化、沒有把概念形象具體化,、沒有把公式拆解舉例化(如果逐一做到了這三點(diǎn),,何愁文章/書籍/課程不通俗)
  • 二方面,不夠通俗的話,,則資料一多,,每個(gè)人的公式表達(dá)習(xí)慣不一樣便會導(dǎo)致各種形態(tài),雖說它們最終本質(zhì)上都是一樣的,,可當(dāng)初學(xué)者還沒有完全入門之前,,就不一定能一眼看出背后的本質(zhì)了,然后就不知道該以哪個(gè)為準(zhǔn),,從而喪失繼續(xù)前進(jìn)的勇氣(這種情況下,,要么硬著頭皮繼續(xù)啃 可能會走彎路,要么通過比如七月在線的課程問老師或人 提高效率少走彎路)

    比如一個(gè)小小的策略梯度的計(jì)算公式會有近10來種表達(dá),,下面特意貼出其中6種,,供讀者辨別
    第一種,本筆記和Easy RL中用的

    \nabla \bar{R}_{\theta}=\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)

    第二種,,Sutton強(qiáng)化學(xué)習(xí)《Reinforcement Learning: An Introduction》第一版中用的

    \nabla_{\theta}J(\pi_\theta)=\sum_{s}^{}d^\pi (s) \sum_{a}^{}\nabla_{\theta} \pi _\theta (a|s)Q^\pi (s,a)= E_\pi [\gamma^t \nabla_{\theta}log\pi_\theta (A_t|S_t)Q^\pi(S_t,A_t)]

    其中 d\pi(s)= \sum_{t=0}^{\infty } \gamma^t Pr(s_0\rightarrow s,t,\pi )=\sum_{t=0}^{\infty } \gamma^t Pr\left \{ S_t=s|s_0,\pi \right \} 叫做discounted state distribution

    第三種,,David sliver在2014年的《Deterministic Policy Gradient Algorithm》論文中用的

    \nabla_\theta J(\pi _\theta ) = \int_{S}^{}\rho ^\pi (s) \int_{A}^{}\nabla_\theta \pi _\theta(a|s)Q^\pi(s,a) =E_{s\sim\rho ^\pi,a\sim\pi_\theta }[\nabla_\theta log\pi _\theta(a|s)Q^\pi (s,a)]

    其中,\rho ^\pi (s)與上述d\pi(s)相同,,都是discounted state distribution,。

    第四種,肖志清《強(qiáng)化學(xué)習(xí):原理與Python實(shí)現(xiàn)》中用的

    \nabla_\theta J(\pi _\theta )= E[\sum_{t=0}^{\infty } \gamma ^t \nabla_\theta log\pi _\theta (A_t|S_t)Q^\pi (S_t,A_t)]

    第五種,,Sutton強(qiáng)化學(xué)習(xí)在2018年的第二版中用的

    \nabla_\theta J(\pi_\theta)\propto\sum_{S}^{}\mu ^\pi(s)\sum_{a}^{}\nabla_\theta \pi _\theta(a|s)Q^\pi(s,a)= E_\pi [\nabla_\theta log\pi _\theta (A_t|S_t)Q^\pi (S_t,A_t)]

    其中,, \mu ^\pi (s)=\lim_{t\rightarrow\propto}Pr(S_t=s|s_0,\pi _\theta )是stationary distribution (undiscounted state distribution)

    第六種,,Open AI spinning up教程中用的

    \nabla_\theta J(\pi_\theta)= E_{(\tau \sim\pi)} [\sum_{t=0}^{T}\nabla_\theta log\pi _\theta (a_t|s_t)Q^\pi(s_t,a_t)]

參考文獻(xiàn)與推薦閱讀

  1.  關(guān)于強(qiáng)化學(xué)習(xí)入門的一些基本概念
  2.  《白話強(qiáng)化學(xué)習(xí)與Pytorch》,此書讓我1.6日起正式開啟RL之旅,,沒看此書之前,,很多RL資料都不好看懂
  3. 《Eazy RL強(qiáng)化學(xué)習(xí)教程》,基于臺大李宏毅和UCLA周博磊等人的RL公開課所編著,,其GitHub,、其在線閱讀地址
  4. 《動手學(xué)強(qiáng)化學(xué)習(xí)》,張偉楠等人著
  5. 臺大李宏毅RL公開課,,這是其:視頻/PPT/PDF下載地址
  6. UCLA周博磊RL公開課,這是其:GitHub地址
  7.  關(guān)于Q-leaning的幾篇文章:1 如何用簡單例子講解 Q - learning 的具體過程,? 2 莫煩:什么是 Q-Learning
  8. AlphaGo作者之一David Silver主講的增強(qiáng)學(xué)習(xí)筆記1筆記2,,另附其講授的《UCL Course on RL》的課件地址
  9.  huggingface的兩篇RL教程:An Introduction to Deep Reinforcement Learning,、GitHub:The Hugging Face Deep Reinforcement Learning Course

  10. TRPO原始論文:Trust Region Policy Optimization
  11. PPO原始論文Proximal Policy Optimization Algorithms
  12. PPO算法解讀(英文2篇):解讀1 RL — Proximal Policy Optimization (PPO) Explained、解讀2 Proximal Policy Optimization (PPO)
  13. PPO算法解讀(中文4篇):Easy RL上關(guān)于PPO的詳解,、詳解近端策略優(yōu)化,、詳解深度強(qiáng)化學(xué)習(xí) PPO算法ChatGPT第二彈:PPO算法
  14. PPO算法實(shí)現(xiàn):GitHub - lvwerra/trl: Train transformer language models with reinforcement learning.
  15. 如何選擇深度強(qiáng)化學(xué)習(xí)算法,?MuZero/SAC/PPO/TD3/DDPG/DQN/等
  16. 如何通俗理解隱馬爾可夫模型HMM,?
  17. HMM學(xué)習(xí)最佳范例
  18. 強(qiáng)化學(xué)習(xí)中“策略梯度定理”的規(guī)范表達(dá)、推導(dǎo)與討論
  19. 強(qiáng)化學(xué)習(xí)——時(shí)序差分算法
  20. KL-Divergence詳解
  21. 《強(qiáng)化學(xué)習(xí)(微課版)》,,清華大學(xué)出版社出版
  22. 使用蒙特卡洛計(jì)算定積分(附Python代碼)
  23. David Silver 增強(qiáng)學(xué)習(xí)補(bǔ)充——重要性采樣,、強(qiáng)化學(xué)習(xí)中的重要性采樣(Importance Sampling)
  24. 關(guān)于Instruct GPT復(fù)現(xiàn)的一些細(xì)節(jié)與想法
  25. 類ChatGPT逐行代碼解讀(2/2):從零起步實(shí)現(xiàn)ChatLLaMA和ColossalChat

附錄:修改/完善/新增記錄

RL里的細(xì)節(jié)、概念,、公式繁多,,想完全闡述清楚是不容易的,以下是自從23年1.16日以來的修改,、完善,、新增記錄:

  1. 2023年1.16日,第一次修改/完善/新增
    修正幾個(gè)筆誤,,且考慮到不排除會有比初級更初級的初學(xué)者閱讀本文,,補(bǔ)充部分公式的拆解細(xì)節(jié)
  2. 1.17日,先后修正了2.2節(jié)重要性采樣與重要性權(quán)重的部分不準(zhǔn)確的描述,、修正個(gè)別公式的筆誤,,以及補(bǔ)充1.4.2中關(guān)于PPO-clip的細(xì)節(jié)闡述,、優(yōu)化第四部分的相關(guān)描述
  3. 1.18日,為措辭更準(zhǔn)確,,優(yōu)化1.2.5節(jié)“基于信任區(qū)域的TRPO:通過KL散度解決兩個(gè)分布相差大和步長難以確定的問題”的相關(guān)描述
  4. 1.19日,,為讓讀者理解起來更一目了然
    優(yōu)化1.3.1節(jié)中關(guān)于什么是近端策略優(yōu)化PPO的描述
    優(yōu)化1.3.2節(jié)中關(guān)于“近端策略優(yōu)化懲罰PPO-penalty關(guān)于自適應(yīng)KL懲罰(adaptive KL penalty)”的描述
    拆解細(xì)化關(guān)于\nabla \log p_{\theta}(\tau)的推導(dǎo)過程
    補(bǔ)充說明對優(yōu)勢函數(shù)A^{\theta }(s_{t},a_{t}) 的介紹
  5. 1.20日,第五次修改/完善/新增
    通過LaTeX重新編輯部分公式,,以及補(bǔ)充說明1.2.1節(jié)中關(guān)于某一條軌跡\tau發(fā)生概率的定義
  6. 1.21日(大年三十),,新增對蒙/新增特卡洛方法的介紹,以及新增R(\tau)-b中基線b的定義,,且簡化2.1.1節(jié)中關(guān)于強(qiáng)化學(xué)習(xí)過程的描述
  7. 1.22日,,為嚴(yán)謹(jǐn)起見改進(jìn)第二部分中對回報(bào)G、狀態(tài)價(jià)值函數(shù),、動作價(jià)值函數(shù),、馬爾可夫決策、策略評價(jià)函數(shù)的描述,,并糾正個(gè)別公式的筆誤
  8. 1.23日,,梳理1.1節(jié)的整體內(nèi)容結(jié)構(gòu)和順序脈絡(luò),以讓邏輯更清晰,,補(bǔ)充了MDP的整個(gè)來龍去脈(包括且不限于馬爾可夫過程,、馬爾可夫獎勵、馬爾可夫決策以及貝爾曼方程)
  9. 1.25日,,為方便對高數(shù)知識有所遺忘的同學(xué)更順暢的讀懂本文,,新增對導(dǎo)數(shù)、期望的簡單介紹(后匯總至概率統(tǒng)計(jì)極簡入門筆記里),,以及補(bǔ)充對 R(\tau)-b中基線b的定義的介紹
  10. 1.26日,,第十次修改/完善/新增
    優(yōu)化改進(jìn)2.2節(jié)關(guān)于策略梯度的梯度計(jì)算的整個(gè)推導(dǎo)過程,以讓邏輯更清晰
  11. 1.27日,,優(yōu)化關(guān)于增加基線baseline和優(yōu)勢函數(shù)等內(nèi)容的描述
    在后記里補(bǔ)充策略梯度計(jì)算公式的5種其它表達(dá)
    優(yōu)化關(guān)于“近端策略優(yōu)化懲罰PPO-penalty的流程”的描述
  12. 1.28日,,新增對MC和TD方法各自的闡述及兩者的對比,優(yōu)化對KL散度定義的描述,,新增近端策略優(yōu)化裁剪PPO-clip的關(guān)鍵代碼
  13. 1.30日,,新增馬爾可夫決策的貝爾曼方程以及對應(yīng)的計(jì)算圖解,以方便一目了然
    簡單闡述了下GPT2相比GPT的結(jié)構(gòu)變化,,以及完善豐富了下文末的參考文獻(xiàn)與推薦閱讀,,比如增加圖解GPT2、圖解GPT3的參考文獻(xiàn)
  14. 1.31日,,為行文嚴(yán)謹(jǐn),,針對1.1.2節(jié)中關(guān)于馬爾可夫獎勵的部分
    規(guī)范統(tǒng)一個(gè)別公式的大小寫表示
    補(bǔ)充狀態(tài)s下獎勵函數(shù)的定義R(s) = E[R_{t+1}|S_t = s]
    修正回報(bào)公式的筆誤G_t = R_{t+1} + \gamma \cdot R_{t+2}+ \gamma ^2\cdot R_{t+3} + \gamma ^3\cdot R_{t+4}+\cdots
    修正狀態(tài)價(jià)值函數(shù)公式的筆誤
    且為形象起見,新增一個(gè)“吃飯-抽煙/剔牙”的例子以展示利用貝爾曼方程計(jì)算的過程

    此外,,且為通俗細(xì)致,,針對1.1.3節(jié)中關(guān)于馬爾科夫決策的部分
    拆解狀態(tài)價(jià)值函數(shù),、動作價(jià)值函數(shù)的定義公式,拆解關(guān)于狀態(tài)價(jià)值函數(shù)和動作價(jià)值函數(shù)之間聯(lián)系的推導(dǎo)過程
  15. 2.1日,,第十五次修改/完善/新增
    參考sutton RL一書,,補(bǔ)充對獎勵函數(shù)、回報(bào)公式,、軌跡定義的公式表達(dá)規(guī)范的說明
  16. 2.12日,,為更一目了然,新增對狀態(tài)價(jià)值函數(shù)的貝爾曼方程的解釋,,與例子說明
  17. 2.13日,,開始完善動態(tài)規(guī)劃一節(jié)的內(nèi)容,然后發(fā)現(xiàn)之前寫的一篇關(guān)于DP的博客不夠通俗,,故本周得先修訂下那篇舊文,,以通俗理解DP
  18. 2.15日,基于已經(jīng)修訂好的DP舊文,,完善本文對DP算法的闡述
    并修正第一部分里關(guān)于“什么是強(qiáng)化學(xué)習(xí)”的不夠準(zhǔn)確的表述
  19. 2.16日,新增對蒙特卡洛方法和時(shí)序差分法的介紹,,并重點(diǎn)對比DP,、MC、TD三者的區(qū)別與聯(lián)系
    明確全文結(jié)構(gòu),,分為四大部分,,一一對應(yīng):RL基礎(chǔ)、RL進(jìn)階,、RL深入,、RL高級
  20. 2.17日,第二十次修改/完善/新增
    新增第三部分 價(jià)值學(xué)習(xí):從n步Sarsa算法到Q-learning,、DQN,,并修訂部分細(xì)節(jié)
    潤色部分細(xì)節(jié),修訂部分目錄
  21. 2.20日,,新增一節(jié)“RL的分類:基于模型(Value-base/Policy-based)與不基于模型”
  22. 2.21日,,新增KL散度公式的從零推導(dǎo)過程
  23. 2.24日,新增關(guān)于E[G_{t+1}|S_t = s]為何等于E[V(S_{t+1}|S_t = s)]的詳細(xì)推導(dǎo)
  24. 2.26日,,新增關(guān)于\nabla f(x)=f(x)\nabla \log f(x)如何而來的推導(dǎo)
  25. 3.4日,,第二十五次修改/完善/新增
    完善對于“Q學(xué)習(xí)的兩種策略:行為策略和目標(biāo)策略”的描述
  26. 2年4月,糾正本文下面幾個(gè)熱心讀者指出的筆誤,,大家有啥問題 繼續(xù)隨時(shí)反饋,,非常感謝
  27. 4.27,針對一讀者留言所表達(dá)的疑惑,,新增1.2.2節(jié)中關(guān)于「獎勵函數(shù)R(s,a)推導(dǎo)」的說明解釋
    并新增一節(jié)“4.4.3 PPO算法的一個(gè)簡單實(shí)現(xiàn):對話機(jī)器人”
  28. 5.22,,完善對優(yōu)勢演員-評論家算法(Advantage Actor-Criti)的定義
  29. 5.29,,再次補(bǔ)充對優(yōu)勢函數(shù)(Advantage Function)的相關(guān)說明
  30. 7.16,潤色下關(guān)于“貝爾曼方程(bellman equation)的一個(gè)示例”的描述,,以為讓讀者閱讀時(shí)更加一目了然
  31. 2024年2.22日,,由于我司類ChatGPT微調(diào)實(shí)戰(zhàn)課里一學(xué)員的疑問,故對本文最后講價(jià)值損失時(shí),,針對對應(yīng)的圖示做一下補(bǔ)充說明
    即圖示中的reward 本質(zhì)上是個(gè)return
  32. 24年9.17(中秋之日),,第三十二次修訂
    根據(jù)本文讀者的反饋,修正此節(jié)「1.2.2 馬爾可夫決策過程(MDP):馬爾可夫獎勵(MRP) + 智能體動作因素」中,,關(guān)于獎勵函數(shù)的一個(gè)表達(dá)錯誤

    感謝各位朋友對本文的各種謬贊,,也歡迎大伙有任何問題繼續(xù)不吝、隨時(shí)指出,,祝大伙中秋快樂
  33. 2025年1.25,,和中南一教授聯(lián)合培養(yǎng)的具身研究生隊(duì)伍中,有一位在學(xué)習(xí)本文時(shí)提出
    2.1.2 通過動態(tài)規(guī)劃法求解最優(yōu)策略中的這個(gè)公式是不是也應(yīng)該把對r求和放前面

    故修正之

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多