模仿学习
行为克隆(BC)、ACT(Action Chunking Transformer)、Diffusion Policy——从人类演示中学习机器人策略。
1. 行为克隆
人类遥控演示→记录(图像,动作)对→训练网络从图像预测动作
局限:分布偏移(累积误差)、多模态(MSE学出均值)
2. ACT
核心创新:一次预测未来K步动作(动作块),执行前几步后重新预测→大幅减少累积误差
3. Diffusion Policy
用扩散模型生成动作分布——天然处理多模态、表达完整的动作分布
4. 遥操作数据采集
低成本方案:SpaceMouse+键盘→记录数据→训练策略→真机部署
阶段总结
模仿学习是连接"人类演示"和"机器人自主执行"的桥梁。ACT和Diffusion Policy代表当前SOTA。
知识地图
从演示到可部署策略
模仿学习的核心不是“复制动作”,而是从有限演示中学习任务意图、状态-动作对应关系和失败恢复能力。它是VLA、灵巧操作和真实机器人部署的关键中间层。
| 方法 | 解决的问题 | 主要风险 |
|---|---|---|
| 行为克隆 BC | 监督学习快速起步 | 分布偏移、错误累积 |
| DAgger | 把策略访问到的状态加入训练集 | 需要专家反复标注 |
| ACT | 动作块降低高频控制难度 | chunk长度和重规划频率敏感 |
| Diffusion Policy | 多模态动作分布与平滑轨迹 | 推理延迟、采样步数成本 |
| Offline RL + IL | 利用离线数据进一步优化 | 分布外动作容易过估计 |
过渡性小项目:桌面推块
- 数据采集:用鼠标或SpaceMouse控制2D末端,把方块推到目标区域,记录图像、末端位置、动作。
- BC基线:训练CNN/MLP从观测预测动作,评估成功率和轨迹偏差。
- ACT升级:一次预测未来K步动作,比较K=5、10、20时的稳定性。
- Diffusion升级:把动作序列作为扩散目标,观察多目标场景下是否能生成不同可行轨迹。
数据集与评估指标
| 维度 | 推荐指标 | 为什么重要 |
|---|---|---|
| 任务效果 | 成功率、平均完成时间、碰撞次数 | 直接衡量能不能做成事 |
| 轨迹质量 | 动作平滑度、jerk、路径长度 | 影响真实机器人寿命与安全 |
| 泛化能力 | 新物体、新位置、新光照成功率 | 避免只记住演示数据 |
| 数据效率 | 每提升10%成功率需要的演示条数 | 真实数据采集很贵 |
| 部署稳定性 | 连续运行成功次数、失败恢复率 | 工程落地必须考虑长时间运行 |
代码挑战
- 实现一个BC训练脚本,输入图像embedding和本体状态,输出连续动作。
- 为ACT实现动作块损失:同时预测未来K步动作,并只执行前m步。
- 实现一个简化1D Diffusion Policy,在多峰动作分布上比较MSE回归和扩散生成的差异。
- 写一个数据质量检查器:统计缺帧、动作异常值、重复轨迹、episode长度分布。
常见问题排查
- 训练loss很低但执行失败:多半是分布偏移,应加入扰动数据、DAgger或更强状态覆盖。
- 动作抖动:检查动作归一化、控制频率、低通滤波和chunk overlap。
- 策略只会一种解法:MSE会平均多模态动作,尝试Diffusion Policy或Mixture Density Network。
- 真机延迟明显:减少图像分辨率、缓存视觉特征、降低扩散采样步数或使用动作chunk。
能力清单与前置要求
完成本阶段后,应能独立设计遥操作数据格式、训练BC/ACT基线、解释分布偏移并用成功率和轨迹指标评估策略。进入VLA前,需要理解语言目标如何与视觉状态和动作序列对齐。
推荐论文与开源项目
建议阅读 Behavior Cloning、DAgger、ACT、Diffusion Policy、Robomimic、ALOHA、LeRobot,并把至少一个离线数据集跑通从训练到评估的完整闭环。
教材式自测与学习进度
概念自测
- 用一句话解释为什么行为克隆可以被看作监督学习。
- 画出BC训练和在线执行的数据分布差异。
- 解释为什么专家演示数据越多,仍然可能不能完全解决分布偏移。
- 说明DAgger相比BC多了哪一个闭环。
- 解释动作chunk为什么可以降低高频控制压力。
- 比较ACT和Diffusion Policy在多模态动作场景中的表达能力。
- 说明为什么真实机器人遥操作数据需要同步图像、动作和本体状态。
- 解释为什么MSE损失在“向左绕/向右绕”两种动作都可行时会输出中间动作。
推导练习
- 写出行为克隆的最大似然目标,并说明它和交叉熵/MSE的关系。
- 假设动作服从高斯分布,推导负对数似然为何对应MSE损失。
- 定义一个episode级成功率估计,并计算95%置信区间。
- 设chunk长度为K、每次执行m步,推导每秒推理次数与控制频率的关系。
- 写出扩散策略中前向加噪和反向去噪的直觉公式。
工程检查点
- 数据集中每条episode都有起止标记、时间戳、相机帧、动作和任务标签。
- 训练脚本保存配置、随机种子、归一化统计量和模型checkpoint。
- 评估脚本支持离线误差、仿真rollout和真机执行三种模式。
- 部署脚本有急停、速度限制、动作裁剪和异常回退。
- 实验报告包含失败视频或关键帧,而不只报告成功率。
进度追踪
| 里程碑 | 验收标准 | 完成 |
|---|---|---|
| 跑通BC | 离线验证集loss下降,仿真成功率超过随机策略 | □ |
| 修复数据问题 | 无缺帧、无异常动作尖峰、episode长度分布合理 | □ |
| 加入ACT | 相同数据量下轨迹更平滑,连续失败次数下降 | □ |
| 加入Diffusion | 多目标或多路径任务中能生成不同可行动作序列 | □ |
| 完成部署评估 | 至少30次连续试验,记录成功、失败和恢复原因 | □ |
学习产出
- 一份数据集格式说明,包括观测、动作、频率和归一化方式。
- 一张训练曲线图,展示train/val loss和成功率变化。
- 一张动作平滑度对比图,比较BC、ACT和Diffusion Policy。
- 一段失败案例分析,说明失败来自感知、数据、控制还是分布偏移。
- 一份可复现实验命令清单,包含采集、训练、评估和部署。
扩展挑战
- 把语言指令加入策略输入,实现“推红块”和“推蓝块”的条件模仿。
- 把单相机输入升级为双相机输入,比较遮挡场景成功率。
- 用少量真实数据微调仿真训练策略,观察Sim2Real差距是否缩小。
- 加入失败恢复技能:检测失败后退回安全位姿并重新尝试。
- 把策略输出从末端速度改成关节位置,比较控制稳定性。
阶段复盘问题
- 如果BC在验证集表现很好但上线失败,最可能的三类原因是什么?
- 为什么同一任务的多个专家可能会让MSE策略学出“不像任何专家”的动作?
- 动作chunk过长和过短分别会带来什么问题?
- 如果Diffusion Policy推理太慢,可以从哪些方向优化?
- 如何判断是数据质量问题、模型容量问题还是控制接口问题?
- 如果策略在仿真里成功率高但真机失败,应优先补真机数据还是做域随机化?
- 如何设计一个最小安全上线流程,让模仿学习策略先在低风险区域运行?
面向VLA的连接
模仿学习产出的不是孤立策略,而是VLA动作头的训练基础。后续学习中,语言token会描述目标,视觉token会描述环境,动作chunk或扩散动作会成为模型输出空间。
如果这一阶段没有建立数据集、动作空间、评估指标和部署安全边界,后面的VLA会变成只能“看起来很智能”的demo。
最低毕业作品
提交一个从数据采集到策略评估的完整仓库,包含数据格式、训练命令、评估脚本和失败案例分析。
至少比较BC和ACT两个基线,并用成功率、轨迹平滑度、平均完成时间三项指标报告结果。
如果有真机条件,需要加入限速、急停、动作裁剪和人工接管记录。
继续学习提示
进入VLA阶段前,请把本阶段的数据集字段和动作空间固定下来。
后续所有语言条件策略、机器人基础模型和真实部署评估,都会复用这里建立的采集与评估规范。
这一步扎实,VLA才不会停留在概念层。
建议把每一次策略失败都当作数据闭环的一部分记录下来。