强化学习笔记:Actor-critic
0 復習
由于actor-critic 是 policy gradient 和DQN的一個結合,所以我們先對這兩個進行一個簡單的復習:
0.1 policy gradient
強化學習筆記:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客
? ? ? ? ?在policy network中,我們使用梯度上升的方法更新參數。梯度計算方法如下:(這里的N是采樣次數,我們為了更新θ,采樣N次)
?????????這個式子是在說,我們先讓 agent 去跟環境互動(采樣),那我們可以計算出在某一個狀態 s,采取了某一個動作 a 的概率。
????????接下來,我們去計算在某一個狀態 s 采取了某一個動作 a 之后,到游戲結束為止,累積獎勵有多大。我們把從時間 t 到時間 T 的獎勵通通加起來,并且會在前面乘一個折扣因子γ。
????????我們會減掉一個 baseline b,減掉這個值 b 的目的,是希望括號這里面這一項是有正有負的。如果括號里面這一項是正的,我們就要通過更新θ來增加在這個狀態采取這個動作的機率;如果括號里面是負的,我們就要通過更新θ來減少在這個狀態采取這個動作的機率。
?????????我們把用 G 來表示累積獎勵。
????????但 G 這個值,其實是非常不穩定的。因為互動(采樣)的過程本身是有隨機性的,所以在某一個狀態 s 采取某一個動作 a,然后計算累積獎勵,每次算出來的結果都是不一樣的(因為后續各狀態選取action都是按照概率選取的,所以之后各個狀態、各個action的路徑是不一樣的)?。
????????假設我們可以采樣足夠的次數,在每次更新參數之前,我們都可以采樣足夠的次數,那其實沒有什么問題。但問題就是我們每次做 policy gradient,每次更新參數之前都要做一些采樣,這個采樣的次數其實是不可能太多的,我們只能夠做非常少量的采樣。所以會有一定的誤差。這也是policy gradient的不足之處
0.2 DQN
? ? ? ? 那么針對之前所說的policy gradient的不足之處,有沒有什么辦法可以讓整個訓練過程變得穩定一些呢??
????????
?????????我們在狀態 s 采取動作 a 的時候,直接用一個網絡去估測在狀態 s 采取動作 a 的時候,G 的期望值。如果這件事情是可行的,那之后訓練的時候,就用期望值來代替采樣的值,這樣會讓訓練變得比較穩定。
????????這邊就需要引入基于價值的(value-based)的方法。基于價值的方法就是 Q-learning。Q-learning 有兩種函數,有兩種 critics:
-
第一種 critic 是,它的意思是說,假設 actor 是?π,拿?π?去跟環境做互動,當我們看到狀態 s 的時候,接下來累積獎勵 的期望值有多少。
-
還有一個 critic 是。把 s 跟 a 當作輸入,它的意思是說,在狀態 s 采取動作 a,接下來都用 actor π?來跟環境進行互動,累積獎勵的期望值是多少。
????????可以用 TD 或 MC 來估計。用 TD 比較穩定,用 MC 比較精確。
DQN 筆記 State-action Value Function(Q-function)_UQI-LIUWJ的博客-CSDN博客
1 actor-critic
?隨機變量?G的期望值正好就是 Q
????????Q-function 的定義就是在某一個狀態 s,采取某一個動作 a,假設 policy 就是 π?的情況下會得到的累積獎勵的期望值有多大,而這個東西就是 G 的期望值。
????????所以假設用來代表這一項的話,把 Q-function 套在這里就結束了,我們就可以把 Actor 跟 Critic 這兩個方法結合起來。
?????????有不同的方法來表示 baseline,但一個常見的做法是用價值函數來表示 baseline。
????????價值函數是說,假設 policy 是π,在某一個狀態 s 一直互動到游戲結束,期望獎勵(expected reward)有多大。沒有涉及到動作,涉及到動作。
???????會是的期望值(關于不同action的期望值),所以會有正有負,所以代換后的?這一項就會是有正有負的。合理。
????????
所以我們就把 policy gradient 里面?這一項換成了。
2 advantage?actor-critic (A2C)
2.1 大致思想
?
????????如果你這么實現的話,有一個缺點是:你要估計 2 個 網絡:Q-network 和 V-network。不僅耗時,而且不確定性大。
????????事實上在這個 Actor-Critic 方法里面。你可以只估測 V 這個網絡,你可以用 V 的值來表示 Q 的值,可以寫成的期望值,即
????????
?????????你在狀態 s 采取動作 a,會得到獎勵 r,然后跳到狀態。但是你會得到什么樣的獎勵 r,跳到什么樣的狀態,它本身是有隨機性的。所以要把右邊這個式子,取期望值它才會等于 Q-function。
? ? ? ? ?但是在A3C 論文里面,通過實驗發現,把期望值直接摘掉,效果更好,于是就有:
????????因為叫做?Advantage function。所以這整個方法就叫?Advantage Actor-Critic。
?2.2 大體流程
?????????我們有一個 初始的 actor? π,用他去跟環境做互動,先采樣收集資料。
????????在 policy gradient 方法里面收集資料以后,你就要拿去通過梯度上升的方法更新 policy。
????????但是在 actor-critic 方法里面,你先拿這些采樣得到的資料去估計價值函數V(用 TD 或 MC 來估計價值函數) 。接下來,你再基于價值函數,套用下面這個式子去更新?π,得到新的actor π'。
? ??
????????然后你有了新的?π?以后,再去跟環境互動,再收集新的資料,去估計價值函數。然后再用新的價值函數 去更新 policy,去更新 actor。
2.3 tips
2.3.1 前幾層共享參數
????????我們需要估計兩個網絡:V function 、?policy 的網絡(也就是 actor)。?
- Critic 網絡輸入一個狀態,輸出一個標量。
- Actor 網絡π(s)?輸入一個狀態,
- 如果動作是離散的,輸出就是一個動作的概率分布。
- 如果動作是連續的,輸出就是一個連續的向量。
- 這兩個網絡,actor 和 critic 的輸入都是 s,所以它們前面幾個層是可以共享的。
????????假設你今天是玩 Atari 游戲,輸入都是圖像。輸入的圖像都非常復雜,圖像很大,通常你前面都會用一些 CNN 來處理,把那些圖像抽象成高級的信息。把像素級別的信息抽象成高級信息這件事情,其實對 actor 跟 critic 來說是可以共用的。所以通常你會讓 actor 跟 critic 的前面幾個層共用同一組參數,那這一組參數可能是 CNN 的參數。
? ? ? ? 換句話說,先把輸入的像素變成比較高級的信息,然后再給 actor 去決定說它要采取什么樣的行為;給?critic去計算V function。
2.3.2 探索機制exploration
????????在做 Actor-Critic 的時候,有一個常見的探索的方法是去約束 π?的輸出的分布。
????????這個約束是希望這個分布的熵(entropy)不要太小,希望這個分布的熵可以大一點,也就是希望不同的動作它的被采用的概率平均一點。
????????這樣在測試的時候,它才會多嘗試各種不同的動作,才會把這個環境探索的比較好,才會得到比較好的結果。
3 A3C
3.1 大體思想(來自李宏毅教授)
????????強化學習有一個問題就是它很慢,那怎么增加訓練的速度呢?李宏毅教授舉了一個很直觀的例子:
????????有一次鳴人說,他想要在一周之內打敗曉,所以要加快修行的速度,他老師就教他一個方法:用影分身進行同樣修行。兩個一起修行的話,經驗值累積的速度就會變成 2 倍,所以鳴人就開了 1000 個影分身來進行修行。這個其實就是?Asynchronous(異步的) Advantage Actor-Critic,也就是 A3C 這個方法的精神。
?3.2 主體框架
????????A3C 這個方法就是同時開很多個 worker,那每一個 worker 其實就是一個影分身。那最后這些影分身會把所有的經驗,通通集合在一起。你如果沒有很多個 CPU,可能也是不好實現的,你可以實現 A2C 就好。
- A3C 一開始有一個 global network。假設 global network 的參數是θ1?,你會開很多個 worker。每一個 worker 就用一張 CPU 去跑。比如你就開 8 個 worker,那你至少 8 張 CPU。每一個 worker 工作前都會將 global network 的參數復制過來。
-
接下來你就去跟環境做互動。每一個 actor 跟環境做互動,互動完之后,你就會計算出梯度。計算出梯度以后,用你的梯度去更新 global network 的參數。(就是這個 worker 算出梯度以后,就把梯度傳回給中央的控制中心,然后中央的控制中心就會拿這個梯度去更新原來的參數。)
- 下一步,這個worker將更新完的參數θ2復制回來,繼續同樣的過程。
????????注意,所有的 actor 都是平行跑的,每一個 actor 就是各做各的,不管彼此。
????????所以每個人都是去要了一個參數以后,做完就把參數傳回去。
? ? ? ? 因此當第一個 worker 做完想要把參數傳回去的時候,本來它要的參數是θ1?,等它要把梯度傳回去的時候。可能別人已經把原來的參數覆蓋掉,變成θ2?了。但是沒有關系,global network 對θ2進行更新(使用worker傳回的梯度)。
總結
以上是生活随笔為你收集整理的强化学习笔记:Actor-critic的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 针对连续动作的DQN
- 下一篇: 文巾解题 1446. 连续字符