Task04:DDPG与TD3算法在连续控制任务中的实战对比
1. 连续控制任务中的强化学习挑战
在机器人控制、自动驾驶等连续动作空间任务中,传统强化学习算法面临三个核心难题:动作空间无限维、策略梯度方差大、训练稳定性差。我曾在机械臂抓取项目中深有体会——当动作是电机转速这类连续值时,Q-learning这类离散动作算法就完全失效了。
连续控制需要输出精确的力矩值,比如要让机械臂末端移动2.35厘米而非简单的"左/右"选择。DDPG(深度确定性策略梯度)和TD3(双延迟确定性策略梯度)正是为解决这类问题而生的算法。它们都采用Actor-Critic架构,但创新性地结合了值函数估计和策略优化的优势。
2. DDPG算法核心机制剖析
2.1 确定性策略与噪声探索
DDPG的核心创新在于确定性策略。与随机策略不同,它直接输出确定动作值。在倒立摆控制中,策略网络会输出"施加2.1N·m的扭矩"这样的精确值。但这就带来探索难题——没有随机性如何探索新动作?
解决方案是OU噪声(Ornstein-Uhlenbeck过程)。我在无人机悬停实验中对比发现,OU噪声比高斯噪声能让飞行器动作更平滑。其数学形式为:
dx_t = θ(μ - x_t)dt + σdW_t其中θ控制回归速度,σ控制噪声强度。实际使用时需要调节这两个超参数:
- θ过大导致噪声变化过快,训练不稳定
- σ过大虽然探索性强但会影响策略精度
2.2 关键技术实现细节
DDPG有四个核心网络:Actor/Critic及其对应的目标网络。在PyTorch实现中要注意三点:
- 网络初始化:最后层权重建议初始化为[-3e-3, 3e-3]的小随机值,避免初始动作过大
- 软更新机制:目标网络更新采用τ参数控制(通常取0.01),比DQN的硬更新更稳定
- 经验回放:建议使用优先级回放(Prioritized Experience Replay)提升样本效率
以下是关键代码段:
class Actor(nn.Module): def __init__(self, state_dim, action_dim): super().__init__() self.fc1 = nn.Linear(state_dim, 256) self.fc2 = nn.Linear(256, 256) self.fc3 = nn.Linear(256, action_dim) def forward(self, state): x = F.relu(self.fc1(state)) x = F.relu(self.fc2(x)) return torch.tanh(self.fc3(x)) * max_action3. TD3算法的三大改进策略
3.1 双Q网络抑制过估计
TD3最显著的改进是使用了两个独立的Critic网络。在机械臂轨迹跟踪任务中,这使Q值估计误差降低了约40%。其核心思想是取两个Q值的最小值作为更新目标:
target_Q = min(critic1(s',a'), critic2(s',a'))这有效缓解了DQN系列算法固有的过估计问题。实验表明,在Mujoco的Humanoid环境中,双Q网络能使最终回报提升2-3倍。
3.2 延迟更新与策略平滑
TD3的第二个创新是延迟更新——Critic更新多次(通常10次)后才更新Actor。这就像教练(Critic)需要自己先充分学习,才能更好指导运动员(Actor)。具体实现时要注意:
- 设置合理的policy_freq参数
- 更新前需清空梯度:
actor_optimizer.zero_grad() - 使用指数移动平均更新目标网络
策略平滑则通过在目标动作添加裁剪噪声实现:
noise = torch.randn_like(action) * policy_noise noise = noise.clamp(-noise_clip, noise_clip)4. 实战对比:Pendulum-v1环境测试
4.1 实验设置与超参数配置
在OpenAI Gym的Pendulum-v1环境中,我们固定随机种子为42,对比两种算法的表现。关键超参数设置如下:
| 参数 | DDPG值 | TD3值 | 说明 |
|---|---|---|---|
| 学习率 | 1e-3 | 1e-3 | 使用Adam优化器 |
| 批次大小 | 128 | 128 | 从回放池采样数量 |
| γ折扣因子 | 0.99 | 0.99 | 未来奖励衰减系数 |
| τ软更新参数 | 0.01 | 0.005 | TD3需要更小的更新步长 |
| 噪声标准差 | 0.1 | 0.2 | TD3初始探索噪声更大 |
4.2 训练曲线与性能分析
经过150个训练周期后,两种算法的表现差异明显:
- 收敛速度:TD3在第40轮左右就能稳定在-200分左右,而DDPG需要80轮
- 最终性能:TD3最佳得分-150.3,比DDPG的-180.7提升约20%
- 稳定性:TD3的方差更小,不会出现DDPG偶尔的分数骤降
这验证了TD3三大改进的有效性。不过在小规模问题上,DDPG的简单实现反而可能有更快的前期收敛。
5. 算法选择与调优建议
5.1 适用场景对比
根据我的项目经验,给出以下选型建议:
选择DDPG当:
- 动作空间维度较低(≤10维)
- 环境反馈相对稳定
- 需要快速原型开发
优先TD3当:
- 高维精细控制(如人形机器人)
- 环境存在延迟奖励
- 对训练稳定性要求高
5.2 调优技巧与常见陷阱
超参数敏感度:DDPG的学习率需要精细调节,在HalfCheetah环境中,1e-4和1e-3的差异会导致完全不同的收敛结果。建议采用网格搜索或贝叶斯优化。
噪声策略:OU噪声的θ参数需要与环境时间尺度匹配。在实时控制系统中,θ通常设为0.15-0.3;而在回合制环境可以适当减小。
内存管理:经验回放池大小建议至少1e6 transitions。我曾遇到因buffer太小导致机械臂控制策略无法提升的情况,扩大buffer后问题立即改善。
