【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
例如,我們可以想象,如果讓
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)
w→w+α∇wlogπw(a∣s)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(a∣s)按照何種權重梯度上升的過程。
二 策略梯度的公式化簡
我們來推導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=0∑nγ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′(a∣s)Aw(s,a)]令Iw(s)=Pw(s)ρw(s)則∇wJ(w)=Ew[Iw(s)Aw(s,a)∇wlogπw(a∣s)]
上面的公式中出現了一個
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(a∣s)],這也就是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還是一整條軌道。二者的區別在於“能不能每走一步就更新一次”,而不在於“是不是真的要走一步就更新一次”。如果究其本質,二者的區別在於需不需要用到各個步在整個軌道上位置的資訊。在現實中,無論是“單步更新”還是“回合更新”的演算法,我們在每一次訓練中都會用到大量的資料(即用當前網路產生一批資料,然後用這批資料來指導網路的更新)。對於神經網路這樣的模型,單單用一條資料來訓練顯然是不合理的。