模仿学习

行为克隆(BC)、ACT(Action Chunking Transformer)、Diffusion Policy——从人类演示中学习机器人策略。

3-4周
5 个章节
代码示例
4 个实验

本阶段目录

  1. 行为克隆(BC)
  2. ACT动作块Transformer
  3. Diffusion Policy
  4. 遥操作数据采集

1. 行为克隆

人类遥控演示→记录(图像,动作)对→训练网络从图像预测动作

局限:分布偏移(累积误差)、多模态(MSE学出均值)

2. ACT

核心创新:一次预测未来K步动作(动作块),执行前几步后重新预测→大幅减少累积误差

3. Diffusion Policy

用扩散模型生成动作分布——天然处理多模态、表达完整的动作分布

4. 遥操作数据采集

低成本方案:SpaceMouse+键盘→记录数据→训练策略→真机部署

阶段总结

模仿学习是连接"人类演示"和"机器人自主执行"的桥梁。ACT和Diffusion Policy代表当前SOTA。

知识地图

从演示到可部署策略

模仿学习的核心不是“复制动作”,而是从有限演示中学习任务意图、状态-动作对应关系和失败恢复能力。它是VLA、灵巧操作和真实机器人部署的关键中间层。

方法解决的问题主要风险
行为克隆 BC监督学习快速起步分布偏移、错误累积
DAgger把策略访问到的状态加入训练集需要专家反复标注
ACT动作块降低高频控制难度chunk长度和重规划频率敏感
Diffusion Policy多模态动作分布与平滑轨迹推理延迟、采样步数成本
Offline RL + IL利用离线数据进一步优化分布外动作容易过估计

过渡性小项目:桌面推块

  1. 数据采集:用鼠标或SpaceMouse控制2D末端,把方块推到目标区域,记录图像、末端位置、动作。
  2. BC基线:训练CNN/MLP从观测预测动作,评估成功率和轨迹偏差。
  3. ACT升级:一次预测未来K步动作,比较K=5、10、20时的稳定性。
  4. Diffusion升级:把动作序列作为扩散目标,观察多目标场景下是否能生成不同可行轨迹。

数据集与评估指标

维度推荐指标为什么重要
任务效果成功率、平均完成时间、碰撞次数直接衡量能不能做成事
轨迹质量动作平滑度、jerk、路径长度影响真实机器人寿命与安全
泛化能力新物体、新位置、新光照成功率避免只记住演示数据
数据效率每提升10%成功率需要的演示条数真实数据采集很贵
部署稳定性连续运行成功次数、失败恢复率工程落地必须考虑长时间运行

代码挑战

  1. 实现一个BC训练脚本,输入图像embedding和本体状态,输出连续动作。
  2. 为ACT实现动作块损失:同时预测未来K步动作,并只执行前m步。
  3. 实现一个简化1D Diffusion Policy,在多峰动作分布上比较MSE回归和扩散生成的差异。
  4. 写一个数据质量检查器:统计缺帧、动作异常值、重复轨迹、episode长度分布。

常见问题排查

能力清单与前置要求

完成本阶段后,应能独立设计遥操作数据格式、训练BC/ACT基线、解释分布偏移并用成功率和轨迹指标评估策略。进入VLA前,需要理解语言目标如何与视觉状态和动作序列对齐。

推荐论文与开源项目

建议阅读 Behavior Cloning、DAgger、ACT、Diffusion Policy、Robomimic、ALOHA、LeRobot,并把至少一个离线数据集跑通从训练到评估的完整闭环。

教材式自测与学习进度

概念自测

  1. 用一句话解释为什么行为克隆可以被看作监督学习。
  2. 画出BC训练和在线执行的数据分布差异。
  3. 解释为什么专家演示数据越多,仍然可能不能完全解决分布偏移。
  4. 说明DAgger相比BC多了哪一个闭环。
  5. 解释动作chunk为什么可以降低高频控制压力。
  6. 比较ACT和Diffusion Policy在多模态动作场景中的表达能力。
  7. 说明为什么真实机器人遥操作数据需要同步图像、动作和本体状态。
  8. 解释为什么MSE损失在“向左绕/向右绕”两种动作都可行时会输出中间动作。

推导练习

  1. 写出行为克隆的最大似然目标,并说明它和交叉熵/MSE的关系。
  2. 假设动作服从高斯分布,推导负对数似然为何对应MSE损失。
  3. 定义一个episode级成功率估计,并计算95%置信区间。
  4. 设chunk长度为K、每次执行m步,推导每秒推理次数与控制频率的关系。
  5. 写出扩散策略中前向加噪和反向去噪的直觉公式。

工程检查点

进度追踪

里程碑验收标准完成
跑通BC离线验证集loss下降,仿真成功率超过随机策略
修复数据问题无缺帧、无异常动作尖峰、episode长度分布合理
加入ACT相同数据量下轨迹更平滑,连续失败次数下降
加入Diffusion多目标或多路径任务中能生成不同可行动作序列
完成部署评估至少30次连续试验,记录成功、失败和恢复原因

学习产出

  1. 一份数据集格式说明,包括观测、动作、频率和归一化方式。
  2. 一张训练曲线图,展示train/val loss和成功率变化。
  3. 一张动作平滑度对比图,比较BC、ACT和Diffusion Policy。
  4. 一段失败案例分析,说明失败来自感知、数据、控制还是分布偏移。
  5. 一份可复现实验命令清单,包含采集、训练、评估和部署。

扩展挑战

  1. 把语言指令加入策略输入,实现“推红块”和“推蓝块”的条件模仿。
  2. 把单相机输入升级为双相机输入,比较遮挡场景成功率。
  3. 用少量真实数据微调仿真训练策略,观察Sim2Real差距是否缩小。
  4. 加入失败恢复技能:检测失败后退回安全位姿并重新尝试。
  5. 把策略输出从末端速度改成关节位置,比较控制稳定性。

阶段复盘问题

  1. 如果BC在验证集表现很好但上线失败,最可能的三类原因是什么?
  2. 为什么同一任务的多个专家可能会让MSE策略学出“不像任何专家”的动作?
  3. 动作chunk过长和过短分别会带来什么问题?
  4. 如果Diffusion Policy推理太慢,可以从哪些方向优化?
  5. 如何判断是数据质量问题、模型容量问题还是控制接口问题?
  6. 如果策略在仿真里成功率高但真机失败,应优先补真机数据还是做域随机化?
  7. 如何设计一个最小安全上线流程,让模仿学习策略先在低风险区域运行?

面向VLA的连接

模仿学习产出的不是孤立策略,而是VLA动作头的训练基础。后续学习中,语言token会描述目标,视觉token会描述环境,动作chunk或扩散动作会成为模型输出空间。

如果这一阶段没有建立数据集、动作空间、评估指标和部署安全边界,后面的VLA会变成只能“看起来很智能”的demo。

最低毕业作品

提交一个从数据采集到策略评估的完整仓库,包含数据格式、训练命令、评估脚本和失败案例分析。

至少比较BC和ACT两个基线,并用成功率、轨迹平滑度、平均完成时间三项指标报告结果。

如果有真机条件,需要加入限速、急停、动作裁剪和人工接管记录。

继续学习提示

进入VLA阶段前,请把本阶段的数据集字段和动作空间固定下来。

后续所有语言条件策略、机器人基础模型和真实部署评估,都会复用这里建立的采集与评估规范。

这一步扎实,VLA才不会停留在概念层。

建议把每一次策略失败都当作数据闭环的一部分记录下来。