TD3:在 DDPG 上打的三补丁
Twin critic、delayed policy update、target policy smoothing,专治 Q 过估计和确定性策略外推。

1. DDPG 崩过多次:Q 升、return 降
DDPG 用确定性策略 和 Q 网络,target:
Q 对未见 易过估计,policy exploit 错误 Q 峰值,训练崩溃——Q mean 持续升,eval return 平或降。我在 DDPG 崩过多次,典型 overestimation;换 TD3 同一 hyperparam 往往能多撑几个 million steps。DDPG 不是「调 LR 就能救」,是结构性的 Q 外推问题——确定性策略在 action 空间没有 entropy 正则,Q 尖峰更容易被 exploit。连续控制 baseline 应优先 TD3 而非裸 DDPG;DDPG 留给 ablation 和教学,不留给产线默认配置。
2. 三补丁机制
1. Clipped Double Q:两个 Q 网,target 用 ,直接砍 optimistic 估计。Twin Q 初始化不同 seed 有时 reduce correlated overestimation——两个 Q 若高度相关,min 效果打折,应用不同 seed 或不同 architecture 初始化。
Q 对未见 的外推是 DDPG 崩溃根因——TD3 三补丁不增数据、不改 env,只改 target 计算,是性价比最高的 structural fix。连续控制项目默认 config 应用 TD3,DDPG 仅作 ablation baseline。
2. Delayed policy update:critic 每步更新,actor 每 d 步更新(d=2 常见)——让 critic 先准一点再动 actor,减少「追错误 Q 峰」的频率。Policy 比 critic 更新快时,actor 在 stale Q 上优化,是 DDPG 崩溃的常见路径之一。
3. Target policy smoothing:target 动作加 clipped Gaussian 噪声 ,要求 Q 在 action 邻域平滑,不要只在单点尖峰高。Behavior policy 仍用原 actor + exploration noise;target 计算用 smoothed action——三者不可混用,eval 必须 deterministic。
from stable_baselines3 import TD3
model = TD3("MlpPolicy", env, policy_delay=2, target_policy_noise=0.2)3. 与 DDPG / SAC 取舍
| DDPG | TD3 | SAC | |
|---|---|---|---|
| Policy | 确定性 | 确定性 | 随机 |
| Q 过估计 | 严重 | 三补丁缓解 | twin Q + entropy |
| Eval | deterministic | deterministic | mean action |
| 调参宽容度 | 低 | 中 | 高 |
target_policy_noise 和 env action scale 耦合——大 action range 时 noise 也要按比例放大。Policy delay 太大 actor 更新太慢,太小失去 smoothing benefit。Eval 必须 deterministic_actions=True,否则 exploration noise 污染指标。
4. 失败模式
Exploration noise 仅在 behavior policy,eval 未去掉。Action scale 错,Q 外推更严重——action 未 clip 到合法范围,Q 在 OOD action 上乱估。LR 过大,双 Q 仍挡不住发散。Export graph 含 exploration 节点,部署 action 与 train eval 不一致——部署前 deterministic smoke test 是必选项。
5. Target smoothing 直觉
对 target policy 输出加 clipped Gaussian noise,相当于要求 Q 在 action 邻域平滑,不要只在单点尖峰高。Hyperparam 敏感:target_policy_noise 太大则 target 偏,太小则 smoothing 无效——默认从论文值起步,只在明确 overfit Q 时调。Deterministic eval 下 TD3 和 DDPG 推理一样快;SAC 要 mean action,部署略重。
6. 验收
- 对比 DDPG vs TD3 同一 env 的 Q 均值和 eval return;TD3 应更少 sudden collapse。
policy_delay和target_policy_noise按论文默认起步。- Eval deterministic,Q mean 与 return 趋势一致。
- Export 后数值 diff action <1e-3 smoke test。
- Action scale 与 target_policy_noise 按比例匹配。
7. 案例:DDPG 换 TD3 同 hyperparam 多撑 3M steps
某 reach 任务 DDPG 在 800k steps 时 Q mean 飙升、eval return 崩溃——典型 overestimation。换 TD3 同一 env、同一 LR、同一 network,训练撑过 3M steps 且 eval return 稳步上升。三个补丁无需调参即生效——连续控制默认从 TD3 起步,DDPG 留给 ablation。
8. Exploration noise 与 eval 分离
Behavior policy 用 actor 输出加 Gaussian exploration noise——这是 data collection 的需要。Target 计算用 smoothed target action,不含 exploration noise。Eval 用 deterministic_actions=True,actor 裸输出。三者混淆是常见 bug:eval 仍加 noise 则 return 被拉低;target 含 noise 则 Q 学的是 noisy action 的 value。
Action scale 错时 exploration noise 和 target_policy_noise 都应在 action space 尺度上设置——关节角 ±π 和 ±0.1 rad 的 noise 标准差差 30 倍,照搬论文默认值可能完全无效或过度 smooth。
9. 与 SAC 的选型
SAC 用 entropy 正则 + stochastic policy,天然探索且 Q 过估计有 twin Q + entropy 双保险——调参宽容度更高,但 eval 需 mean action、推理略重。TD3 确定性 policy,eval 和 deploy 简单,适合 low-latency 控制。Reach/manipulation 若 DDPG 崩,先换 TD3;TD3 仍不稳再考虑 SAC。不是 SAC 全面优于 TD3,是问题场景不同。
Replay buffer 大小和 batch size 影响 Q 过拟合速度——buffer 小、batch 大时同一 transition 被重复采样,Q 尖峰更快出现。TD3 三补丁缓解但不能消除,buffer 至少 1e6 transitions 是连续控制的经验下限。Export ONNX 前用 deterministic policy 跑 100 step,对比 Python 内 action diff <1e-3,确认 graph 无 exploration 节点残留。TD3 部署与 DDPG 同为确定性推理,latency 低于 SAC——若任务需 stochastic policy 再换 SAC,否则 TD3 是连续控制默认首选。Batch RL 从 DDPG 迁 TD3 通常只改 config,pipeline 改动最小。DDPG 崩时先换 TD3 再谈大改网络——三补丁是论文验证过的最小 fix 集。Eval 必须 deterministic,否则 exploration noise 污染指标。连续控制默认 config 用 TD3,DDPG 仅 ablation。Target policy noise 与 action scale 成比例设置。
TD3 是 DDPG 的最小可靠补丁集:twin Q 砍 optimistic,delay 让 critic 领先,smoothing 防 action 尖峰。不是「DDPG 调调就能用」,是结构问题需要 structural fix。
相关
也可以看看
johan's blog