中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

石家莊專業(yè)商城網(wǎng)站制作百度如何優(yōu)化

石家莊專業(yè)商城網(wǎng)站制作,百度如何優(yōu)化,高端網(wǎng)站建設(shè)webbj,服裝定制創(chuàng)業(yè)計劃書深度強(qiáng)化學(xué)習(xí)(DRL) 本文是學(xué)習(xí)筆記,如有侵權(quán),請聯(lián)系刪除。本文在ChatGPT輔助下完成。 參考鏈接 Deep Reinforcement Learning官方鏈接:https://github.com/wangshusen/DRL 源代碼鏈接:https://github.c…

深度強(qiáng)化學(xué)習(xí)(DRL)

本文是學(xué)習(xí)筆記,如有侵權(quán),請聯(lián)系刪除。本文在ChatGPT輔助下完成。

參考鏈接

Deep Reinforcement Learning官方鏈接:https://github.com/wangshusen/DRL

源代碼鏈接:https://github.com/DeepRLChinese/DeepRL-Chinese

B站視頻:【王樹森】深度強(qiáng)化學(xué)習(xí)(DRL)

豆瓣: 深度強(qiáng)化學(xué)習(xí)

文章目錄

  • 深度強(qiáng)化學(xué)習(xí)(DRL)
  • Value-based RL
    • DQN
    • 時間差分(TD)算法
      • 駕車時間預(yù)測的例子
      • TD算法
      • 用TD訓(xùn)練DQN
      • 注意
    • 后記

Value-based RL

DQN

在學(xué)習(xí) DQN之前,首先復(fù)習(xí)一些基礎(chǔ)知識。在一局游戲中,把從起始到結(jié)束的所有獎勵記作:

R 1 , ? , R t , ? , R n . R_{1},\cdots,R_{t},\cdots,R_{n}. R1?,?,Rt?,?,Rn?.

定義折扣率 γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1]。折扣回報的定義是:

U t = R t + γ ? R t + 1 + γ 2 ? R t + 2 + ? + γ n ? t ? R n . U_{t}\:=\:R_{t}+\gamma\cdot R_{t+1}+\gamma^{2}\cdot R_{t+2}+\cdots+\gamma^{n-t}\cdot R_{n}. Ut?=Rt?+γ?Rt+1?+γ2?Rt+2?+?+γn?t?Rn?.

在游戲尚未結(jié)束的 t t t 時刻, U t U_t Ut? 是一個未知的隨機(jī)變量,其隨機(jī)性來自于 t t t 時刻之后的所有狀態(tài)與動作。動作價值函數(shù)的定義是:

Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] , Q_{\pi}(s_{t},a_{t})\:=\:\mathbb{E}\Big[U_{t}\Big|\:S_{t}=s_{t},A_{t}=a_{t}\Big], Qπ?(st?,at?)=E[Ut? ?St?=st?,At?=at?],

公式中的期望消除了 t t t 時刻之后的所有狀態(tài) S t + 1 , ? , S n S_{t+1},\cdots,S_n St+1?,?,Sn? 與所有動作 A t + 1 , ? , A n A_{t+1},\cdots,A_n At+1?,?,An?。

在這里插入圖片描述

最優(yōu)動作價值函數(shù)用最大化消除策略 π : \pi: π:
Q ? ( s t , a t ) = max ? π Q π ( s t , a t ) , ? s t ∈ S , a t ∈ A . Q_{\star}\big(s_{t},a_{t}\big)\:=\:\max_{\pi}\:Q_{\pi}\big(s_{t},a_{t}\big),\quad\forall\:s_{t}\in\mathcal{S},\quad a_{t}\in\mathcal{A}. Q??(st?,at?)=πmax?Qπ?(st?,at?),?st?S,at?A.

可以這樣理解 Q ? : Q_\star : Q??:已知 s t s_t st? a t a_t at?,不論未來采取什么樣的策略 π \pi π,回報 U t U_t Ut?的期望不可能超過 Q ? ° Q_{\star\circ} Q?

在這里插入圖片描述

最優(yōu)動作價值函數(shù)的用途:假如我們知道 Q ? Q_\star Q??,我們就能用它做控制。舉個例子,超級瑪麗游戲中的動作空間是 A = { 左,右,上 } A= \{ 左,右,上\} A={左,右,上}。給定當(dāng)前狀態(tài) s t s_t st?,智能體該執(zhí)行哪個動作呢?假設(shè)我們已知 Q ? Q_{\star} Q??函數(shù),那么我們就讓 Q ? Q_{\star} Q??給三個動作打分,比如:

Q ? ( s t , 左 ) = 370 , Q ? ( s t , 右 ) = ? 21 , Q ? ( s t , 上 ) = 610. Q_{\star}(s_{t},\textit{左})\:=\:370,\quad Q_{\star}(s_{t},\textit{右})\:=\:-21,\quad Q_{\star}(s_{t},\text{上})\:=\:610. Q??(st?,)=370,Q??(st?,)=?21,Q??(st?,)=610.

這三個值是什么意思呢? Q ? ( s t , 左 ) = 370 Q_\star ( s_t, 左) = 370 Q??(st?,)=370 的意思是:如果現(xiàn)在智能體選擇向左走,不論之后采取什么策略 π, 那么回報 U t U_t Ut? 的期望最多不會超過 370。同理,其他兩個最優(yōu)動作價值也是回報的期望的上界。根據(jù) Q ? Q_{\star} Q??的評分,智能體應(yīng)該選擇向上跳,因為這樣可以最大化回報 U t U_t Ut? 的期望。

我們希望知道 Q ? Q_{\star} Q??,因為它就像是先知一般,可以預(yù)見未來,在 t t t 時刻就預(yù)見 t t t n n n 時刻之間的累計獎勵的期望。假如我們有 Q ? Q_{\star} Q??這位先知,我們就遵照先知的指導(dǎo),最大化未來的累計獎勵。然而在實踐中我們不知道 Q ? Q_{\star} Q??的函數(shù)表達(dá)式。是否有可能近似出 Q ? Q_{\star} Q??這位先知呢?對于超級瑪麗這樣的游戲,學(xué)出來一個“先知”并不難。假如讓我們重復(fù)玩超級瑪麗一億次,那我們就會像先知一樣,看到當(dāng)前狀態(tài),就能準(zhǔn)確判斷出當(dāng)前最優(yōu)的動作是什么。這說明只要有足夠多的“經(jīng)驗”,就能訓(xùn)練出超級瑪麗中的“先知”。

在這里插入圖片描述

最優(yōu)動作價值函數(shù)的近似:在實踐中,近似學(xué)習(xí)“先知” Q ? Q_{\star} Q?? 最有效的辦法是深度 Q網(wǎng)絡(luò)(deep Q network, 縮寫 DQN), 記作 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w), 其結(jié)構(gòu)如圖 4.1 所述。其中的 w w w 表示神經(jīng)網(wǎng)絡(luò)中的參數(shù)。首先隨機(jī)初始化 w w w,隨后用“經(jīng)驗”去學(xué)習(xí) w w w。學(xué)習(xí)的目標(biāo)是:對于所有的 s s s a a a, DQN 的預(yù)測 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w)盡量接近 Q ? ( s , a ) Q_\star(s,a) Q??(s,a)。后面幾節(jié)的內(nèi)容都是如何學(xué)習(xí) w w w

在這里插入圖片描述

可以這樣理解 DQN 的表達(dá)式 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w)。DQN 的輸出是離散動作空間 A A A 上的每個動作的 Q 值,即給每個動作的評分,分?jǐn)?shù)越高意味著動作越好。舉個例子,動作空間是 A = { 左,右,上 } \mathcal{A} = \{ 左,右,上\} A={左,右,上},那么動作空間的大小等于 ∣ A ∣ = 3 |\mathcal{A}|=3 A=3,那么 DQN 的輸出是 3 維的向量, 記作 q ^ \widehat{q} q ?, 向量每個元素對應(yīng)一個動作。在圖4.1 中,DQN 的輸出是

q ^ 1 = Q ( s , 左 ; w ) = 370 , q ^ 2 = Q ( s , 右 ; w ) = ? 21 , q ^ 3 = Q ( s , 上 ; w ) = 610. \begin{aligned}&\widehat q_1\:=\:Q\big(s,\:\text{左};\:\boldsymbol w\big)\:=\:370,\\[1ex]&\widehat q_2\:=\:Q\big(s,\:\text{右};\:\boldsymbol w\big)\:=\:-21,\\[1ex]&\widehat q_3\:=\:Q\big(s,\:\text{上};\:\boldsymbol w\big)\:=\:610.\end{aligned} ?q ?1?=Q(s,;w)=370,q ?2?=Q(s,;w)=?21,q ?3?=Q(s,;w)=610.?

總結(jié)一下,DQN 的輸出是 |A| 維的向量 q ^ \widehat{q} q ?, 包含所有動作的價值。而我們常用的符號 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w) 是標(biāo)量,是動作 a a a 對應(yīng)的動作價值,是向量 q ^ \hat{q} q^? 中的一個元素。

用DQN玩游戲:agent每次采取的action是使得Q函數(shù)取最大的那個動作,一直玩下去。下圖的順序是從左往右看。

在這里插入圖片描述

DQN 的梯度:在訓(xùn)練 DQN 的時候,需要對 DQN 關(guān)于神經(jīng)網(wǎng)絡(luò)參數(shù) w w w 求梯度。用

? w Q ( s , a ; w ) ? ? Q ( s , a ; w ) ? w \nabla_{\boldsymbol{w}}Q(s,a;\boldsymbol{w})\:\triangleq\:\frac{\partial\:Q(s,a;\boldsymbol{w})}{\partial\boldsymbol{w}} ?w?Q(s,a;w)??w?Q(s,a;w)?

表示函數(shù)值 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w) 關(guān)于參數(shù) w w w 的梯度。因為函數(shù)值 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w) 是一個實數(shù),所以梯度的形狀與 w w w 完全相同。如果 w w w d × 1 d\times1 d×1 的向量,那么梯度也是 d × 1 d\times1 d×1 的向量。如果 w w w d 1 × d 2 d_1\times d_2 d1?×d2?的矩陣,那么梯度也是 d 1 × d 2 d_1\times d_2 d1?×d2?的矩陣。如果 w w w d 1 × d 2 × d 3 d_1\times d_2\times d_3 d1?×d2?×d3?的張量,那么梯度也是 d 1 × d 2 × d 3 d_1\times d_2\times d_3 d1?×d2?×d3? 的張量。

給定觀測值 s s s a a a,比如 a = 左 a=\text{左} a=,可以用反向傳播計算出梯度 ? w Q ( s , 左 ; w ) \nabla_{\boldsymbol{w}}Q( s, 左; \boldsymbol{w}) ?w?Q(s,;w)。在編程實現(xiàn)的時候,TensorFlow 和PyTorch 可以對 DQN 輸出向量的一個元素(比如 Q ( s , 左 ; w ) Q( s, 左; \boldsymbol w) Q(s,;w) 這個元素) 關(guān)于變量 w w w 自動求梯度,得到的梯度的形狀與 w w w 完全相同。

時間差分(TD)算法

駕車時間預(yù)測的例子

假設(shè)我們有一個模型 Q ( s , d ; w ) Q(s,d;w) Q(s,d;w),其中 s s s 是起點, d d d 是終點, w w w 是參數(shù)。模型 Q Q Q 可以預(yù)測開車出行的時間開銷。這個模型一開始不準(zhǔn)確,甚至是純隨機(jī)的。但是隨著很多人用這個模型,得到更多數(shù)據(jù)、更多訓(xùn)練,這個模型就會越來越準(zhǔn),會像谷歌地圖一樣準(zhǔn)。
我們該如何訓(xùn)練這個模型呢?在用戶出發(fā)前,用戶告訴模型起點 s s s 和終點 d d d, 模型做一個預(yù)測 q ^ = Q ( s , d ; w ) \widehat{q}=Q(s,d;w) q ?=Q(s,d;w)。當(dāng)用戶結(jié)束行程的時候,把實際駕車時間 y y y 反饋給模型。兩者之差 q ^ ? y \widehat{q}-y q ??y 反映出模型是高估還是低估了駕駛時間,以此來修正模型,使得模型的估計更準(zhǔn)確。

假設(shè)我是個用戶,我要從北京駕車去上海。從北京出發(fā)之前,我讓模型做預(yù)測,模型告訴我總車程是 14 小時:

q ^ ? Q ( “北京”,“上?!? w ) = 14. \widehat q\:\triangleq\:Q{({\text{“北京”,“上?!?}\boldsymbol{w})}\:=\:14.} q ??Q(北京”,“上海”;w)=14.

當(dāng)我到達(dá)上海,我知道自己花的實際時間是16 小時,并將結(jié)果反饋給模型;見圖 4.2.

在這里插入圖片描述

可以用梯度下降對模型做一次更新,具體做法如下。把我的這次旅程作為一組訓(xùn)練數(shù)據(jù):

s = “北京” , d = “上?!?, q ^ = 14 , y = 16. s=\text{“北京”},\quad d=\text{“上?!眪,\quad\widehat{q}=14,\quad y=16. s=北京,d=上海,q ?=14,y=16.

我們希望估計值 q ^ = Q ( s , d ; w ) \widehat{q}=Q(s,d;\boldsymbol{w}) q ?=Q(s,d;w)盡量接近真實觀測到的 y y y,所以用兩者差的平方作為損失函數(shù):

L ( w ) = 1 2 [ Q ( s , d ; w ) ? y ] 2 . L(\boldsymbol{w})\:=\:\frac{1}{2}\Big[Q(s,d;\boldsymbol{w})\:-\:y\Big]^{2}. L(w)=21?[Q(s,d;w)?y]2.

用鏈?zhǔn)椒▌t計算損失函數(shù)的梯度,得到:

? w L ( w ) = ( q ^ ? y ) ? ? w Q ( s , d ; w ) , \nabla_{\boldsymbol{w}}L(\boldsymbol{w})\:=\:(\widehat{q}-y)\cdot\nabla_{\boldsymbol{w}}Q(s,d;\boldsymbol{w}), ?w?L(w)=(q ??y)??w?Q(s,d;w),

然后做一次梯度下降更新模型參數(shù) w w w:

w ← w ? α ? ? w L ( w ) , w\:\leftarrow\:w-\alpha\cdot\nabla_{\boldsymbol{w}}L(\boldsymbol{w})\:, ww?α??w?L(w),

此處的 α \alpha α 是學(xué)習(xí)率,需要手動調(diào)整。在完成一次梯度下降之后,如果再讓模型做一次預(yù)測,那么模型的預(yù)測值

Q ( “北京”,“上?!?? w ) Q(\text{“北京”,“上?!? }w) Q(北京”,“上海”;?w)

會比原先更接近 y = 16. y=16. y=16.

TD算法

接著上文駕車時間的例子。出發(fā)前模型估計全程時間為 q ^ = 14 \widehat{q}=14 q ?=14 小時;模型建議的路線會途徑濟(jì)南。我從北京出發(fā),過了 r = 4.5 r=4.5 r=4.5 小時,我到達(dá)濟(jì)南。此時我再讓橫型做一次預(yù)測,模型告訴我

q ^ ′ ? Q ( “濟(jì)南”,“上?!?? w ) = 11. \widehat{q}^{\prime}\:\triangleq\:Q{({\text{“濟(jì)南”,“上?!? }\boldsymbol{w}}})\:=\:11. q ??Q(濟(jì)南”,“上海”;?w)=11.

見圖 4.3 的描述。假如此時我的車壞了,必須要在濟(jì)南修理,我不得不取消此次行程。我沒有完成旅途,那么我的這組數(shù)據(jù)是否能幫助訓(xùn)練模型呢?其實是可以的,用到的算法叫做時間差分 (temporal difference, 縮寫 TD)。

在這里插入圖片描述

下面解釋 TD 算法的原理?;仡櫼幌挛覀円延械臄?shù)據(jù):模型估計從北京到上海一共需要 q ^ = 14 \widehat{q}=14 q ?=14 小時,我實際用了 r = 4.5 r=4.5 r=4.5 小時到達(dá)濟(jì)南,模型估計還需要 q ~ ′ = 11 \widetilde{q}^{\prime}=11 q ?=11 小時從濟(jì)南到上海。到達(dá)濟(jì)南時,根據(jù)模型最新估計,整個旅程的總時間為:

y ^ ? r + q ^ ′ = 4.5 + 11 = 15.5. \widehat{y}\:\triangleq\:r+\widehat{q}^{\prime}\:=\:4.5+11\:=\:15.5. y ??r+q ?=4.5+11=15.5.

TD 算法將 y ^ = 15.5 \widehat{y}=15.5 y ?=15.5 稱為 TD 目標(biāo) (TD target) , 它比最初的預(yù)測 q ^ = 14 \widehat{q}=14 q ?=14 更可靠。最初的預(yù)測 q ^ = 14 \widehat{q}=14 q ?=14 純粹是估計的,沒有任何事實的成分。TD 目標(biāo) y ^ = 15.5 \widehat{y}=15.5 y ?=15.5 也是個估計,但其中有事實的成分:其中的 r = 4.5 r=4.5 r=4.5 就是實際的觀測。

基于以上討論,我們認(rèn)為 TD 目標(biāo) y ^ = 15.5 \widehat{y}=15.5 y ?=15.5 比模型最初的估計值

q ^ = Q ( “北京”,“上海”; w ) = 14 \widehat{q}\:=\:Q(\text{“北京”,“上?!?}\:\boldsymbol{w})\:=\:14 q ?=Q(北京”,“上海”;w)=14

更可靠,所以可以用 y ^ \hat{y} y^?對模型做“修正”。我們希望估計值 q ^ \widehat{q} q ?盡量接近 TD 目標(biāo) y ^ \widehat{y} y ?,所以用兩者差的平方作為損失函數(shù):

L ( w ) = 1 2 [ Q ( “北京”,“上?!?? w ) ? y ^ ] 2 . \begin{array}{rcl}L(\boldsymbol{w})&=&\frac{1}{2}\Big[Q(\text{“北京”,“上?!? }\boldsymbol{w})-\widehat{y}\Big]^2.\end{array} L(w)?=?21?[Q(北京”,“上海”;?w)?y ?]2.?
此處把 y ^ \widehat{y} y ?看做常數(shù),盡管它依賴于 w w w。計算損失函數(shù)的梯度:

? w L ( w ) = ( q ^ ? y ^ ) ? 記作? δ ? ? w Q ( “北京”,“上?!?? w ) , \begin{array}{rcl}\nabla_{w}L(\boldsymbol{w})&=&\underbrace{(\widehat{q}-\widehat{y})}_{\text{記作 }\delta}\cdot\nabla_{\boldsymbol{w}}Q(\text{“北京”,“上海”; }\boldsymbol{w}),\\\end{array} ?w?L(w)?=?記作?δ (q ??y ?)????w?Q(北京”,“上海”;?w),?

此處的 δ = q ^ ? y ^ = 14 ? 15.5 = ? 1.5 \delta=\widehat{q}-\widehat{y}=14-15.5=-1.5 δ=q ??y ?=14?15.5=?1.5 稱作 TD 誤差 (TD error)。做一次梯度下降更新模型參數(shù) w : w: w:

w ← w ? α ? δ ? ? w Q ( “北京”,“上海” ; w ) . \boldsymbol{w}\:\leftarrow\:\boldsymbol{w}\:-\:\boldsymbol{\alpha}\:\cdot\:\boldsymbol{\delta}\:\cdot\:\nabla_{\boldsymbol{w}}\:Q(\text{“北京”,“上?!眪;\boldsymbol{w}). ww?α?δ??w?Q(北京”,“上海;w).

如果你仍然不理解 TD 算法,那么請換個角度來思考問題。模型估計從北京到上海全程需要 q ^ = 14 \widehat{q}=14 q ?=14 小時,模型還估計從濟(jì)南到上海需要 q ? ′ = 11 \vec{q}^{\prime}=11 q ?=11 小時。這就相當(dāng)于模型做了這樣的估計:從北京到濟(jì)南需要的時間為

q ^ ? q ^ ′ = 14 ? 11 = 3. \widehat q-\widehat q^{\prime}\:=\:14-11\:=\:3. q ??q ?=14?11=3.

而我真實花費 r = 4.5 r=4.5 r=4.5 小時從北京到濟(jì)南。模型的估計與我的真實觀測之差為

δ = 3 ? 4.5 = ? 1.5. \delta\:=\:3-4.5\:=\:-1.5. δ=3?4.5=?1.5.

這就是 TD 誤差!以上分析說明 TD 誤差 δ \delta δ 就是模型估計與真實觀測之差。TD 算法的目的是通過更新參數(shù) w w w 使得損失 L ( w ) = 1 2 δ 2 L(w)=\frac12\delta^2 L(w)=21?δ2 減小。

ChatGPT:

TD誤差衡量了當(dāng)前時刻估算的值函數(shù)與下一時刻的估算值函數(shù)的差異,即當(dāng)前估算值和通過時間差分學(xué)習(xí)所得到的預(yù)期未來值之間的差距。這個差距被用來更新值函數(shù)的參數(shù),以使估算更為準(zhǔn)確。

用TD訓(xùn)練DQN

TD算法是一種在線學(xué)習(xí)算法,可以逐步更新值函數(shù),而不需要等到回合結(jié)束。

視頻中用到的例子是從紐約到亞特蘭大,途徑華盛頓,但是道理都是一樣的。

在這里插入圖片描述

如何把TD算法用到DQN?和駕車的例子很像,等式左邊是t時刻的Q的估計,等式右邊是一個實際觀測值加一項關(guān)于t+1時刻的Q估計。

在這里插入圖片描述

等式 U t = R t + γ ? U t + 1 U_t\:=\:R_t+\gamma\cdot U_{t+1}\: Ut?=Rt?+γ?Ut+1?

這個等式反映了相鄰兩個折扣回報之間的關(guān)系:t時刻的折扣回報 U t U_t Ut?等于t時刻的獎勵 R t R_t Rt? 加上折扣因子 γ \gamma γ乘以t+1時刻的折扣回報 U t + 1 U_{t+1} Ut+1?。

得來的過程如下:

在這里插入圖片描述

Q ( s t , a t ; w ) ≈ E [ R t + γ ? Q ( S t + 1 , A t + 1 ; w ) ] . Q(s_t,{a_t};\mathbf{w})\approx\mathbb{E}[\mathbb{R}_t+{\gamma}\cdot Q(\mathbb{S}_{t+1},{A_{t+1}};\mathbf{w})]. Q(st?,at?;w)E[Rt?+γ?Q(St+1?,At+1?;w)].這個公式兩邊是兩個估計(estimate)

在這里插入圖片描述

左邊是prediction,右邊是TD target。

在這里插入圖片描述

使用TD算法訓(xùn)練DQN的過程如下圖:下圖中的t+1時刻的Q為什么可以寫成max的形式?是因為t+1時刻的action a t + 1 a_{t+1} at+1?就是選擇t時刻使得Q最大的那個action。

在這里插入圖片描述

下面是王樹森書中具體的推導(dǎo)過程:

下面我們推導(dǎo)訓(xùn)練 DQN 的 TD 算法(嚴(yán)格地講,此處推導(dǎo)的是“Q 學(xué)習(xí)算法”,它屬于 TD 算法的一種。本節(jié)就稱其為 TD 算法)。回憶一下回報的定義 : U t = ∑ k = t n γ k ? t ? R k :U_t=\sum_{k=t}^n\gamma^{k-t}\cdot R_k :Ut?=k=tn?γk?t?Rk?, U t + 1 = ∑ k = t + 1 n γ k ? t ? 1 ? R k U_{t+1}=\sum_{k=t+1}^{n}\gamma^{k-t-1}\cdot R_{k} Ut+1?=k=t+1n?γk?t?1?Rk?。由 U ι U_{\iota} Uι? U t + 1 U_{t+1} Ut+1? 的定義可得:
U t = R t + γ ? ∑ k = t + 1 n γ k ? t ? 1 ? R k ? = U t + 1 . ( 4.1 ) U_t\:=\:R_t+\gamma\cdot\underbrace{\sum_{k=t+1}^n\gamma^{k-t-1}\cdot R_k}_{=U_{t+1}}\:.\quad{(4.1)} Ut?=Rt?+γ?=Ut+1? k=t+1n?γk?t?1?Rk???.(4.1)

回憶一下,最優(yōu)動作價值函數(shù)可以寫成

Q ? ( s t , a t ) = max ? π E [ U t ∣ S t = s t , A t = a t ] . ( 4.2 ) Q_{\star}\big(s_{t},a_{t}\big)\:=\:\operatorname*{max}_{\pi}\:\mathbb{E}\Big[U_{t}\big|\:S_{t}=s_{t},A_{t}=a_{t}\Big]. \quad{(4.2)} Q??(st?,at?)=πmax?E[Ut? ?St?=st?,At?=at?].(4.2)
從公式 (4.1)和 (4.2)出發(fā),經(jīng)過一系列數(shù)學(xué)推導(dǎo) , 可以得到下面的定理。這個定理是最優(yōu)貝爾曼方程 (optimal Bellman equations) 的一種形式。

在這里插入圖片描述

最優(yōu)貝爾曼方程具體公式如下:

Q ? ( s t , a t ) ? U t 的期望 = E S t + 1 ~ p ( ? ∣ s t , a t ) [ R t + γ ? max ? A ∈ A Q ? ( S t + 1 , A ) ? U t + 1 的期望 ∣ S t = s t , A t = a t ] . \underbrace{Q_{\star}(s_{t},a_{t})}_{U_{t}\text{的期望}} = \mathbb{E}_{S_{t+1}\sim p(\cdot|s_{t},a_{t})}\Big[R_{t}+\gamma\cdot\underbrace{\max_{A\in\mathcal{A}}Q_{\star}\big(S_{t+1},A\big)}_{U_{t+1}\text{的期望}} \big | S _ { t }=s_{t},A_{t}=a_{t}\Big]. Ut?的期望 Q??(st?,at?)??=ESt+1?p(?st?,at?)?[Rt?+γ?Ut+1?的期望 AAmax?Q??(St+1?,A)?? ?St?=st?,At?=at?].

貝爾曼方程的右邊是個期望,我們可以對期望做蒙特卡洛近似。當(dāng)智能體執(zhí)行動作 a t a_t at? 之后,環(huán)境通過狀態(tài)轉(zhuǎn)移函數(shù) p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1?st?,at?) 計算出新狀態(tài) s t + 1 s_{t+1} st+1?。獎勵 R t R_t Rt? 最多只依賴于 S t S_t St?、 A t A_t At?、 S t + 1 S_{t+1} St+1?。那么當(dāng)我們觀測到 s t s_t st? a t a_t at?、 s t + 1 s_{t+1} st+1? 時,則獎勵 R t R_t Rt? 也被觀測到,記作 r t r_t rt?。有了四元組

( s t , a t , r t , s t + 1 ) , \begin{pmatrix}s_t,\:a_t,\:r_t,\:s_{t+1}\end{pmatrix}, (st?,at?,rt?,st+1??),

我們可以計算出

r t + γ ? max ? a ∈ A Q ? ( s t + 1 , a ) . r_{t}+\gamma\cdot\max_{a\in\mathcal{A}}Q_{\star}\big(s_{t+1},a\big). rt?+γ?aAmax?Q??(st+1?,a).

它可以看做是下面這項期望的蒙特卡洛近似:

E S t + 1 ~ p ( ? ∣ s t , a t ) [ R t + γ ? max ? A ∈ A Q ? ( S t + 1 , A ) ∣ S t = s t , A t = a t ] . \mathbb{E}_{S_{t+1}\sim p(\cdot|s_{t},a_{t})}\Big[\left.R_{t}\:+\:\gamma\cdot\max_{A\in\mathcal{A}}Q_{\star}(S_{t+1},A)\:\Big|\:S_{t}=s_{t},A_{t}=a_{t}\:\Big].\right. ESt+1?p(?st?,at?)?[Rt?+γ?AAmax?Q??(St+1?,A) ?St?=st?,At?=at?].

由定理 4.1 和上述的蒙特卡洛近似可得:

Q ? ( s t , a t ) ≈ r t + γ ? max ? a ∈ A Q ? ( s t + 1 , a ) . ( 4.3 ) Q_{\star}\big(s_{t},a_{t}\big)\:\approx\:r_{t}+\gamma\cdot\operatorname*{max}_{a\in\mathcal{A}}Q_{\star}\big(s_{t+1},a\big). \quad{(4.3)} Q??(st?,at?)rt?+γ?aAmax?Q??(st+1?,a).(4.3)

這是不是很像駕駛時間預(yù)測問題?左邊的 Q ? ( s t , a t ) Q_\star(s_t,a_t) Q??(st?,at?) 就像是模型預(yù)測“北京到上?!钡目倳r間, r t r_t rt? 像是實際觀測的“北京到濟(jì)南”的時間, γ ? max ? a ∈ A Q ? ( s t + 1 , a ) \gamma\cdot\max_{a\in\mathcal{A}}Q_\star(s_{t+1},a) γ?maxaA?Q??(st+1?,a) 相當(dāng)于模型預(yù)測剩余路程“濟(jì)南到上?!钡臅r間。見圖 4.4 中的類比。

在這里插入圖片描述

把公式 (4.3) 中的最優(yōu)動作價值函數(shù) Q ? ( s , a ) Q_\star(s,a) Q??(s,a) 替換成神經(jīng)網(wǎng)絡(luò) Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w), 得到:

Q ( s t , a t ; w ) ? 預(yù)測? q ^ t ≈ r t + γ ? max ? a ∈ A Q ( s t + 1 , a ; w ) ? TD?目標(biāo)? y t ^ \underbrace{Q\left(s_t,a_t;\boldsymbol{w}\right)}_{\text{預(yù)測 }\widehat{q}_t}\:\approx\:\underbrace{r_t+\gamma\cdot\max_{a\in\mathcal{A}}Q\left(s_{t+1},a;\:\boldsymbol{w}\right)}_{\text{TD 目標(biāo) }\widehat{y_t}} 預(yù)測?q ?t? Q(st?,at?;w)??TD?目標(biāo)?yt? ? rt?+γ?aAmax?Q(st+1?,a;w)??

左邊的 q ^ t ? Q ( s t , a t ; w ) \widehat{q}_t\triangleq Q(s_t,a_t;w) q ?t??Q(st?,at?;w)是神經(jīng)網(wǎng)絡(luò)在 t t t 時刻做出的預(yù)測,其中沒有任何事實成分。右邊的 TD 目標(biāo) y ^ t \widehat{y}_t y ?t? 是神經(jīng)網(wǎng)絡(luò)在 t + 1 t+1 t+1 時刻做出的預(yù)測,它部分基于真實觀測到的獎勵 r t r_t rt?。 q ^ t \widehat{q}_t q ?t? y ^ t \widehat{y}_t y ?t? 兩者都是對最優(yōu)動作價值 Q ? ( s t , a t ) Q_\star(s_t,a_t) Q??(st?,at?) 的估計,但是 y ^ t \widehat{y}_t y ?t? 部分基于事實,因此比 q ^ t \widehat{q}_t q ?t? 更可信。應(yīng)當(dāng)鼓勵 q ^ t ? Q ( s t , a t ; w ) \widehat{q}_t\triangleq Q(s_t,a_t;\boldsymbol{w}) q ?t??Q(st?,at?;w)接近 y ^ t \hat{y}_t y^?t?。定義損失函數(shù):

L ( w ) = 1 2 [ Q ( s t , a t ; w ) ? y ^ t ] 2 . L(\boldsymbol{w})\:=\:\frac{1}{2}\Big[Q(s_{t},a_{t};\:\boldsymbol{w})\:-\:\widehat{y}_{t}\Big]^{2}. L(w)=21?[Q(st?,at?;w)?y ?t?]2.

假裝 y ^ \widehat{y} y ? 是常數(shù)3(實際上 y ^ t \widehat{y}_t y ?t? 依賴于 w w w, 但是我們假裝 y ^ \widehat{y} y ? 是常數(shù)),計算 L L L 關(guān)于 w w w 的梯度:

? w L ( w ) = ( q ^ t ? y ^ t ) ? TD?誤差 δ t ? ? w Q ( s t , a t ; w ) . \begin{array}{rcl}\nabla_{\boldsymbol{w}}L(\boldsymbol{w})&=&\underbrace{\left(\widehat{q}_{t}-\widehat{y}_{t}\right)}_{\text{TD 誤差}\:\delta_{t}}\:\cdot\:\nabla_{\boldsymbol{w}}\:Q\big(s_{t},a_{t};\:\boldsymbol{w}\big).\end{array} ?w?L(w)?=?TD?誤差δt? (q ?t??y ?t?)????w?Q(st?,at?;w).?

做一步梯度下降,可以讓 q ^ t \widehat{q}_t q ?t? 更接近 y ^ t : \widehat{y}_t: y ?t?:

w ← w ? α ? δ t ? ? w Q ( s t , a t ; w ) . \boldsymbol{w}\leftarrow\boldsymbol{w}-\alpha\cdot\delta_{t}\cdot\nabla_{\boldsymbol{w}}Q\big(s_{t},a_{t};\boldsymbol{w}\big). ww?α?δt???w?Q(st?,at?;w).

這個公式就是訓(xùn)練 DQN 的 TD 算法。

總結(jié)一下:最優(yōu)行動價值函數(shù)是未知的,DQN算法就是用神經(jīng)網(wǎng)絡(luò)近似這個最優(yōu)行動價值函數(shù)。

在這里插入圖片描述

TD算法具體流程如下:

在這里插入圖片描述

書中介紹的訓(xùn)練流程

首先總結(jié)上面的結(jié)論。給定一個四元組 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st?,at?,rt?,st+1?), 我們可以計算出 DQN 的預(yù)測值

q ^ t = Q ( s t , a t ; w ) , \widehat q_{t}\:=\:Q(s_{t},a_{t};\:\boldsymbol w), q ?t?=Q(st?,at?;w),
以及 TD 目標(biāo)和 TD 誤差:

y ^ t = r t + γ ? max ? a ∈ A Q ( s t + 1 , a ; w ) 和 δ t = q ^ t ? y ^ t . \widehat{y}_{t}\:=\:r_{t}+\gamma\cdot\operatorname*{max}_{a\in\mathcal{A}}Q\big(s_{t+1},a;\:\boldsymbol{w}\big)\quad\text{和}\quad\delta_{t}\:=\:\widehat{q}_{t}-\widehat{y}_{t}. y ?t?=rt?+γ?aAmax?Q(st+1?,a;w)δt?=q ?t??y ?t?.

TD 算法用這個公式更新 DQN 的參數(shù):

w ← w ? α ? δ t ? ? w Q ( s t , a t ; w ) . \boldsymbol{w}\:\leftarrow\:\boldsymbol{w}-\alpha\cdot\delta_{t}\cdot\nabla_{\boldsymbol{w}}\:Q\big(s_{t},a_{t};\:\boldsymbol{w}\big). ww?α?δt???w?Q(st?,at?;w).

注意,算法所需數(shù)據(jù)為四元組 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st?,at?,rt?,st+1?), 與控制智能體運動的策略 π 無關(guān)。這就意味著可以用任何策略控制智能體與環(huán)境交互,同時記錄下算法運動軌跡,作為訓(xùn)練數(shù)據(jù)。因此,DQN 的訓(xùn)練可以分割成兩個獨立的部分:收集訓(xùn)練數(shù)據(jù)、更新參數(shù) w w w 。

收集訓(xùn)練數(shù)據(jù)

我們可以用任何策略函數(shù) π \pi π 去控制智能體與環(huán)境交互,這個 π 就叫做行為策略 (behavior policy)。比較常用的是 ? \epsilon ?-greedy 策略:
a t = { argmax ? a Q ( s t , a ; w ) , 以概率? ( 1 ? ? ) ; 均勻抽取? A 中的一個動作 , 以概率? ? . \left.a_t\:=\:\left\{\begin{array}{ll}\operatorname{argmax}_aQ(s_t,a;\boldsymbol{w}),&\text{以概率 }(1-\epsilon);\\\text{均勻抽取 }\mathcal{A}\text{ 中的一個動作},&\text{以概率 }\epsilon.\end{array}\right.\right. at?={argmaxa?Q(st?,a;w),均勻抽取?A?中的一個動作,?以概率?(1??);以概率??.?

把智能體在一局游戲中的軌跡記作:

s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , ? , s n , a n , r n . s_{1},a_{1},r_{1},\:s_{2},a_{2},r_{2},\:\cdots,\:s_{n},a_{n},r_{n}. s1?,a1?,r1?,s2?,a2?,r2?,?,sn?,an?,rn?.

把一條軌跡劃分成 n n n ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st?,at?,rt?,st+1?) 這種四元組,存入數(shù)組,這個數(shù)組叫做經(jīng)驗回放數(shù)組 (replay buffer) 。

更新 DQN 參數(shù) w : w: w:

隨機(jī)從經(jīng)驗回放數(shù)組中取出一個四元組,記作 ( s j , a j , r j , s j + 1 ) (s_j,a_j,r_j,s_{j+1}) (sj?,aj?,rj?,sj+1?)。
設(shè) DQN 當(dāng)前的參數(shù)為 w n o w w_\mathrm{now} wnow?, 執(zhí)行下面的步驟對參數(shù)做一次更新,得到新的參數(shù) w n e w w_\mathrm{new} wnew?
1.對 DQN 做正向傳播,得到 Q 值:
q ^ j = Q ( s j , a j ; w n o w ) 和 q ^ j + 1 = max ? a ∈ A Q ( s j + 1 , a ; w n o w ) . \widehat q_{j}\:=\:Q\big(s_{j},a_{j};\:w_{\mathrm{now}}\big)\quad\text{和}\quad\widehat q_{j+1}\:=\:\max_{a\in\mathcal{A}}Q\big(s_{j+1},a;\:w_{\mathrm{now}}\big). q ?j?=Q(sj?,aj?;wnow?)q ?j+1?=aAmax?Q(sj+1?,a;wnow?).

2.計算 TD 目標(biāo)和 TD 誤差:
y ^ j = r j + γ ? q ^ j + 1 和 δ j = q ^ j ? y ^ j . \widehat y_{j}\:=\:r_{j}+\gamma\cdot\widehat q_{j+1}\quad\text{和}\quad\delta_{j}\:=\:\widehat q_{j}-\widehat y_{j}. y ?j?=rj?+γ?q ?j+1?δj?=q ?j??y ?j?.

3.對 DQN 做反向傳播,得到梯度:
g j = ? w Q ( s j , a j ; w n o w ) . g_{j}\:=\:\nabla_{\boldsymbol{w}}\:Q(s_{j},a_{j};\:\boldsymbol{w_{\mathrm{now}}})\:. gj?=?w?Q(sj?,aj?;wnow?).

4.做梯度下降更新 DQN 的參數(shù):
w n e w ← w n o w ? α ? δ j ? g j . w_\mathrm{new}\:\leftarrow\:w_\mathrm{now}-\alpha\cdot\delta_j\cdot\boldsymbol{g}_j. wnew?wnow??α?δj??gj?.

智能體收集數(shù)據(jù)、更新 DQN 參數(shù)這兩者可以同時進(jìn)行??梢栽谥悄荏w每執(zhí)行一個動作之后,對 w w w做幾次更新。也可以在每完成一局游戲之后,對 w w w 做幾次更新。

注意

上面介紹用 TD 算法訓(xùn)練 DQN, 更準(zhǔn)確地說,我們用的 TD 算法叫做 Q 學(xué)習(xí)算法 (Q-learning)。TD 算法是一大類算法,常見的有 Q 學(xué)習(xí)和 SARSA。Q 學(xué)習(xí)的目的是學(xué)到最優(yōu)動作價值函數(shù) Q ? Q_{\star} Q??,而 SARSA 的目的是學(xué)習(xí)動作價值函數(shù) Q π Q_\pi Qπ?。后面會介紹 SARSA 算法。

后記

截至2024年1月26日20點28分,學(xué)習(xí)完深度強(qiáng)化學(xué)習(xí)的第二個視頻,并且結(jié)合原書做了詳細(xì)的筆記。不知道放假回家之前能學(xué)習(xí)到哪里。

http://www.risenshineclean.com/news/33290.html

相關(guān)文章:

  • 用身份證備案網(wǎng)站外貿(mào)營銷渠道
  • 天津市建設(shè)工程評標(biāo)專家網(wǎng)站谷歌google官網(wǎng)下載
  • 為什么登錄不上建設(shè)銀行網(wǎng)站上海網(wǎng)站建設(shè)推廣服務(wù)
  • 蒼南龍港做網(wǎng)站店鋪亞馬遜免費的關(guān)鍵詞工具
  • 網(wǎng)站建設(shè)與網(wǎng)頁制作技術(shù)拉新項目官方一手平臺
  • 龍灣做網(wǎng)站歌爾股份砍單
  • 合肥做公司網(wǎng)站公司太原網(wǎng)站推廣排名
  • 美國室內(nèi)設(shè)計聯(lián)盟優(yōu)化步驟
  • 捕魚游戲網(wǎng)站制作模板虞城seo代理地址
  • 不用下載就能玩的網(wǎng)頁游戲重慶百度快照優(yōu)化排名
  • 余姚做網(wǎng)站設(shè)計的免費網(wǎng)站建設(shè)哪個好
  • 深圳正規(guī)網(wǎng)站建設(shè)服務(wù)人工智能培訓(xùn)機(jī)構(gòu)哪個好
  • 網(wǎng)站制作怎樣做百度app
  • 建網(wǎng)站如何賺錢西安seo外包服務(wù)
  • wordpress html編輯seo建站是什么
  • 海報設(shè)計思路上海網(wǎng)優(yōu)化seo公司
  • react網(wǎng)站開發(fā)介紹東莞seo項目優(yōu)化方法
  • 北京網(wǎng)站建設(shè)哪里好經(jīng)典軟文廣告
  • 做星座網(wǎng)站網(wǎng)站測試的內(nèi)容有哪些
  • 通過網(wǎng)站做國際貿(mào)易的成本軟文廣告文案案例
  • 客戶推廣公司北京搜索引擎優(yōu)化管理專員
  • 怎么給網(wǎng)站做php后臺百度文庫賬號登錄入口
  • 如何把網(wǎng)站放到空間別人可以訪問今日新聞播報
  • 網(wǎng)站代理合作百度推廣怎么做
  • 網(wǎng)站做好了 怎么做解析建網(wǎng)站的軟件有哪些
  • 營銷型網(wǎng)站建設(shè)模板今日新聞頭條大事
  • 廣州市城鄉(xiāng)住房建設(shè)廳網(wǎng)站惠州百度seo找誰
  • 怎么設(shè)計一個自己的網(wǎng)站全網(wǎng)推廣平臺推薦
  • 電子商務(wù)網(wǎng)站開發(fā)平臺圖目前較好的crm系統(tǒng)
  • 網(wǎng)站開發(fā)有哪些職位中國十大流量網(wǎng)站