模仿学习
模仿学习(Imitation Learning,又称 Learning from Demonstration)通过模仿专家行为来学习策略,不需要奖励信号——是 RL 落地真实世界最实用的途径之一。本页梳理行为克隆、DAgger、数据集聚合、现代扩散策略与 VLA 模型,及其与监督学习、IRL 的关系。前置阅读:强化学习概览、逆强化学习。
在强化学习中,智能体通过试错和奖励信号来学习最优策略。但在真实世界中,设计一个好的奖励函数极其困难——自动驾驶怎么定义”开得好”的奖励?机器人怎么定义”优雅地抓取”?而人类专家(司机、技师、棋手)的示范本身就是最好的信息来源。模仿学习绕过了奖励设计这一难题,直接从专家行为中提取策略,因而成为机器人学(Robotics)和具身智能(Embodied AI)最核心的学习范式之一。
把模仿学习想象成学徒跟着师傅学手艺——师傅做什么你就学做什么,不问”为什么这么做”,只追求”做出一样的效果”:
- 行为克隆(Behavioral Cloning, BC)= 最朴素的模仿学习:把”师傅在每个状态做了什么”当成监督学习数据集,学一个从状态到动作的映射 。本质就是监督学习,用交叉熵(离散动作)或 MSE(连续动作)做损失函数。
- 为什么 BC 会”偏移”= 学徒一旦走错一步(偏离师傅的路线),就到了师傅从没去过的状态——在这些状态,学徒没有”师傅怎么做”的参考,只能瞎猜,错误会雪球般累积。这叫分布偏移(distribution shift,指训练时所见数据分布与测试时实际遇到的数据分布不一致)或累积误差(compounding error,指每步的小误差随时间步指数放大的现象)。理论分析表明,若单步预测误差为 ,则在 步轨迹中累积误差可达 ——这就是 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,视觉-语言-动作)模型进一步将语言理解与动作生成统一,实现了”听懂指令、做出动作”的端到端机器人控制。
行为克隆的训练与部署
Section titled “行为克隆的训练与部署”行为克隆本质是监督学习:收集专家的(状态,动作)对,训练策略网络:
行为克隆 vs DAgger
Section titled “行为克隆 vs DAgger”DAgger 的核心创新是在训练过程中不断让专家示范”当前策略实际会到达的状态”,从根本上解决分布偏移:
模仿学习的三种范式
Section titled “模仿学习的三种范式”BC 直接学策略、DAgger 迭代补数据、IRL 学奖励——三者适用场景不同:
算法原理深挖
Section titled “算法原理深挖”行为克隆的形式化
Section titled “行为克隆的形式化”在马尔可夫决策过程(MDP,一种用状态 S、动作 A、转移概率 、奖励 R 来建模序贯决策问题的数学框架)中,专家策略 产生轨迹:
行为克隆的目标是学习参数化策略 ,使其在给定状态下的动作分布尽可能接近专家:
离散动作空间(如棋盘游戏)——使用交叉熵损失:
其中 是第 m 条专家示范的(状态, 动作)对。
连续动作空间(如机器人关节控制)——使用均方误差或负对数似然:
若假设高斯分布 ,则负对数似然损失等价于回归 。
累积误差的理论分析
Section titled “累积误差的理论分析”Ross, Gordon & Bagnell(2011)在 DAgger 论文中证明了 BC 误差上界定理(DAgger 原文 Theorem 2.1 的简化版):
若策略的单步损失为 ,则 步轨迹中的总损失上界为:
这个 因子是 BC 的致命弱点——轨迹越长,误差增长越快。这也是为什么自动驾驶端到端 BC 在高速公路场景(短时序、路况稳定)尚可,但在城市道路(长时序、频繁变道)中性能急剧下降。
DAgger 算法
Section titled “DAgger 算法”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),则 轮后的策略与专家之间的差距为:
即随迭代轮数 增加,差距趋近于零——这就是 DAgger 能从根本上解决分布偏移的理论依据。
GAIL:生成对抗式模仿学习
Section titled “GAIL:生成对抗式模仿学习”GAIL(Generative Adversarial Imitation Learning,生成对抗模仿学习)由 Ho & Ermon(2016)提出,将 GAN 的思想引入模仿学习:
其中判别器 D 试图区分专家示范和策略生成的(状态, 动作)对,策略 试图欺骗判别器。训练收敛后,策略生成的行为分布与专家一致。GAIL 不需要显式地学习奖励函数,也不需要手工设计奖励——它隐式地通过对抗训练学到了一个判别信号。
GAIL vs BC:
| 维度 | BC | GAIL |
|---|---|---|
| 数据需求 | 只需专家数据 | 需专家数据 + 环境交互 |
| 奖励信号 | 不需要 | 不需要(对抗隐式产生) |
| 分布偏移 | 严重 | 通过在线交互缓解 |
| 训练稳定性 | 稳定(监督学习) | 不稳定(GAN 训练难度) |
| 计算开销 | 低 | 高(需反复环境交互) |
扩散策略(Diffusion Policy)的原理
Section titled “扩散策略(Diffusion Policy)的原理”传统 BC 使用确定性的 MLP 输出单一动作,无法表达”同一状态下有多种合理动作”的多模态分布。Diffusion Policy(Chi et al., 2023)将扩散模型(Denoising Diffusion Probabilistic Models)引入动作生成:
- 前向加噪:对专家动作 逐步加高斯噪声:,经过
T步后得到近似纯噪声 - 反向去噪:训练一个噪声预测网络 ,学习从噪声恢复动作
- 推理:从随机噪声 出发,以当前状态
s为条件,迭代去噪T步得到动作
关键创新是动作分块(action chunking):不逐步预测单个动作,而是一次性预测未来 步的动作序列,大幅减少了累积误差并提高了时序一致性。
# 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 步的动作序列现代模仿学习范式(2023-2025)
Section titled “现代模仿学习范式(2023-2025)”从 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 上几乎无法完成。
VLA 模型:视觉-语言-动作统一
Section titled “VLA 模型:视觉-语言-动作统一”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 torchimport torch.nn as nnimport 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 能力实现语言指令到动作的映射。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| imitation | Python | Farama 基金会的模仿学习研究库,实现 BC、DAgger、GAIL 等 |
| Stable-Baselines3 (BC/HER) | Python | 内置 BC 接口与 HER(Hindsight Experience Replay)用于目标条件模仿 |
| LeRobot | Python | HuggingFace 的机器人模仿学习库,含数据集管理、训练、可视化 |
| Diffusion Policy | Python | 基于扩散模型的动作生成策略,2023 年复杂操作任务的 SOTA |
| DAgger 原始实现 | Python | 经典 DAgger 算法的参考实现,适合教学 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 模仿学习 | Imititation Learning (IL) | 从专家示范中学习策略的总称,不需奖励信号 |
| 从示范中学习 | Learning from Demonstration (LfD) | 模仿学习的同义术语,机器人学社区常用 |
| 行为克隆 | Behavioral Cloning (BC) | 用监督学习从(状态, 动作)对中学策略的最简单模仿方法 |
| DAgger | Dataset Aggregation | 迭代式让专家示范当前策略到达状态、解决分布偏移的模仿算法 |
| 分布偏移 | Distribution Shift | 策略产生的状态分布与专家示范数据分布不一致的问题 |
| 累积误差 | Compounding Error | 行为克隆策略在部署中小错误逐步累积放大的现象 |
| 专家策略 | Expert Policy | 生成示范数据的高水准策略(人类或训练好的智能体) |
| Diffusion Policy | Diffusion 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 训练机器人基础模型的代表作。