机器人数据飞轮为何需要失败,而不只是成功

只采集成功的示范会美化机器人策略,掩盖它真正会出错的地方。数据飞轮只有在你采集失败与险些失败并加以挖掘时,才会复利累积。

阅读约 7 分钟

一个只见过事情顺利发生的机器人策略,在事情出岔子时会完全不知所措。给它看一万次干净利落的抓取,它会把这个干净的抓取学得很漂亮。然后在部署时,夹爪蹭到了杯子,杯子倾斜了半厘米,策略便面对着一个任何示范里都不曾出现过的画面。它没有应对之招。此刻它最需要的那项本领,也就是如何挽回,恰恰是没人想到要记录的那一项。

几乎每一项采集工作都对准成功。这可以理解:一段示范就是你希望机器人去模仿的东西,于是你留下奏效的那一次,把失手的那一次扔掉。但策略进步最快的地方,恰恰是它失败的那些状态,而这些状态正是只含成功的数据集所遗漏的。人人都想要的那个数据飞轮,部署、采集、重训,只有当采集这一步把失败与险些失败也记录下来、加以挖掘,并把下一批采集对准这些状态时,才会复利。

这个问题是结构性的,而不是纪律问题。在任何经过筛选的数据集里,失败本就比成功稀少,它们更难存储,也更难标注。放任不管,每个数据集都会滑向幸存者偏差:一份整洁的、只有轻松取胜的档案,它讨好模型,却几乎不告诉你模型在哪里崩溃。

策略在专家从未去过的地方失败

先从一个自模仿学习诞生之初就挥之不去的失效方式说起。用复制专家示范的方式训练策略,它只在专家真正到访过的那些状态上,学到了从状态到动作的映射。而这些示范按构造就是一条窄窄的、近乎完美的轨迹带。部署时策略犯下一个小错,这个错误把它推离这条带,于是它落入一个离训练中所见更远一点的状态,它的下一个动作也就更糟一点。误差会累积。这就是协变量偏移(covariate shift),也是为什么一个单步准确率高达 99% 的策略,在长时程任务上仍可能大概率失败。

经典的解法,DAgger 及其后继,并不是更聪明的损失函数,而是一条数据采集规则:运行当前策略,让它漂移进它真正会到达的那些状态,然后恰好在那里采集专家的纠正。来自 Berkeley BAIR 与更广的 cs.RO 文献的工作,一次次以新的外衣重新发现同一个道理:修好一个策略的数据,不是更多专家的理想轨迹,而是对策略开始出错时所访问的那些分布外状态的覆盖。这些状态就紧挨着失败,因为漂向失败正是这副模样。

挽回是一项本领,必须被示范出来

一个不失败的策略,和一个能挽回的策略,是两回事,而只有后者能在真实世界里存活。挽回本身就是一项本领:打滑后重新抓取、够偏后重新接近、卡住后退出来换个角度再试。这一切都不会出现在一个每段都从干净复位开始、以成功结束的数据集里。如果模型从未见过从搞砸到修复的那段过渡,它就无法在需要时产出这段过渡。

这正是纠正式、介入式采集的意义所在。一名人类监督者看着策略运行,在它刚要失败的一瞬间接管,示范脱困之道,然后再把控制权交还。有价值的帧,正是夹在这次介入两侧的那些:滑向麻烦的过程,以及爬回来的过程。要拿到它们,你就得有意让策略失败一点点,而这与「采集应当干净」的每一条直觉都相悖。一个从不让机器人跌倒的数据集,永远教不会它自己站稳。

难负例,或者说知道不该做什么的价值

成功的示范告诉模型该做什么,却对不该做什么保持沉默,而一旦你需要模型去评判、排序或打分,而不只是模仿,这份沉默就代价高昂。一个奖励模型、一个值函数,或一个学习得到的世界模型,都必须把好的轨迹和坏的轨迹区分开。只喂给它好的,它就没有区分的依据,它从未见过自己本应画出的那条边界。

难负例挖掘(hard-negative mining)这门功夫,是去找出那些最贴近成功的失败,那些握力差一点就稳住、销钉差一点就到位的险些失败,并给它们很高的权重,因为正是这些案例真正钉住了那条边界。Google DeepMind 以及其他构建大型行为模型与世界模型的团队,越来越多地把部署日志当作专门开采这类状态的矿:策略不确定的地方,或者自主运行偏离了人类会做之事的地方。一个轻松的失败,机器人差了十万八千里,教不了什么。而那个难负例,那个直到最后一厘米看起来都还像成功的失败,抵得上一百次干净的取胜。

一个只有成功的数据集,教出来的机器人是走运,而不是稳健。决定一次部署成败的那些状态,恰恰是没人愿意记录的那些。

为什么轻松的取胜越堆越多,失败却没有

如果失败数据这么有价值,为什么它如此稀缺?因为流水线的每一环都在合谋把它丢弃。遥操作,至今仍是高质量采集的主力,天然产出成功:一名熟练的操作员很少失手,而一旦失手,本能反应就是删掉这一条重来。失败本就更稀少,而其中好的那些,也就是有信息量的险些失败,则更加稀少。它们更难存储,往往残缺或含糊,没有一个干净的终止状态可供锚定。它们也远更难标注。成功会自我标注,任务完成了。失败却抛出一堆需要人来回答的问题:它究竟在何时出的错、那一刻正确的动作是什么、挽回又该是什么样子。这种标注既慢又主观,还很容易标错。

其结果在公开语料里清晰可见。这个领域用来训练的那些大型遥操作与跨本体数据集,绝大多数是成功的轨迹,因为在「模仿取胜」这个旧假设下,那才是值得留下的东西。Toyota Research Institute 在其大型行为模型(large behavior models)的工作中坦言:诚实的评估,进而诚实的训练,取决于覆盖行为退化的那些情形,而不只是它表现出色的那些。没有失败可供检验,你甚至无法衡量稳健性,更谈不上为之训练。

只采集成功与兼顾失败的采集,各自交付了什么
维度只采集成功兼顾失败的采集
状态覆盖专家轨迹那条窄带补上策略会漂移进入的分布外状态
部署时的稳健性误差一累积就脆在漂移与扰动下依然稳住
挽回行为缺失,没有从搞砸到修复的过渡明确的重新抓取与重新接近示例
给值函数与奖励模型的信号没有负例,画不出边界钉住好坏分界的难负例
采集难度低,成功不费力就有高,你得有意让策略失败
标注成本低,成功会自我标注高,得有人标注它何时、为何出错

优势属于把错误留下来的那一方

采集成功的直觉并没有错,只是不完整。一个策略既需要看到任务被做好的样子,也需要看到任务险些散架、又被救回来的那些时刻。跑在前面的团队,并不是手握最大一堆完美示范的那些,而是那些不再把失败扔掉、学会了给它们打标签、并开始把下一批采集直直对准自家最强模型仍然会崩溃的那些状态的团队。

failure-datadata-flywheelrobot-learningnegative-examplesevaluation

来源