面向机器人的离线强化学习
离线强化学习无需仿真器,就能把记录下来的机器人数据变成策略。它真正的潜力、唯一棘手的失效模式,以及它对数据的胃口。
一只机械臂靠试错学习拉开抽屉,在第一次成功之前会失败上百次。每一次失败,都是真实的电机在受力、真实的夹爪磕到把手、真实的时间在会磨损的硬件上流逝。再乘以在线强化学习通常需要的成千上万次尝试,这笔账就算不过来了。你没法在一台会坏的机器上靠蛮力堆出技能。
这正是让经典强化学习在物理机器人上显得别扭的那堵墙。算法对交互极度渴求,而硬件上的交互又慢、又贵、有时还危险。离线强化学习试图在不付出这份代价的情况下拿到强化学习的收益:它从已经采集好的数据中学习策略,训练期间从不触碰真实环境。
这与行为克隆是一个截然不同的赌注,它也改变了你的数据集需要包含什么。
从一份冻结的数据集中学策略
离线强化学习拿到的是一份固定的转移记录,每一条包含状态、动作、奖励和下一个状态,然后从中挤出一个策略。没有仿真器,没有新的回放。学习器无从询问“如果我换一种做法会怎样”,它只有过去被尝试过什么的记录。这份记录可以是遥操作数据、早先的部署、脚本化的尝试,或是以往实验留下的杂乱产物。
一旦你手头堆着数据,它的吸引力就很明显了。行为克隆把这份记录当作一组要模仿的样例;离线强化学习则把它当作关于因果后果的证据,这意味着它原则上可以把多段平庸轨迹里好的片段拼接起来,产出一个比集合中任何单个示范者都更好的策略。
举个具体的例子会更清楚。假设你的日志里,一位操作员伸向抽屉的动作很好,但拉的那一下笨手笨脚;另一位拉得很干净,接近的角度却很糟。单看任何一段轨迹,都算不上好示范。有了合适的价值估计,离线强化学习可以取第一段里好的伸手、第二段里好的拉动,合成出没有任何单个操作员真正做出过的行为。
唯一的硬问题:在数据之外行动
这里有个陷阱,而且它就是整个课题所在。基于价值的学习器会估计每个动作有多好。当它考虑一个数据集从未包含的动作时,估计没有任何锚点,而这些分布外的动作往往看起来好得可疑。于是策略去追逐它们,一路滑进数据从未覆盖的状态,在那里它的预测纯属幻想。
这就是外推误差,而驯服它正是该领域大多数方法存在的理由。占主导的几大流派都以某种方式把策略拉回数据附近:
- 保守的价值估计刻意压低未见动作的价值,让策略不再信任它们。保守 Q 学习是广为人知的例子。
- 隐式约束在学习价值函数时根本不去查询数据之外的动作,如隐式 Q 学习那样,绕开高估问题而不是硬碰硬。
- 行为正则化加入一个惩罚项,让学到的策略贴近生成数据的策略,用一部分上限空间换取安全。
这一条研究脉络的很大一部分可以追溯到 Berkeley BAIR blog 及其周边团队,而更新的变体也在 arXiv Robotics (cs.RO) 上稳定地出现。
把行为克隆、在线与离线强化学习摆在一起
| 属性 | 行为克隆 | 在线强化学习 | 离线强化学习 |
|---|---|---|---|
| 与环境交互 | 无 | 持续 | 无 |
| 是否需要奖励 | 否 | 是 | 是 |
| 能否超越示范者 | 不能 | 能 | 有时能 |
| 主要失效模式 | 复合误差 | 采样成本与安全 | 外推误差 |
| 如何对待失败尝试 | 丢弃 | 自行生成 | 从中学习 |
有意思的是最后一行。行为克隆想要干净的成功,并悄悄忽略其余;离线强化学习连失败也想要,因为一段失败的轨迹携带着奖励信息,告诉学习器什么不该做。
离线强化学习不需要一台机器人不停地尝试。它需要的是一份足够诚实、把那些没成功的尝试也收进来的数据集。
没人宣传的数据胃口
离线强化学习常被当作免费的午餐来兜售:你已经有日志了,直接从里面学就好。但实践中,它要的三样东西,是普通示范数据很少能完整提供的。
覆盖度。策略只能在数据到访过的区域里表现良好。如果每一次记录下来的开抽屉都从同一个整齐的位姿开始,策略就不会知道从一个刁钻的角度该怎么办。离线强化学习无法凭空造出它从未见过的状态,它只能重组已有的东西。由此带来的现实后果是:决定学到的策略上限的,是数据的多样性,而不只是数据量。
奖励。与行为克隆不同,离线强化学习需要奖励信号,而对真实的操作任务来说,奖励很少是现成递到你手里的。得有人来定义成功,或由一个学到的奖励模型去推断它,两者都是实打实的工作。
失败与恢复。它相对克隆的优势,来自看到成功与失败之间的差别。一个只有精修成功的数据集把这份信号丢掉了。像 Open X-Embodiment 这样的大规模聚合语料,以及像 DROID 这样标准化的集合,在这里之所以宝贵,正是因为它们跨越了许多结果与条件;而 Toyota Research Institute 关于大型行为模型的工作,依赖的恰恰是这种广度。
它适合放在哪里
离线强化学习不是模仿学习的替代品,也不是魔法。当你手握一份庞大、多样、带有某种奖励概念的日志,又没有安全的办法再去采集更多交互时,它就是对的工具。在这些条件下,它能从既有数据里榨出比克隆更多的东西。若给它错的数据,比如一堆一模一样、又没有奖励的成功,它就无从下手。没有哪个算法能找回采集过程已经丢弃的信息。方法的好坏,永远不超过递给它的那份记录,这也是另一种说法:难的部分从来都是数据。