← 全部报告
入门模仿学习 SmolVLA附论文

模仿学习与 SmolVLA,从零讲起

我们在用的这套方法是什么、它为什么会失败、别人是怎么解决的。 每个概念都配一篇论文,按能读得动的顺序排。写给完全没接触过这块的人。

怎么用这一页。如果你只想知道「我该干什么」,去 行动清单。 这一页是解释为什么那些事该那么干。读不完没关系 —— 第 1、2、3 节读完, 就足够看懂我们遇到的问题了。论文链接都是免费的 arXiv。

0 · 一分钟版

我们让人(你)用手柄操作机器人做一遍任务,把每一帧的画面和每一帧的关节角录下来。 然后训练一个神经网络:看到这个画面,就输出这个关节角。这就是模仿学习 (imitation learning),最简单的形式叫行为克隆(behavior cloning,BC)。

它有一个众所周知的致命弱点:误差会滚雪球。机器人一旦走到示教里没出现过的位置, 它就不知道该干什么,于是错得更多,于是走到更陌生的位置 —— 这叫复合误差。 过去十年这个领域的主要进展,基本都在对付这一件事。

SmolVLA 是我们用的模型。VLA = Vision-Language-Action, 就是「看图 + 读一句话指令 → 输出动作」。它的特点是小(4.5 亿参数), 小到能在消费级显卡甚至 CPU 上跑,这也是它适合我们这种项目的原因。

1 · 为什么会失败:复合误差

这是整个领域的第一性问题,也是理解我们 0/31 的关键。

训练时,机器人看到的画面全部来自你操作得很好的那些轨迹。 但运行时,它自己开一步就会有一点点偏差 —— 手比示教时低了 2mm。 现在它看到的画面,训练集里没有一模一样的。它只能猜。猜错一点,下一帧偏得更多。

数学上这叫分布偏移(distribution shift / covariate shift): 训练时的状态分布是「专家会去的地方」,运行时的分布是「策略自己会去的地方」, 两者不是同一个分布,而且随着时间越差越远。

这条直接推出三个实践结论,我们的清单都是照它写的:
A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning
Ross, Gordon, Bagnell · 2011 · 通称 DAgger · arXiv:1011.0686
这是奠基性的那一篇,值得第一个读。它第一次把「误差为什么会滚雪球」讲清楚: 行为克隆的误差随时域长度呈平方级增长,而不是线性。 它提出的解法(DAgger:让专家在策略自己走出来的状态上再标注)我们做不了 —— 需要反复人工介入 —— 但理解这个问题本身,比它的解法更重要。数学部分可以跳过,读引言和问题定义就够。

2 · 第一个大改进:动作分块

既然一步一步预测会累积误差,那就一次预测一串。这叫 action chunking(动作分块):模型看一眼画面,直接输出接下来 50 步的动作, 然后闭着眼睛执行完,再看下一眼。

为什么有用:假设一个任务要 500 步。逐步预测就是 500 次「可能出错的决策」; 分块成 10 块,就只有 10 次。误差累积的次数直接少了一到两个数量级。

副作用是它牺牲了反应速度 —— 执行块的中途看不见新情况。所以块不能太长。 我们用的 SmolVLA 也是分块的,--chunk-rate 这个参数就是控制这个的。

Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware
Zhao et al. · 2023 · 通称 ALOHA / ACT · arXiv:2304.13705
和我们最像的一篇,强烈建议读。他们用的也是低成本硬件、也是遥操作采数据、 也是几十条示教。论文里提出的 ACT(Action Chunking with Transformers) 到现在还是 LeRobot 里的标准基线之一。 尤其看他们录了多少条数据、怎么保证示教一致性 —— 这些工程细节对我们最有用。

3 · 第二条路线:扩散策略

另一个思路:人做同一件事有很多种做法(示教是多峰的)。 如果模型只学「平均动作」,平均出来的往往两边不靠 —— 比如绕过杯子左边和右边都行, 平均一下就撞上去了。

Diffusion Policy 用生成扩散模型来建模动作分布,能同时保留多种可行做法, 而不是把它们平均掉。这在需要精细接触的任务上明显更稳。

Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
Chi et al. · 2023 · arXiv:2303.04137
LeRobot 里也内置了这个策略。如果 SmolVLA 调不动,这是第一个值得换的备选。 读的时候重点看「多峰分布」那部分的图 —— 一张图就说明白了为什么平均动作不行。

4 · VLA:把语言接进来

前面那些模型都是「一个模型一个任务」。VLA 的想法是: 用已经在互联网数据上预训练好的视觉-语言模型当底座, 再教它输出动作。好处是它带着大量的常识进来 —— 知道「杯子」长什么样、「拿起来」是什么意思,不用从零学。

这条线的族谱,按时间:

RT-1 / RT-2
Google · 2022 / 2023 · arXiv:2212.06817 · arXiv:2307.15818
开创性的两篇,证明了「大规模机器人数据 + 语言条件」这条路走得通。 规模极大(13 台机器人采了 17 个月),我们复现不了,但概念要知道。
OpenVLA: An Open-Source Vision-Language-Action Model
Kim et al. · 2024 · arXiv:2406.09246
第一个真正开源、能自己跑的 VLA(7B 参数)。 如果想搞清楚 VLA 内部到底怎么把图像和文字变成动作,读这篇最清楚,因为代码是公开的。
π₀: A Vision-Language-Action Flow Model for General Robot Control
Physical Intelligence · 2024 · arXiv:2410.24164
目前效果最强的一档之一,用流匹配(flow matching)输出连续动作。 SmolVLA 的架构直接受它影响 —— 尤其是「动作专家」那个设计。

5 · SmolVLA:我们用的这个

SmolVLA: A Vision-Language-Action Model for Affordable and Efficient Robotics
Hugging Face · 2025 · arXiv:2506.01844 · 模型权重
这一篇必读,因为我们就在用它。不长,而且是写给实践者的。
特点数字对我们意味着什么
参数量4.5 亿(其中动作专家约 1 亿) 比 OpenVLA 小 15 倍。Jetson 上跑得动推理,这是我们能用它的前提
训练数据481 个社区数据集 / 22.9K 集 / 10.6M 帧 比其他 VLA 小一个数量级 —— 说明它就是为「数据不多」的场景设计的
训练成本单张 GPU 可训 同学的机器就够。但 Jetson 不够 —— 它是推理设备
语言条件每条数据带一句指令 这是「数据拆分、模型合一」能成立的原因: 录多份数据打不同指令,训同一个模型
异步推理感知与执行解耦 推理慢也不影响控制频率。--chunk-rate 相关

6 · 这些概念落到我们的问题上

我们观察到的现象对应的概念怎么办
0/31,安全层拒帧 0.0%不是安全层拦的,也不是策略输出非法 —— 是策略本身没做对往数据和分布偏移上查
低速档钳位率 47.7%不是分布偏移,是工程 bug: --speed 乘在步长上限上,低速把动作截断了 清单 C1:speed 1.0 重跑
左手换了粉色长爪分布偏移 —— 左腕相机是观测的三分之一 (camera3)换回去,或者重训时干脆去掉这一路
只有 50 集数据欠训 —— 卡在 50~100 的下限 清单 C3:补到 80~100,且只做一只手
想加「底盘走一段」加长时域 = 复合误差指数上升; 而且底盘一动全场景平移清单 C5:这一段写脚本,不学

7 · 建议的阅读顺序

  1. DAgger(2011)的引言 —— 搞懂复合误差。这一条搞懂了,后面全是它的推论
  2. ALOHA / ACT(2023)全文 —— 和我们硬件最像,工程细节最有参考价值
  3. SmolVLA(2025)全文 —— 我们在用的东西
  4. Diffusion Policy(2023)看图 —— 理解「多峰」,作为备选方案
  5. 有余力再看 OpenVLA 和 π₀

8 · 社区、代码和能直接抄的经验

黑客松场景下最实用的一条建议:不要从零调参。 先去 LeRobot 的公开数据集里找一个和你任务最像的, 把他们的超参数、每集时长、数据量原样抄过来当起点。 调参的边际收益远低于把数据录干净 —— 这是几乎所有这个领域的人都会说的话。

9 · 术语速查

词意思
BC / Behavior Cloning行为克隆。看画面→输出动作的监督学习,最基础的模仿学习
Covariate shift / 分布偏移运行时遇到的状态和训练时不一样。模仿学习失败的头号原因
Compounding error / 复合误差误差滚雪球。随时域平方级增长
Action chunking / 动作分块一次预测一串动作而不是一步。减少决策次数
Episode / 集一次完整的示教。我们最大的数据集有 50 集
Rollout / 试跑让策略自己跑一遍。我们跑了 31 次
Checkpoint训练出来的权重文件
Fine-tune / 微调在别人预训练好的模型上接着训自己的任务。我们做的就是这个
VLAVision-Language-Action。看图 + 读指令 → 输出动作
Multimodal / 多峰同一个情况有多种正确做法。平均掉就出错
Teleoperation / 遥操作人用手柄操控机器人。我们采数据的方式
XLeRobot build reports · 2026-08-23 · 配套:行动清单 · 论文里一般怎么做