一、介绍
Actor-Critic 算法有两部分组成:actor 和 critic。其中 action 就是Policy Gradient 算法,critic 是Q-learning。所以实际上 actor-critic算法是Q-learning算法和policy gradient算法的结合。
- Actor Critic 算法能在有限维的输入和有限维的输出中起到比较好的效果。
- Actor 角色起到的作用是:在当前状态下决定哪一个动作被执行会达到最好的效果;而Critic则是对某一个状态下采取的某个动作做出评价。这个评价会影响 actor 今后的选择。
- Actor-Critic 算法所需要的训练时间要比Policy Gradient 算法短。
二、回顾 Q-learning
对于Q-learning,有如下特点:
- 基于 value-based
- 处理离散的动作空间
- 它是一个 model-free 的算法,使用 Q函数去找到最理想的策略

如上图的网络都是为了近似 Q(s,a)函数,有了 Q(s,a),我们就可以根据Q(s,a)的值来作为判断依据,作出恰当的行为。

Q-learning算法最主要的一点是:决策的依据是Q(s,a)的值。即算法的本质是在计算 当前状态s, 采取某个动作 a 后会获得的未来的奖励的期望,这个值就是 Q(s,a)。换句话说,我们可以把这个算法的核心看成一个评论家(Critic),而这个评论家会对我们在当前状态s下,采取的动作a这个决策作出一个评价,评价的结果就是Q(s,a)的值。
但是,Q-learning 算法却不怎么适合解决连续动作空间的问题。因为如果动作空间是连续的,那么用Q-learning算法就需要对动作空间离散化,而离散化的结果会导致动作空间的维度非常高,这就使得Q-learning 算法在实际应用起来很难求得最优值,且计算速度比较慢。
而Policy Gradient 正好弥补了这个缺点。
三、回顾 Policy Gradient
Policy Gradient 算法的核心思想是: 根据当前状态,直接算出下一个动作是什么或下一个动作的概率分布是什么。即它的输入是当前状态 s, 而输出是具体的某一个动作或者是动作的分布。

我们可以想像,Policy Gradient 就像一个演员(Actor),它根据某一个状态s,然后作出某一个动作或者给出动作的分布,而不像Q-learning 算法那样输出动作的Q函数值。
四、Actor Critic
Actor-Critic 是Q-learning 和 Policy Gradient 的结合。
为了导出 Actor-Critic 算法,必须先了解Policy Gradient 算法是如何一步步优化策略的。

如上图所示, 最简单的Policy Gradient 算法要优化的函数如下:
L
=
∑
l
o
g
π
θ
(
s
t
,
a
t
)
v
t
L = \sum log \pi_\theta(s_t, a_t) v_t
L=∑logπθ(st,at)vt
其中
v
t
v_t
vt 要根据 Monte-Carlo 算法估计,故又可以写成:
L
=
∑
l
o
g
π
θ
(
s
t
,
a
t
)
G
t
L = \sum log \pi_\theta(s_t, a_t) G_t
L=∑logπθ(st,at)Gt
但是这个
G
t
G_t
Gt 方差会比较大,因为
G
t
G_t
Gt是由多个随机变量得到的,因此,我们需要寻找减少方差的办法。
一个方法就是引入一个 baseline 的函数 b, 这个 b 会使得
(
G
t
−
b
)
(G_t - b)
(Gt−b)的期望不变,但是方差会变小,常用的 baseline函数就是
V
(
s
t
)
V(s_t)
V(st)。再来,为了进一步降低
G
t
G_t
Gt的随机性,我们用
E
(
G
t
)
E(G_t)
E(Gt) 替代
G
t
G_t
Gt,这样,源式就变成:
L
=
∑
l
o
g
π
θ
(
s
t
,
a
t
)
(
E
(
G
t
)
−
V
(
s
t
)
)
L = \sum log \pi_\theta(s_t, a_t) (E(G_t) - V(s_t))
L=∑logπθ(st,at)(E(Gt)−V(st))
因为
E
(
G
t
∣
s
t
,
a
t
)
=
Q
(
s
t
,
a
t
)
E(G_t| s_t, a_t) = Q(s_t, a_t)
E(Gt∣st,at)=Q(st,at),故进一步演化成:
L
=
∑
l
o
g
π
θ
(
s
t
,
a
t
)
(
Q
(
s
t
,
a
t
)
−
V
(
s
t
)
)
L = \sum log \pi_\theta(s_t, a_t) (Q(s_t, a_t) - V(s_t))
L=∑logπθ(st,at)(Q(st,at)−V(st))
照上面的式子看来,我们需要两个网络去估计
Q
(
s
t
,
a
t
)
Q(s_t, a_t)
Q(st,at) 和
V
(
s
t
)
V(s_t)
V(st),但是考虑到贝尔曼方程:
Q
(
s
t
,
a
t
)
=
E
[
r
+
γ
V
(
s
t
+
1
)
]
Q(s_t, a_t) = E[r + \gamma V(s_{t+1})]
Q(st,at)=E[r+γV(st+1)]
弃掉期望, 得:
Q
(
s
t
,
a
t
)
=
r
+
γ
V
(
s
t
+
1
)
Q(s_t, a_t) = r + \gamma V(s_{t+1})
Q(st,at)=r+γV(st+1)
即最终的式子为:
L
=
∑
l
o
g
π
θ
(
s
t
,
a
t
)
(
r
+
γ
V
(
s
t
+
1
)
−
V
(
s
t
)
)
L = \sum log \pi_\theta(s_t, a_t) (r+ \gamma V(s_{t+1}) - V(s_t))
L=∑logπθ(st,at)(r+γV(st+1)−V(st))
这样只需要一个网络就可以估算出 V V V 值了,而估算 V V V 的网络正是我们在 Q-learning 中做的,所以我们就把这个网络叫做 Critic。这样就在 Policy Gradient 算法的基础上引进了 Q-learning 算法了

引用
https://www.jianshu.com/p/25c09ae3d206
https://www.bilibili.com/video/av24724071/?p=6
https://www.jianshu.com/p/277abf64e369
本文深入探讨了Actor-Critic算法,一种结合了Q-learning和PolicyGradient的强化学习方法。通过对比两种基础算法,详细讲解了Actor-Critic如何优化策略,减少方差,以及其在网络中的具体实现。
2043

被折叠的 条评论
为什么被折叠?



