片段式数据与流式机器人数据

片段式数据,还是连续的数据流?这个藏在每个机器人轨迹数据集背后的框架选择,决定了策略最终能学到什么。

阅读约 6 分钟

机器人数据集几乎从不以一整段连续录像的形式出现。它总是被预先切成一个个片段(episode):伸手、抓取、放置、复位、重复。是某个人或某段脚本决定了每个片段从哪里开始、到哪里结束。这个决定在任何一次梯度更新之前就已经做出,并悄然限定了在这份数据上训练出的策略能学到什么、学不到什么。

另一种框架是数据流(stream):一段不间断的观测与动作日志,持续数分钟乃至数小时,没有清晰的接缝。两者描述的是同一段物理活动,却并不能相互替换。你所选择的框架,是片段式(episodic)还是流式(streaming),决定了数据如何存储、如何标注、哪些算法能够使用它,甚至决定了一个基准分数究竟意味着什么。

这是机器人学习中最不起眼的决定之一,也是影响最深远的决定之一。下面我们把它拆开来看。

一个片段悄悄假设了什么

一个片段是一条有界轨迹(trajectory):一个起始状态、一串观测-动作对,以及一个终止条件,无论那是成功、失败,还是一个固定的时间时程。“复位”这个词掩盖了大部分工作量。在两个片段之间,总有人把场景恢复到一个新鲜的起始状态,或用手,或用脚本,或用第二条机械臂。这种复位是实验室的特权。一台在真实地面上工作的人形机器人,永远不会在两个任务之间被瞬移回某个标准姿态。

大多数模仿学习语料在构建上就是片段式的。Open X-Embodiment 聚合了大约一百万条轨迹,每一条都是带有已知任务标签的有界示范。DROID 是在数百个场景中采集的遥操作片段。RH20T 则围绕富接触的任务片段来组织。这种结构便于训练,但它同时是一个关于“任务从哪里开始、到哪里结束”的强假设。

数据流保留了片段丢弃的东西

再看自我视角视频语料。Ego4D 及其多视角后继 Ego-Exo4D 本质上就是数据流:数千小时的第一人称活动,不间断地流动,没有复位。人擦拭台面、停顿、伸手去拿抹布、把它掉在地上、再捡起来,然后漂移到下一件家务。这一切都没有被剪掉。

数据流保留了“过渡地带”。它保留了从一个技能切换到下一个技能的过程、发呆的几秒钟、失手以及随后的恢复。片段式切分通常恰恰删掉了这些素材,因为一段干净的示范更容易标注,也更适合放进精彩集锦。然而,正是这片过渡地带,藏着现实部署中的大多数失败。

发呆和失手的片刻同样不是废料。一段保留了“抹布掉在地上、再伸手去捡”的数据流,等于免费教了一次恢复,而这恰恰是只在精修成功上训练的策略永远见不到的行为。当你切得太狠,你缩短的就不只是片段,你是在筛选出一个“永远不出错”的世界,然后又困惑于机器人第一次遇到意外时为何会僵住。

片段是关于任务在何处开始、何处结束的一个假设。数据流则拒绝去猜。两者之间的落差,正是策略在现实世界中大多数失败的藏身之处。

两种框架的正面对比

片段式数据与流式数据在整条流水线上的差异
维度片段式数据流式数据
数据单元带终止条件的有界轨迹无固定终点的连续日志
任务间复位被假设且必需没有,活动持续流动
典型来源遥操作、脚本化示范第一人称可穿戴设备、部署日志
最契合的算法行为克隆、按片段的离线 RL免复位 RL、持续学习与自监督学习
标注边界在采集时已知需要事后做时序分割
失败与恢复通常被剪除完整保留
存储形态大量小文件少数超长文件

存储把这种分野变得具体。片段天然会碎成许多小文件,训练加载器可以随机打乱它们,而这正是随机梯度下降想要的。数据流则是少数几个超长文件,抗拒打乱,光是要找到有意思的那一分钟,就得先建一套索引。两种形态都没有错,只是各自为不同的消费者而调校;在两者之间转换,是实打实的工程,而不是改个格式开关那么简单。

为什么框架会改变算法

行为克隆想要片段。它学习一个从观测到动作的直接映射,并依赖清晰的任务与终止条件来判断何时算完成。大部分离线强化学习也继承了同样的假设,在有明确终点的片段上计算回报。把一段原始数据流喂给这些方法,它们会找不到任何锚点。

免复位学习和持续学习则想要数据流。任何需要连续运行一小时、中途无人给场景断电重启的机器人,也想要数据流。部署天然产生数据流:一支机队记录的是连续的经验,而不是整齐的短片。一旦点破,这种错配就显而易见:我们在片段上训练,却把模型部署进数据流里。

评估也沿着同一条接缝裂开。片段式基准报告的是成功率:多少次有界尝试以成功告终。而流式部署在意的是另一个数字,平均干预间隔,也就是机器人在有人不得不出手之前能连续跑多久。一个策略完全可能在前一个指标上很漂亮,在后一个指标上却很脆弱,因为干净的片段从未考验过它穿越杂乱过渡、持续运行下去的能力。只报告片段式那个数字,正是实验室结果跑赢工厂现实的方式。

连接两者的桥梁是分割,而分割并不免费。把一段长日志切成可复用的片段,是一个时序动作分割问题,其误差会不断向下游传播。把边界提前两秒切开,你切出的每一条示范都会继承一次被截断的抓取。arXiv Robotics 上近来的工作之所以反复回到自动分割,正是因为它是那道没人愿意碰、却承重的工序。

按流采集,按片段训练

这并不是一场非此即彼的信仰之争,你也不必一次性永久站队。可行的模式是:连续录制,保留每一个时间戳与事件标记,再在下游切分成片段,等任务定义变化时就重新切一遍。把原始数据流丢掉,这个选项就永远没了。留着它,同一段录制今天可以喂给一次行为克隆训练,下个季度还能支撑一次免复位实验。一份你能重新切分的数据集,远比别人替你切好的那份更有价值。

trajectoryepisodic-datastreaming-datadatasets

来源