JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

向人学习:模仿学习与行为克隆

与其用奖励驱动无尽的试错,不如直接示范给机器人看,让它从你的示范中模仿并举一反三。

当设计奖励才是最难的部分

上一章里,机器人靠试错学习:它不断尝试,再由奖励函数告诉它每次做得有多好。当你能把“好”用一个数字写下来时,这套办法非常漂亮。可是想想叠毛巾、擦掉洒出来的水,或者把一根线插进插孔。一条叠得整齐的毛巾该得多少分,叠得略歪的又该得多少分?亲手设计这个分数,还要不断打补丁、防止机器人钻空子,往往比任务本身还难。

其实有个更友好的替代方案。你大概本来就会做这个任务——那就直接示范给机器人看。这正是模仿学习的核心思路:不必费心设计奖励、再让机器人慢慢摸索,而是直接给出你想要的行为示例,让机器人学着重现。这种从人提供的示例中教机器人的更宽泛做法,叫作示范学习

行为克隆:把示范当成习题

最简单的模仿方式也最直接,它有个名字:行为克隆。诀窍在于意识到:一段示范其实就是一长串成对的例子。每一个瞬间,机器人都会看到某种情况——一帧摄像头画面、各关节角度、夹爪的状态——而人也做了某个动作——往这个方向移动、合上夹爪。把它们配成对,你就得到了一张张“情境 → 动作”的卡片,跟抽认卡一模一样。

一旦这样来看,学习问题就变成了普通的监督学习——和给照片打标签所用的那种模式匹配如出一辙。输入是情境,“正确答案”是人采取的动作,网络被训练去预测那个动作。最终得到的是一个控制策略:一个把任意新情境映射到动作的函数。没有奖励,没有探索——只是照着专家做的去做,并期望这些模式能推广到与示范略有差异的情境。

for each demonstration:
    for each moment t in the demonstration:
        observation = what the robot saw at t   (image, joint angles, ...)
        action      = what the human did at t   (move, grasp, ...)
        add (observation -> action) to dataset

train policy to predict action from observation   # plain supervised learning
用伪代码看行为克隆:把示范切成(观测,动作)对,再训练策略由观测预测动作。

示范从哪里来

一个策略的好坏,取决于它学习所用的示例,所以下一个问题很实际:你要怎样获得成百上千条高质量的示范?最常见的答案是让人直接操控机器人。人来引导真实的机械臂——或是握着它移动,或是用摇杆、数据手套、配套手柄来操控——与此同时,每一个观测和指令都被记录下来。这样产生的记录就叫遥操作示范数据

正因如此,许多现代机器人学习都是从一个人花一下午时间遥操作几十次抓取放置开始的,每一次都是一条新的示范。它的好处是:数据是在真实机器人、真实世界里录下来的,所以情境和动作天生就“说着机器人的语言”——同样的摄像头,同样的电机。代价则是成本:得有人坐下来一遍遍示范,而且通常要积累许多多样化的例子,策略才不再脆弱。

漂移问题:小错滚成大错

行为克隆有一个著名的弱点,在你信任一个克隆策略之前,值得先弄明白。训练时,机器人只见过人去过的情境——而一个熟练的人总走在一条整洁的路径上。可当策略自己运行时,它迟早会犯一个小错:它停在了示范者从未到过的、偏左一厘米的地方。此刻它面对的是一个略微偏离示范路径的情境——一个它从未受训过的情境——于是它的下一个猜测就更糟一点,把它推得更偏,错误层层累积。

想象你学开车,只靠观看一位完美的司机,他永远把车稳稳地开在车道正中。你从没见过怎样从偏向路肩中纠正回来——因为你的老师从不偏移。一旦你跑偏,就懵了,而每一次修正都是一个全新的猜测,还可能越修越糟。这种累积正是纯行为克隆的核心风险:机器人可能漂移到没有任何人示范过的状态,在那里它完全不知所措。

各种补救办法都瞄准同一个目标:教机器人如何纠偏回正。你可以特意示范从偏离路径的情境中如何纠正;可以让策略自己运行,一旦它开始漂移就由人接手,这样它自己的错误就被标注上了正确的修正;也可以退一步借助奖励信号,在克隆从未覆盖到的区域继续练习。做得好时,奖励塑形与模仿会相互增强——示范给出强力的起跑优势,奖励则填补空缺。