✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

模仿的艺术:示教学习入门

创建时间:2026-08-05 更新时间:2026-08-05 阅读次数:1002 次

你不需要给机器人编程,你只需要做一遍给它看。

在传统的机器人编程中,工程师需要为每一个动作写出精确的坐标、速度和力矩指令——比如“将机械臂末端移动到 (x=0.32, y=0.15, z=0.08) 处,以 0.5 m/s 的速度闭合夹爪”。这不仅枯燥,而且脆弱:只要工作台偏移一厘米,整个程序就失效了。

示教学习(Learning from Demonstration, LfD) 提供了一条截然不同的路径:让人类直接演示任务,机器人观察并复现。就像师傅带徒弟,徒弟不需要理解力学方程,只需认真看、认真模仿。

1. 核心思想:从“编程”到“演示”

示教学习的流程可以浓缩为三个步骤:

  人类演示(多次)  →  记录轨迹数据  →  机器人泛化并复现
  • 人类演示:可以是物理拖动机械臂(动觉示教),也可以是佩戴动作捕捉设备,甚至只是用摄像头拍下人类操作视频。
  • 记录数据:系统记录下关节角度、末端位置、力/扭矩信号等时序数据。这些数据构成了一条或多条轨迹(Trajectory)
  • 复现与泛化:机器人不仅要在相同起始条件下照搬轨迹,还要能适应轻微变化(比如目标物体挪动了 5 厘米)。

2. 轨迹:示教学习的“原材料”

一条轨迹就是状态随时间变化的序列。在机器人领域,状态通常包括:

  • 关节空间:$\mathbf{q}(t) = [q_1(t), q_2(t), \ldots, q_n(t)]^\top$($n$ 个关节的角度)
  • 任务空间:$\mathbf{x}(t) = [x(t), y(t), z(t), \phi(t), \theta(t), \psi(t)]^\top$(末端位姿)

一次拖动示教会生成一条样本轨迹:

$$ \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}$。

关键难点:人类演示的轨迹不是唯一的,且可能包含抖动、犹豫甚至错误。示教学习必须能从少量、次优的演示中提取出核心意图。

3. 最经典的方法:动态运动基元(DMP)

DMP 是示教学习领域最经典的算法之一。它将一条复杂轨迹分解为两部分:

$$ \ddot{y} = \alpha_y (\beta_y (g - y) - \dot{y}) + f(x) $$

  • $y, \dot{y}, \ddot{y}$:位置、速度、加速度(标量或向量)。
  • $g$:目标位置(吸引力项)。
  • $\alpha_y, \beta_y$:阻尼系数(保证系统稳定收敛到 $g$)。
  • $f(x)$:强迫函数(Forcing Function),用来拟合演示轨迹的“形状”。

强迫函数是时间 $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 会自动生成一条平滑且形状相似的轨迹——实现了泛化

4. 更直接的方法:学习策略(行为克隆)

行为克隆(Behavioral Cloning, BC)将示教学习看作一个监督学习问题:

  • 输入:当前状态 $\mathbf{s}$(如关节角度、物体位置)。
  • 输出:当前动作 $\mathbf{a}$(如关节速度或末端速度)。

训练集就是演示数据中的状态-动作对 ${(\mathbf{s}_t, \mathbf{a}_t)}$。我们用神经网络或高斯过程回归来拟合映射:

$$ \mathbf{a} = \pi(\mathbf{s}) $$

优势是极其直观,劣势是分布漂移(Distributional Shift)——当机器人执行时,由于微小误差,它可能会进入训练数据中从未见过的状态,导致错误累积。这就像学车时只记住了直路的打轮角度,但到了弯道就慌了。

5. 克服分布漂移:DAgger 算法

DAgger(Dataset Aggregation)是一种交互式方法,核心循环如下:

  1. 用当前策略 $\pi$ 执行任务,收集新轨迹。
  2. 让人类专家对这些新状态提供“正确动作”标签。
  3. 将新数据加入训练集,重新训练 $\pi$。
  4. 重复多次。

这样,策略就能逐渐“看到”自己可能犯错的状态,并提前学习如何纠正。

6. 除了轨迹,还能模仿什么?

示教学习远不止复制位置轨迹,还可以模仿:

  • 力/阻抗特性:在装配任务中,演示者施加的柔顺力比位置更重要。此时记录力传感器数据,学习力控制策略
  • 视觉注意力:通过眼动追踪,学习专家在看哪里,从而引导机器人优先处理关键区域。
  • 高级子任务序列:将演示分解为“抓取 → 搬运 → 插入”等阶段,学习任务图(Task Graph)

7. 现实挑战:示教学习的“三条命门”

挑战 说明 常用对策
多模态演示 不同专家用不同方式完成同一任务(如有的先抓柄,有的先抓底座) 引入潜变量模型(如高斯混合模型 GMM)来聚类
高维动作空间 拟人机器人有几十个自由度,人工演示难以覆盖全部 降维 + 子空间投影(如主成分分析)
安全与泛化 机器人可能在未见状态做出危险动作 设置硬约束(力限制) + 保守的置信域策略

8. 和强化学习的本质区别

维度 强化学习(RL) 示教学习(LfD)
初始知识 完全随机 已拥有示范经验
反馈来源 奖励信号(可能稀疏) 专家动作标签
探索负担 巨大(全靠试错) 很小(从示范附近开始探索)
最终性能 可能超越人类 通常受限于示范质量

两者经常结合:先用示教学习获得一个“还不错的”初始策略,再通过 RL 进行微调(如 DAPG 算法)。

9. 一个生活化的类比:教孩子系鞋带

  • 传统编程:给孩子一张纸,上面写着“左手捏住左绳,绕右绳一圈,从下方穿出……”。孩子记不住。
  • 示教学习:你坐在孩子旁边,慢慢地系一遍鞋带,同时说“你看我的手”。然后让孩子自己来,如果卡住了,你再示范一次。

孩子的大脑相当于一个 DMP 或神经网络——他不复制你的绝对手指坐标,而是记住关键节点(交叉、打结、拉紧)和整体节奏。即使鞋带的长度稍有不同,他也能调整。

10. 未来展望:示教学习 + 大模型

近年来,大型视觉-语言模型(VLM)为示教学习打开了新的大门。我们可以用自然语言 + 视频演示来教学:

“请像这样把红色方块叠到蓝色方块上。”

机器人利用预训练模型理解语义和视觉特征,无需精确轨迹演示,只需理解“叠放”这一概念的抽象含义。这标志着示教学习正从轨迹复制走向意图理解

总结

示教学习不是让机器人“背答案”,而是让它“看解题思路”。它用最自然的方式(人类演示)来传递技能,同时用数学工具(DMP、行为克隆、DAgger)来处理不完美、多变和泛化问题。

如果你第一次接触机器人学习,不妨记住这句话:

最好的示教,不是告诉机器人每一步怎么走,而是让它看到成功的轨迹,并赋予它适应变化的能力。

从今天起,每当你完成一次熟练的手工操作(比如倒水、打字、拉拉链),你都可以想:如果让机器人看着我学,它能学会吗?——这,就是示教学习的起点。

本教程共13节,当前为第13节!
本教程最新修订时间为:2026-08-06 21:35:58

📌 面试天下网:一款服务于上班族的口袋书,让大家在地铁里/公交上可以学习大模型技术!
📌 网站公告:人人都需要的干眼克星上线啦>>>>>>
📌 网站公告:2026年7月招聘兼职>>>>>>