原本计划将AC、A2C、A3C算法写在一块的,但是写完后发现内容太多了,大家看的时候会非常没有耐心,效率感觉会比较低,就把他们拆开写了。
一、A2C算法
A2C 没有具体的论文,是 OpenAI 在实现 baseline 中发现多个actor的梯度同步更新或异步更新产生的效果差不多,所以写了一个博客 , 同时在 OpenAI baseline 中实现了A2C。
因此也没有具体的伪代码进行展示。
二、A2C与AC算法的区别
与AC算法不同的是,actor网络求梯度的时候用的是优势函数 Q ( s , a ) − V ( s ) Q(s,a)-V(s) Q(s,a)−V(s) 。
1、actor网络和critic网络的更新
actor网络的更新:
θ
=
θ
+
α
▽
θ
l
o
g
π
θ
(
s
t
,
a
t
)
(
Q
(
s
,
a
)
−
V
(
s
)
)
θ=θ+α▽ _{θ} log π _{θ} (s_{t},a_{t})(Q(s,a)-V(s))
θ=θ+α▽θlogπθ(st,at)(Q(s,a)−V(s))
但是在实际操作中,一般用TD误差代替优势函数进行计算,因为TD误差是优势函数的无偏估计。TD error:$ δ=r+γV(S′)−V(S)$。因此actor网络的更新公式为:
θ
=
θ
+
α
▽
θ
l
o
g
π
θ
(
s
t
,
a
t
)
δ
θ=θ+α▽ _{θ} log π _{θ} (s_{t},a_{t})\delta
θ=θ+α▽θlogπθ(st,at)δ
δ
=
r
+
γ
V
(
S
′
)
−
V
(
S
)
δ=r+γV(S′)−V(S)
δ=r+γV(S′)−V(S)
critic网络的更新:一般使用MSE(均方误差)损失函数来做迭代更新,
均方误差损失函数:
1
n
∑
n
=
1
∞
(
R
+
γ
V
(
S
′
)
−
V
(
S
,
w
)
)
2
=
1
n
∗
∑
n
=
1
∞
δ
2
\frac{1}{n}\sum_{n=1}^{\infty}{(R+γV(S^{′})−V(S,w))^{2}}=\frac{1}{n}*\sum_{n=1}^{\infty}{\delta}^2
n1∑n=1∞(R+γV(S′)−V(S,w))2=n1∗∑n=1∞δ2
2、其余内容
其余内容和AC算法内容差不多都保持一致。