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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

强化学习笔记:Actor-critic

發(fā)布時(shí)間:2025/4/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强化学习笔记:Actor-critic 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0 復(fù)習(xí)

由于actor-critic 是 policy gradient 和DQN的一個(gè)結(jié)合,所以我們先對(duì)這兩個(gè)進(jìn)行一個(gè)簡(jiǎn)單的復(fù)習(xí):

0.1 policy gradient

強(qiáng)化學(xué)習(xí)筆記:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客

? ? ? ? ?在policy network中,我們使用梯度上升的方法更新參數(shù)。梯度計(jì)算方法如下:(這里的N是采樣次數(shù),我們?yōu)榱烁娄?#xff0c;采樣N次)

?????????這個(gè)式子是在說(shuō),我們先讓 agent 去跟環(huán)境互動(dòng)(采樣),那我們可以計(jì)算出在某一個(gè)狀態(tài) s,采取了某一個(gè)動(dòng)作 a 的概率。

????????接下來(lái),我們?nèi)ビ?jì)算在某一個(gè)狀態(tài) s 采取了某一個(gè)動(dòng)作 a 之后,到游戲結(jié)束為止,累積獎(jiǎng)勵(lì)有多大。我們把從時(shí)間 t 到時(shí)間 T 的獎(jiǎng)勵(lì)通通加起來(lái),并且會(huì)在前面乘一個(gè)折扣因子γ。

????????我們會(huì)減掉一個(gè) baseline b,減掉這個(gè)值 b 的目的,是希望括號(hào)這里面這一項(xiàng)是有正有負(fù)的。如果括號(hào)里面這一項(xiàng)是正的,我們就要通過(guò)更新θ來(lái)增加在這個(gè)狀態(tài)采取這個(gè)動(dòng)作的機(jī)率;如果括號(hào)里面是負(fù)的,我們就要通過(guò)更新θ來(lái)減少在這個(gè)狀態(tài)采取這個(gè)動(dòng)作的機(jī)率。

?????????我們把用 G 來(lái)表示累積獎(jiǎng)勵(lì)。

????????但 G 這個(gè)值,其實(shí)是非常不穩(wěn)定的。因?yàn)榛?dòng)(采樣)的過(guò)程本身是有隨機(jī)性的,所以在某一個(gè)狀態(tài) s 采取某一個(gè)動(dòng)作 a,然后計(jì)算累積獎(jiǎng)勵(lì),每次算出來(lái)的結(jié)果都是不一樣的(因?yàn)楹罄m(xù)各狀態(tài)選取action都是按照概率選取的,所以之后各個(gè)狀態(tài)、各個(gè)action的路徑是不一樣的)?。

????????假設(shè)我們可以采樣足夠的次數(shù),在每次更新參數(shù)之前,我們都可以采樣足夠的次數(shù),那其實(shí)沒(méi)有什么問(wèn)題。但問(wèn)題就是我們每次做 policy gradient,每次更新參數(shù)之前都要做一些采樣,這個(gè)采樣的次數(shù)其實(shí)是不可能太多的,我們只能夠做非常少量的采樣。所以會(huì)有一定的誤差。這也是policy gradient的不足之處

0.2 DQN

? ? ? ? 那么針對(duì)之前所說(shuō)的policy gradient的不足之處,有沒(méi)有什么辦法可以讓整個(gè)訓(xùn)練過(guò)程變得穩(wěn)定一些呢??

????????

?????????我們?cè)跔顟B(tài) s 采取動(dòng)作 a 的時(shí)候,直接用一個(gè)網(wǎng)絡(luò)去估測(cè)在狀態(tài) s 采取動(dòng)作 a 的時(shí)候,G 的期望值。如果這件事情是可行的,那之后訓(xùn)練的時(shí)候,就用期望值來(lái)代替采樣的值,這樣會(huì)讓訓(xùn)練變得比較穩(wěn)定。

????????這邊就需要引入基于價(jià)值的(value-based)的方法。基于價(jià)值的方法就是 Q-learning。Q-learning 有兩種函數(shù),有兩種 critics:

  • 第一種 critic 是,它的意思是說(shuō),假設(shè) actor 是?π,拿?π?去跟環(huán)境做互動(dòng),當(dāng)我們看到狀態(tài) s 的時(shí)候,接下來(lái)累積獎(jiǎng)勵(lì) 的期望值有多少。

  • 還有一個(gè) critic 是。把 s 跟 a 當(dāng)作輸入,它的意思是說(shuō),在狀態(tài) s 采取動(dòng)作 a,接下來(lái)都用 actor π?來(lái)跟環(huán)境進(jìn)行互動(dòng),累積獎(jiǎng)勵(lì)的期望值是多少。

????????可以用 TD 或 MC 來(lái)估計(jì)。用 TD 比較穩(wěn)定,用 MC 比較精確。

DQN 筆記 State-action Value Function(Q-function)_UQI-LIUWJ的博客-CSDN博客

1 actor-critic

?隨機(jī)變量?G的期望值正好就是 Q

????????Q-function 的定義就是在某一個(gè)狀態(tài) s,采取某一個(gè)動(dòng)作 a,假設(shè) policy 就是 π?的情況下會(huì)得到的累積獎(jiǎng)勵(lì)的期望值有多大,而這個(gè)東西就是 G 的期望值。

????????所以假設(shè)用來(lái)代表這一項(xiàng)的話,把 Q-function 套在這里就結(jié)束了,我們就可以把 Actor 跟 Critic 這兩個(gè)方法結(jié)合起來(lái)。

?????????有不同的方法來(lái)表示 baseline,但一個(gè)常見(jiàn)的做法是用價(jià)值函數(shù)來(lái)表示 baseline。

????????價(jià)值函數(shù)是說(shuō),假設(shè) policy 是π,在某一個(gè)狀態(tài) s 一直互動(dòng)到游戲結(jié)束,期望獎(jiǎng)勵(lì)(expected reward)有多大。沒(méi)有涉及到動(dòng)作,涉及到動(dòng)作。

???????會(huì)是的期望值(關(guān)于不同action的期望值),所以會(huì)有正有負(fù),所以代換后的?這一項(xiàng)就會(huì)是有正有負(fù)的。合理。

????????

所以我們就把 policy gradient 里面?這一項(xiàng)換成了。

2 advantage?actor-critic (A2C)

2.1 大致思想

?

????????如果你這么實(shí)現(xiàn)的話,有一個(gè)缺點(diǎn)是:你要估計(jì) 2 個(gè) 網(wǎng)絡(luò):Q-network 和 V-network。不僅耗時(shí),而且不確定性大。

????????事實(shí)上在這個(gè) Actor-Critic 方法里面。你可以只估測(cè) V 這個(gè)網(wǎng)絡(luò),你可以用 V 的值來(lái)表示 Q 的值,可以寫(xiě)成的期望值,即

????????

?????????你在狀態(tài) s 采取動(dòng)作 a,會(huì)得到獎(jiǎng)勵(lì) r,然后跳到狀態(tài)。但是你會(huì)得到什么樣的獎(jiǎng)勵(lì) r,跳到什么樣的狀態(tài),它本身是有隨機(jī)性的。所以要把右邊這個(gè)式子,取期望值它才會(huì)等于 Q-function。

? ? ? ? ?但是在A3C 論文里面,通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),把期望值直接摘掉,效果更好,于是就有:

????????因?yàn)榻凶?Advantage function。所以這整個(gè)方法就叫?Advantage Actor-Critic。

?2.2 大體流程

?????????我們有一個(gè) 初始的 actor? π,用他去跟環(huán)境做互動(dòng),先采樣收集資料。

????????在 policy gradient 方法里面收集資料以后,你就要拿去通過(guò)梯度上升的方法更新 policy。

????????但是在 actor-critic 方法里面,你先拿這些采樣得到的資料去估計(jì)價(jià)值函數(shù)V(用 TD 或 MC 來(lái)估計(jì)價(jià)值函數(shù)) 。接下來(lái),你再基于價(jià)值函數(shù),套用下面這個(gè)式子去更新?π,得到新的actor π'。

? ??

????????然后你有了新的?π?以后,再去跟環(huán)境互動(dòng),再收集新的資料,去估計(jì)價(jià)值函數(shù)。然后再用新的價(jià)值函數(shù) 去更新 policy,去更新 actor。

2.3 tips

2.3.1 前幾層共享參數(shù)

????????我們需要估計(jì)兩個(gè)網(wǎng)絡(luò):V function 、?policy 的網(wǎng)絡(luò)(也就是 actor)。?

  • Critic 網(wǎng)絡(luò)輸入一個(gè)狀態(tài),輸出一個(gè)標(biāo)量。
  • Actor 網(wǎng)絡(luò)π(s)?輸入一個(gè)狀態(tài),
    • 如果動(dòng)作是離散的,輸出就是一個(gè)動(dòng)作的概率分布。
    • 如果動(dòng)作是連續(xù)的,輸出就是一個(gè)連續(xù)的向量。
  • 這兩個(gè)網(wǎng)絡(luò),actor 和 critic 的輸入都是 s,所以它們前面幾個(gè)層是可以共享的。

????????假設(shè)你今天是玩 Atari 游戲,輸入都是圖像。輸入的圖像都非常復(fù)雜,圖像很大,通常你前面都會(huì)用一些 CNN 來(lái)處理,把那些圖像抽象成高級(jí)的信息。把像素級(jí)別的信息抽象成高級(jí)信息這件事情,其實(shí)對(duì) actor 跟 critic 來(lái)說(shuō)是可以共用的。所以通常你會(huì)讓 actor 跟 critic 的前面幾個(gè)層共用同一組參數(shù),那這一組參數(shù)可能是 CNN 的參數(shù)。

? ? ? ? 換句話說(shuō),先把輸入的像素變成比較高級(jí)的信息,然后再給 actor 去決定說(shuō)它要采取什么樣的行為;給?critic去計(jì)算V function。

2.3.2 探索機(jī)制exploration

????????在做 Actor-Critic 的時(shí)候,有一個(gè)常見(jiàn)的探索的方法是去約束 π?的輸出的分布

????????這個(gè)約束是希望這個(gè)分布的熵(entropy)不要太小,希望這個(gè)分布的熵可以大一點(diǎn),也就是希望不同的動(dòng)作它的被采用的概率平均一點(diǎn)。

????????這樣在測(cè)試的時(shí)候,它才會(huì)多嘗試各種不同的動(dòng)作,才會(huì)把這個(gè)環(huán)境探索的比較好,才會(huì)得到比較好的結(jié)果。

3 A3C

3.1 大體思想(來(lái)自李宏毅教授)

????????強(qiáng)化學(xué)習(xí)有一個(gè)問(wèn)題就是它很慢,那怎么增加訓(xùn)練的速度呢?李宏毅教授舉了一個(gè)很直觀的例子:

????????有一次鳴人說(shuō),他想要在一周之內(nèi)打敗曉,所以要加快修行的速度,他老師就教他一個(gè)方法:用影分身進(jìn)行同樣修行。兩個(gè)一起修行的話,經(jīng)驗(yàn)值累積的速度就會(huì)變成 2 倍,所以鳴人就開(kāi)了 1000 個(gè)影分身來(lái)進(jìn)行修行。這個(gè)其實(shí)就是?Asynchronous(異步的) Advantage Actor-Critic,也就是 A3C 這個(gè)方法的精神。

?3.2 主體框架

????????A3C 這個(gè)方法就是同時(shí)開(kāi)很多個(gè) worker,那每一個(gè) worker 其實(shí)就是一個(gè)影分身。那最后這些影分身會(huì)把所有的經(jīng)驗(yàn),通通集合在一起。你如果沒(méi)有很多個(gè) CPU,可能也是不好實(shí)現(xiàn)的,你可以實(shí)現(xiàn) A2C 就好。

  • A3C 一開(kāi)始有一個(gè) global network。假設(shè) global network 的參數(shù)是θ1?,你會(huì)開(kāi)很多個(gè) worker。每一個(gè) worker 就用一張 CPU 去跑。比如你就開(kāi) 8 個(gè) worker,那你至少 8 張 CPU。每一個(gè) worker 工作前都會(huì)將 global network 的參數(shù)復(fù)制過(guò)來(lái)。
  • 接下來(lái)你就去跟環(huán)境做互動(dòng)。每一個(gè) actor 跟環(huán)境做互動(dòng),互動(dòng)完之后,你就會(huì)計(jì)算出梯度。計(jì)算出梯度以后,用你的梯度去更新 global network 的參數(shù)。(就是這個(gè) worker 算出梯度以后,就把梯度傳回給中央的控制中心,然后中央的控制中心就會(huì)拿這個(gè)梯度去更新原來(lái)的參數(shù)。)

  • 下一步,這個(gè)worker將更新完的參數(shù)θ2復(fù)制回來(lái),繼續(xù)同樣的過(guò)程。

????????注意,所有的 actor 都是平行跑的,每一個(gè) actor 就是各做各的,不管彼此。

????????所以每個(gè)人都是去要了一個(gè)參數(shù)以后,做完就把參數(shù)傳回去。

? ? ? ? 因此當(dāng)?shù)谝粋€(gè) worker 做完想要把參數(shù)傳回去的時(shí)候,本來(lái)它要的參數(shù)是θ1?,等它要把梯度傳回去的時(shí)候。可能別人已經(jīng)把原來(lái)的參數(shù)覆蓋掉,變成θ2?了。但是沒(méi)有關(guān)系,global network 對(duì)θ2進(jìn)行更新(使用worker傳回的梯度)。

總結(jié)

以上是生活随笔為你收集整理的强化学习笔记:Actor-critic的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。