1. 程式人生 > 實用技巧 >【RL】Actor-Critic

【RL】Actor-Critic

強化學習的演算法分為基於價值與基於策略兩大類,這兩大類在思想上是完全不同的。基於價值的演算法目標是擬合隱藏在環境中的價值函式,而基於策略的演算法則是不斷地優化策略。所有強化學習的演算法,基本的思想都不外乎於這兩種。從這個角度上說,Actor-Critic演算法本質上還是基於策略的方法,因為其演算法的核心還是在不斷地優化策略。雖然我們要訓練價值網路,但是其目標也只是“輔佐”策略網路更好地訓練。當我們學習VPG演算法的時候,其理論與訓練方式都與DQN完全不同,因為這本質上是兩種不同的演算法;而在下面的Actor-Critic演算法中,卻可以發現很多公式是從VPG的公式修改得到的,這正是因為AC以及其衍生出來的演算法,都是基於策略的、都是在VPG演算法上衍生出來的。

下面,如果沒有特殊說明,我們仍舊和VPG一樣,主要討論狀態連續、動作為有限個、環境隨機且時齊的MDP。在這個設定下,我們的策略網路仍然會比較像我們熟悉的分類網路。

一 Actor-Critic的出發點

我們要考慮一個問題。如果一條 τ \tau τ上面有很多步“好棋”導致 r ( τ ) r(\tau) r(τ)比較高,同時也有幾步“臭棋”,由於總體 r ( τ ) r(\tau) r(τ)不錯,所以“臭棋”對應的決策概率也會增加;反之亦然。

從統計意義上來說,如果取樣足夠多的軌道並求平均得出策略梯度,則我們還是能夠將每一步棋的好壞估計出來。但是在取樣樣本比較有限的情況下,這可能會導致巨大的均方誤差

為了解決以上的問題,一個最自然的想法是,我們 不應該 將一個 τ \tau τ上所有 ( s , a ) (s, a) (s,a)編成一個batch,用一個統一的“權重” r ( τ ) r(\tau) r(τ)來衡量它們的好壞。而應該找出一個“權重”能夠單獨衡量每一個 ( s , a ) (s, a) (s,a)的好壞。訓練策略就好像是用“帶權重的資料集”去訓練監督學習問題。但是問題在於我們應該給每一條資料集 ( s , a ) (s, a) (s,a)一個能衡量“好壞”的權重 v v v,讓每一條 ( s , a , v ) (s,a,v) (s,a,v)作為基本的訓練集,而不是將每一個軌道上的 s , a s,a

s,a打包成一個batch用同一個權重 r ( τ ) r(\tau) r(τ)。我們要考慮如何將每一個單步決策 ( s , a ) (s, a) (s,a)所對應的“學習權重” v v v給算出來。這樣,就可以避免差的 ( s , a ) (s,a) (s,a)混在好的 τ \tau τ之中“濫竽充數”。

例如,我們可以想象,如果讓 w w w按照以下公式給出的梯度上升,應該可以提升策略 π w \pi_w πw的效能,因為它讓優勢 A π ( s , a ) A_{\pi}(s,a) Aπ(s,a)更大的 ( s , a ) (s,a) (s,a)有更多的概率出現:
w → w + α ∇ w log ⁡ π w ( a ∣ s ) A w ( s , a ) w \rightarrow w+\alpha \nabla_{w} \log \pi_{w}(a \mid s) A_{w}(s, a) ww+αwlogπw(as)Aw(s,a)
在VPG中將總的期望獎勵看作是關於策略的函式 J ( π ) J(\pi) J(π)(或者 J ( w ) J(w) J(w)),並從中推出了策略梯度的公式。下面,讓我們看看當 w w w沿著策略梯度上升的過程,等價於各步決策的條件概率 π w ( a ∣ s ) \pi_{w}(a \mid s) πw(as)按照何種權重梯度上升的過程。

二 策略梯度的公式化簡

我們來推導Actor-Critic的公式,看看學習權重 v v v到底應該等於多少。

真正衡量 ( s , a ) (s,a) (s,a)的“好壞”的 v v v應該由如下式子所示:
( s , a ) 對應的“學習權重" v = E w , ( s , a ) ∈ τ [ r ( τ ) ] (s, a) \text { 對應的“學習權重" } v=E_{w,(s, a) \in \tau}[r(\tau)] (s,a)對應的學習權重"v=Ew,(s,a)τ[r(τ)]

下面將 r ( τ ) r(\tau) r(τ)展開為優勢函式 A π ( s , a ) A_{\pi}(s,a) Aπ(s,a)的求和。
r ( τ ) = Σ i = 0 n γ i r i = Σ i = 0 n γ i ( r i + γ V π ( s i + 1 ) − V π ( s i ) ) + V ( s 0 ) − γ i V ( s n ) \begin{array}{c} r(\tau)=\Sigma_{i=0}^{n} \gamma^{i} r_{i}=\Sigma_{i=0}^{n} \gamma^{i}\left(r_{i}+\gamma V_{\pi}\left(s_{i+1}\right)-V_{\pi}\left(s_{i}\right)\right)+V\left(s_{0}\right)-\gamma^{i} V\left(s_{n}\right) \end{array} r(τ)=Σi=0nγiri=Σi=0nγi(ri+γVπ(si+1)Vπ(si))+V(s0)γiV(sn)
由於 A π ( s i , a i ) = r i + γ V π ( s i + 1 ) − V π ( s i ) A_{\pi}\left(s_{i}, a_{i}\right)=r_{i}+\gamma V_{\pi}\left(s_{i+1}\right)-V_{\pi}\left(s_{i}\right) Aπ(si,ai)=ri+γVπ(si+1)Vπ(si),並且終止後不再有後續獎勵,所以 V ( s n ) = 0 V(s_{n})=0 V(sn)=0。將上述的等式對於環境求期望,得到以下的重要公式:
E π [ r ( τ ) ] = ∑ i = 0 n γ i A π ( s i , a i ) + V π ( s 0 ) E_{\pi}[r(\tau)]=\sum_{i=0}^{n} \gamma^{i} A_{\pi}\left(s_{i}, a_{i}\right)+V_{\pi}\left(s_{0}\right) Eπ[r(τ)]=i=0nγiAπ(si,ai)+Vπ(s0)
這條公式的含義是,我們最終能夠獲得獎勵 r ( τ ) r(\tau) r(τ)的期望,就等於“先天的價值” V π ( s 0 ) V_{\pi}\left(s_{0}\right) Vπ(s0)加上每一步決策帶來的“優勢” A π ( s i , a i ) A_{\pi}(s_{i},a_{i}) Aπ(si,ai)乘以衰減項 γ i \gamma^i γi構成。這就好像說一個人最終能夠取得的成就要根據其“家庭出身”與每一步“後天努力”帶來的效果加和得到。當設定 γ i < 1 \gamma^i<1 γi<1的時候,則即使是同樣的 ( s , a ) (s,a) (s,a)中發生在前面的會比較重要,因為早期的操作對於全域性的影響更大。當然,如果設定 γ i = 1 \gamma^i=1 γi=1,則同樣的 ( s , a ) (s,a) (s,a)無論發生在什麼時候,對於全域性的影響都是差不多的。

TODO

可以推出如下與策略梯度等價的公式:
∇ w J ( w ) = ∇ w [ Σ s ρ w ′ ( s ) Σ a π w ′ ( a ∣ s ) A w ( s , a ) ] 令 I w ( s ) = ρ w ( s ) P w ( s ) 則 ∇ w J ( w ) = E w [ I w ( s ) A w ( s , a ) ∇ w log ⁡ π w ( a ∣ s ) ] \begin{array}{l} \nabla_{w} J(w)=\nabla_{w}\left[\Sigma_{s} \rho_{w^{\prime}}(s) \Sigma_{a} \pi_{w^{\prime}}(a \mid s) A_{w}(s, a)\right] \\ \text{ 令 } I_{w}(s)=\frac{\rho_{w}(s)}{P_{w}(s)} \\ \text { 則 } \nabla_{w} J(w)=E_{w}\left[I_{w}(s) A_{w}(s, a) \nabla_{w} \log \pi_{w}(a \mid s)\right] \end{array} wJ(w)=w[Σsρw(s)Σaπw(as)Aw(s,a)]Iw(s)=Pw(s)ρw(s)wJ(w)=Ew[Iw(s)Aw(s,a)wlogπw(as)]
上面的公式中出現了一個 I w ( s ) I_{w}(s) Iw(s),我們可以想象其代表一個狀態出現的“早晚”。根據定義,“早晚” I w ( s ) I_{w}(s) Iw(s)的取值在0與1之間。當 s s s傾向於更早出現的時候,它更接近1,而當 s s s傾向於更晚出現的時候,它則接近於0。上面的推導意味著,如果用當前策略 π w \pi_{w} πw取樣很多條軌道 τ \tau τ,並將其拆分為許多條單步決策 ( s , a ) (s,a) (s,a)併為每一條單步決策 ( s , a ) (s,a) (s,a)賦予“學習權重” v = I w ( s ) A w ( s , a ) v=I_{w}(s) A_{w}(s, a) v=Iw(s)Aw(s,a),使得 ( s , a , v ) (s,a,v) (s,a,v)成為一條資料集。以這樣的“早晚 優勢的權重”去訓練策略網路,應該完全等價於策略梯度演算法。不過,在VPG演算法中,同一軌道上的所有 ( s , a ) (s,a) (s,a)被賦予統一的權重 r ( τ ) r(\tau) r(τ),無法區分每一步具體的好壞,只能靠著大量的資料使其收斂到“早晚 優勢的權重”平均。而如果採用上述的演算法,則意味著每一步[ ( s , a ) (s,a) (s,a)有獨屬於自己的、能夠衡量具體這一步的“好壞”以及“需要被學習的緊迫度”的權重。如果我們能算出 I w ( s ) A w ( s , a ) I_{w}(s) A_{w}(s, a) Iw(s)Aw(s,a)作為權重標記在每一條產生的資料集 ( s , a ) (s,a) (s,a)上面,用這樣的資料去訓練策略網路無疑會使得估計的方差大大地減少、訓練效率顯著得到提升。

如果將 γ \gamma γ設定為1,則會導致衡量“早晚”的 I w ( s ) I_{w}(s) Iw(s)恆為1,這也就意味著策略梯度的公式等價於 E w [ A w ( s , a ) ∇ w log ⁡ π w ( a ∣ s ) ] E_{w}\left[ A_{w}(s, a) \nabla_{w} \log \pi_{w}(a \mid s)\right] Ew[Aw(s,a)wlogπw(as)],這也就是Actor-Critic演算法更新的公式。

三 AC的基本思想

上文中我們說,如果將 γ \gamma γ設定為1,則會導致衡量“早晚”的 I w ( s ) I_{w}(s) Iw(s)恆為1。

我們便有了Actor-Critic演算法的基本思路,即擬合一個能夠計算 A w ( s , a ) A_{w}(s, a) Aw(s,a)的函式。當MDP比較複雜時,由於估計的均方誤差更小,這種方法效率會比VPG演算法更高。用統計學的話來總結,VPG方法對於策略梯度是一個“無偏差但是高方差的估計”,而Actor-Critic演算法對於策略梯度是一個“有偏差但是低方差”的估計。

AC演算法的大體框架是這樣的:我們定義兩個神經網路:一個是用來計算 A w ( s , a ) A_{w}(s, a) Aw(s,a)(或 Q w ( s , a ) Q_{w}(s, a) Qw(s,a)也行,二者效果差不多)的價值網路,另一個則是策略。我們用策略網路與環境互動產生許多資料集,並用這些資料集同時訓練兩個網路,提升網路的效能。
在這裡插入圖片描述
為這個演算法做一個形象的比喻,策略網路和價值網路之間的關係就好像演員與批評家之間的關係。策略網路就像一個演員,在努力表演,而價值網路則像一個批評家,對策略網路的表演中哪裡演得好、哪裡演得差進行點評。一開始,演員的演技很差,批評家的點評鑑賞能力也很差。在訓練中,演員在批評家的指點下提升自己的演技,而批評家也通過觀看更多的表演來提升自己的鑑賞水平。最後,演員的演技變得爐火純青,而批評家的評論也變得一針見血。這時候,我們就可以讓演員來為我們奉上精彩的表演了。所以,我們將這個演算法稱作Actor-Critic,簡稱為AC演算法。

四 單步更新與回合更新

在這裡,我們便能看清楚“單步更新”與“回合更新”之間的核心區別:“回合更新”意味著我們需要標註每一步在回合中出現的位置,而“單步更新”意味著我們可以將資料集拆散為許多步transition。在DQN中或是在AC中,我們用來訓練的資料是 ( s , a , r , s ′ ) \left(s, a, r, s^{\prime}\right) (s,a,r,s)形式的transition,甚至可以完全打亂順序訓練。這意味著我們只用到了transition的內容,而不需要記錄其在軌道中的位置。換句話說,AC的訓練集中不包含各步在軌道中出現“早晚”的資訊;而在VPG中,我們用來訓練的資料是整條軌道的資料,訓練集中自然就包含了各步在軌道中“早晚”的資訊。這便是“單步更新”與“回合更新”的本質區別。

“單步更新”與“回合更新”的核心區別在於訓練集基本單位的不同,是單個transition還是一整條軌道。二者的區別在於“能不能每走一步就更新一次”,而不在於“是不是真的要走一步就更新一次”。如果究其本質,二者的區別在於需不需要用到各個步在整個軌道上位置的資訊。在現實中,無論是“單步更新”還是“回合更新”的演算法,我們在每一次訓練中都會用到大量的資料(即用當前網路產生一批資料,然後用這批資料來指導網路的更新)。對於神經網路這樣的模型,單單用一條資料來訓練顯然是不合理的。