为什么训练好的策略会做出从未被演示过的动作
行为克隆把控制当作普通的监督学习:输入观测,输出关节目标,拟合的是人类录制下来的帧。这一点只有在机器人始终停留在人类访问过的状态上时才成立,而现实并非如此。一个提前四十毫秒闭合的夹爪,会把方块从演示过的姿态推移两毫米。下一次的观测就不在训练集里了,那里的动作因而是一次外推,再往后的状态又偏离得更远。训练分布,和学习到的策略实际引出的分布,是两回事,后者会随着回合的推进不断远离前者。
Ross、Gordon 和 Bagnell 在 2011 年正是描述了这种归约失败,并给出了量化:一个在专家分布下以概率 e 出错的分类器,在自己引出的分布下、经过 T 步的任务时长后,可能犯下量级为 T 的平方乘以 e 的错误,因为一次失误会产生专家从未生成过的观测,错误由此不断累积。他们给出的解法,正是本页要讲的算法:运行当前策略,为它所到达的状态收集专家标签,与迄今收集到的一切汇总起来,重新训练,如此往复。同一类型的更多演示无济于事,因为它们采样的是同一个分布;策略自己抵达的状态上的标签才有用。这里实现的是人工门控的变体(HG-DAgger,Kelly 等人):策略保持控制,直到有人判断情况不对并接管,因此修正只在真正需要的地方产生,机械臂也永远不会被要求驶入操作员不允许的状态。
- 行为克隆只在它训练时所用的状态分布上成立。
- 这种失效会自我放大:微小的偏差产生陌生的状态,陌生的状态又产生更大的偏差。
- 解药不是更多演示,而是策略自己抵达的那些状态上的标签。
- 人工门控意味着由操作员决定何时介入,而不是由某个自主性分数决定。
为什么误差会累积
拖动任务时长。在行为克隆下,预期的额外代价大致随步数的平方增长,因为每一次失误都会产生演示从未覆盖过的状态;而聚合循环能把这种增长维持在接近线性的水平(Ross et al., 2011)。
示意曲线,来自 Ross et al.(2011)中的理论上界,不是您机器人上的实测数据。重点是曲线的形状,不是具体数字。
一轮 DAgger,六个步骤
这是平台实际运行这个循环的方式,不是示意图。下面每一步都对应操控台中的一个控件。
逐步走一遍这个循环
同样的六个步骤,逐一展开,说明机械臂和数据集在每一步分别发生了什么。
运行策略并录制
针对您训练好的检查点启动一次推理运行。运行过程中会被实时录制,连同这次运行本身的任务文本一起保存,因此这些帧之后可以用作训练数据,而不只是一段只能观看的视频。
接管并修正
一旦机械臂做错了动作,按下“接管”。运行器随即暂停,机械臂交由您控制。用 leader 臂时,它会先驶向 follower 的位姿,再把控制权交接过来;若在运行开始时选择了键盘或滑块输入,接管则从一开始就是手动的。修正动作之后,再把控制权交还给策略。接管期间录制的帧会被自动标记为干预。
审核这次运行
为每次运行做出判断:归档为修正、保留为评估运行,或者直接丢弃。交接前后的定格画面留在 raw 目录里,永远不会进入数据集。
同步修正数据集
修正会汇集到每个策略各自的修正数据集中,并通过自动云同步进入您的存储桶。到这一步为止,还没有任何合并发生;修正暂时只是它自己的一个独立数据集。
自行组合数据集
用“组合数据集”功能构建下一轮的训练集:原始数据集加上修正,按来源逐一显式选择回合。结果是一个普通的数据集,同步和训练方式与其他数据集无异。不会有任何东西在背后被悄悄混入,也不会自动加入仿真数据。
从检查点继续训练
用“从检查点继续训练”来训练组合好的数据集,而不是从基础模型重新开始,这样这一轮就从您刚刚驾驶过的策略开始。准确地说:这只是用该检查点初始化权重,并不是优化器状态的恢复。
平台替您承担了哪些工作
这里的每一项,都是您原本需要自己搭建和维护的循环步骤。
规划您的轮次
干预率是这个循环的进度指标:修正的帧数除以运行的总帧数。设置起始值和每一轮能带来多少改善,就能看到要达到目标需要多少轮。
| 轮次 | 干预率 | 修正帧数 |
|---|---|---|
| 1 | 30.0 % | 900 |
| 2 | 22.5 % | 675 |
| 3 | 16.9 % | 506 |
| 4 | 12.7 % | 380 |
| 5 | 9.5 % | 285 |
| 6 | 7.1 % | 214 |
| Σ | 2 960 | |
这是一个模型,不是预测。真实的轮次会有起伏,如果某一轮没有让干预率下降,那这一轮就没有带来任何收获;这正是值得关注的信号。
自己搭建这个循环,还是在这里运行
这些事情没有一件是手工做不到的。区别只在于有多少个晚上要花在搭管道上,而不是花在真正的轮次上;其中有一行,亲自动手明显是更好的答案。
| 循环的步骤 | 手工搭建 | 在 AY-Robots 上 |
|---|---|---|
| 运行中途接管 | 需要一个 leader 臂,或者自己在伺服总线上写代码。键盘和滑块接管,包括安全限幅,都得自己编写,再在真实硬件上调试。 | leader 臂、键盘或滑块,在运行开始时选择。角度限幅在服务端实现。 |
| 标记干预 | 自己添加标记列,使其与帧索引保持对齐,并且每次录制格式变化都要重新检查。 | 接管期间录制的每一帧都会自动标记,action 列中带有指令姿态。 |
| 整理运行 | 靠目录约定和 shell 脚本。交接前后的定格画面得自己找出来并过滤掉。 | 每次运行在保存卡片上做一个决定即可。交接帧留在 raw 目录中。 |
| 构建混合数据集 | 针对每个格式版本写合并脚本。让回合索引、元数据和视频引用保持一致,是最繁琐的部分。 | 用原始数据加修正组合而成,按来源选择回合;结果是一个普通的数据集。 |
| 从上一个策略开始下一轮 | 自己把检查点接入训练器,如果想要真正的恢复,还可以自己恢复优化器状态。 | 一个填基础检查点的字段。只涉及权重:从检查点初始化,不是优化器的恢复。 |
| 对训练循环的掌控 | 完全掌控。自己的损失函数、自己的调度、自己的消融实验、自己的埋点,没有平台挡在中间。如果研究问题本身就是训练循环,那就自己动手做。 | 一条固定路径,策略列表固定,超参数限于表单提供的选项,不能写任意代码。 |
这一切建立在哪些论文之上
在质疑这个循环之前,请先读一读这些论文。每个链接都指向摘要页面,而不是付费墙。
- A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning
Stephane Ross, Geoffrey J. Gordon, J. Andrew Bagnell · 2011 · AISTATS 2011 (PMLR 15)
DAgger 的原始论文:提出了误差累积问题,给出了纯监督方法下 T 的平方量级的误差上界,并提出应当聚合学习者自己访问过的状态上的数据。
- HG-DAgger: Interactive Imitation Learning with Human Experts
Michael Kelly, Chelsea Sidrane, Katherine Driggs-Campbell, Mykel J. Kochenderfer · 2019 · arXiv:1810.02890, ICRA 2019
人工门控的变体:由专家决定何时接管,而不是被动地针对策略选择的状态接受询问,这正是本平台实现的模式。
- EnsembleDAgger: A Bayesian Approach to Safe Imitation Learning
Kunal Menda, Katherine Driggs-Campbell, Mykel J. Kochenderfer · 2019 · arXiv:1807.08364, IROS 2019
另一种门控干预的方式:用集成模型内部的分歧作为置信信号,判断学习者何时可以独自行动。与让人来判断相比,是个有用的对照。
- ThriftyDAgger: Budget-Aware Novelty and Risk Gating for Interactive Imitation Learning
Ryan Hoque, Ashwin Balakrishna, Ellen Novoseller, Albert Wilcox, Daniel S. Brown, Ken Goldberg · 2021 · CoRL 2021
把人的注意力当作稀缺资源,只在新颖或有风险的状态下才请求帮助;当一个人要整个下午盯着机械臂时,这正是合适的思路。
- DART: Noise Injection for Robust Imitation Learning
Michael Laskey, Jonathan Lee, Roy Fox, Anca Dragan, Ken Goldberg · 2017 · CoRL 2017
一条坦诚的替代路线:不在线上修正策略,而是扰动演示,让专家演示如何恢复。在决定投入干预之前,值得了解。
- Interactive Imitation Learning in Robotics: A Survey
Carlos Celemin, Rodrigo Perez-Dattari, Eugenio Chisari, Giovanni Franzese, Leandro de Souza Rosa, Ravi Prakash, Zlatan Ajanovic, Marta Ferraz, Abhinav Valada, Jens Kober · 2022 · arXiv:2211.00600
这个领域的地图:人类反馈有哪些形式,哪些界面承载它们,以及 DAgger 式的干预在其中处于什么位置。
- Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware
Tony Z. Zhao, Vikash Kumar, Sergey Levine, Chelsea Finn · 2023 · arXiv:2304.13705
ACT 的论文。动作分块(action chunking)正是廉价机械臂能够被模仿学习策略驱动的原因,而 ACT 也是迭代 DAgger 轮次时速度最快的策略。
- π0: A Vision-Language-Action Flow Model for General Robot Control
Kevin Black, Noah Brown, Danny Driess, Adnan Esmail, Michael Equi, Chelsea Finn et al. · 2024 · arXiv:2410.24164
一个基于流匹配、构建在预训练视觉-语言模型之上的 VLA,也是您可以在这里微调的检查点之一;论文明确指出,新技能来自微调,而不是仅靠基础模型。
大家真正会问的问题
做 DAgger 需要 leader 臂吗?
不需要。在运行开始时选择键盘或滑块输入,接管从第一帧起就是手动的,并且直接在浏览器中驾驶。leader 臂在精细动作上更顺手,也是唯一会在交接前自行对齐姿态的模式,但没有它,这个循环照样能运行。
我需要多少轮 DAgger?
不存在一个诚实的固定数字。要看的是干预率:如果它从一轮到下一轮没有下降,那一轮就没有带来任何收获,而问题通常出在任务设置、摄像头或原始数据集上,而不是轮数本身。
这是真正的 DAgger,还是某种更宽松的东西?
这是 HG-DAgger,也就是人工门控的变体。经典的 DAgger 会就策略选中的状态询问专家,其中包括任何理智的操作员都不会让真实机械臂到达的状态。这里由一个人决定何时介入,也只有这些片段会变成标签。
我只在修正数据上训练吗?
不,也不应该这样做。只用修正数据训练,得到的策略只会恢复,别的都不会。组合数据集是原始数据加上修正,每个来源的回合都经过明确挑选。
从检查点继续,算是恢复训练运行吗?
它是用该检查点初始化权重。优化器状态不会被恢复,所以严格来说不算恢复。实际上,承载学到的行为跨越一轮传递下去的正是权重,但了解自己得到的是这两者中的哪一个,还是值得的。
干预率是怎么计算的?
被标记为干预的帧数,除以这次运行的总帧数。它显示在接管状态里,也是每一轮唯一值得记下来的数字,连同您驾驶过的检查点和训练用的数据组合一起记录。
这个循环可以用哪些策略?
ACT、SmolVLA、Pi0,以及 GR00T N1.5 或 N1.7。循环本身与策略无关,因为它只产生数据集和检查点;实际的区别在于一轮需要多长时间,以及需要哪种 GPU。
没有自己的机器人,也能做这件事吗?
录制和训练可以不需要:在市场上购买数据集,或者委托操作员来做,并且您可以在 live 页面的浏览器里驾驶一台真实的 SO-100。DAgger 的一轮则不同:它需要一台您能在运行中途接管的机械臂,所以循环本身,还是需要硬件放在您自己的桌上。
A real SO-100, live in the browser. No signup, no hardware needed.