文章目录
Review——Policy Gradient
介绍A3C的方法之前先来复习一遍Policy Gradient,在Policy Gradient中我们在更新Policy的参数 θ \theta θ 的时候,我们使用了下面这个式子来计算梯度:
上面这个式子的意思是说,我们先让Agent与环境做互动,在
s
t
s_t
st 这个状态下采取了
a
t
a_t
at 这个action,可以计算出在
s
t
s_t
st下采取
a
t
a_t
at的概率。接下来计算从这个状态下采取了这个动作之后直到这个Episode结束得到的cumulated reward的值。
γ
t
′
−
t
{\gamma}^{t'-t}
γt′−t的意义在于,距离当前step比较久远的action对于这里的action space的影响是比较小的(0<
γ
\gamma
γ<1)。b作为baseline,主要作用是希望括号当中的这一项有正有负,当括号内项为正时就调整
θ
\theta
θ使得在这个状态下采取这个action的几率增大,反之则减小。
拓展:现在我们令
G
t
n
=
∑
t
′
=
t
T
n
γ
t
′
−
t
r
t
′
n
(1)
G_t^n = \sum\nolimits_{t' = t}^{{T_n}} {{\gamma ^{t' - t}}r_{t'}^n} \tag{1}
Gtn=∑t′=tTnγt′−trt′n(1)
即让
G
t
n
G_t^n
Gtn来表示在状态
s
t
s_t
st下采取了动作
a
t
a_t
at后直到Episode结束,policy所得到的cumulated reward。
显然,
G
t
n
G_t^n
Gtn是一个非常不稳定的值,因为在状态
s
t
s_t
st下采取了动作
a
t
a_t
at后会发生什么是完全随机的,
G
t
n
G_t^n
Gtn可能是一个随机变量,服从某一个distribution,我们的每一个Episode都是在这个distribution里抽样,而这个随机变量的方差可能会非常的大。如果能用
G
t
n
G_t^n
Gtn的期望值来代替公式(1)中左边的项,会使得整个计算更为稳定。那么问题来了,我们能不能直接估测这个随机变量的期望值呢?
Review——Q-Learning
在上一节介绍Q-Learning方法的时候,我们介绍了两种Critic,即 V π ( s ) V^{\pi}(s) Vπ(s)和 Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a)
- State value function V π ( s ) {V^\pi }(s) Vπ(s)
这个function的输入是一个环境s,输出是当前 actor π \pi π 在此环境下进行互动直到当前Episode结束时获得的reward的期望值- State-action value function Q π ( s , a ) {Q^\pi }(s,a) Qπ(s,a)
这个function的输入是一个环境s和一个动作a,输出是在环境s下强制采取了动作a之后当前 actor π \pi π 的cumulated reward的期望值。
Actor-Critic
观察这两种Critic的定义我们会发现,下面的这种Critic恰好满足:
E
[
G
t
n
]
=
Q
π
θ
(
s
t
n
,
a
t
n
)
(2)
E[G_t^n]=Q^{\pi_\theta}(s_t^n,a_t^n) \tag{2}
E[Gtn]=Qπθ(stn,atn)(2)
另外,我们用
V
π
θ
(
s
t
n
)
V^{\pi_\theta}(s_t^n)
Vπθ(stn)来代替计算梯度的公式当中的 b(baseline),(当然b有很多代替的方式,这里提到的是最常见的一种),将计算梯度的式子中括号内的项变为
Q
π
θ
(
s
t
n
,
a
t
n
)
−
V
π
θ
(
s
t
n
)
Q^{\pi_\theta}(s_t^n,a_t^n)-V^{\pi_\theta}(s_t^n)
Qπθ(stn,atn)−Vπθ(stn)
至此,我们就介绍完了Actor-Critic的思想。
Advantage Actor-Critic(A2C)
Actor-Critic有一项缺点就是它需要Estimate两个network(Q-network和V-network),成倍增加了network估测不准的风险。我们可以只估测一个network来降低风险,主要利用了以下这个式子
Q
π
(
s
t
n
,
a
t
n
)
=
r
t
n
+
V
π
(
s
t
+
1
n
)
Q^\pi(s_t^n,a_t^n)=r_t^n+V^\pi(s_{t+1}^n)
Qπ(stn,atn)=rtn+Vπ(st+1n)
(注:严格来说应该在右边加上期望值,这两端才能完全相等,这里直接令两端相等,虽然引入了
r
t
n
r_t^n
rtn这个随机变量带来的方差,但相比于
G
t
n
G_t^n
Gtn这个将所有step的reward加起来得到的随机变量的方差来说是微不足道的)
基于这些步骤,我们可以更新一下我们在文章开头用于计算梯度的那个式子:
Tips for Advantage Actor-Critic:
- Actor和Critic两个network的参数可以共用:
我们知道A2C当中实际上要更新的是两个network,一个是策略本身 π ( s ) \pi(s) π(s),,另外一个是V-network V π ( s ) V^\pi(s) Vπ(s),由于这两个network的输入都是状态s,因而它们在最前面几层layer的处理是可以共用的(如使用CNN将image的pixel变成比较high-level的information等)。
- A2C的探索机制(Exploration)
Asynchronous Advantage Actor-Critic(A3C)
A3C具体操作由一个Global Network和若干个Worker来完成。每个Worker循环执行以下过程:将Global Network当中的参数copy过来,然后各自sample data,计算梯度,再将计算得到的梯度传回Global Network以更新参数。(对于某一个Worker来说,当它把梯度传回Global Network时,其参数可能已经被其他的Worker更新过,这个不需要关心,我们直接在当前的参数基础上更新就好)
Pathwise Derivative Policy Gradient
这种方法可以被认为是Q-Learning用于解决continous action问题的一种特别的解法(在上篇笔记当中我们提到过,一般的Q-Learning在解决continous action问题时会比较麻烦),也可以被认为是一种特别的Actor-Critic方法。
通俗的解释这种方法的特别之处就是说,它不只告诉你当前采取的action好或者不好,还会告诉你采取什么样的action才是最好的(得到最大的Q-value)
在一般的Q-learning当中,我们进行
Q
π
(
s
,
a
)
Q^\pi(s,a)
Qπ(s,a)的学习,这个network以一个状态s和一个动作a为输入,输出的是Q-function的值;而现在Pathwise Derivative Policy Gradient的方法是,再learn一个actor,这个actor的输入是一个状态s,输出是使
Q
π
(
s
,
a
)
Q^\pi(s,a)
Qπ(s,a)最大的那个action a,最后将这两个network接起来,成为一个更大的network。在这种方法中,Q-network中的参数会被固定住,调整的只有前半部分actor的参数,仍然使用gradient ascent方法来使Q-function的值最大化。
在这种方法中,Q-learning方法当中的一些机制(如Exploration、Replay Buffer)均可继续沿用。
现在,我们在上一节中Q-learning的演算法的基础上做几处更改,得到Pathwise Derivative Policy Gradient的演算法。