机器人策略为何会过拟合:为什么它伤害更大

机器人策略的过拟合藏在一个干净的验证分数背后,随后在真实硬件上失败。为什么具身过拟合伤害更大,以及在数据侧的修法。

阅读约 6 分钟

一个操作策略可以把墙纸背下来。在一个厨房里训练它,看它命中每一个留出帧,然后把同样的任务搬到另一张桌子上,就会看到它彻底崩溃。模型学到的不是倒水。它学到的是:当某只时钟出现在画面一角、相机处于某个特定高度、荧光灯呈某种色调时,倒水就会发生。换个房间,它所依赖的相关性就消失了。任务从未改变,改变的是房间,而策略早已把一切都押在了那个房间上。

每个机器学习从业者都把过拟合(overfitting)理解为训练损失与验证损失之间的差距。而在具身学习中,这个现象更尖锐,也更隐蔽,因为通常那个探测器,也就是一个留出验证集,悄悄地失去了探测能力。正是这一点,让机器人的过拟合比多数工程师所设想的视觉版本更危险。

为什么低验证损失会说谎

标准的验证划分假设你的留出样本与训练样本相互独立。机器人数据在两个层面上违反了这个假设。单次示范内部的帧高度相关,因此按帧随机划分会把几乎相同的图像分到墙的两侧,模型靠近乎记忆就能拿到高分。更糟的是,整个数据集可能共享同样的干扰因素:同一个实验室、同样三个背景、以同样节奏移动的同一批操作员。从这样一个池子里抽出的验证集,继承了同样的捷径,于是它认证的是一个学会了实验室、而非学会了任务的策略。

诚实的检验则是另一种性质。只有闭环评测,也就是让策略在它未曾见过的场景中于机器人上运行,才衡量你真正在乎的东西。它很慢,需要硬件,又难以自动化,因此它是截止日期临近时第一个被跳过的检查。而这一跳,正是过拟合策略得以存活到示范的地方。

身体里的捷径学习

深度网络是机会主义者。只要有任何特征能在训练集上预测专家动作,它们就会加以利用,而不管这个特征与任务是否有关。总是先于抓取落下的一道阴影、只在左侧出现过的一个物体、操作员在转弯前停顿的习惯:这些都是策略可以抓住的把手,用来替代对底层技能的学习。

具身学习还添加了一个具体而棘手的版本。当过去的动作也是输入的一部分时,策略可以学会复制自己上一个动作,而不是对场景作出回应,这种失败常被称为因果混淆(causal confusion)或复读机问题。它在离线时得分极高,因为那时真实的动作历史总是被提供,而一旦它必须自己生成这段历史,就会卡住。关于这些失效模式的讨论,反复出现在 arXiv cs.RO 以及 NVIDIA GEAR Lab 的研究文章中。

这里有一个残酷的反讽。加入动作历史通常会改善离线指标,因为在日志数据里,上一个动作几乎是下一个动作的完美预测器。团队看着数字往上走,就把模型发布了。而在机器人身上,策略必须自己生成这段历史,拐杖没了,性能随之垮掉。在验证里表现最好的那个特征,正是在部署里崩掉的那一个。

在视觉里,过拟合让你损失的是准确率。在机器人身上,它让你损失的是你没有拍下来的那一个情形,而你只有在硬件运行时才会发现。
表 1:视觉模型与机器人策略中过拟合的差异
维度视觉模型机器人策略
常见症状训练损失远低于验证损失离线指标很好,真实执行很差
藏身之处大多可从损失差距看出被相关的同场景验证数据掩盖
典型捷径背景或纹理线索场景布局、相机位姿、动作历史
如何探测一个干净的留出集在未见场景中的闭环执行
探测成本高:硬件与时间

数据侧的修法

你无法用正则化把自己从一个毫无多样性的数据集里救出来。最主要的杠杆,是在那些你希望策略忽略的干扰维度上引入变化:灯光、背景、物体实例、相机摆位,以及操作员本身。像 Open X-Embodiment 那样跨机器人类型聚合,部分上就是一种反过拟合的做法,因为一个被迫跨本体工作的策略,无法太过依赖任何单一身体的怪癖。数据增强对视觉类干扰有帮助。而在采集时随机化相机位姿与物体实例帮助更大,因为它从源头攻击那些相关性。

这一切都不新奇。它背后的直觉,与仿真中的域随机化(domain randomization)如出一辙:把你不希望策略去依赖的一切都变一变,让唯一剩下可学的信号就是任务本身。真实采集的不同之处在于,变化是要花钱的,这意味着它必须被规划进采集协议,而不是最后临时撒上去。

有两个习惯与数据同样重要。按场景或回合划分验证集,绝不按帧划分,这样留出集才是真正未曾见过的。并且尽早在环中评测,别等到仪表盘上的一个数字说服你去信任一个只见过一个房间的策略。

多少多样性才算够

原始数量是错误的坐标轴。来自一个厨房的一百万帧,教给策略的是关于那个厨房的知识。一个规模小得多、却横跨许多房间、许多光照条件和许多物体实例的数据集,教给它的才是任务本身。真正重要的是对干扰因素的覆盖,这把采集问题从「多少小时」重新表述为「多少种真正不同的条件」。这与 Toyota Research Institute 的大行为模型项目反复得出的结论是同一个:决定泛化上限的,是数据的构成,而不仅仅是它的规模。

一个有用的做法,是在采集任何数据之前就先把干扰维度一一写下来,然后针对每一个维度跟踪覆盖情况,而不是盯着一个「已采集小时数」的计数器往上爬。一个在某一个轴上很深、在其余轴上都很平的语料,每一次都会对那些平坦的轴过拟合,而小时数永远不会给你任何警示。

泛化首先是一种数据属性

人们很容易把过拟合当作用更好的损失、更多 dropout 或更大的模型就能解决的问题。而对机器人来说,杠杆在上游,在于相机看到了什么、以及它有多丰富多样。一个策略只能在其数据发生过变化的条件上泛化,而对数据保持不变的每一个条件,它都会欣然过拟合。用闭环执行去衡量真正的目标,诚实地划分数据,并在采集环节就把多样性构建进去。否则你得到的,就是一个背下了某个房间的策略,以及一段房间一变就戛然而止的演示视频。

overfittinggeneralizationdatasetsevaluation

来源