八、Actor-Critic算法
演员-评论员算法是一种结合策略梯度和时序差分学习的强化学习方法,其中,演员是指策略函数
π
θ
(
a
∣
s
)
\pi_\theta(a|s)
πθ(a∣s),即学习一个策略以得到尽可能高的回报。评论员是指价值函数
V
π
(
s
)
V_\pi(s)
Vπ(s),对当前策略的值函数进行估计,即评估演员的好坏。借助于价值函数,演员-评论员算法可以进行单步参数更新,不需要等到回合结束才进行更新。
1.策略梯度回顾
在更新策略参数
θ
\theta
θ的时候,可以通过
∇
R
ˉ
θ
≈
1
N
∑
n
=
1
N
∑
t
=
1
T
n
(
∑
t
′
=
t
T
n
γ
t
′
−
t
r
t
′
n
−
b
)
∇
log
p
θ
(
a
t
n
∣
s
t
n
)
\nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n}\left(\sum_{t^{\prime}=t}^{T_n} \gamma^{t^{\prime}-t} r_{t^{\prime}}^n-b\right) \nabla \log p_\theta\left(a_t^n \mid s_t^n\right)
∇Rˉθ≈N1n=1∑Nt=1∑Tn(t′=t∑Tnγt′−trt′n−b)∇logpθ(atn∣stn)
来计算梯度,式子的左半部分是累积奖励减去基线,累积奖励
G
G
G是非常不稳定的,因为交互的过程本身具有随机性,所以在某一个状态 s 采取某一个动作 a 时计算得到的累积奖励,每次结果都是不同的,因此
G
G
G是一个随机变量。
如果我们把 G G G想成一个随机变量,实际上是在对 G G G做采样,用这些采样的结果去更新参数。但实际上在某一个状态 s 采取某一个动作 a,接下来会发生什么事,其本身是有随机性的。虽然说有一个固定的分布,但其方差可能会非常大。智能体在同一个状态采取同一个动作时,最后得到的结果可能会是很不一样的。当然,假设我们在每次更新参数之前,都可以采样足够多次,那当然就没有以上的问题了。但我们每次做策略梯度,每次更新参数之前都要做一些采样时,采样的次数是不可能太多的,我们只能够做非常少量的采样。如果我们正好采样到差的结果,比如采样到 G G G= 100、采样到 G G G= −10,显然结果会是很差的。
2.深度Q网络回顾
考虑到 G G G非常不稳定,所以能否直接估测随机变量 G G G的期望值呢?我们可以直接使用一个网络去估测在状态s采取动作a时 G G G的期望值。这里需要引入基于价值的方法(value-based)。基于价值的方法就是深度 Q 网络。深度 Q 网络有两种函数,有两种评论员。第一种评论员是 V π ( s ) V_\pi(s) Vπ(s)。即假设演员的策略是 π \pi π,使用 π \pi π与环境交互,当智能体看到状态 s 时,接下来累积奖励的期望值是多少。第二种评论员是 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a)。 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a)把 s 与 a 当作输入,它表示在状态 s 采取动作 a,接下来用策略 π \pi π与环境交互,累积奖励的期望值是多少。 V π V_\pi Vπ接收输入 s,输出一个标量。 Q π Q_\pi Qπ接收输入 s,它会给每一个 a 都分配一个 Q 值。
3.优势演员-评论员算法
随机变量
G
G
G的期望值正好就是
Q
Q
Q值,即
E
[
G
t
n
]
=
Q
π
θ
(
s
t
n
,
a
t
n
)
\mathbb{E}\left[G_t^n\right]=Q_{\pi_\theta}\left(s_t^n, a_t^n\right)
E[Gtn]=Qπθ(stn,atn)
这也和Q函数的定义是一致的,Q 函数的定义就是在某一个状态 s,采取某一个动作 a,假设策略是
π
\pi
π的情况下所能得到的累积奖励的期望值,即
G
G
G的期望值。累积奖励的期望值就是
G
G
G的期望值。
表示基线也有不同的方法,一个常见的方法是用价值函数 V π θ ( s t n ) V_{\pi\theta}(s_t^n) Vπθ(stn)来表示基线,价值函数的定义是假设策略是 π \pi π,其在某个状态s一直与环境交互直到游戏结束,期望奖励有多大。 V π θ ( s t n ) V_{\pi\theta}(s_t^n) Vπθ(stn)没有涉及动作, Q π θ ( s t n , a t n ) Q_{\pi_\theta}\left(s_t^n, a_t^n\right) Qπθ(stn,atn)涉及动作, V π θ ( s t n ) V_{\pi\theta}(s_t^n) Vπθ(stn)就是 Q π θ ( s t n , a t n ) Q_{\pi_\theta}\left(s_t^n, a_t^n\right) Qπθ(stn,atn)的期望值, Q π θ ( s t n , a t n ) − V π θ ( s t n ) Q_{\pi_\theta}\left(s_t^n, a_t^n\right)-V_{\pi\theta}(s_t^n) Qπθ(stn,atn)−Vπθ(stn)会有正有负,所以 ( ∑ t ′ = t T n γ t ′ − t r t ′ n − b ) \left(\sum_{t^{\prime}=t}^{T_n} \gamma^{t^{\prime}-t} r_{t^{\prime}}^n-b\right) (∑t′=tTnγt′−trt′n−b)这一项就会有正有负,我们把策略梯度的这一项换成 A θ ( s t n , a t n ) A^\theta(s_t^n,a_t^n) Aθ(stn,atn),即 Q π θ ( s t n , a t n ) − V π θ ( s t n ) Q_{\pi_\theta}\left(s_t^n, a_t^n\right)-V_{\pi\theta}(s_t^n) Qπθ(stn,atn)−Vπθ(stn),因此该算法称为优势演员-评论员算法。
但这样实现存在一个缺点,就是我们需要估计两个网络,Q网络和V网络,估计不准的风险直接翻倍,所以我们可以只估计网络V,并用V的值来表示Q的值
Q
π
(
s
t
n
,
a
t
n
)
=
E
[
r
t
n
+
V
π
(
s
t
+
1
n
)
]
Q_\pi\left(s_t^n, a_t^n\right)=\mathbb{E}\left[r_t^n+V_\pi\left(s_{t+1}^n\right)\right]
Qπ(stn,atn)=E[rtn+Vπ(st+1n)]
当我们把期望值去掉,就可以得到
A
θ
(
s
t
n
,
a
t
n
)
=
r
t
n
+
V
π
(
s
t
+
1
n
)
−
V
π
(
s
t
n
)
A^\theta(s_t^n,a_t^n)=r_t^n+V_\pi\left(s_{t+1}^n\right)-V_\pi(s_t^n)
Aθ(stn,atn)=rtn+Vπ(st+1n)−Vπ(stn)
把取期望值去掉的好处就是我们不需要估计Q了,只需要估计V。但与此同时我们会引入一个随机的参数r。r是有随机性的,它是一个随机变量,但是r相较于累积奖励G是一个较小的值,因为它是某一个步骤得到的奖励,而是所有未来会得到的奖励的总和,G的方差比较大。r虽然也有一些方差,但它的方差比G的要小。所以把原来方差比较大的G换成方差比较小的r也是合理的。
把期望值去掉的原因是原始的异步优势演员-评论员算法的论文尝试了各种方法,最后发现这个方法最好。
优势演员-评论员算法的流程如图所示,我们有一个
π
\pi
π,有个初始的演员与环境交互,先收集资料。在策略梯度方法里收集资料以后,就来更新策略。但是在演员-评论员算法里面,我们不是直接使用那些资料来更新策略。我们先用这些资料去估计价值函数,可以用时序差分方法或蒙特卡洛方法来估计价值函数。接下来,我们再基于价值函数,更新
π
\pi
π。
∇
R
ˉ
θ
≈
1
N
∑
n
=
1
N
∑
t
=
1
T
n
(
r
t
n
+
V
π
(
s
t
+
1
n
)
−
V
π
(
s
t
n
)
)
∇
log
p
θ
(
a
t
n
∣
s
t
n
)
\nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n}\left(r_t^n+V_\pi\left(s_{t+1}^n\right)-V_\pi\left(s_t^n\right)\right) \nabla \log p_\theta\left(a_t^n \mid s_t^n\right)
∇Rˉθ≈N1n=1∑Nt=1∑Tn(rtn+Vπ(st+1n)−Vπ(stn))∇logpθ(atn∣stn)
有了新的
π
\pi
π 以后, 再与环境交互, 收集新的资料, 去估计价值函数。再用新的价值函数更新策略, 更新演员。整个优势演员-评论员算法就是这么运作的。
4.路径衍生策略梯度
路径衍生策略梯度(pathwise derivative policy gradient)可以看作深度Q网络解连续动作的一种特别的方法,也可以看作一种特别的演员-评论员算法。
一般的演员-评论员算法的评论员就是输入状态或输入状态-动作对,给演员一个值,所以对演员来说,它只知道它做的这个动作到底是好还是不好。但在路径衍生策略梯度里面,评论员会直接告诉演员采取什么样的动作才是好的。
假设我们学习了一个Q函数,Q函数的输入是s与a,输出是
Q
π
(
s
,
a
)
Q_\pi(s,a)
Qπ(s,a),接下来我们要学习一个演员,这个演员的工作就是解决argmax问题,即输入一个状态s,希望可以输出一个动作a,a被代入Q函数以后,它可以让
Q
π
(
s
,
a
)
Q_\pi(s,a)
Qπ(s,a)尽可能大。
π
′
(
s
)
=
arg
max
a
Q
π
(
s
,
a
)
\pi^{\prime}(s)=\underset{a}{\arg \max } Q_\pi(s, a)
π′(s)=aargmaxQπ(s,a)
实际上在训练的时候,我们就是把Q与演员连接起来变成一个比较大的网络。Q是一个网络,接收输入s与a,输出一个值。演员在训练的时候,它要做的事就是接收输入s,输出a。把a代人Q中,希望输出的值越大越好。我们会固定住Q的参数,只调整演员的参数,用梯度上升的方法最大化Q的输出,这就是一个生成对抗网络,即有条件的生成对抗网络(conditional GAN)。Q就是判别器,但在强化学习里就是评论员,演员在生成对抗网络里面就是生成器。
一开始会有一个策略 π \pi π,它与环境交互并估计Q值。估计完Q值以后,我们就把Q值固定,只去学习一个演员。假设这个Q值估得很准,它知道在某一个状态采取什么样的动作会得到很大的Q值。接下来就学习这个演员,演员在给定s的时候,采取了a,可以让最后Q函数算出来的值越大越好。我们用准则(criteria)去更新策略 π \pi π,用新的 π \pi π与环境交互,再估计Q值,得到新的 π \pi π去最大化Q值的输出。深度Q网络里面的技巧,在这里也几乎都用得上,比如经验回放、探索等技巧。
5.参考资料
强化学习基础 北京邮电大学 鲁鹏 强化学习基础 (本科生课程) 北京邮电大学 鲁鹏_哔哩哔哩_bilibili
深度强化学习 台湾大学 李宏毅 DRL Lecture 1_ Policy Gradient (Review)_哔哩哔哩_bilibili
蘑菇书EasyRL datawhalechina/easy-rl: 强化学习中文教程(蘑菇书),在线阅读地址:https://datawhalechina.github.io/easy-rl/