强化学习笔记:Actor-critic
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)題。
- 上一篇: 针对连续动作的DQN
- 下一篇: 文巾解题 1446. 连续字符