你不需要给机器人编程,你只需要做一遍给它看。
在传统的机器人编程中,工程师需要为每一个动作写出精确的坐标、速度和力矩指令——比如“将机械臂末端移动到 (x=0.32, y=0.15, z=0.08) 处,以 0.5 m/s 的速度闭合夹爪”。这不仅枯燥,而且脆弱:只要工作台偏移一厘米,整个程序就失效了。
示教学习(Learning from Demonstration, LfD) 提供了一条截然不同的路径:让人类直接演示任务,机器人观察并复现。就像师傅带徒弟,徒弟不需要理解力学方程,只需认真看、认真模仿。
示教学习的流程可以浓缩为三个步骤:
人类演示(多次) → 记录轨迹数据 → 机器人泛化并复现
一条轨迹就是状态随时间变化的序列。在机器人领域,状态通常包括:
一次拖动示教会生成一条样本轨迹:
$$ \tau = { (\mathbf{q}_0, \mathbf{x}_0), (\mathbf{q}_1, \mathbf{x}_1), \ldots, (\mathbf{q}_T, \mathbf{x}_T) } $$
其中 $T$ 是时间步数。多条演示轨迹构成数据集 $\mathcal{D} = {\tau_1, \tau_2, \ldots, \tau_m}$。
关键难点:人类演示的轨迹不是唯一的,且可能包含抖动、犹豫甚至错误。示教学习必须能从少量、次优的演示中提取出核心意图。
DMP 是示教学习领域最经典的算法之一。它将一条复杂轨迹分解为两部分:
$$ \ddot{y} = \alpha_y (\beta_y (g - y) - \dot{y}) + f(x) $$
强迫函数是时间 $t$ 的非线性函数,通常用径向基函数(RBF)逼近:
$$ f(x) = \frac{\sum_{i=1}^{N} \omega_i \Psi_i(x)}{\sum_{i=1}^{N} \Psi_i(x)} \cdot x $$
其中 $\Psi_i(x)$ 是高斯核函数,$\omega_i$ 是学习到的权重。
训练时,我们从演示轨迹中反推 $f(x)$ 的期望值,然后用线性回归求解 $\omega_i$。复现时,给定新的起始点 $y_0$ 和目标 $g$,DMP 会自动生成一条平滑且形状相似的轨迹——实现了泛化。
行为克隆(Behavioral Cloning, BC)将示教学习看作一个监督学习问题:
训练集就是演示数据中的状态-动作对 ${(\mathbf{s}_t, \mathbf{a}_t)}$。我们用神经网络或高斯过程回归来拟合映射:
$$ \mathbf{a} = \pi(\mathbf{s}) $$
优势是极其直观,劣势是分布漂移(Distributional Shift)——当机器人执行时,由于微小误差,它可能会进入训练数据中从未见过的状态,导致错误累积。这就像学车时只记住了直路的打轮角度,但到了弯道就慌了。
DAgger(Dataset Aggregation)是一种交互式方法,核心循环如下:
这样,策略就能逐渐“看到”自己可能犯错的状态,并提前学习如何纠正。
示教学习远不止复制位置轨迹,还可以模仿:
| 挑战 | 说明 | 常用对策 |
|---|---|---|
| 多模态演示 | 不同专家用不同方式完成同一任务(如有的先抓柄,有的先抓底座) | 引入潜变量模型(如高斯混合模型 GMM)来聚类 |
| 高维动作空间 | 拟人机器人有几十个自由度,人工演示难以覆盖全部 | 降维 + 子空间投影(如主成分分析) |
| 安全与泛化 | 机器人可能在未见状态做出危险动作 | 设置硬约束(力限制) + 保守的置信域策略 |
| 维度 | 强化学习(RL) | 示教学习(LfD) |
|---|---|---|
| 初始知识 | 完全随机 | 已拥有示范经验 |
| 反馈来源 | 奖励信号(可能稀疏) | 专家动作标签 |
| 探索负担 | 巨大(全靠试错) | 很小(从示范附近开始探索) |
| 最终性能 | 可能超越人类 | 通常受限于示范质量 |
两者经常结合:先用示教学习获得一个“还不错的”初始策略,再通过 RL 进行微调(如 DAPG 算法)。
孩子的大脑相当于一个 DMP 或神经网络——他不复制你的绝对手指坐标,而是记住关键节点(交叉、打结、拉紧)和整体节奏。即使鞋带的长度稍有不同,他也能调整。
近年来,大型视觉-语言模型(VLM)为示教学习打开了新的大门。我们可以用自然语言 + 视频演示来教学:
“请像这样把红色方块叠到蓝色方块上。”
机器人利用预训练模型理解语义和视觉特征,无需精确轨迹演示,只需理解“叠放”这一概念的抽象含义。这标志着示教学习正从轨迹复制走向意图理解。
示教学习不是让机器人“背答案”,而是让它“看解题思路”。它用最自然的方式(人类演示)来传递技能,同时用数学工具(DMP、行为克隆、DAgger)来处理不完美、多变和泛化问题。
如果你第一次接触机器人学习,不妨记住这句话:
最好的示教,不是告诉机器人每一步怎么走,而是让它看到成功的轨迹,并赋予它适应变化的能力。
从今天起,每当你完成一次熟练的手工操作(比如倒水、打字、拉拉链),你都可以想:如果让机器人看着我学,它能学会吗?——这,就是示教学习的起点。