1. 从零理解DDPG与TD3的核心差异
第一次接触DDPG(Deep Deterministic Policy Gradient)和TD3(Twin Delayed DDPG)时,很多人会困惑:这两个名字相似的算法到底有什么区别?我刚开始做双足机器人控制时也踩过不少坑。用大白话来说,DDPG就像是个急性子的学生,总想快速拿高分但容易粗心犯错;而TD3则像稳重的学霸,宁可慢一点也要确保每个步骤都严谨。
具体到技术层面,DDPG作为经典的连续控制算法,主要由三部分组成:
- 行动者网络:根据环境状态决定关节扭矩动作
- 评论者网络:评估当前状态动作对的长期价值
- 目标网络:稳定训练过程的"靶子"网络
而TD3在DDPG基础上做了三个关键改进:
- 双评论家架构:就像考试时用两个老师独立阅卷,取较低分作为最终成绩,防止评分虚高
- 延迟更新:行动者网络更新频率低于评论家,类似让学生多复习几次再参加考试
- 目标策略平滑:给目标动作添加噪声,避免算法过度自信
在Biped机器人控制中,这些差异会带来明显的实践区别。去年我做过一个对比实验:当要求机器人以0.8m/s速度行走时,DDPG在前200次训练中进步飞快,但后期会出现突然跌倒的情况;TD3虽然前期学习速度慢20%左右,但最终成功率达到92%,比DDPG高出15个百分点。
2. MATLAB环境下的Biped机器人建模实战
用Simscape Multibody搭建双足机器人模型时,有几个参数会直接影响训练效果。根据我的项目经验,这些关键参数需要特别注意:
% 腿部尺寸参数(单位:米) upper_leg_length = 0.5; % 大腿长度 lower_leg_length = 0.5; % 小腿长度 foot_length = 0.2; % 足部长度 torso_height = 0.6; % 躯干高度在定义观测空间时,我发现包含这些传感器数据效果最好:
- 躯干姿态(俯仰/横滚/偏航角)
- 6个关节的实时角度和角速度
- 足底接触力(用Spatial Contact Force模块实现)
- 质心位置和速度
奖励函数设计是个技术活。经过多次调试,这个组合公式既能让机器人快速行走又保持稳定:
奖励 = 前进速度×2 - 侧向位移×0.5 - 能量消耗×0.01 + 存活奖励×25在Simulink中建模时有个实用技巧:给关节执行器添加饱和限制。有次忘记设置扭矩上限,结果训练出的机器人动作像抽搐一样,就是因为输出扭矩超过了物理合理范围。
3. 算法实现中的避坑指南
创建DDPG智能体时,网络结构的选择直接影响收敛速度。经过多次实验,这种层结构在Biped控制中表现稳定:
actorNetwork = [ featureInputLayer(numObs,'Normalization','none') fullyConnectedLayer(400) reluLayer() fullyConnectedLayer(300) reluLayer() fullyConnectedLayer(numAct) tanhLayer()]; % 输出-1到1之间的动作TD3的实现要特别注意目标策略噪声的配置。下面这段代码展示了如何设置合理的噪声参数:
agentOpts = rlTD3AgentOptions; agentOpts.TargetPolicySmoothModel.StandardDeviation = 0.2; agentOpts.TargetPolicySmoothModel.LowerLimit = -0.5; agentOpts.TargetPolicySmoothModel.UpperLimit = 0.5;在训练过程中,我发现这些技巧特别有用:
- 使用并行训练时,把StepsUntilDataIsSent设为32的倍数
- 初始阶段加大探索噪声,后期逐渐减小
- 定期保存智能体检查点,防止训练中断
- 用rlDeterministicActorRepresentation替代默认的actor表示
有个容易忽略的细节是经验回放缓冲区的设置。对于Biped这种复杂任务,缓冲区太小会导致训练不稳定。我一般设置为1e6,并配合优先回放(Prioritized Experience Replay)使用。
4. 训练结果分析与调优策略
当看到训练曲线出现这些形态时,可以这样应对:
- 锯齿状波动:适当减小学习率(建议从3e-4调到1e-4)
- 长期平台期:增加探索噪声或调整奖励函数权重
- 突然崩溃:检查梯度爆炸,添加梯度裁剪
在相同硬件条件下(RTX 3080),两种算法的训练耗时对比如下:
| 指标 | DDPG | TD3 |
|---|---|---|
| 单步训练时间 | 0.11s | 0.13s |
| 收敛所需步数 | 12万 | 15万 |
| 最终平均回报 | 850 | 920 |
虽然TD3训练速度稍慢,但其稳定性优势明显。有次在测试中故意扰动机器人,TD3控制的恢复成功率达到78%,而DDPG只有53%。
针对不同任务需求,我的算法选择建议是:
- 快速原型开发:先用DDPG验证可行性
- 高稳定性要求:选择TD3
- 实时性要求高:考虑DDPG+模型预测控制混合方案
在调优过程中,记录这些关键参数很有帮助:
- 每次训练后的最大连续步数
- 平均关节扭矩消耗
- 躯干姿态角标准差
- 足底接触力峰值
5. 进阶技巧与工程实践
当需要将仿真模型迁移到实体机器人时,这些经验很宝贵:
- 在Simscape中添加3%的关节摩擦噪声
- 采样时间设置为0.01s(对应100Hz控制频率)
- 使用FIR滤波器平滑网络输出动作
对于更复杂的行走任务(如上下楼梯),可以尝试这些改进:
- 在观测中添加地形高度信息
- 使用课程学习(Curriculum Learning)从平地开始训练
- 设计分层强化学习架构
有一次客户要求机器人负载5kg行走,我通过以下调整实现了目标:
- 将躯干质量参数增加30%
- 在奖励函数中加入负载平衡项
- 限制髋关节最大扭矩不超过2.5N·m
- 将训练episode延长到3000次
MATLAB 2023b的新特性对这类任务很有帮助:
- 强化学习工具箱支持ONNX格式导出
- Simscape新增了更精确的接触模型
- 并行训练支持GPU加速
在部署到嵌入式系统时,记得做这些优化:
- 将神经网络转换为C代码
- 使用定点数运算
- 减少网络层数以降低延迟
- 添加安全监控模块防止异常动作