模仿学习:照着人做
前情提要:在第 16 篇《强化学习:试错出真知》里,我们讲到机器人可以像练琴一样,自己不断尝试、根据"好与不好"的反馈逐步摸索出正确做法,这条路叫强化学习。但摸索很慢,还常常碰壁。于是自然会想:既然人已经会做了,能不能直接让机器人"照着人做一遍"来学会?这就引出了本篇要聊的模仿学习——它更像"抄作业",而不是自己从头试错。
有些事很难用规则说清楚。比如你教一个小孩系鞋带,往往不是背出"第一步穿左孔、第二步绕一圈"的条条框框,而是手把手做一遍给他看,他跟着模仿就学会了。机器人也面临同样的情况:很多灵巧动作——叠衣服、端杯子、开门——要写成精确的数学规则非常困难,但让一个人演示一遍,却轻而易举。
模仿学习(Imitation Learning)走的就是这条"照着人做"的路线。它的核心想法很简单:把专家(通常是人)的示范,记成一张"看到某种情况,就做某种动作"的对照表;等机器人自己遇到类似情况时,照着这张表去复现动作,就表现得像学会了。
一、把示范记成"状态到动作"的映射
要理解模仿学习,先要想清楚示范里到底有什么。我们可以把机器人每一次决策,拆成两个东西:
- 状态(State):机器人此刻"看到了什么、身体处在什么姿势"。比如摄像头看到的画面、机械臂关节的角度、手里物体的位置。
- 动作(Action):机器人此刻"该怎么做"。比如机械臂该往哪个方向挪一厘米、手指该用多大力气。
一个完整的示范,就是一连串"状态 → 动作"的配对。老师傅开车时,看到前方红灯(状态),脚踩刹车(动作);看到弯道(状态),转动方向盘(动作)。把这些配对收集起来,机器学习的任务就是:从大量示范里,归纳出"给定状态,应该输出什么动作"的规律。
一旦学成,机器人就不再依赖老师在场。它自己看到相似状态,就能直接给出相近的动作。这就像你背下了"红灯踩刹车"的对应关系后,以后自己开车也能处理,不用师傅每次在旁边喊。
二、行为克隆:最直接的"抄作业"
模仿学习里最直白的一种方法叫行为克隆(Behavior Cloning)。名字里的"克隆",是指机器人试图把专家的行为原样复制下来。
做法上,它和常见的监督学习几乎一样:把示范数据当成"题目和答案"——状态是题目,动作是答案,训练一个模型去拟合。训练完成后,模型输入一个状态,就吐出一个动作。整个过程不需要机器人自己冒险试错,也不用设计"做得好不好"的评分规则,只要收集到足够多、足够好的示范,模型就能学个八九不离十。
这听起来很省事,确实也是模仿学习最常被先用上的原因:上手快、概念简单。但它的弱点也正藏在"克隆"二字里。
三、遥操作:人怎么给机器人"示范"
那么示范从哪来?最常见的来源是遥操作(Teleoperation)。简单说,就是人通过手柄、数据手套、或者套在机械臂上的"主控臂",远程操控机器人做出动作;机器人忠实地记录下每一个瞬间的状态和对应动作,于是就得到了一份高质量示范。
想象你戴上一副能感应手部动作的手套,自己的手怎么动,远处的机械臂就怎么动。你叠好一件衣服,机器人把"手在哪儿、衣服在哪儿、我使了多大劲"全部录下来——这份录像般的数据,就是模仿学习的教材。
遥操作的好处是示范质量高、贴近真实物理;缺点也明显:收集示范要靠人一点点做,费时费力,而且人能示范的场景终归有限。
四、模仿学习 vs 强化学习:抄作业 vs 自己悟
到这里,可以把它和第 16 篇的强化学习放在一起对比,二者的差别一目了然:
- 强化学习是"自己摸索"。机器人不断尝试,做对了给奖励、做错了受惩罚,慢慢试出好策略。它不需要老师示范,但探索过程慢、还可能走弯路。
- 模仿学习是"抄作业"。有现成的专家示范可以直接学,起步快、行为更像人;但它高度依赖示范的质量,而且一旦离开示范覆盖的范围,就容易出问题。
一个形象的比方:强化学习像闭卷考试里自己推导答案,模仿学习像照着参考答案把解题步骤背下来。抄作业当然快,可要是考题稍微变了样,只背步骤的人就容易卡壳——这就引出了模仿学习最著名的坑。
五、分布偏移:照着做,却跑偏了
模仿学习有个经典陷阱,叫分布偏移(Distribution Shift)。意思是:模型训练时见过的"状态分布",和真正上场时遇到的"状态分布"对不上,于是越做越歪。
为什么会这样?因为行为克隆是一步步复现动作的。假设在某一步,机器人因为一点小误差,姿态和示范时差了一点点——这个偏差后的状态,可能根本没在示范数据里出现过。模型对"没见过的状态"只能瞎猜一个动作,结果下一步偏差更大;偏差像滚雪球一样累积,几步之后机器人就彻底跑偏、摔了杯子。
换句话说,专家示范往往只覆盖了"正确路线附近"很窄的一段状态;而真场景里,机器人一旦稍微偏离这条窄路,示范就"管不到"它了。这就像你只看过别人在平地上骑车,真自己骑时歪了一下,却没人教过你"歪了怎么救回来",于是越歪越狠,最后摔了。
缓解这个陷阱的思路很多,比如让专家在示范时特意加入一些"走偏了怎么救回来"的样例,或者让机器人在练习中自己试探、遇到示范没覆盖的情况再请人补教。但无论如何,认识到"窄示范、宽现实"之间的鸿沟,是理解模仿学习的关键一课。
六、一句话总结
模仿学习,就是让机器人通过"照着专家示范做",把"看到什么情况、该做什么动作"直接学过来。它用行为克隆把示范记成映射,靠遥操作收集教材,比强化学习起步快、更像人;但也要当心分布偏移——示范只覆盖窄窄一条路,真场景一旦跑偏,就可能雪球般崩掉。
读后小测
3 句话复述:模仿学习让机器人照着人的示范学会动作,本质是把"看到的状态"对应到"该做的动作"。行为克隆直接把示范当教材来模仿,遥操作用人的远程操控生成这些示范;它和强化学习不同,是靠"抄作业"而不是自己试错。但要小心分布偏移:示范只覆盖很窄的情况,真场景一旦稍微跑偏,错误会越积越大直至失败。
1 件动手小事:今天找个会做某件小事的人(比如系一种你不会的绳结、叠某种形状的纸),请他只做、不讲解,你纯靠观察模仿一次;留意自己"照着做却走样"的那一步——那就是分布偏移在人身上的影子,体会一下机器人为什么也会卡在同一类地方。
---
下一回,我们会进入第 18 篇《抓取为什么这么难:接触、摩擦与柔性》。本篇里我们说到,模仿学习能让机器人"照着人做"复现抓取的动作;可真正去抓一个东西时,麻烦才刚开始——手指碰到物体那一瞬间的接触力、物体表面是滑还是涩的摩擦、还有物体本身是软是硬的柔性,都会让"看起来一样的抓"结果天差地别。下一篇我们就钻进这些藏在"抓一下"背后的物理细节里。