Skip to content

模仿学习

模仿学习(Imitation Learning,又称 Learning from Demonstration)通过模仿专家行为来学习策略,不需要奖励信号——是 RL 落地真实世界最实用的途径之一。本页梳理行为克隆、DAgger、数据集聚合、现代扩散策略与 VLA 模型,及其与监督学习、IRL 的关系。前置阅读:强化学习概览、逆强化学习。

在强化学习中,智能体通过试错和奖励信号来学习最优策略。但在真实世界中,设计一个好的奖励函数极其困难——自动驾驶怎么定义”开得好”的奖励?机器人怎么定义”优雅地抓取”?而人类专家(司机、技师、棋手)的示范本身就是最好的信息来源。模仿学习绕过了奖励设计这一难题,直接从专家行为中提取策略,因而成为机器人学(Robotics)和具身智能(Embodied AI)最核心的学习范式之一。

把模仿学习想象成学徒跟着师傅学手艺——师傅做什么你就学做什么,不问”为什么这么做”,只追求”做出一样的效果”:

  • 行为克隆(Behavioral Cloning, BC)= 最朴素的模仿学习:把”师傅在每个状态做了什么”当成监督学习数据集,学一个从状态到动作的映射 a=πθ(s)a = \pi_\theta(s)。本质就是监督学习,用交叉熵(离散动作)或 MSE(连续动作)做损失函数。
  • 为什么 BC 会”偏移”= 学徒一旦走错一步(偏离师傅的路线),就到了师傅从没去过的状态——在这些状态,学徒没有”师傅怎么做”的参考,只能瞎猜,错误会雪球般累积。这叫分布偏移(distribution shift,指训练时所见数据分布与测试时实际遇到的数据分布不一致)或累积误差(compounding error,指每步的小误差随时间步指数放大的现象)。理论分析表明,若单步预测误差为 ϵ\epsilon,则在 TT 步轨迹中累积误差可达 O(T2⋅ϵ)O(T^2 \cdot \epsilon)——这就是 BC 在长时序任务上性能急剧下降的根本原因。
  • DAgger(Dataset Aggregation,数据集聚合)= 解决 BC 偏移的妙招:学徒边学边犯错,师傅看着学徒犯错的状态示范”如果我在这个状态会怎么做”,把这些新示范加进数据集——不断补足学徒真正会遇到的状态分布。DAgger 的收敛性由**无悔在线学习(no-regret online learning)**理论保证:经过足够多轮迭代,策略性能可逼近专家水平。
  • 与监督学习的关系= 行为克隆就是监督学习(输入状态、输出动作),但数据来自时序轨迹——关键区别在于测试时状态的分布会因策略不同而改变,打破了监督学习的独立同分布(i.i.d.)假设。在标准监督学习中,测试集分布与训练集相同;而在 BC 的部署中,策略本身的输出决定了它未来会到达哪些状态,形成分布耦合(covariate shift)。
  • 与 IRL 的关系= IRL(Inverse Reinforcement Learning,逆强化学习)先反推奖励再学策略;BC 直接学策略不问奖励——BC 简单但泛化弱,IRL 复杂但泛化好。两者可以组合:先 IRL 学奖励,再在该奖励下做 RL 优化。详见逆强化学习。
  • 与 Offline RL 的关系= 行为克隆是最简单的离线学习方法;Offline RL 试图从次优数据中超过数据策略,BC 只能达到数据策略水平——参见离线强化学习。
  • 与现代生成模型的融合= 2023 年以来,Diffusion Policy、ACT(Action Chunking Transformer)等将生成模型引入 BC,使策略能建模多模态动作分布(同一状态下有多种合理动作);2024-2025 年的 VLA(Vision-Language-Action,视觉-语言-动作)模型进一步将语言理解与动作生成统一,实现了”听懂指令、做出动作”的端到端机器人控制。

行为克隆本质是监督学习:收集专家的(状态,动作)对,训练策略网络:

DAgger 的核心创新是在训练过程中不断让专家示范”当前策略实际会到达的状态”,从根本上解决分布偏移:

BC 直接学策略、DAgger 迭代补数据、IRL 学奖励——三者适用场景不同:

在马尔可夫决策过程(MDP,一种用状态 S、动作 A、转移概率 P(s′∣s,a)P(s'|s,a)、奖励 R 来建模序贯决策问题的数学框架)中,专家策略 π∗\pi^* 产生轨迹:

τ=(s1,a1,r1,s2,a2,r2,…)\tau = (s_1, a_1, r_1, s_2, a_2, r_2, \ldots)

行为克隆的目标是学习参数化策略 πθ\pi_\theta,使其在给定状态下的动作分布尽可能接近专家:

离散动作空间(如棋盘游戏)——使用交叉熵损失:

LBC(θ)=−∑mlog⁡πθ(am∗∣sm)L_{BC}(\theta) = -\sum_m \log \pi_\theta(a^*_m \mid s_m)

其中 (sm,am∗)(s_m, a^*_m) 是第 m 条专家示范的(状态, 动作)对。

连续动作空间(如机器人关节控制)——使用均方误差或负对数似然:

LBC(θ)=∑m∥am∗−πθ(sm)∥2L_{BC}(\theta) = \sum_m \| a^*_m - \pi_\theta(s_m) \|^2

若假设高斯分布 πθ(a∣s)=N(μθ(s),σ2I)\pi_\theta(a|s) = \mathcal{N}(\mu_\theta(s), \sigma^2 I),则负对数似然损失等价于回归 μθ(s)→a∗\mu_\theta(s) \to a^*。

Ross, Gordon & Bagnell(2011)在 DAgger 论文中证明了 BC 误差上界定理(DAgger 原文 Theorem 2.1 的简化版):

若策略的单步损失为 ϵ=E[ℓ(s,πθ(s))−ℓ(s,π∗(s))]\epsilon = \mathbb{E}[\ell(s, \pi_\theta(s)) - \ell(s, \pi^*(s))],则 TT 步轨迹中的总损失上界为:

Ltotal≤O(ϵ⋅T2)L_{\text{total}} \leq O(\epsilon \cdot T^2)

这个 T2T^2 因子是 BC 的致命弱点——轨迹越长,误差增长越快。这也是为什么自动驾驶端到端 BC 在高速公路场景(短时序、路况稳定)尚可,但在城市道路(长时序、频繁变道)中性能急剧下降。

DAgger 通过迭代收集数据来消除分布偏移。算法伪代码如下:

初始化数据集 D ← 收集专家示范 (s_i, a_i)
初始化策略 π_θ ← 在 D 上训练
重复 N 轮:
1. 用当前策略 π_θ 在环境中执行,收集轨迹
2. 记录访问到的状态集合 S_new
3. 请专家对 S_new 中每个状态给出动作 a*
4. 将新的 (s, a*) 加入数据集 D
5. 在扩大后的 D 上重新训练 π_θ
返回最终策略 π_θ

DAgger 的理论保证:若使用无悔在线学习算法(如 Online Gradient Descent、Follow-The-Regularized-Leader),则 NN 轮后的策略与专家之间的差距为:

L(πθ)−L(π∗)≤O(T/N)L(\pi_\theta) - L(\pi^*) \leq O(\sqrt{T} / N)

即随迭代轮数 NN 增加,差距趋近于零——这就是 DAgger 能从根本上解决分布偏移的理论依据。

GAIL(Generative Adversarial Imitation Learning,生成对抗模仿学习)由 Ho & Ermon(2016)提出,将 GAN 的思想引入模仿学习:

min⁡θmax⁡D  E(s,a)∼πθ[log⁡D(s,a)]+E(s,a)∼π∗[log⁡(1−D(s,a))]\min_\theta \max_D \; \mathbb{E}_{(s,a) \sim \pi_\theta}[\log D(s,a)] + \mathbb{E}_{(s,a) \sim \pi^*}[\log(1 - D(s,a))]

其中判别器 D 试图区分专家示范和策略生成的(状态, 动作)对,策略 πθ\pi_\theta 试图欺骗判别器。训练收敛后,策略生成的行为分布与专家一致。GAIL 不需要显式地学习奖励函数,也不需要手工设计奖励——它隐式地通过对抗训练学到了一个判别信号。

GAIL vs BC:

维度BCGAIL
数据需求只需专家数据需专家数据 + 环境交互
奖励信号不需要不需要(对抗隐式产生)
分布偏移严重通过在线交互缓解
训练稳定性稳定(监督学习)不稳定(GAN 训练难度)
计算开销低高(需反复环境交互)

扩散策略(Diffusion Policy)的原理

Section titled “扩散策略(Diffusion Policy)的原理”

传统 BC 使用确定性的 MLP 输出单一动作,无法表达”同一状态下有多种合理动作”的多模态分布。Diffusion Policy(Chi et al., 2023)将扩散模型(Denoising Diffusion Probabilistic Models)引入动作生成:

  1. 前向加噪:对专家动作 a0a_0 逐步加高斯噪声:at=αt⋅at−1+1−αt⋅ϵa_t = \sqrt{\alpha_t} \cdot a_{t-1} + \sqrt{1-\alpha_t} \cdot \epsilon,经过 T 步后得到近似纯噪声 aTa_T
  2. 反向去噪:训练一个噪声预测网络 ϵθ(at,t,s)\epsilon_\theta(a_t, t, s),学习从噪声恢复动作
  3. 推理:从随机噪声 aT∼N(0,I)a_T \sim \mathcal{N}(0, I) 出发,以当前状态 s 为条件,迭代去噪 T 步得到动作

关键创新是动作分块(action chunking):不逐步预测单个动作,而是一次性预测未来 HpH_p 步的动作序列,大幅减少了累积误差并提高了时序一致性。

# Diffusion Policy 的核心推理过程(简化版)
def sample_action(policy_net, state, horizon=16, steps=10):
"""从随机噪声出发,条件于状态,去噪生成动作序列"""
action_seq = torch.randn(1, horizon, action_dim) # 初始噪声
for t in reversed(range(steps)):
noise_pred = policy_net(action_seq, t, state) # 预测噪声
action_seq = denoise_step(action_seq, noise_pred, t) # 一步去噪
return action_seq # 输出 horizon 步的动作序列

从 MLP 到 Transformer:ACT 与动作分块

Section titled “从 MLP 到 Transformer:ACT 与动作分块”

ACT(Action Chunking Transformer,动作分块 Transformer)由 Zhao et al.(2023)提出,专为双手机器人遥操作设计。核心思想:

  • CVAE 架构:用条件变分自编码器(Conditional VAE)建模动作分布,编码器将完整轨迹压缩为潜变量 z,解码器从 z 和当前观测生成动作序列
  • 动作分块:一次性预测未来 k 步动作,每 k 步才重新规划一次——既减少了累积误差,又通过”多步一致”约束提高了动作的时序平滑性
  • Transformer 主体:编码器和解码器均使用 Transformer,利用自注意力建模长程时序依赖

ACT 在 ALOHA(低成本双手遥操作系统)平台上验证,使双臂机器人能完成插USB、穿珠子、拧瓶盖等高精度任务——这些任务在传统逐帧 BC 上几乎无法完成。

2024 年起,VLA(Vision-Language-Action)模型成为模仿学习最活跃的前沿方向。其核心理念是将预训练的视觉语言模型(VLM)与动作输出结合,实现”看图+读指令→输出动作”的端到端策略:

  • RT-2(Google DeepMind, 2023):将机器人动作离散化为 token,直接微调 PaLI-X 等 VLM,让模型把动作当作”另一种语言”来生成——在 PaLI-X 5B 参数规模上实现了新物体、新指令的零样本泛化
  • RT-X / Open X-Embodiment(2023):全球 22 个机构联合发布跨机构、跨机器人本体的大规模数据集,证明了在不同机器人形态间迁移的可能性
  • OpenVLA(2024):开源的 VLA 模型,基于 Prismatic VLM(LLaMA 2 + DINOv2/SigLIP),参数规模 7B,在多个仿真和真实基准上达到 RT-2 级别的性能,但完全开源可复现
  • π0 / π0-mini(Physical Intelligence, 2024):由原 Google Robotics 团队创立的 PI 公司发布,用 Flow Matching(一种比扩散更高效的连续归一化流方法)替代标准扩散策略来生成连续动作,在叠衣服、整理桌面等极复杂任务上展示了惊人的灵巧操作能力
  • Octo(2024):UC Berkeley 发布的开源通用机器人策略,支持多种输入模态(单/多摄像头、本体感知)和多种机器人本体,通过微调适配不同任务

LeRobot:开源机器人模仿学习生态

Section titled “LeRobot:开源机器人模仿学习生态”

HuggingFace 于 2024 年发布的 LeRobot 项目,旨在降低机器人模仿学习的门槛:

  • 统一数据格式:标准化机器人示范数据集的存储与加载(基于 HuggingFace Hub 分发),支持 ALOHA、Koch、SO-100 等主流硬件
  • 开箱即用的训练管线:内置 ACT、Diffusion Policy 等算法,用户只需准备数据即可开始训练
  • 低成本硬件方案:配合 Koch V1.1 等百美元级机械臂,让个人开发者也能在真实硬件上做模仿学习实验
  • 模型共享:训练好的策略可以像 NLP 模型一样上传 Hub,促进社区复现与迭代

数据规模化:DROID 与跨本体学习

Section titled “数据规模化:DROID 与跨本体学习”

2024 年的数据规模化趋势尤为突出:

  • DROID(2024):大规模多样化机器人操作数据集,包含 76,000 条轨迹、564 个场景、12 个环境,由斯坦福等机构联合发布。数据多样性(不同光照、背景、物体)是 BC 泛化能力的关键
  • 跨本体学习(Cross-Embodiment Learning):不同机器人的关节配置、工作空间不同,传统 BC 只能在单一本体上训练。RT-X 数据集和 Octo 等工作探索了跨本体统一建模——把不同机器人的动作统一到一个”相对动作空间”中训练,然后在目标本体上微调

PyTorch 行为克隆:从专家轨迹学习策略

Section titled “PyTorch 行为克隆:从专家轨迹学习策略”

一个简化的连续控制任务:专家是”向目标移动”的策略,我们用 BC 从其示范数据中克隆出策略网络:

import torch
import torch.nn as nn
import numpy as np
# 模拟专家策略:动作 = 向目标点的方向(已知,用于生成数据)
def expert_policy(state, goal):
direction = goal - state
return direction / (np.linalg.norm(direction) + 1e-8) # 单位向量
# 生成专家示范数据集:随机状态 + 目标 → 专家动作
np.random.seed(0)
states = np.random.randn(500, 2).astype(np.float32) # 500 个二维状态
goals = np.random.randn(500, 2).astype(np.float32) # 500 个目标
actions = np.array([expert_policy(s, g) for s, g in zip(states, goals)])
# 策略网络:MLP,输入 [状态, 目标](4 维),输出动作(2 维)
policy = nn.Sequential(
nn.Linear(4, 64), nn.ReLU(),
nn.Linear(64, 64), nn.ReLU(),
nn.Linear(64, 2)
)
optimizer = torch.optim.Adam(policy.parameters(), lr=1e-3)
loss_fn = nn.MSELoss()
# 行为克隆训练:就是标准的监督学习
inputs = torch.from_numpy(np.concatenate([states, goals], axis=1))
labels = torch.from_numpy(actions)
for epoch in range(200):
pred = policy(inputs)
loss = loss_fn(pred, labels)
optimizer.zero_grad(); loss.backward(); optimizer.step()
# 验证:学到的策略是否接近专家
test_state = torch.tensor([[1.0, 0.0, 0.0, 1.0]]) # 状态 (1,0),目标 (0,1)
learned_action = policy(test_state).detach().numpy()
expert_action = expert_policy(np.array([1.0, 0.0]), np.array([0.0, 1.0]))
print("学到的动作:", np.round(learned_action[0], 3))
print("专家的动作:", np.round(expert_action, 3))
# 两者应非常接近——BC 在训练分布内有效
  • 数据多样化是 BC 的生命线= 行为克隆的效果完全取决于示范数据的覆盖度——专家要尽可能覆盖各种状态(不同位置、姿态、光照)。NVIDIA 的自动驾驶端到端模型采集了数百万英里数据。
  • DAgger 需要可交互的专家= DAgger 要求专家能对”学徒当前遇到的状态”即时示范——对人类专家来说,这意味着遥操作或回放系统;不能在线示范时只能用 BC。
  • 左/右镜像扩充数据= 视觉模仿任务(驾驶、机械臂)常用左右镜像、颜色抖动等数据增广,等效于把数据量翻倍——对 BC 效果显著。
  • 混合 BC + RL 是工业实践= 先用 BC 预训练(快、稳定),再用 RL 微调(超越专家水平)——AlphaGo 就是先用人类棋谱 BC 预训练,再用 RL 自对弈提升。详见里程碑。
  • 多专家融合要小心= 当示范来自多位水平不同的专家时,直接混合 BC 会导致策略”四不像”;可用多模态建模或按专家质量加权。
  • 离散 vs 连续动作= 离散动作用交叉熵损失、连续动作用 MSE 或扩散策略;近年 diffusion policy 在复杂连续控制上表现优异。
  • BC 是 Offline RL 的下界= 从离线数据中,BC 能达到数据策略水平,Offline RL 才有机会超过——如果 Offline RL 效果不如 BC,说明算法或数据有问题。
  • 动作分块缓解累积误差= 一次性预测多步动作(如 ACT 预测 100 步、Diffusion Policy 预测 16 步),能有效减少逐步决策的误差累积。这是 2023 年以来 BC 性能飞跃的关键技巧之一。
  • 多视角数据至关重要= 机器人操作任务中,单摄像头视角容易产生遮挡和深度歧义。现代系统(ALOHA、Mobile ALOHA)普遍使用 2-4 个摄像头,提供正面、侧面、手腕等视角,大幅提升空间感知精度。
  • 数据清洗与一致性标注= 示范数据的质量直接决定 BC 上限。应过滤失败轨迹、去除犹豫动作(人类操作中的停顿和修正)、统一坐标系统——脏数据会让策略学到不稳定的行为。
  • 预训练 + 微调范式= 类似 NLP 中”先预训练再微调”,机器人领域也可先在大规模数据集(如 Open X-Embodiment)上预训练通用策略,再在目标任务的小数据集上微调——这比从头训练的样本效率和泛化能力都强得多。Octo 和 RT-X 的工作都验证了这一路线。
  • 自动驾驶端到端= NVIDIA 2016 年的 PilotNet 用行为克隆从人类驾驶数据学习像素到方向盘的映射,开创了端到端自动驾驶范式;现代方案如 Wayve 的 LINGO 系列在此基础上发展。
  • 机器人灵巧操作= 从人类遥操作记录中 BC 训练机械臂抓取、插拔、装配——Diffusion Policy、ACT 等 2023-2024 的突破让 BC 在复杂操作上效果显著。参见Sim-to-Real 迁移。
  • AlphaGo 的模仿预训练阶段= AlphaGo 先用人类棋谱 BC 预训练策略网络,再用 RL 自对弈超越人类水平——BC 预训练让 RL 有一个好的起点。详见里程碑。
  • 手术机器人辅助= 达芬奇手术机器人记录资深外科医生操作,BC 学习常规缝合、切割动作,辅助初级医生完成标准化步骤。
  • 无人机航迹模仿= 从人类飞手的特技飞行数据中 BC 训练自主特技无人机,ETH Zurich 2018-2019 的工作展示了接近人类水平的自主特技飞行。
  • 对话系统回复生成= 从客服对话日志中 BC 训练任务型对话策略,让新系统继承资深客服的回复风格——详见RLHF 与 LLM 训练中 BC 阶段的作用。
  • 具身智能基础模型= 2024 年 Google RT-2、OpenVLA 等机器人基础模型用大规模人类示范做 BC 预训练,再结合 VLM 能力实现语言指令到动作的映射。
类库语言说明
imitationPythonFarama 基金会的模仿学习研究库,实现 BC、DAgger、GAIL 等
Stable-Baselines3 (BC/HER)Python内置 BC 接口与 HER(Hindsight Experience Replay)用于目标条件模仿
LeRobotPythonHuggingFace 的机器人模仿学习库,含数据集管理、训练、可视化
Diffusion PolicyPython基于扩散模型的动作生成策略,2023 年复杂操作任务的 SOTA
DAgger 原始实现Python经典 DAgger 算法的参考实现,适合教学
术语英文解释
模仿学习Imititation Learning (IL)从专家示范中学习策略的总称,不需奖励信号
从示范中学习Learning from Demonstration (LfD)模仿学习的同义术语,机器人学社区常用
行为克隆Behavioral Cloning (BC)用监督学习从(状态, 动作)对中学策略的最简单模仿方法
DAggerDataset Aggregation迭代式让专家示范当前策略到达状态、解决分布偏移的模仿算法
分布偏移Distribution Shift策略产生的状态分布与专家示范数据分布不一致的问题
累积误差Compounding Error行为克隆策略在部署中小错误逐步累积放大的现象
专家策略Expert Policy生成示范数据的高水准策略(人类或训练好的智能体)
Diffusion PolicyDiffusion Policy用扩散模型生成动作的模仿学习方法,擅长多模态连续控制
遥操作Teleoperation人类操作者远程控制机器人以收集示范数据的技术
  • Pomerleau,「ALVINN: An Autonomous Land Vehicle in a Neural Network」(NeurIPS 1989):行为克隆的开山之作,用神经网络学习自动驾驶,比 NVIDIA PilotNet 早 27 年。
  • Bojarski et al.,「End to End Learning for Self-Driving Cars」(arXiv 2016):NVIDIA PilotNet 论文,深度学习时代行为克隆的里程碑,引发端到端自动驾驶研究热潮。
  • Ross, Gordon & Bagnell,「A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning」(AISTATS 2011):DAgger 论文,从理论上分析 BC 的累积误差并提出 DAgger 算法。
  • Ross et al.,「Learning From Demonstration for Autonomous Navigation in Complex Unstructured Terrain」(IJRR 2013):DAgger 在野外导航的应用,验证了其在真实机器人的有效性。
  • Argall et al.,「A Survey of Robot Learning from Demonstration」(Robotics and Autonomous Systems 2009):从示范学习的经典综述,涵盖 BC 与 IRL 的方法分类。
  • Chi et al.,「Diffusion Policy: Visuomotor Policy Learning via Action Diffusion」(RSS 2023):Diffusion Policy 论文,在复杂机器人操作任务上大幅刷新 BC 的 SOTA。
  • Osa et al.,「An Algorithmic Perspective on Imitation Learning」(Foundations and Trends in Robotics 2018):模仿学习的现代系统教程,梳理 BC、DAgger、IRL 的理论与算法关系。
  • Brohan et al.,「RT-1: Robotics Transformer for Real-World Control at Scale」(arXiv 2022):Google RT-1 论文,大规模 BC 训练机器人基础模型的代表作。