强化学习的算法分为基于价值与基于策略两大类,这两大类在思想上是完全不同的。基于价值的算法目标是拟合隐藏在环境中的价值函数,而基于策略的算法则是不断地优化策略。所有强化学习的算法,基本的思想都不外乎于这两种。从这个角度上说,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)
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还是一整条轨道。二者的区别在于“能不能每走一步就更新一次”,而不在于“是不是真的要走一步就更新一次”。如果究其本质,二者的区别在于需不需要用到各个步在整个轨道上位置的信息。在现实中,无论是“单步更新”还是“回合更新”的算法,我们在每一次训练中都会用到大量的数据(即用当前网络产生一批数据,然后用这批数据来指导网络的更新)。对于神经网络这样的模型,单单用一条数据来训练显然是不合理的。