我们在用的这套方法是什么、它为什么会失败、别人是怎么解决的。 每个概念都配一篇论文,按能读得动的顺序排。写给完全没接触过这块的人。
我们让人(你)用手柄操作机器人做一遍任务,把每一帧的画面和每一帧的关节角录下来。 然后训练一个神经网络:看到这个画面,就输出这个关节角。这就是模仿学习 (imitation learning),最简单的形式叫行为克隆(behavior cloning,BC)。
它有一个众所周知的致命弱点:误差会滚雪球。机器人一旦走到示教里没出现过的位置, 它就不知道该干什么,于是错得更多,于是走到更陌生的位置 —— 这叫复合误差。 过去十年这个领域的主要进展,基本都在对付这一件事。
SmolVLA 是我们用的模型。VLA = Vision-Language-Action, 就是「看图 + 读一句话指令 → 输出动作」。它的特点是小(4.5 亿参数), 小到能在消费级显卡甚至 CPU 上跑,这也是它适合我们这种项目的原因。
这是整个领域的第一性问题,也是理解我们 0/31 的关键。
训练时,机器人看到的画面全部来自你操作得很好的那些轨迹。 但运行时,它自己开一步就会有一点点偏差 —— 手比示教时低了 2mm。 现在它看到的画面,训练集里没有一模一样的。它只能猜。猜错一点,下一帧偏得更多。
数学上这叫分布偏移(distribution shift / covariate shift): 训练时的状态分布是「专家会去的地方」,运行时的分布是「策略自己会去的地方」, 两者不是同一个分布,而且随着时间越差越远。
既然一步一步预测会累积误差,那就一次预测一串。这叫 action chunking(动作分块):模型看一眼画面,直接输出接下来 50 步的动作, 然后闭着眼睛执行完,再看下一眼。
为什么有用:假设一个任务要 500 步。逐步预测就是 500 次「可能出错的决策」; 分块成 10 块,就只有 10 次。误差累积的次数直接少了一到两个数量级。
副作用是它牺牲了反应速度 —— 执行块的中途看不见新情况。所以块不能太长。
我们用的 SmolVLA 也是分块的,--chunk-rate 这个参数就是控制这个的。
另一个思路:人做同一件事有很多种做法(示教是多峰的)。 如果模型只学「平均动作」,平均出来的往往两边不靠 —— 比如绕过杯子左边和右边都行, 平均一下就撞上去了。
Diffusion Policy 用生成扩散模型来建模动作分布,能同时保留多种可行做法, 而不是把它们平均掉。这在需要精细接触的任务上明显更稳。
前面那些模型都是「一个模型一个任务」。VLA 的想法是: 用已经在互联网数据上预训练好的视觉-语言模型当底座, 再教它输出动作。好处是它带着大量的常识进来 —— 知道「杯子」长什么样、「拿起来」是什么意思,不用从零学。
这条线的族谱,按时间:
| 特点 | 数字 | 对我们意味着什么 |
|---|---|---|
| 参数量 | 4.5 亿(其中动作专家约 1 亿) | 比 OpenVLA 小 15 倍。Jetson 上跑得动推理,这是我们能用它的前提 |
| 训练数据 | 481 个社区数据集 / 22.9K 集 / 10.6M 帧 | 比其他 VLA 小一个数量级 —— 说明它就是为「数据不多」的场景设计的 |
| 训练成本 | 单张 GPU 可训 | 同学的机器就够。但 Jetson 不够 —— 它是推理设备 |
| 语言条件 | 每条数据带一句指令 | 这是「数据拆分、模型合一」能成立的原因: 录多份数据打不同指令,训同一个模型 |
| 异步推理 | 感知与执行解耦 | 推理慢也不影响控制频率。--chunk-rate 相关 |
| 我们观察到的现象 | 对应的概念 | 怎么办 |
|---|---|---|
| 0/31,安全层拒帧 0.0% | 不是安全层拦的,也不是策略输出非法 —— 是策略本身没做对 | 往数据和分布偏移上查 |
| 低速档钳位率 47.7% | 不是分布偏移,是工程 bug:
--speed 乘在步长上限上,低速把动作截断了 |
清单 C1:speed 1.0 重跑 |
| 左手换了粉色长爪 | 分布偏移 —— 左腕相机是观测的三分之一
(camera3) | 换回去,或者重训时干脆去掉这一路 |
| 只有 50 集数据 | 欠训 —— 卡在 50~100 的下限 | 清单 C3:补到 80~100,且只做一只手 |
| 想加「底盘走一段」 | 加长时域 = 复合误差指数上升; 而且底盘一动全场景平移 | 清单 C5:这一段写脚本,不学 |
examples/ 目录里有完整的录制→训练→部署示例。
遇到报错先在这里的 Issues 搜,我们踩的坑八成别人踩过| 词 | 意思 |
|---|---|
| BC / Behavior Cloning | 行为克隆。看画面→输出动作的监督学习,最基础的模仿学习 |
| Covariate shift / 分布偏移 | 运行时遇到的状态和训练时不一样。模仿学习失败的头号原因 |
| Compounding error / 复合误差 | 误差滚雪球。随时域平方级增长 |
| Action chunking / 动作分块 | 一次预测一串动作而不是一步。减少决策次数 |
| Episode / 集 | 一次完整的示教。我们最大的数据集有 50 集 |
| Rollout / 试跑 | 让策略自己跑一遍。我们跑了 31 次 |
| Checkpoint | 训练出来的权重文件 |
| Fine-tune / 微调 | 在别人预训练好的模型上接着训自己的任务。我们做的就是这个 |
| VLA | Vision-Language-Action。看图 + 读指令 → 输出动作 |
| Multimodal / 多峰 | 同一个情况有多种正确做法。平均掉就出错 |
| Teleoperation / 遥操作 | 人用手柄操控机器人。我们采数据的方式 |