Twin Delayed DDPG (TD3)
一月 10, 2021
虽然DDPG有时可以获得很好的性能,但对于超参数和其他类型的调优,它经常是脆弱的。DDPG最常见的失效模式是学习后的q函数开始大幅高估q值,从而导致策略失效,因为它利用了q函数中的错误。Twin Delayed DDPG (TD3)是一种通过引入三个关键技巧来解决这个问题的算法:
- Clipped Double Q-learning: TD3学习两个q函数而不是一个(因此称为“Twin”),并使用两个q值中较小的一个来形成Bellman误差损失函数中的目标。
- “Delayed Policy Update: TD3更新策略(和目标网络)的频率低于q函数。比如,每两个q函数更新进行一次策略更新。
- Target Policy Smoothing: TD3向目标动作添加噪声,使策略更难利用Q函数错误,方法是使Q沿着动作的变化平滑。
Key Equations
Target Policy Smoothing
用于形成q学习目标的动作是基于目标策略,$\mu{\theta{\text{targ}}} $,但是在动作的每个维度上都添加了剪切噪声。在添加了被剪辑的噪声之后,目标动作就会被剪辑到有效的动作范围内(所有有效的动作$a$,满足$a{Low} \leq a \leq a{High}$)。目标操作如下:
目标策略平滑实质上是算法的正则化。它解决了DDPG中可能发生的特定失效模式:如果q函数近似器为某些动作开发了一个不正确的尖峰,策略将迅速利用该尖峰,然后产生脆弱或不正确的行为。这可以通过平滑类似行为的q函数来避免,这是政策平滑的目标。
Clipped Double Q-learning
两个q函数都使用一个目标,使用两个q函数中的任意一个计算出一个较小的目标值:
然后他们都通过回归这个目标来学习:
为目标使用较小的q值,并向其回归,有助于避免q函数中的过高估计。
最后:通过最大化$Q_{\phi_1}$来学习策略:
这和DDPG几乎没有什么区别。然而,在TD3中,策略的更新频率低于q函数。这有助于抑制DDPG中由于策略更新更改目标的方式而出现的波动性。
算法
代码
1 | class Actor(nn.Module): |
1 | def learn(self): |
查看评论