TD3:Twin Delayed Deterministic Policy Gradient,是DDPG的一种优化算法。
参考文档:
知乎:强化学习论文笔记-精简版
知乎:强化学习论文笔记2-细化版
论文地址(包括补充材料)点这里。
源代码点这里。
DDPG存在的问题:
- 对超参数敏感,不同的超参数设置会产生不同的效果。
- DDPG会产生 Q Q Q值过估计的问题,我们知道 Q Q Q值是很重要的,他影响着Actor网络的更新,因此该问题必须得到解决。
TD3就是用来解决DDPG第二个问题的,不仅如此,TD3还顺带减弱了高方差的影响。
Addressing Function Approximation Error in Actor-Critic Methods
Abstract
引言部分说了4件事,基本上包含了整篇文章的内容:
- 众所周知,DQN中存在着过估计现象。作者将分析Actor-Critic中也存在着过估计。为了解决overestimate,提出了
截断的双Q学习算法
。 - 提出
延迟策略更新
思想来降低每次更新的error。 - 提出了
策略平滑
操作,即对Target部分引入高斯噪声来平滑 Q Q Q值。 - 实验基于OpenAI的gym库,TD3的表现力强于当时最优的RL算法。
1. Introduction
文章总体分为2部分:第一部分是解决过估计问题,另一部分是解决高方差问题。
过估计
过估计现象在离散动作空间的DQN
中存在着很大的问题——产生次优策略,但是在Actor-Critic中同样也存在这overestimation。为此,作者将以连续动作空间的DPG
为靶子来展现:
- TD算法中的过估计问题以及累积error问题在AC上的展现。
- 提出相应的解决办法,在游戏上展现当前最好的表现力。
过估计现象的根源并不是DQN,而是Q-learning的
M
a
x
Max
Max操作。由于TD算法基于DP,其值函数的更新是基于下个状态,一个状态接一个状态,直到整个Episode结束,单步更新产生的bias会被连续积累,产生累积误差。
经过分析,基于AC算法也存在overestimation,比如DPG算法。故面前有2套算法可以用来参考:
- DDQN(Van Hasselt 2016)中使用当前策略的动作来作为目标策略中的动作,每隔一定的step,就会将当前策略网络复制给目标网络,其通过解耦来避开取得最大的
Q
π
(
s
′
)
Q^\pi(s')
Qπ(s′)。但是作者指出:AC算法中如果这样做的话,会因为
其本身策略更新速度慢
而使得估计网络和Target网络过于相似,这样的话就起不到避开最大 Q Q Q值的作用了。故DDQN的方法无法借鉴。 - 故只剩一条路了,就是更加久远的(Van Hasselt 2010年)Double Q-learning算法。这种算法采用2个完全独立的估计器来做,其解耦性更强。
但是这么做虽然有效果,但是还不保险,因为如果其中一个估计器方差较高的话(即取值不稳定),那么就算其是无偏估计,那么也会使得解耦失效,比如估计器A取得最大值时的动作刚好就是估计器B过估计的动作,这也是会发生的。因此为了避免这个情况,就引出了Clipped Double Q-learning
算法,其核心思想就是:我不相信2个估计器都会同时出现上述这种情况,就算我
Q
B
(
s
′
,
arg max
a
Q
A
(
s
′
)
)
Q^B(s',\argmax_aQ^A(s'))
QB(s′,aargmaxQA(s′))出现了过估计,那我
Q
A
(
s
′
,
arg max
a
Q
B
(
s
′
)
)
Q^A(s',\argmax_aQ^B(s'))
QA(s′,aargmaxQB(s′))不会也出现过估计问题。算法上的实现就是通过取这两个值的最小值。
CDQ的缺陷就是会产生欠估计
,但是欠估计总比过估计好,因为欠估计的负bias不会用过传播而扩散。
高方差
在RL中经常会有方差低偏差高,偏差低方差高的情况。因此我们经常在这两者中trade-off。文章中提出了3个减弱方差的办法:
- DQN中的技巧——
Target network
,通过降低累积误差(error)来降低方差。 - 解耦Actor网络的更新和Critic网络的更新,让Actor更新的比Critic慢一点,知道Critic能有个比较准确的值的时候,来更新Actor的参数,即
延迟策略更新
。 - 引入
正则化
策略,用于解决过拟合现象(方差较高),通过引入高斯平滑来达到近似动作有近似值函数的目的。
结合以上2点形成一套在DDPG上修改的off-policy的Actor-Critic算法——TD3算法。
2. Related Work
一些需要参考的文章,推荐看以下几篇:
Double Q-learning
DQN
DDQN
Smoothed Q
DPG
DDPG
3. Background
都是关于MDP、DPG、Q-learning、DQN的一些基础知识,老生常谈了,简要说一下。
DPG策略的更新是基于值函数的:
∇
ϕ
J
(
ϕ
)
=
E
s
∼
ρ
π
[
∇
a
Q
π
(
s
,
a
)
∣
a
=
π
(
s
)
∇
ϕ
π
ϕ
(
s
)
]
(1)
\nabla_\phi J(\phi)=\mathbb{E}_{s\sim\rho^\pi}[\nabla_aQ^\pi(s,a)|_{a=\pi(s)}\nabla_\phi\pi_\phi(s)]\tag1
∇ϕJ(ϕ)=Es∼ρπ[∇aQπ(s,a)∣a=π(s)∇ϕπϕ(s)](1)
RL的算法都是基于MDP背景基础下的,其中一类算法Q-learning作为近年来多种Model-free算法的基础,这是一种基于贝尔曼等式的TD算法。其更新的目标是:
Q
π
(
s
,
a
)
=
r
+
γ
E
s
′
,
a
′
[
Q
π
(
s
′
,
a
′
)
]
,
a
∼
π
(
s
′
)
(2)
Q^\pi(s,a)=r+\gamma \mathbb{E}_{s',a'}[Q^\pi(s',a')],\\a\sim \pi(s')\tag2
Qπ(s,a)=r+γEs′,a′[Qπ(s′,a′)],a∼π(s′)(2)
DQN有2大法宝,其中之一就是推出了Target Q Network,用于作为TD目标值更新
Q
Q
Q估计值:
y
=
r
+
γ
Q
θ
′
(
s
′
,
a
′
)
,
a
′
∼
π
ϕ
′
(
s
′
)
(3)
y=r+\gamma Q_{\theta'}(s',a'),\\a'\sim\pi_{\phi'}(s')\tag3
y=r+γQθ′(s′,a′),a′∼πϕ′(s′)(3)DDQN就是改变了
a
′
a'
a′的来源——
a
′
∼
π
ϕ
(
s
′
)
a'\sim\pi_\phi(s')
a′∼πϕ(s′)。
Target网络通过估计网络的软更新实现,一般有2种方式,一种是以固定次数的step,另一种是
θ
′
←
τ
θ
+
(
1
−
τ
)
θ
′
\theta'\gets\tau\theta+(1-\tau)\theta'
θ′←τθ+(1−τ)θ′。
τ
\tau
τ一般取值较小。
4. Overestimation Bias
Q-learning在离散动作空间下产生overesitimation的原因,在Double Q-learning这篇文章中用数学公式解释过,这里用一个比较简单的方式说明一下过估计原因:
E
[
m
a
x
a
′
Q
(
s
′
,
a
′
)
+
ϵ
]
≥
m
a
x
a
′
Q
(
s
′
,
a
′
)
\mathbb{E}[max_{a'}Q(s',a')+\epsilon]\ge max_{a'}Q(s',a')
E[maxa′Q(s′,a′)+ϵ]≥maxa′Q(s′,a′),其中
ϵ
\epsilon
ϵ来自于网络估计中的噪声或者样本噪声,这样一来,TD目标值就显得偏大,因此连续的过估计将会通过贝尔曼等式扩散,误差被不断累积。具体来说:(参考曾伊言:强化学习算法TD3论文的翻译与解读)
接下来作者要在DPG算法中分析在连续动作空间下overestimation的原因(4.1节),以及引出CDQ算法去解决(4.2节)。
4.1. Overestimation Bias in Actor-Critic
使用连续动作空间下的算法DPG作为研究目标并说明在Critic网络中的过估计。
令
ϕ
a
p
p
r
o
x
\phi_{approx}
ϕapprox为实际过程中Actor网络参数,其更新来源于
Q
θ
(
s
,
a
)
Q_\theta(s,a)
Qθ(s,a);
ϕ
t
r
u
e
\phi_{true}
ϕtrue为真实值(或者说理想值),下面证明AC过估计的
π
a
p
p
r
o
x
\pi_{approx}
πapprox和
π
t
r
u
e
\pi_{true}
πtrue同理。其更新来源于真值
Q
π
(
s
,
a
)
Q^\pi(s,a)
Qπ(s,a):(做标准化)
ϕ
a
p
p
r
o
x
=
ϕ
+
α
Z
1
E
s
∼
ρ
π
[
∇
ϕ
π
ϕ
(
s
)
∇
a
Q
θ
(
s
,
a
)
∣
a
=
π
ϕ
(
s
)
]
,
ϕ
t
r
u
e
=
ϕ
+
α
Z
2
E
s
∼
ρ
π
[
∇
ϕ
π
ϕ
(
s
)
∇
a
Q
π
(
s
,
a
)
∣
a
=
π
ϕ
(
s
)
]
Z
−
1
∣
∣
E
[
⋅
]
∣
∣
=
1
(4)
\phi_{approx}=\phi+\frac{\alpha}{Z_1}\mathbb{E}_{s\sim\rho^\pi}[\nabla_\phi\pi_\phi(s)\nabla_aQ_\theta(s,a)|_{a=\pi_\phi(s)}],\\ \phi_{true}=\phi+\frac{\alpha}{Z_2}\mathbb{E}_{s\sim\rho^\pi}[\nabla_\phi\pi_\phi(s)\nabla_aQ^\pi(s,a)|_{a=\pi_\phi(s)}]\\ Z^{-1}||\mathbb{E[\cdot]}||=1\tag4
ϕapprox=ϕ+Z1αEs∼ρπ[∇ϕπϕ(s)∇aQθ(s,a)∣a=πϕ(s)],ϕtrue=ϕ+Z2αEs∼ρπ[∇ϕπϕ(s)∇aQπ(s,a)∣a=πϕ(s)]Z−1∣∣E[⋅]∣∣=1(4)如果没有标准化
Z
Z
Z,那么在稍微严格的条件下高偏估计仍然保证会发生,在补充材料中进一步说明。
AC中出现过估计的原因
在Smoothed-Q论文中可知:在DDPG算法中很容易出现多个极大峰,有时候你的结果很可能就是局部最大。过估计就是要比较
Q
e
v
a
l
Q_{eval}
Qeval和
Q
真
值
Q_{真值}
Q真值之间的关系,因此我们要注意尽量要把比较限制在同一个极大峰之内,否则比较是没有意义的。如何限制呢?作者用2个足够小的参数
ϵ
1
、
ϵ
2
\epsilon_1、\epsilon_2
ϵ1、ϵ2来限制学习率
α
\alpha
α。
当
α
<
ϵ
1
\alpha<\epsilon_1
α<ϵ1时,因为同个学习率下两种策略网络参数更新情况不同,所以可能存在下列情况,如下图所示:
故:
E
[
Q
θ
(
s
,
π
a
p
p
r
o
x
(
s
)
)
]
≥
E
[
Q
θ
(
s
,
π
t
r
u
e
(
s
)
)
]
(5)
\mathbb{E}[Q_\theta(s,\pi_{approx}(s))]\ge\mathbb{E}[Q_\theta(s,\pi_{true}(s))]\tag5
E[Qθ(s,πapprox(s))]≥E[Qθ(s,πtrue(s))](5)
同理,当
α
<
ϵ
2
\alpha<\epsilon_2
α<ϵ2时,可能存在下列情况,如下图所示:
故:
E
[
Q
π
(
s
,
π
t
r
u
e
(
s
)
)
]
≥
E
[
Q
π
(
s
,
π
a
p
p
r
o
x
(
s
)
)
]
(6)
\mathbb{E}[Q^\pi(s,\pi_{true}(s))]\ge\mathbb{E}[Q^\pi(s,\pi_{approx}(s))]\tag6
E[Qπ(s,πtrue(s))]≥E[Qπ(s,πapprox(s))](6)
又因为存在可能:
E
[
Q
θ
(
s
,
π
t
r
u
e
(
s
)
)
]
≥
E
[
Q
π
(
s
,
π
t
r
u
e
(
s
)
)
]
\mathbb{E}[Q_\theta(s,\pi_{true}(s))]\ge\mathbb{E}[Q^\pi(s,\pi_{true}(s))]
E[Qθ(s,πtrue(s))]≥E[Qπ(s,πtrue(s))],因此当
α
≤
min
(
ϵ
1
,
ϵ
2
)
\alpha\leq\min(\epsilon_1,\epsilon_2)
α≤min(ϵ1,ϵ2)(这个条件意思就是满足上述2种情况)时,存在:
E
[
Q
θ
(
s
,
π
a
p
p
r
o
x
(
s
)
)
]
≥
E
[
Q
π
(
s
,
π
a
p
p
r
o
x
(
s
)
)
]
(7)
\mathbb{E}[Q_\theta(s,\pi_{approx}(s))]\ge\mathbb{E}[Q^\pi(s,\pi_{approx}(s))]\tag7
E[Qθ(s,πapprox(s))]≥E[Qπ(s,πapprox(s))](7)公式7的意思就是我在实际训练过程中,在动作
π
a
p
p
r
o
x
\pi_{approx}
πapprox处出现了过估计。
在AC中过估计的根本原因在于策略网络直接对
Q
Q
Q值训练,对
Q
Q
Q值的提升没有严格的界限,因此就可能会造成将
Q
Q
Q值提升到超出真值的大小。
尽管每次单步更新的过估计很小,但多步更新之后的累计误差会很大。其次,Actor网络和Critic网络是互相连接影响的,一个不准确的
Q
Q
Q值会导致错误的策略更新,因为一个次优的Critic会产生一个次优的策略(次优的Actor参数
ϕ
\phi
ϕ),然后这个次优的策略将会产生2大危害
:
- 在之后的值函数更新过程中生成不准确的 Q Q Q值。
- 这个次优策略 a a a将会在下次策略更新中得到强化(DPG本质还是起源于传统的PG算法),这就是强化学习的“强化”。
接下来用实践来验证:
这幅图是怎么画的呢?具体细节如下:
- 实验分为训练与评估(测试),一共训练100万个steps,评价准则是 Q π Q^\pi Qπ值。一共测试1000个Episodes,也就是说每过1000个steps就测试一次,一共采样1000个试验点。测试就是用当前策略作为暂时的目标策略,让Agent用这个策略去跑这个游戏,记下每一步的奖励 r r r,最后计算出折扣累计奖励作为 Q 真 值 Q_{真值} Q真值。
- 因为代码在实验过程中,有一个experience replay过程,需要累计到一定数量才开始训练,因此测试的时候就从开始从经验池采集trans开始。
- 这里真实值的计算和我们以往不一样,比如在DQN这篇文章中实验的真值是一条横线,那是因为他画的是完全训练结束之后策略下的 Q 真 值 Q_{真值} Q真值,是完全训练好的策略,等效于Figure 1中的最后一个试验点的值。
从结果来看:
- DDPG存在着很严重的
过估计
现象。 - CDQ算法可以有效减弱overestimation。
4.2. Clipped Double Q-Learning for Actor-Critic
DDQN抑制过估计的思想适合在离散动作空间下,但不适合在Actor-Critic算法中。因此作者提出了基于Double Q-learning算法的Clipped Double Q-learning
算法用于有效解决AC中的过估计问题。将CDQ分为Double Q-learning和Clipped两部分来看。
Double Q-learning
这里和Double Q-learning论文中的实现是大体上一样的,用2个独立的估计器 ( Q θ 1 , Q θ 2 ) (Q_{\theta1,}Q_{\theta2}) (Qθ1,Qθ2)来解耦值函数更新中的 M a x Max Max操作(详见我的另一篇笔记)。但是和Double Q-learning的实现上还有一点区别:
- 因为CDQ大多用在连续状态空间下,因此需要借鉴DQN中的Target网络技术。
- 借鉴DDQN中的做法,即Target中使用当前策略在 s ′ s' s′下的动作,而非目标策略在 s ′ s' s′下的动作。
借鉴DDQN
的实现上的Critic更新:
y
=
r
+
γ
Q
θ
′
(
s
′
,
π
ϕ
(
s
′
)
)
(8)
y=r+\gamma Q_{\theta'}(s',\pi_\phi(s'))\tag8
y=r+γQθ′(s′,πϕ(s′))(8)在这里带
′
'
′ 的就是Target网络的参数,否则就是当前策略网络(估计网络)的参数。
但在实际实现过程中,发现DDQN的方法并不适用与Actor-Critic,因为AC算法更新忒慢了,以至于当前网络和目标网络过于相近,无法成功解耦,等效于DQN,并且实际提升只有一丢丢,因此放弃DDQN,转向Double Q-learning。
基于Double Q-learning的AC算法需要用到1对估计器以及对应的1对策略参数:
(
Q
θ
1
,
π
θ
1
)
(Q_{\theta1},\pi_{\theta1})
(Qθ1,πθ1)、
(
Q
θ
2
,
π
θ
2
)
(Q_{\theta2},\pi_{\theta2})
(Qθ2,πθ2),Critic更新如下:
y
1
=
r
+
γ
Q
θ
2
′
(
s
′
,
π
ϕ
1
(
s
′
)
)
y
2
=
r
+
γ
Q
θ
1
′
(
s
′
,
π
ϕ
2
(
s
′
)
)
(9)
y_1=r+\gamma Q_{\theta'_2}(s',\pi_{\phi1}(s'))\\ y_2=r+\gamma Q_{\theta'_1}(s',\pi_{\phi2}(s'))\tag9
y1=r+γQθ2′(s′,πϕ1(s′))y2=r+γQθ1′(s′,πϕ2(s′))(9)可以看出其结合了Double Q-learning的强解耦性+DQN的Target网络+DDQN技术(注意目前还没有clipped操作),我们称之为DQ-AC算法。
DDQN-AC和DQ-AC的实验结果如下:
可以看出:
- DDQN-AC出现了和Figure 1中DDPG类似的overestimation。
- 虽然基于Double Q-learning的AC算法一定程度上削弱了正偏差,但是并没有达到我们的预期,仍有部分正偏差残留着。
这是因为其实两个Critic并不完全独立:
Clipped
- 我们在Double Q-learning论文中的 Q Q Q使用Q表来存储,对于估计器A,我们只需要查询获得估计器B的 Q Q Q值即可。但是在DQ-AC中,目标值 y 1 、 y 2 y_1、y_2 y1、y2的计算包含了另一个Critic的网络参数 θ \theta θ,这是一个会变化可学习的参数。因此不能说2个Critic网络是独立的。
- 两个Critic共用一个replay buffer。
不独立就意味着解耦性变弱了,因此对于某些状态,解耦失效,那么双估计器就是个空壳——
Q
θ
2
(
s
,
π
ϕ
1
(
s
)
)
>
Q
θ
1
(
s
,
π
ϕ
1
(
s
)
)
Q_{\theta_2}(s,\pi_{\phi_1}(s))>Q_{\theta_1}(s,\pi_{\phi_1}(s))
Qθ2(s,πϕ1(s))>Qθ1(s,πϕ1(s))。而后者(DDQN-AC)本来就一般都会产生正偏差,这么一来,偏差进一步拉大了!
为了缓解这个问题,作者引入Clipped Double Q-learning
算法:
y
1
=
r
+
γ
min
i
=
1
,
2
Q
θ
i
′
(
s
′
,
π
ϕ
1
(
s
′
)
)
y
2
=
r
+
γ
min
j
=
1
,
2
Q
θ
j
′
(
s
′
,
π
ϕ
2
(
s
′
)
)
(10)
y_1=r+\gamma \min_{i=1,2}Q_{\theta'_i}(s',\pi_{\phi_1}(s'))\\ y_2=r+\gamma \min_{j=1,2}Q_{\theta'_j}(s',\pi_{\phi_2}(s'))\tag{10}
y1=r+γi=1,2minQθi′(s′,πϕ1(s′))y2=r+γj=1,2minQθj′(s′,πϕ2(s′))(10)可以看出这其实是一个缓解过估计而非消除的办法,意思就是既然2种情况下都可能产生过估计,那我就挑一个两个正偏差较小的那个作为我的目标值。
Note:
CDQ只是缓解,其只是不会引入比标准Q-learning更新更多的正bias,也就是说,最坏的情况才和标准Q-learning引入的过估计量相等。
总结:
AC更新慢
⇒
\Rightarrow
⇒弃DDQN-AC用DQ-AC;
DQ-AC做不到完全独立
⇒
\Rightarrow
⇒弃DQ-AC用CDQ
CDQ缓解过估计的效果很好(见Figure 1)。但其会产生欠估计,但欠估计总好过overestimation,因为欠估计不会通过策略更新而传播出去。
在TD3算法中,为了节省计算消耗,进行了2处改动:
y
←
r
+
γ
min
i
=
1
,
2
Q
θ
i
′
(
s
′
,
π
ϕ
(
s
′
)
)
y\gets r+\gamma \min_{i=1,2}Q_{\theta'_i}(s',\pi_\phi(s'))
y←r+γi=1,2minQθi′(s′,πϕ(s′))这里和伪代码中有点出入,伪代码中是
π
ϕ
′
\pi_{\phi'}
πϕ′,那是因为TD3是建立在DDPG的,DDPG最初的源码是基于DQN,自然没有使用DDQN的消除过估计技巧。
- 不使用2个策略网络,而使用单个策略网络 π ϕ \pi_\phi πϕ,其更新只于 Q θ 1 Q_{\theta_1} Qθ1有关,因此我们需要最后 Q θ 1 Q_{\theta_1} Qθ1收敛。
- 使用一个目标值 y y y,即令 y 1 = y 2 y_1=y_2 y1=y2,此时 Q θ 1 和 Q θ 2 Q_{\theta_1}和Q_{\theta_2} Qθ1和Qθ2共用一个TD目标值来更新 θ 1 、 θ 2 \theta_1、\theta_2 θ1、θ2。这里看起来可能对 Q θ 2 Q_{\theta_2} Qθ2不太公平且不好理解,但最后收敛性证明中确实证明了这种做法可以导致CDQ算法收敛,即 Q θ 1 ( s , a ) → Q ∗ Q_{\theta_1}(s,a)\to Q^* Qθ1(s,a)→Q∗。
实际操作:
- 如果 Q θ 2 > Q θ 1 Q_{\theta_2}>Q_{\theta_1} Qθ2>Qθ1,那么根据公式(10),我们就按标准的Q-learning更新,以防止正bias变得更大。
- 如果 Q θ 2 < Q θ 1 Q_{\theta_2}<Q_{\theta_1} Qθ2<Qθ1,那么根据公式(10),那就是DQ-AC,即像Double Q-learning一样减小过估计。
作者还指出公式(10)的minimize操作可以有效降低 Q Q Q值的方差,使得学习过程更加稳定。具体来说,将公式(10)的 Q Q Q看成R.V.,因为一群随机变量的最小值越小,则整体分布的方差越大。而在公式(10)中,随机变量 Q Q Q本身就是比较大的值(有可能存在过估计的,因为CDQ是减弱而不是消除,最差情况就是Q-learning,这里上面分析过的),其通过最小化获得一个比原本很大的值更小的一个值,因此公式(10)的最小化运算使得 Q Q Q值分布的方差就得到了减小,也就是说训练过程的稳定性得到了提升。
CDQ收敛性证明
这就是Clipped Double Q-learning算法的全部过程了,还缺少一个其收敛性证明。证明的总体过程和Double Q-learning
的收敛性证明一样的。区别在于:
- Q A 、 Q B Q^A、Q^B QA、QB的更新的TD目标值共用,都是 y y y。
- Q A 、 Q B Q^A、Q^B QA、QB都是同是更新,而Double Q-learning单个step要么只更新A,要么只更新B。(其实CDQ本质也是这样的,但是为了节约计算资源,只好共用1个目标值,我证明过不经节约资源时候的CDQ也是会收敛的,那个时候就是个Double Q-learning,只不过多了一个clip)。
证明细节见补充材料,如果要见更详细的过程,可以参考我的另一篇论文笔记之Double Q-learning中关于收敛性证明。或者可以见下图,我在公式(21)之后增加了详细的过程:
5. Addressing Varience
这一节用3中方式去解决高方差问题
,众所周知,高方差主要的危害:
- 降低学习速率。
- 降低学习表现力
- 学习过程不稳定。
5.1. Accumulating Error
TD算法是一种用下一个状态估计值估计当前状态估计值的过程,整个Episode由每一个step连接起来,而每一个step都必然会有error,即TD误差。因此整个Episode就会有累积误差出现。虽然我们的算法在缩小每一步的TD误差
δ
\delta
δ,但是其仍会累积,可能会导致较大的正偏差,从而产生次优策略。
TD算法的单步更新:
Q
θ
=
r
+
γ
E
[
Q
θ
(
s
′
,
a
′
)
]
−
δ
(
s
,
a
)
(11)
Q_\theta=r+\gamma\mathbb{E}[Q_\theta(s',a')]-\delta(s,a)\tag{11}
Qθ=r+γE[Qθ(s′,a′)]−δ(s,a)(11)
⇒
\Rightarrow
⇒
Q
θ
(
s
,
a
)
=
r
+
γ
E
[
Q
θ
(
s
′
,
a
′
)
]
−
δ
=
r
+
γ
E
[
r
′
+
γ
E
[
Q
θ
(
s
′
′
,
a
′
′
)
−
δ
′
]
]
−
δ
=
E
s
i
∼
ρ
π
,
a
i
∼
π
[
∑
i
=
t
T
γ
i
−
t
(
r
i
−
δ
i
)
]
(12)
Q_\theta(s,a)=r+\gamma\mathbb{E}[Q_\theta(s',a')]-\delta\\ =r+\gamma\mathbb{E}[r'+\gamma\mathbb{E}[Q_\theta(s'',a'')-\delta']]-\delta\\ =\mathbb{E}_{s_i\sim\rho^\pi,a_i\sim\pi}[\sum^T_{i=t}\gamma^{i-t}(r_i-\delta_i)]\tag{12}
Qθ(s,a)=r+γE[Qθ(s′,a′)]−δ=r+γE[r′+γE[Qθ(s′′,a′′)−δ′]]−δ=Esi∼ρπ,ai∼π[i=t∑Tγi−t(ri−δi)](12)
从这个式子可知:
- Q Q Q值的方差正比于实时奖励与TD-error的方差。
- 如果单步的 δ \delta δ不去控制的话,衰减因子 γ \gamma γ越大,则 Q Q Q值的方差增长越快。
- 累积误差 ∑ i δ i \mathop{\sum}\limits_i\delta_i i∑δi存在于 Q Q Q值的估计中。
- 可以看出,累计误差足以影响 Q Q Q值估计的准确性,因此我们在设计算法的时候就要想办法解决这个累计误差,而累计误差又来源于单步更新的TD-error,故我们的目标就是想办法减小单步的误差,后文的Target网络技术就可以减缓单步累计误差。
另外每次单步更新只减小了一个mini-batch的error,除此之外的error并没有得到减小。
5.2. Target Networks and Delayed Policy Updates
在这一节主要3件事:
- 展示Target Network和值函数估计误差之间的关系。
- Target网络技术对于方差的影响。
- 提出策略延迟算法来减小error(bias和var)。
Note:
值函数估计误差(error)包含了bias和var。
Target Network和值函数估计误差之间的关系
Target Network
在DQN中取得了很好的效果,其被当做“标签”称为几乎固定的值,这么做的好处在于提升了学习的稳点性,试想一下,如果每个step,目标值都随着估计网络变动而变动(NIPS DQN),那么势必会造成不稳定的学习,简单的理解就是你的目标一直在移动,他在前面四处跑,你在后面四处追,既无法收敛,而且学习过程极不稳定,因此Target network在DQN中起到了提升稳定性,减小方差
的作用。
如果没有固定的Target Network的话,每个单步更新都会有一定的TD-error
。这些累积起来的error不仅本身就是有害的,并且当使用
M
a
x
Max
Max策略时,还会造成过估计而
Q
Q
Q值发散,得到次优策略。
Target网络技术对于方差的影响
接下来作者将会在AC算法上探究Target网络的作用:
如上图所示的实验配置:
- 作者用① τ = 1 \tau=1 τ=1② τ = 0.01 \tau=0.01 τ=0.01③ τ = 0.1 \tau=0.1 τ=0.1,分别对应于无Target网络,较为固定的Target网络以及处于二者中的Target网络。
- 左图是固定的策略网络,也就是说是一个已经训练完成的策略下,训练Critic网络。Agent在环境中开始游戏,然后跟踪在某个状态上的 Q 值 Q值 Q值,红色线是累计衰减奖励,因此是个固定值。右图是正在训练中的策略网络下,同时也要训练Critic。Agent开始游戏,其实就是我们平时的训练过程,Critic和Actor互相作用,然后跟踪某个状态上的 Q Q Q值。
实验结果分析:
- 首先从左图来看,由于策略本身就是最优策略,因此都3种配置都很快达到了收敛。相对而言,无Target网络“缓冲”最快,但是稳定性是三者中最差的,初步来看,Target网络对于稳定训练,控制方差有帮助。
- 其次从右图来看,无Target网络或者 τ = 0.1 \tau=0.1 τ=0.1的目标网络稳定性很差,阴影部分是方差大小。而 τ = 0.01 \tau=0.01 τ=0.01这种人如其名的Target网络虽然收敛速度较慢,但其稳定性秒杀其余2个。
综上所述:
Target网络确实提升训练的稳定性,降低方差。
提出策略延迟算法来减小error
Figure 3引发了作者提出的一个问题:AC算法会发散的原因是什么?
- 在无Target网络或者Target网络不那么固定的时候,显然
Q
Q
Q值的
方差较大,因此直接会导致策略更新的不稳定
。 - 4.1节的后半段以及Figure 3中右图表现这么不稳定均是因为:AC算法由于是一个Critic和Actor网络
相互联系
的算法。由于Critic的过估计会产生糟糕的策略,而这个策略会在Actor的策略更新中得到加强。换句话说,当Critic的估值不准确的时候,Actor就会朝着错误的方向更新。而错误的Acton会参与到Critic的训练中,会产生错误的 Q Q Q值。
因此让这种不稳定的糟糕循环结束的一个方式就是让Actor的更新速率低于Critic的更新速率,让Critic先更新,在TD-error优化到比较小的时候再更新Actor网络的参数,即策略延迟更新
。
- TD3算法中, 用一个固定参数 d d d作为延迟更新的时长。
- 为了确保TD-error足够的小,Critic的Target网络就得足够“固定”( τ \tau τ足够的小): θ ′ ← τ θ + ( 1 − τ ) θ ′ \theta'\gets\tau\theta+(1-\tau)\theta' θ′←τθ+(1−τ)θ′
- 这种目标策略延迟更新的最大好处在于:提升表现力的同时缩短了训练时间,因为以前Critic和Actor总是同时更新,而现在Actor几乎有一半的时间都不用训练,Actor网络就在那边啥都不做就行了,这大大提升了训练效率,在第6节Experiments可以看到训练速度的提升。
Note:
经典的算法DDPG(包括DPG)是AC算法中的一种,因此DDPG在训练过程中就不稳定,方差较大,容易过拟合。
5.3. Target Policy Smoothing Regularization
本节的核心就是:DPG容易过拟合,并且其
Q
Q
Q值容易产生尖峰(尖峰可能是由于过估计导致的,使得在一个局部范围内,某个动作的
Q
Q
Q值可能特别大)。因此我们引入一种正则化技术
专门用于解决过拟合问题。这种正则化技术就是策略平滑
,它通过引入高斯噪声
来实现。通过正则化技术解决高方差问题的核心就是:动作值相近应该具有相近的
Q
Q
Q值。试想一下,如果两个动作相似但
Q
Q
Q值相差很大,那结果自然就很不稳定。
具体分析如下:
在DPG中,我们在更新Critic的时候,需要用到确定性策略
μ
θ
\mu_\theta
μθ,其对
Q
Q
Q值的不准确很敏感。因为
μ
\mu
μ的更新来自于
Q
Q
Q值,当
Q
Q
Q值如果不准确的话,甚至有较大方差的时候,那么直接会导致确定性策略的方差很大,那么自然Critic更新中TD目标值的方差就很大,很不稳定。
那么TD目标值这么不稳定,咋办呢?——引入正则化技术。这种正则化技术使得
Q
Q
Q值变得平滑,一定程度上也缓解了确定性策略对
Q
Q
Q值不准确而敏感的问题,平滑前后的
Q
θ
′
Q_{\theta'}
Qθ′如下:
策略平滑的公式如下:
y
=
r
+
E
ϵ
[
Q
θ
′
(
s
′
,
π
ϕ
′
(
s
′
)
+
ϵ
)
]
(13)
y=r+\mathbb{E}_\epsilon[Q_{\theta'}(s',\pi_{\phi'}(s')+\epsilon)]\tag{13}
y=r+Eϵ[Qθ′(s′,πϕ′(s′)+ϵ)](13)
这里补充下Smoothed这篇文章中的平滑做法,其是平滑
Q
θ
Q_\theta
Qθ,而不是
Q
θ
′
Q_{\theta'}
Qθ′,本文中是平滑目标网络,所以才叫目标策略平滑:
两者其实本质都是相同的。
关于平滑的理论基础见我的平滑论文笔记
在TD3的算法中是这样的:
y
=
r
+
γ
Q
θ
′
(
s
′
,
π
ϕ
′
(
s
′
)
+
ϵ
)
ϵ
∼
c
l
i
p
(
N
(
0
,
σ
)
,
−
c
,
c
)
(14)
y=r+\gamma Q_{\theta'}(s',\pi_{\phi'}(s')+\epsilon)\\ \epsilon\sim clip(\mathcal{N}(0,\sigma),-c,c)\tag{14}
y=r+γQθ′(s′,πϕ′(s′)+ϵ)ϵ∼clip(N(0,σ),−c,c)(14)在补充材料中,为了避免出现不可能的动作,还可以再加一个
c
l
i
p
clip
clip:
y
=
r
+
γ
Q
θ
′
(
s
′
,
c
l
i
p
(
π
ϕ
′
(
s
′
)
+
ϵ
,
a
c
t
i
o
n
m
i
n
,
a
c
t
i
o
n
m
a
x
)
)
ϵ
∼
c
l
i
p
(
N
(
0
,
σ
)
,
−
c
,
c
)
y=r+\gamma Q_{\theta'}(s',clip(\pi_{\phi'}(s')+\epsilon,action_{min},action_{max}))\\ \epsilon\sim clip(\mathcal{N}(0,\sigma),-c,c)
y=r+γQθ′(s′,clip(πϕ′(s′)+ϵ,actionmin,actionmax))ϵ∼clip(N(0,σ),−c,c)
6. Experiments
综合第四节和第五节:
基于DDPG,用上本节5.2、5.3的2种技巧——策略平滑
和策略延迟
,再加4.2节的技巧——Clipped Double Q-learning
,就形成了我们的TD3算法,这种算法用于解决值函数估计误差(bias+var),在连续动作空间游戏上获得了不错的表现力,算是DDPG的强化版本。
6.1 Evaluation
这是一个通过评估TD3和其他算法表现力和学习速率来体现TD3算法的强大,实验的具体细节如下:
- 在OpenAI的 Gym库中的MuJoCo仿真模拟器作为训练测试平台,在7款游戏中进行较量,如HalfCheetah、Hopper、Walker2d等游戏。
- 进行7种算法的对比,分别是TD3、DDPG、our DDPG、PPO、TRPO(OpenAI学习库标准算法,PPO的前身)、ACKTR、SAC
- our DDPG算法,不同于标准的DDPG算法,它改变了一些网络的结构,比如Critic网络的输入为状态和动作,而非只是状态,具体的可见补充材料C;还有超参数以及探索噪声( O U → N OU\to\mathcal{N} OU→N)。
- 平滑参数 ϵ ∼ N ( 0 , 0.2 ) \epsilon\sim\mathcal{N}(0,0.2) ϵ∼N(0,0.2),其中限制的上限 c = 0.5 c=0.5 c=0.5。
- Target策略延迟d=2,Target网络更新参数 τ = 0.005 \tau=0.005 τ=0.005。
- 行为策略的噪声 N ( 0 , 0.1 ) \mathcal{N}(0,0.1) N(0,0.1)。
- 实验总体分为训练与测试。其中训练为100万个steps,每5000个steps进行一次Evaluation(测试),也就是说Figure 5一共包含200个采样点。评估是进行10个Episode(就是 s t a r t → e n d start\to end start→end),每一个Episode都设置一个随机种子(gym库可以配置的),由于是测试,因此行为策略必须是确定性策略,即不包含高斯噪声,最后评估的准则是这10次的平均奖励,也就是 1 10 ∑ i 10 Q i π \frac{1}{10}\mathop{\sum}\limits^{10}_i Q^\pi_i 101i∑10Qiπ。
最后的实验结果如下所示Figure 5、Table 1:
结论:
- Figure 5中每一幅图均为某个游戏的7种算法的学习曲线。纵坐标为测试的平均奖励,横坐标为时间步。阴影部分为10次中最大奖励曲线与最小奖励曲线之间的差距,可以用方差来衡量,为了避免果条曲线的阴影部分重合而影响观察,作者取了一半的方差(原来阴影宽度的一半)呈现出来。
- 从曲线结果来看,TD3的
表现力
几乎碾压了其余6种算法,并且学习速率
也是碾压。 - 图中可以看出两种DDPG各自的表现力都不相同,好像和两种算法似的,故可以看出
DDPG对超参数敏感
,如Table 3所示: - Table 1是取了测试时候的最大平均奖励,如下所示:在这个评价指标上,TD3也是呈现了碾压态势。这里需要注意的是,表中作者对于TD3的最大值是用 + + +来表示的,它还表示了最小值是多少。
6.2 Ablation Studies
关于什么是Ablation Studies,可以看看网友SleepyBag的回答。简单来说就是基于控制变量法来研究TD3每个成分的性能
在我们的实验中,由于TD3属于多个技巧堆叠而成,因此使用Ablation studies最为合适,具体的存在以下关系:
T
D
3
=
A
H
E
+
D
P
+
T
P
S
+
C
D
Q
或
者
:
T
D
3
=
D
D
P
G
+
D
P
+
T
P
S
+
C
D
Q
TD3=AHE+DP+TPS+CDQ\\ 或者:TD3=DDPG+DP+TPS+CDQ
TD3=AHE+DP+TPS+CDQ或者:TD3=DDPG+DP+TPS+CDQ
实验结果见Table 2:
Figure 8:
我们通过这一节来检测TD3各个技巧的表现力,主要进行2组实验:
- 实验一:包括完整的TD3算法、AHE(our DDPG)算法(改变了结构、超参数、探索策略)、DDPG算法、AHE+DP(策略延迟更新)、AHE+TPS(目标策略平滑)、AHE+CDQ(截断的双Q)、TD3-DP、TD3-TPS、TD3-CDQ。
- 实验二:DQ-AC、DDQN-AC。
实验一
Table 2上的实验数据就是Ablation studies实验,其记录的是10次随机种子测试中最大的平均奖励,和Table 1类似。从该表格中我们可知:
- 增加一个技巧的对表现力的提升不够明显,比如 ③ ↔ ( ④ 、 ⑤ 、 ⑥ ) ③\leftrightarrow(④、⑤、⑥) ③↔(④、⑤、⑥)。
- 增加一对组合技巧对表现力的提升还是较为明显,比如 ③ ↔ ( ⑦ 、 ⑧ 、 ⑨ ) ③\leftrightarrow(⑦、⑧、⑨) ③↔(⑦、⑧、⑨)
- 增加三个组合的TD3表现力最强,比如①几乎在四组实验中表现力最高(黑体标粗)。其实个人认为这里的Ablation实验有一点不是很严谨,可能作者也没说清楚,这里TD3根据源码来看,其DDPG架构部分只是网络结构和探索策略一致,超参数的配置是不同的,这点不严谨。
- 从上述三点可知,TD3作为技巧的堆叠,
不仅仅单单是堆叠,而是有实际效果的
,因此这些堆叠是有必要的。
实验二
我们之前在第4节中指出了CDQ算法对过估计的处理强于DQ、DDQN的,然后在实验二中我们进一步比较这三者对表现力的影响。由于这三者的不同是和overestimation相关的,因此我们对DQ-AC、DDQN-AC都配上DP和TPS技巧,并且使用AHE作为AC结构,我们可以从①、⑨、DQ-AC、DDQN-AC这四个对比得出以下结论:
- ⑨ ↔ ( D Q − A C 、 D D Q N − A C ) ⑨ \leftrightarrow (DQ-AC、DDQN-AC) ⑨↔(DQ−AC、DDQN−AC)可知DQ和DDQN这两种由于独立性不够、解耦性差而使得过估计的削弱作用不明显,除了Ant实验除外。
- 另外要特别指出的是 ① ↔ ⑨ ①\leftrightarrow⑨ ①↔⑨:表明了解决过估计对于提升表现力的重大作用。
7. Conclusion
总结:
- 证明了过估计不仅存在于DQN中,也存在于Actor-Critic系列算法中。
- 提出
Clipped Double Q-learning
算法缓解AC的过估计。 - 提出
延迟策略更新
来减小error,Actor网络和Critic不同时更新,让Actor稍微慢一点。 - 提出目
标策略平滑
来减小方差,即加入噪声。 - TD3主要是(2)(3)(4)三个技巧的堆叠。
- 这几个技巧同时也可以用在其他算法上。
- TD3的表现力以及学习速率强于DDPG算法。
- 在这篇文章中,很清晰的向我们介绍了这些大佬发的文章如会如何进行实验分析的。首先是环境的选择,这里选择的是MUJOCO环境;其次是训练与测试的方式:训练100W个steps,每隔5000个steps进行测试,一共测试200个采样点,每个采样点用10次随机种子设定,输出
期望累计奖励、最大累计奖励、最小累计奖励,三个数据都算的无折扣
(一般只有当估计 Q Q Q值和真实值关系的时候才会计算折扣,比如DQN那篇文章采取的实验)。期望累计奖励反映真实水平——用实线表示,后面2个数据用于反映方差大小——用阴影表示,即稳定性(是否过拟合)。