5.3.1 行为克隆(Behavior Cloning,BC)问题设定
5.3.1.1 模仿学习
在前面的强化学习部分,我们假设智能体可以与环境“自己玩”,通过试错不断积累经验;而在很多真实机器人场景中,这样做要么太慢,要么太危险——机械臂乱挥可能砸坏设备,无人车乱试可能直接上墙。
模仿学习(Imitation Learning, IL) 就是在这样的背景下提出的: 给定专家示范(demonstrations),希望训练一个策略来“学会像专家那样做”,尽量少或者不与环境进行额外交互。直观地说,就是:
不让机器人自己闯祸,而是先让它“看高手怎么玩”,然后学着照做。
更形式一点,可以把模仿学习看成:在一个已知或未知的 MDP 环境中,给定若干专家轨迹
\[ \tau_i = (s_0^i, a_0^i, s_1^i, a_1^i, \dots, s_{T_i}^i), \]
这些轨迹由某个专家策略 \(\pi^*\) 生成,我们希望学得一个策略 \(\hat\pi\),其表现尽量接近甚至优于 \(\pi^*\)。系统性的综述指出,模仿学习已经在自动驾驶、机器人抓取与操作等领域得到广泛应用。(arXiv)
从方法上看,大部分模仿学习可以粗略分为两类:
- 直接模仿专家策略
- 典型代表就是行为克隆(Behavior Cloning),把模仿学习问题转化为一个标准的监督学习问题;
- “反推”专家在优化什么
- 即逆强化学习(IRL),先根据示范恢复一个奖励函数,再在该奖励下做强化学习。
本节的 5.3.1–5.3.2 主要关注第一类(直接模仿策略),5.3.3 再转向 IRL 与奖励学习。
在机器人具身智能场景中,示范往往来自:
- 人类遥操作(teleoperation)生成的轨迹;
- 人手带动机械臂的 kinesthetic teaching;
- 规划器、控制器在仿真中执行任务得到的自动演示。
这些在第 7 章会展开,这里先把它们当作“已经有了一堆轨迹数据”的前提。
5.3.1.2 行为克隆
行为克隆(Behavior Cloning, BC) 是最直接的模仿学习形式:
把“观察状态→输出动作”当成一个监督学习任务,拿专家动作当标签,训练一个函数拟合器。
具体设定如下:
-
通过专家与环境交互,收集一个数据集
\[ \mathcal D = {(s_t^i, a_t^i)}_{i,t}, \]
其中 \((s_t^i)\) 是第 \(\displaystyle i\) 条轨迹在时刻 \(\displaystyle t\) 的状态,\((a_t^i)\) 是专家在该状态下执行的动作;
-
选取一个参数化策略 \(\pi_\theta(a|s)\)(例如深度神经网络),
-
通过最小化监督学习损失来拟合专家:
\[ \min_\theta ; \mathbb E_{(s,a)\sim \mathcal D}\big[l\big(\pi_\theta(\cdot|s), a\big)\big], \]
- 离散动作:\(\displaystyle l\) 通常是交叉熵损失;
- 连续动作:\(\displaystyle l\) 可以是均方误差(MSE),或者假设高斯策略用负对数似然。
早在 1980s 的 ALVINN 无人车项目中,就已经使用行为克隆将前视相机图像直接映射到方向盘角度,实现端到端的道路跟随,可视为模仿学习最早的成功案例之一。(NeurIPS论文)
在具身机器人中,行为克隆的典型用法包括:
- 机械臂抓取与放置
- 输入:当前 RGB-D 图像 + 机械臂末端位姿;
- 输出:末端位姿增量或关节增量;
- 移动机器人导航
- 输入:前视摄像头图像 / 激光雷达扫描;
- 输出:线速度、角速度命令。
【图 5-3-1 占位】 建议插图:示意“行为克隆管线”:左侧是专家示范的图像与动作序列,中间是一个神经网络,右侧是克隆后的策略在相似场景中输出动作。
在实现上,行为克隆几乎和训练一个普通分类 / 回归模型没有区别: 只要能把状态编码为特征,把动作编码为标签,就可以用任意深度学习框架进行训练,这也是它在工程实践中被广泛采用的原因。
5.3.1.3 前提假设
行为克隆之所以“好用”,背后有几条往往被忽略但非常关键的前提假设:
- 专家接近最优(Optimality assumption)
- 假设示范来自一个接近任务最优或至少“足够好”的策略;
- 若专家本身就经常犯错(例如人类新手操作),BC 只会稳定地学会“错误的习惯”;
- 后续很多工作研究如何从非最优示范 中学习,这在 IRL 与奖励学习里尤为重要。(牛津大学机器人研究所)
- 示范覆盖测试时会遇到的状态分布(Coverage assumption)
- 训练时,状态是从专家策略诱导的分布 \(d_{\pi^*}(s)\) 中采样的;
- 测试时,机器人按自己的策略 \(\hat\pi\) 行动,状态分布变为 \(d_{\hat\pi}(s)\);
- BC 隐含假设:\(d_{\hat\pi} \approx d_{\pi^*}\),也就是机器人不会走到专家“没去过”的地方;
- 实际上只要策略略有偏差,就可能逐步偏离专家轨迹,进入数据集外的状态,带来严重问题(下一小节的“分布偏移”)。
- 观测与动作标注准确
- 假设传感器标定正确、时间同步良好,状态–动作对 \((s_t, a_t)\) 没有系统偏差;
- 在真实机器人系统中,延迟、丢帧、标定误差会导致“错误配对”(比如相机图像实际上对应的是 100 ms 前的动作);
- 这类误差会直接体现在监督信号中,使得 BC 很难学到稳定策略。
- 具身配置一致
- 假设专家和学习者的身体(embodiment)相同或足够接近,如同一型号的机械臂;
- 若专家是人类的手,而学习者是 7 自由度机械臂,则需要解决“动作空间映射”问题,单纯行为克隆就不够。
这些假设在实验室简单任务中勉强成立,但在开放环境、长时间操作的具身智能场景下往往会被打破。 其中状态分布覆盖问题 最为致命,它直接导致了行为克隆中经常出现的“开始很像专家,过一会儿就崩掉”的现象——这就是 5.3.2 要讨论的核心:分布偏移与 DAgger 。
5.3.2 分布偏移与 DAgger 思想
5.3.2.1 分布偏移
在监督学习中,通常假设训练集和测试集来自同一分布 。 行为克隆却非常“狡猾”地违反了这个假设:
- 训练阶段:
- 状态来自专家策略 \(\pi^*\) 的轨迹,分布记为 \(d_{\pi^*}(s)\);
- 测试阶段:
- 机器人执行的是自己学到的策略 \(\hat\pi\),状态分布变为 \(d_{\hat\pi}(s)\)。
只要 \(\hat\pi\) 和 \(\pi^*\) 不完全相同,两者的分布就会有差异,这种差异随着时间步数增长会不断放大:
- 在每一步,策略以概率 \(\varepsilon\) 选错动作;
- 一次小小的偏差可能把系统带到新的状态区域,在那里策略从未见过数据;
- 在这个新区域里错误率往往更高,于是进一步走向更“奇怪”的状态……
这是经典的误差累积问题(compounding error): 理论分析表明,在行为克隆中,某些任务下最终性能损失可以和时间跨度 \(\displaystyle T\) 的平方 成正比(\(O(T^2 \varepsilon)\)),这意味着长时任务在 BC 中特别容易崩坏 。(Stanford University)
在具身机器人场景中,具体表现例如:
- 移动机器人学会跟随走廊中线,刚开始几米看起来很稳,一旦稍微偏离,之后误差越积越大,最终撞墙;
- 机械臂在抓取任务中,只要一次对准偏差,之后的抓取、提起、放置动作都会在“错误位姿”附近执行,导致任务失败。
【图 5-3-2 占位】 建议插图:横轴为时间步,纵轴为轨迹偏离量;画出“专家轨迹”与“BC 策略轨迹”的对比,展示误差如何随时间累积。
解决分布偏移问题的关键思路就是:让训练中看到的状态,尽可能接近自己将来真正会遇到的状态,这就引出了 DAgger。
5.3.2.2 DAgger 算法
DAgger(Dataset Aggregation)是 Ross 等人提出的一类交互式模仿学习算法,其核心思想可以用一句话概括:
不再只在专家访问的状态上训练,而是在当前学到的策略会访问到的状态 上,请专家标注动作,并不断把这些新样本加入训练集。(cs.cmu.edu)
用更程序化的方式描述 DAgger:
- 初始化
- 用纯专家示范数据 \(\mathcal D_0\) 做一次行为克隆,得到初始策略 \(\pi_1\)。
- 第 \(k\) 次迭代(交互与标注)
-
用当前策略 \(\pi_k\) 与环境交互,收集新的状态序列
\[ \tau^{(k)} = (s_0^{(k)}, s_1^{(k)}, \dots, s_T^{(k)}), \]
此时状态分布是 \(d_{\pi_k}(s)\);
-
对这些状态,请专家给出“正确动作” \(a_t^{(k,*)}\),得到新数据集
\[ \mathcal D_k = {(s_t^{(k)}, a_t^{(k,*)})}_t \]
-
数据聚合:\(\mathcal D \leftarrow \mathcal D \cup \mathcal D_k\);
-
在新的聚合数据集 \(\mathcal D\) 上重新训练策略,得到 \(\pi_{k+1}\)。
-
- 停止条件
- 当策略性能收敛、或者达到预定迭代轮数时停止,
- 最终可使用最后一次策略 \(\pi_K\),或某种平均策略。
相对行为克隆,DAgger 有几个关键特征:
- 训练分布匹配测试分布
- 每一轮训练都在更接近 \(\pi_k\) 自己将会访问的状态分布上进行,避免了“只在专家访问区域表现好”;
- 理论保证更强
- 在一定条件下,如果用于监督学习的基础算法具备“无遗憾(no-regret)”性质,则 DAgger 可以将性能损失从 \(O(T^2\varepsilon)\) 改善到 \(O(T\varepsilon)\);
- 工程直觉:不断在线纠偏
- 机器人在自己“犯错”的状态下会收到专家纠正,这类似于人类教练随时在旁边拉一把。
【图 5-3-3 占位】 建议插图:画出 DAgger 的循环流程图: 「当前策略执行 → 产生新状态 → 专家标注动作 → 数据聚合 → 重新训练策略」,形成闭环。
在机器人实验中,DAgger 通常通过遥操作界面实现: 机器人执行自己的策略,人类在旁边监控,一旦发现动作不合理,就接管并给出“应当采取的动作”,系统则记录下“状态–专家动作对”,用于后续训练。
5.3.2.3 反复迭代
从实现角度看,DAgger 不是“只多了一轮训练”,而是设计一个长期人机协作的训练流程:
- 迭代次数的权衡
- 迭代太少,策略仍然对自身造成的状态分布偏移不够鲁棒;
- 迭代太多,人类标注成本和机器人运行时间会很高;
- 实际工程中常采用:先用 BC 预训练,再做有限轮 DAgger(例如 3–5 轮),即可显著提升性能。
- 安全与交互方式
- 在真实机器人上执行 DAgger 时,必须保证人类可以随时接管或触发急停;
- 一种常见做法是:机器人处于“半自动模式”,每步先给出自己的动作建议,人类有机会审批 / 修改,系统记录最终执行的“专家版本”动作;
- 主动查询与不确定性
- 后续许多工作扩展了 DAgger,只在“模型不自信”的状态上向专家询问动作,从而减少标注负担;
- 对具身智能系统来说,这类“有选择地向人类提问”的机制尤为重要,因为真实实验成本极高。(wensun.github.io)
从全书结构上看,BC 与 DAgger 提供了一套纯基于示范的数据驱动建模方式, 在第 9 章中我们会看到,BC 也可以被视作“最简单的离线 RL 方法”,而 DAgger 则是走向“交互式模仿 + 在线纠错”的第一步。
5.3.3 逆强化学习与奖励学习的基本概念
5.3.3.1 逆强化学习(IRL)
行为克隆的思路是:直接学“怎么做”; 逆强化学习(Inverse Reinforcement Learning, IRL)的思路则是:
先学“专家在乎什么”(奖励函数),再让强化学习去自己发现“怎么做”。
经典定义是:给定一个 MDP 的状态空间、动作空间和转移动力学,以及一组由专家策略产生的行为轨迹,求解一个奖励函数 \(r(s,a)\),使得专家策略在该奖励下是最优或近似最优。(ai.stanford.edu)
形式上可以写成:
- 已知:\(\mathcal S, \mathcal A, P, \gamma\) 和专家轨迹集合 \({\tau_i}\);
- 未知:奖励函数 \(r_\theta(s,a)\);
- 目标:找到某个 \(r_\theta\),使得在 MDP \(\mathcal S,\mathcal A,P,r_\theta,\gamma\) 上求解得到的最优策略 \(\pi^*_\theta\) 与专家行为尽量一致。
IRL 的直觉在机器人中非常自然:
- 行为只是表象,奖励才是“偏好”;
- 一旦学得了“偏好”,可以在新环境、不同初始条件 下重新规划,而不必局限在原有示范分布内;
- 例如:
- 学习自动驾驶中“安全、平稳、尽量快速”的组合偏好,
- 学习机械臂装配任务中“避免碰撞、保证插入成功”的综合奖励。
IRL 的典型算法包括最大间隔 IRL、最大熵 IRL 等,它们通常需要在“内层”反复调用 RL 算法来评估一个候选奖励函数有多“好”,因此计算开销相对行为克隆要大得多。(ai.stanford.edu)
【图 5-3-4 占位】 建议插图:对比“正向 RL”与“逆向 RL”的流程:
- RL:已知奖励 → 求策略;
- IRL:观察策略(示范) → 反推奖励。
5.3.3.2 奖励建模
在更广义的视角下,奖励学习 / 奖励建模(reward learning / reward modeling) 指的是:
通过数据(示范、偏好、规则等)来学习一个奖励模型 \(\hat r_\phi\), 在此基础上再用 RL 优化策略。
相对于“严格的 IRL”,实际系统中的奖励建模往往更“务实”:
- 输入形式更灵活
- 不仅可以使用专家轨迹;
- 还可以使用人类对机器人行为的打分 / 排序 、语言评价,甚至环境中的自动指标(例如任务是否完成)。
- 输出形式多样
- 状态–动作级别奖励 \(\hat r_\phi(s,a)\);
- 整条轨迹级别评分 \(\hat r_\phi(\tau)\);
- 分段的子任务奖励(例如“抓取成功”“姿态舒适”“能量消耗少”)。
- 训练方式灵活
- 可以做二分类(好 vs 坏行为)、回归(连续评分)、排序学习(偏好建模);
- LLM 的 RLHF(人类反馈强化学习)就是一个著名的奖励建模实例:从人类对多个回答的排序中学一个奖励函数,然后用 RL 调整语言模型。
在机器人具身任务中,奖励建模尤其适用于那些难以手工写出奖励函数 的目标,例如:
- “端杯子走路时既不洒水,又看起来自然不抖”;
- “整理桌面时,既要完成用户指令,又要保持整体美观、避免过度移动无关物体”。
此时直接对奖励建模,比尝试写一大堆手工 reward term 更现实。
5.3.3.3 优缺点
把行为克隆、IRL 和更广义的奖励建模放在一起,可以看到它们各有优势与短板:(ScienceDirect)
- 行为克隆(BC)
- 优点:
- 算法与实现极其简单,可直接复用监督学习工具链;
- 不依赖环境奖励信号,适合“只有示范、没有 reward”的场景;
- 训练速度快,工程上容易部署。
- 缺点:
- 严重依赖示范质量与覆盖范围,分布偏移导致长时任务表现差;
- 无法超越专家,理论性能上限受示范策略限制;
- 没有显式奖励函数,不利于解释与迁移到新环境。
- 优点:
- 逆强化学习(IRL)
- 优点:
- 得到的是奖励函数而非单个策略,天然更易迁移到新环境、新约束;
- 奖励具有一定可解释性,有助于理解专家偏好与安全约束;
- 在示范较有限、但动力学可知的场景中(如模拟器)具有潜在优势。
- 缺点:
- 问题本身是“不适定”的:许多不同的奖励函数都可能解释同样的行为;
- 算法通常需要“外层学奖励 + 内层跑 RL”的双层优化,计算和样本成本高;
- 在高维连续机器人场景中,稳定且可扩展的 IRL 算法仍是研究热点。
- 优点:
- 奖励建模 / 偏好学习
- 优点:
- 可以利用丰富的人类反馈(打分、对比、语言描述),不局限于轨迹本身;
- 适合描述复杂、模糊、难以形式化的目标(“自然”“舒适”“礼貌”);
- 奠定了像 RLHF 这样“对齐”技术的基础,可用于具身机器人的安全约束学习。
- 缺点:
- 奖励模型有可能被策略“利用”(reward hacking),表现看似好,实际行为不符合人类期待;
- 需要持续维护奖励模型与策略之间的一致性,否则训练后期策略会“偏离标尺”;
- 人类偏好本身存在噪声和主观性,建模难度较大。
- 优点:
从本书的长远视角看:
- BC 适合作为快速启蒙 方法,为机器人提供一个能“基本完成任务”的起点;
- IRL 与奖励建模则更像是在搭建机器人“价值观”的框架,
- 它们与下一节的离线 RL 一起,构成从纯示范走向“数据 + 偏好 + 自主优化”的通路。
5.3.4 离线数据与离线 RL 的简单认识
5.3.4.1 离线 RL
在前文的强化学习章节中,我们默认智能体在训练时可以不断与环境交互、采样新数据; 但在真实系统中,这种“在线试错”往往成本高昂乃至不可行:
- 真实机器人磨损、耗材严重;
- 某些操作具有安全风险(自动驾驶、手术机器人等);
- 有时我们手上已经有大量历史日志数据,却无法再轻松重复采集。
离线强化学习(Offline RL,亦称 Batch RL) 正是针对这一需求提出的:
在训练期间,算法只能访问一个固定的、预先收集好的数据集, 不允许再与环境进行额外交互,从而学习一个能够在环境中执行的策略。(arXiv)
形式化地说,离线 RL 给定的是一个静态数据集
\[ \mathcal D = {(s_t, a_t, r_t, s_{t+1})}, \]
这些数据由某个(可能未知的)行为策略 \(\mu(a|s)\) 产生。 目标是在只使用 \(\mathcal D\) 的前提下,学习一个新的策略 \(\pi(a|s)\), 在真实环境中执行时获得尽可能高的回报。
与模仿学习相比:
- BC / IL 通常只用到 \((s_t, a_t)\),不关心 \(r_t\);
- 离线 RL 则以奖励为核心,会尝试“重新优化”策略,甚至超越原数据中的行为策略;
- 在具身机器人背景下,离线 RL 希望把已有的遥操作日志、历史任务执行轨迹,变成一个可以泛化到新情形的决策引擎 。
5.3.4.2 挑战
离线 RL 看起来像是“把 RL 变成监督学习”,实则难度颇高。 核心困难来自于:我们在训练时看不到策略在“新状态–动作”上的真实后果,却又必须对它们做出估计 。
主要挑战包括:(arXiv)
- 分布外行动与外推误差(Extrapolation Error)
-
标准的 Q-learning 等方法会估计 \(Q(s,a)\),并通过
\[ Q(s,a) \leftarrow r + \gamma \max_{a’} Q(s’, a’) \]
来更新;
-
在离线设置中,如果某个动作 \(\displaystyle a\) 在状态 \(\displaystyle s\) 上几乎从未在数据集中出现, 则 \(Q(s,a)\) 完全来自函数逼近的“外推”——既没有真实经验支撑,又被“max”操作放大;
-
结果是算法可能对数据集中从未出现过的动作 估计出很高的 Q 值, 导致最终策略在真实环境中选择这些“虚假的高价值动作”,表现极差。
-
- 数据覆盖度与行为策略偏差
- 如果离线数据只覆盖了极少量任务情形(例如机械臂只在桌子中央抓取某个物体), 那么离线 RL 几乎无法学到在其他场景下的合理策略;
- 行为策略若过于保守(例如人类操作非常谨慎,只在安全区域活动), 离线 RL 想要学习“更激进、更高回报”的策略,就会严重依赖外推,风险更高。
- 离线策略评估困难(Offline Policy Evaluation)
- 在没有新交互的前提下,我们只能通过已有数据间接估计一个新策略的性能,
- 这需要重要性采样、模型估计或其它复杂技术,且方差通常很大;
- 对机器人任务来说,这直接影响到“什么时候敢在真实机器人上部署”这一关键决策。
- 真实机器人系统的高维与噪声
- 视觉输入、高维连续动作、噪声传感器等因素,使得函数逼近更困难,
- 任何小的外推错误都可能被放大成物理世界中的灾难性行为。
这些挑战意味着:
“把在线 RL 代码里采样环境的那几行换成读数据集”,并不能自动得到一个可用的离线 RL 算法。
需要专门的离线方法来控制外推范围、正则化策略,保证学习过程的保守性。
5.3.4.3 方法概览
针对上述挑战,近年来离线 RL 形成了几条主要思路(在第 9 章会以更系统方式展开,此处只做概览):(arXiv)
- 保守 / 约束型值函数方法
- 核心思想:惩罚那些远离数据分布的状态–动作, 让 Q 函数在数据支持不足的地方更保守,避免虚假的高估;
- 代表性做法:
- BCQ(Batch-Constrained Q-learning):限制策略选择动作时,只从“看起来像是数据中出现过的动作”中采样;
- CQL(Conservative Q-Learning):在目标中加入正则项,使得数据集外动作的 Q 值被压低;
- 各类行为正则化方法(如在策略更新时约束 \(\pi\) 与行为策略 \(\mu\) 的 KL 距离)。
- 策略约束与行为克隆正则(Behavior Regularization)
- 将行为克隆与 RL 目标结合:
- 一方面最大化估计回报;
- 另一方面保持策略不要偏离数据中行为太远;
- 直觉:
- 只在“稍微改善”行为的局部空间内优化,
- 不要一下子跳到数据集中从未尝试过的极端动作。
- 将行为克隆与 RL 目标结合:
- 模型化离线 RL(Model-based Offline RL)
- 先用离线数据学习一个环境动力学模型 \(\hat P(s’|s,a)\) 和奖励模型 \(\hat r(s,a)\);
- 再在这个“学得的模型”里进行规划或 RL;
- 同样需要通过不确定性估计(例如对模型输出方差建模)来避免在模型不可信区域过度使用外推。
- BC 与离线 RL 的组合
- 行为克隆本质上可以看作一种极端保守的离线 RL:
- 完全不尝试优化超越行为策略,只在数据分布上拟合专家动作;
- 最近一些工作指出,在许多实际任务中,简单 BC + 适当数据清洗 就能达到甚至接近更复杂离线 RL 算法的性能;
- 对机器人来说,常见的实践策略是:
- 先用 BC 得到一个可靠、稳定的初始策略;
- 再在此基础上使用保守的离线 RL 微调,希望在安全范围内挖掘额外性能。
- 行为克隆本质上可以看作一种极端保守的离线 RL:
【图 5-3-5 占位】 建议插图:对比“在线 RL”与“离线 RL”的示意图:
- 在线 RL:策略 ↔ 环境,有交互箭头;
- 离线 RL:策略只连接到一个“固定数据集”方框,箭头从历史日志指向学习算法。
从具身智能的视角看,离线 RL 提供了一条把已有的模仿示范、运行日志、互联网视频 都转化为“可用于决策优化的经验”的路径。 在后续章节中,我们会多次看到模仿学习、奖励学习和离线 RL 如何交织在一起:
- 用 BC 和 IRL 从示范中挖掘初始策略与价值观,
- 再用离线 RL 在庞大异质数据上做统一提升,
- 最终形成可泛化、多任务、可部署的机器人 VLA 模型。