端到端的人工门控 DAgger

策略出错时接管,然后用您的修正训练它。

通过行为克隆训练出的策略,只认识演示数据到过的那些状态。DAgger 用策略自己抵达的状态所产生的数据,填补这个缺口。AY-Robots 在 SO-100 上运行完整的循环:驾驶一个检查点,在运行中途接管,保留修正后的回合,组合数据集,再从刚刚驾驶过的那个检查点继续训练。

  • HG-DAgger,人工门控
  • SO-100 / SO-101
  • ACT、SmolVLA、Pi0、GR00T N1.5 / N1.7
  • 每轮的干预率

为什么训练好的策略会做出从未被演示过的动作

行为克隆把控制当作普通的监督学习:输入观测,输出关节目标,拟合的是人类录制下来的帧。这一点只有在机器人始终停留在人类访问过的状态上时才成立,而现实并非如此。一个提前四十毫秒闭合的夹爪,会把方块从演示过的姿态推移两毫米。下一次的观测就不在训练集里了,那里的动作因而是一次外推,再往后的状态又偏离得更远。训练分布,和学习到的策略实际引出的分布,是两回事,后者会随着回合的推进不断远离前者。

Ross、Gordon 和 Bagnell 在 2011 年正是描述了这种归约失败,并给出了量化:一个在专家分布下以概率 e 出错的分类器,在自己引出的分布下、经过 T 步的任务时长后,可能犯下量级为 T 的平方乘以 e 的错误,因为一次失误会产生专家从未生成过的观测,错误由此不断累积。他们给出的解法,正是本页要讲的算法:运行当前策略,为它所到达的状态收集专家标签,与迄今收集到的一切汇总起来,重新训练,如此往复。同一类型的更多演示无济于事,因为它们采样的是同一个分布;策略自己抵达的状态上的标签才有用。这里实现的是人工门控的变体(HG-DAgger,Kelly 等人):策略保持控制,直到有人判断情况不对并接管,因此修正只在真正需要的地方产生,机械臂也永远不会被要求驶入操作员不允许的状态。

  • 行为克隆只在它训练时所用的状态分布上成立。
  • 这种失效会自我放大:微小的偏差产生陌生的状态,陌生的状态又产生更大的偏差。
  • 解药不是更多演示,而是策略自己抵达的那些状态上的标签。
  • 人工门控意味着由操作员决定何时介入,而不是由某个自主性分数决定。

为什么误差会累积

拖动任务时长。在行为克隆下,预期的额外代价大致随步数的平方增长,因为每一次失误都会产生演示从未覆盖过的状态;而聚合循环能把这种增长维持在接近线性的水平(Ross et al., 2011)。

200
1.0 %
行为克隆
400
DAgger
2.00
200×
行为克隆 ÷ DAgger
0.000100200300400050100150200预期额外代价(上界)
任务时长(步数)

示意曲线,来自 Ross et al.(2011)中的理论上界,不是您机器人上的实测数据。重点是曲线的形状,不是具体数字。

一轮 DAgger,六个步骤

这是平台实际运行这个循环的方式,不是示意图。下面每一步都对应操控台中的一个控件。

逐步走一遍这个循环

同样的六个步骤,逐一展开,说明机械臂和数据集在每一步分别发生了什么。

01

运行策略并录制

针对您训练好的检查点启动一次推理运行。运行过程中会被实时录制,连同这次运行本身的任务文本一起保存,因此这些帧之后可以用作训练数据,而不只是一段只能观看的视频。

1 / 6

平台替您承担了哪些工作

这里的每一项,都是您原本需要自己搭建和维护的循环步骤。

无需 leader 臂的接管

在运行开始时选择键盘或滑块输入,单凭一台笔记本电脑就能完成修正。键盘微调在服务端被限制在每个关节两度、夹爪四度以内;滑块目标是绝对值,服务端每次调用最多朝目标移动六度。这些限幅由服务端强制执行,而不是界面层面的,因此卡住的按键不会甩动机械臂。

遥操作文档

每一帧都标记干预

您控制机械臂期间录制的每一帧,都带有干预标记,action 列则包含完整的指令姿态。您不需要手动维护标记列,也不需要事后把它和帧索引对齐。

LeRobot 数据集格式

分类:修正、评估或丢弃

每次运行在保存卡片上只需一个决定。修正运行会进入下一轮训练,评估运行则被排除在训练之外,从而保持测量的纯净,糟糕的运行则直接消失,而不是悄悄污染训练组合。

会话与回合

显式地组合训练集

第 n 轮的训练集由您自己组装:原始数据集加上修正,按来源逐一挑选回合。没有自动混合,没有隐藏的仿真数据,组合出的结果和其他任何数据集表现一致。

数据集

从检查点继续

把训练运行指向您刚刚驾驶过的检查点,而不是基础模型,这样每一轮都从上一轮结束的地方开始。它只初始化权重,优化器状态不会被恢复,这也是为什么第一轮值得当作可行性测试来对待。

训练

按轮次租用 GPU

ACT 和 SmolVLA 使用 4090,Pi0 以及 GR00T N1.5 或 N1.7 使用配备 80 GB 显存的 A100。您启动一轮,pod 随即启动,检查点会落到您的存储桶里,而您只需为这一轮实际花费的小时数付费。

GPU 定价

规划您的轮次

干预率是这个循环的进度指标:修正的帧数除以运行的总帧数。设置起始值和每一轮能带来多少改善,就能看到要达到目标需要多少轮。

30 %
25 %
3 000
轮次干预率修正帧数
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 目录中。
构建混合数据集针对每个格式版本写合并脚本。让回合索引、元数据和视频引用保持一致,是最繁琐的部分。用原始数据加修正组合而成,按来源选择回合;结果是一个普通的数据集。
从上一个策略开始下一轮自己把检查点接入训练器,如果想要真正的恢复,还可以自己恢复优化器状态。一个填基础检查点的字段。只涉及权重:从检查点初始化,不是优化器的恢复。
对训练循环的掌控完全掌控。自己的损失函数、自己的调度、自己的消融实验、自己的埋点,没有平台挡在中间。如果研究问题本身就是训练循环,那就自己动手做。一条固定路径,策略列表固定,超参数限于表单提供的选项,不能写任意代码。

这一切建立在哪些论文之上

在质疑这个循环之前,请先读一读这些论文。每个链接都指向摘要页面,而不是付费墙。

  1. 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 的平方量级的误差上界,并提出应当聚合学习者自己访问过的状态上的数据。

  2. HG-DAgger: Interactive Imitation Learning with Human Experts

    Michael Kelly, Chelsea Sidrane, Katherine Driggs-Campbell, Mykel J. Kochenderfer · 2019 · arXiv:1810.02890, ICRA 2019

    人工门控的变体:由专家决定何时接管,而不是被动地针对策略选择的状态接受询问,这正是本平台实现的模式。

  3. EnsembleDAgger: A Bayesian Approach to Safe Imitation Learning

    Kunal Menda, Katherine Driggs-Campbell, Mykel J. Kochenderfer · 2019 · arXiv:1807.08364, IROS 2019

    另一种门控干预的方式:用集成模型内部的分歧作为置信信号,判断学习者何时可以独自行动。与让人来判断相比,是个有用的对照。

  4. 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

    把人的注意力当作稀缺资源,只在新颖或有风险的状态下才请求帮助;当一个人要整个下午盯着机械臂时,这正是合适的思路。

  5. DART: Noise Injection for Robust Imitation Learning

    Michael Laskey, Jonathan Lee, Roy Fox, Anca Dragan, Ken Goldberg · 2017 · CoRL 2017

    一条坦诚的替代路线:不在线上修正策略,而是扰动演示,让专家演示如何恢复。在决定投入干预之前,值得了解。

  6. 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 式的干预在其中处于什么位置。

  7. 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 轮次时速度最快的策略。

  8. π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 的一轮则不同:它需要一台您能在运行中途接管的机械臂,所以循环本身,还是需要硬件放在您自己的桌上。

Drive a real arm

A real SO-100, live in the browser. No signup, no hardware needed.

这周就跑完您的第一轮

安装客户端,驾驶一个您已有的检查点,在机械臂第一次伸过方块时接管。这一次运行就是一轮微缩版的 DAgger:之后要做的一切,无非是组合数据集和支付 GPU 小时费用。