TD3
以双 Critic、延迟 Actor 和目标策略平滑改进 DDPG。
学习目标
- 将双 Q 最小值、延迟更新和目标动作平滑分别对应到 DDPG 的失败来源。
- 独立复核“裁剪目标动作并取双 critic 较小值”的输入、计算和解释。
- 动作噪声先裁剪、动作边界后裁剪,限制对象不同。
为什么重要
将双 Q 最小值、延迟更新和目标动作平滑分别对应到 DDPG 的失败来源。
学习前需要掌握
背景与问题
确定性 actor 会追逐 critic 的局部高分,哪怕高分只是估计噪声形成的尖峰。TD3 在 DDPG 结构上加入三个机制,减少这种误差经过 actor 与 bootstrap 的反复放大。
概念定义
TD3 使用双 critic 的较小目标值,降低 actor 及目标网络的更新频率,并对目标动作添加有限平滑噪声。它仍是使用 replay 的确定性 off-policy actor-critic,行为探索噪声与目标平滑噪声用途不同。
直观理解
先让两位评论家中较谨慎的给出目标,执行者不必每听一次新评分就改动作;评价附近一小片动作而非一个尖点,可减少追逐偶然高峰。
核心原理
目标动作先加裁剪后的噪声,再按合法动作范围裁剪。两个 target critic 评价同一动作,取较小值构造 TD 目标;这不是 Double DQN 的在线选动作、目标网评价。
critic 通常每步更新,actor 每隔若干 critic 步更新,目标网络也按相应延迟更新。延迟让 actor 使用相对成熟的价值估计,但过慢会拖累改进,不能认为越慢越稳越好。
双 Q 最小值会带来保守偏差,相关 critic 仍可共同出错。目标平滑依赖局部动作含义;若相近动作造成完全不同后果,平滑尺度过大可能抹去关键结构。
数学表达
TD3 的 clipped double Q 目标
外层 clip 使用合法动作范围,d 表示真正终止。
变量含义
Q̄1、Q̄2两个目标 criticã平滑并裁剪后的目标动作c目标噪声幅度上限
计算步骤
- 1裁剪噪声得 0.2,加到动作后为 1.0,再按动作上限得到 0.9。
- 2双 critic 最小值为 3。
- 3TD3 目标为 1+0.9×3=3.7。
代码对应位置
示例 1裁剪目标动作并取双 critic 较小值:最终目标动作 0.900,双 Q 目标为 3.700。
变量解释
| 变量 | 含义 |
|---|---|
Q̄1、Q̄2 | 两个目标 critic |
ã | 平滑并裁剪后的目标动作 |
c | 目标噪声幅度上限 |
完整数值示例
裁剪目标动作并取双 critic 较小值
已知条件
- 目标 actor 动作为 0.8,采样噪声 0.5,噪声裁剪到 ±0.2,动作上限 0.9。
- 两个 target Q 对最终动作的估计为 5 与 3;奖励 1,折扣 0.9。
计算步骤
- 裁剪噪声得 0.2,加到动作后为 1.0,再按动作上限得到 0.9。
- 双 critic 最小值为 3。
- TD3 目标为 1+0.9×3=3.7。
计算结果
最终目标动作 0.900,双 Q 目标为 3.700。
处理前后对比
- 动作噪声先裁剪、动作边界后裁剪,限制对象不同。
- 该算术不包含延迟更新循环;延迟频率属于另一个机制。
计算与实现步骤
- 采样 Replay
- 双 Critic 更新
- 延迟 Actor
- 软更新 Target
代码实现
示例 1
裁剪目标动作并取双 critic 较小值
example_01.py用途:最终目标动作 0.900,双 Q 目标为 3.700。
target_action, sampled_noise = 0.8, 0.5
noise = max(-0.2, min(0.2, sampled_noise))
smoothed_action = max(-0.9, min(0.9, target_action + noise))
target = 1.0 + 0.9 * min(5.0, 3.0)
print(f"target_action={smoothed_action:.3f}, target={target:.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
最终目标动作 0.900,双 Q 目标为 3.700。
Step 1 · 1–5 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
target_action, sampled_noise = 0.8, 0.5
noise = max(-0.2, min(0.2, sampled_noise))
smoothed_action = max(-0.9, min(0.9, target_action + noise))
target = 1.0 + 0.9 * min(5.0, 3.0)
print(f"target_action={smoothed_action:.3f}, target={target:.3f}")预期输出或运行结果
target_action=0.900, target=3.700
常见错误 · 3 条
- 混淆数据采集探索噪声与目标平滑噪声。
- 两个 critic 对不同目标动作评分后取最小。
- 认为取最小值便得到真实价值下界或安全保证。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 混淆数据采集探索噪声与目标平滑噪声。
- 两个 critic 对不同目标动作评分后取最小。
- 认为取最小值便得到真实价值下界或安全保证。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 OpenAI Spinning Up:TD3。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 混淆数据采集探索噪声与目标平滑噪声。
- 两个 critic 对不同目标动作评分后取最小。
- 认为取最小值便得到真实价值下界或安全保证。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
TD3 的双 critic 与 Double DQN 相同吗?
不是。TD3 对同一目标动作取两 critic 的最小值;Double DQN 用在线网络选离散动作,再由目标网络评价。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。