模仿学习中的协变量偏移
协变量偏移解释了为什么一个验证分数完美的行为克隆策略仍会滑出桌面。复合误差这个陷阱,以及在数据侧的修法。
把一个模仿学习策略训练到在留出帧上达到 98% 的准确率,装到机器人上,然后看着它在八秒内滑出桌面。什么都没坏。模型正在精确地执行它学到的东西。问题在于,第一次小小的失误之后,机器人所看到的场景是任何专家都不曾置身其中的,从那一刻起,它的每一次预测都是在猜测一个训练数据从未描述过的世界。
这种失败有一个名字。协变量偏移(covariate shift)指的是策略被训练时所处的状态,与它开始行动后实际访问的状态之间的差距。它是朴素行为克隆(behavior cloning)表现不佳的最重要原因,也是为什么一条漂亮的验证曲线对机器人而言可能几乎毫无意义。
协变量偏移究竟是什么
行为克隆把控制当作监督学习来处理。你采集专家轨迹,把每个观测与专家的动作配对,再拟合一个从前者到后者的函数。其中隐藏着监督学习里那个标准假设:训练输入与测试输入来自同一分布。而对一个在世界中行动的策略来说,这个假设在它迈出第一步的那一刻就不成立了。
循环是这样的。专家的状态构成一个分布。你的策略并不完美,会略微漂移。这种漂移把它带入专家较少访问的状态,在那里策略更不确定,于是它的下一个动作更糟,从而把它推得更远。误差不会相互抵消,而是会反馈叠加。这里的理论既古老又直白:对于长度为 T 步的时程,每一步的误差可以累积到 T 的平方量级的总误差,而不是你所期望的线性增长。Berkeley BAIR 所汇聚的、以及 arXiv cs.RO 上的模仿学习文献,已经围绕这一结论讨论了十多年。
有一个快速的直觉:设想每一步都有 1% 的概率把机器人推到略微陌生的地方,而每一个陌生步又抬高了下一次失足的概率。走五步,你根本不会察觉。走上几百步,这些微小的概率就复合成了一次几乎必然的越界,策略正在一个它从未训练过的区域里即兴发挥。真正致命的是时程,而不是每一步的准确率。
一个只在专家状态上训练的策略,只在专家到达过的状态里算得上专家。而它自己的失误,恰恰会把它带到别处。
为什么行为克隆会招致它
这个陷阱是结构性的,不是你能在损失函数里打个补丁就修好的 bug。标准克隆是离策略(off-policy)训练的,基于一份固定的日志,没有任何机制去观测或纠正它自身误差所产生的状态。长时程会让情况更糟,因为可供漂移的步数更多。精密的富接触任务会让它雪上加霜,因为可恢复误差的余量很小。而一条平滑的验证指标会把这一切都掩盖起来,因为留出帧和训练数据一样,都来自同分布的专家数据。
这正是团队一再被蒙蔽的原因。离线准确率看起来像是进展。闭环成功率才是唯一反映协变量偏移的数字,而它的测量成本很高,于是往往被推迟测量。
人们很容易以为,更多的专家数据就能解决这个问题。它在边际上有帮助,却触及不到核心问题,因为更多干净的专家轨迹,描述的仍然只是专家自己的分布。你可以录下一千次完美的倒水,却依然没有一条关于如何从开始洒出的倒水中恢复的样本,而这恰恰是一个不完美策略会陷入的状态。
各种修法,以及它们的代价
没有干净的逃脱之道,只有一组权衡:你能在线纠正多少,与你能把多少纠正预先烘焙进数据里。交互式一族要求专家为策略实际访问的状态打标签。数据一族则试图预先教会恢复,办法是向策略展示如何从它将要漂移进去的那些偏离分布的状态里回到正轨。在规模化时,这两族方法都不是可有可无的。真正的问题只是配比,而配比取决于你的专家有多昂贵、以及你能多安全地实时运行策略。
| 方法 | 核心思路 | 所需条件 | 主要代价 |
|---|---|---|---|
| 交互式重标注 | 就策略访问的状态向专家查询 | 一位在环中随时待命的专家 | 反复占用专家时间,对人形机器人尤其困难 |
| 恢复示范 | 记录如何从非正常状态返回 | 刻意采集偏离分布的数据 | 采集更慢、更不自然 |
| 注入噪声的示范 | 扰动专家,使纠正动作显现 | 采集时施加受控扰动 | 数据更嘈杂,需谨慎调参 |
| 在策略纠正 | 先执行,再纠正失败之处 | 一种安全地实时运行策略的方式 | 机器人时间与安全开销 |
数据侧的答案
算法层面的修法是真实有效的,但它们都撞上同一堵墙:它们需要一位能对策略自身状态作出回应的专家。在驾驶模拟器里查询这位专家上千次很便宜,而对一个双臂人形机器人来说却很痛苦,因为每一次纠正都是在真实硬件上的一次遥操作(teleoperation)场次。于是越来越多的工作转移到了采集协议本身。经典的交互式方法,也就是数据集聚合(dataset aggregation),把其中的逻辑摆到了明处:运行策略,让专家为它实际到达的状态重新打标签,把这些加入训练集,如此反复,直到被访问分布与训练分布趋于一致。它确实有效,也悄悄假设了一位可以廉价召来的专家。
其实际版本是:不要只记录干净的成功。你刻意把示范者带入非正常状态,比如夹爪半脱离物体、开始倾斜的倒水、错位几毫米的插销,然后记录回到正轨的过程。你在采集中加入受控扰动,让数据里包含纠正动作,而不只是平滑轨迹。为规模而构建的数据集,例如 DROID,已经依靠场景与操作员的多样性来拓宽被访问的分布,而像 LeRobot 这样的开放技术栈,让把纠正性回合并入训练集变得更容易,无需重新发明整条管线。
为什么这决定的是机器人,而非模型
协变量偏移常被归档为一个算法话题。而在实践中,它是一个披着算法外衣的数据话题。最著名的交互式方法仍然需要有人在错误的状态里示范正确的动作,而对物理机器人来说,这个人很昂贵。那些能交付可靠策略的团队,正是那些早早接受这一点的团队:他们先在恢复数据、在策略纠正和偏离分布覆盖上投入,然后才去投更大的模型。一个网络无法泛化到它从未被展示过的恢复动作。失败从第一次小失误开始,而唯一的解药,是事先就教过它回来的路。