Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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)

从方法上看,大部分模仿学习可以粗略分为两类:

  1. 直接模仿专家策略
    • 典型代表就是行为克隆(Behavior Cloning),把模仿学习问题转化为一个标准的监督学习问题;
  2. “反推”专家在优化什么
    • 即逆强化学习(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 前提假设

行为克隆之所以“好用”,背后有几条往往被忽略但非常关键的前提假设

  1. 专家接近最优(Optimality assumption)
    • 假设示范来自一个接近任务最优或至少“足够好”的策略;
    • 若专家本身就经常犯错(例如人类新手操作),BC 只会稳定地学会“错误的习惯”;
    • 后续很多工作研究如何从非最优示范 中学习,这在 IRL 与奖励学习里尤为重要。(牛津大学机器人研究所)
  2. 示范覆盖测试时会遇到的状态分布(Coverage assumption)
    • 训练时,状态是从专家策略诱导的分布 \(d_{\pi^*}(s)\) 中采样的;
    • 测试时,机器人按自己的策略 \(\hat\pi\) 行动,状态分布变为 \(d_{\hat\pi}(s)\);
    • BC 隐含假设:\(d_{\hat\pi} \approx d_{\pi^*}\),也就是机器人不会走到专家“没去过”的地方;
    • 实际上只要策略略有偏差,就可能逐步偏离专家轨迹,进入数据集外的状态,带来严重问题(下一小节的“分布偏移”)。
  3. 观测与动作标注准确
    • 假设传感器标定正确、时间同步良好,状态–动作对 \((s_t, a_t)\) 没有系统偏差;
    • 在真实机器人系统中,延迟、丢帧、标定误差会导致“错误配对”(比如相机图像实际上对应的是 100 ms 前的动作);
    • 这类误差会直接体现在监督信号中,使得 BC 很难学到稳定策略。
  4. 具身配置一致
    • 假设专家和学习者的身体(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:

  1. 初始化
    • 用纯专家示范数据 \(\mathcal D_0\) 做一次行为克隆,得到初始策略 \(\pi_1\)。
  2. 第 \(k\) 次迭代(交互与标注)
    1. 用当前策略 \(\pi_k\) 与环境交互,收集新的状态序列

      \[ \tau^{(k)} = (s_0^{(k)}, s_1^{(k)}, \dots, s_T^{(k)}), \]

      此时状态分布是 \(d_{\pi_k}(s)\);

    2. 对这些状态,请专家给出“正确动作” \(a_t^{(k,*)}\),得到新数据集

      \[ \mathcal D_k = {(s_t^{(k)}, a_t^{(k,*)})}_t \]

    3. 数据聚合:\(\mathcal D \leftarrow \mathcal D \cup \mathcal D_k\);

    4. 在新的聚合数据集 \(\mathcal D\) 上重新训练策略,得到 \(\pi_{k+1}\)。

  3. 停止条件
    • 当策略性能收敛、或者达到预定迭代轮数时停止,
    • 最终可使用最后一次策略 \(\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”,实际系统中的奖励建模往往更“务实”:

  1. 输入形式更灵活
    • 不仅可以使用专家轨迹;
    • 还可以使用人类对机器人行为的打分 / 排序 、语言评价,甚至环境中的自动指标(例如任务是否完成)。
  2. 输出形式多样
    • 状态–动作级别奖励 \(\hat r_\phi(s,a)\);
    • 整条轨迹级别评分 \(\hat r_\phi(\tau)\);
    • 分段的子任务奖励(例如“抓取成功”“姿态舒适”“能量消耗少”)。
  3. 训练方式灵活
    • 可以做二分类(好 vs 坏行为)、回归(连续评分)、排序学习(偏好建模);
    • LLM 的 RLHF(人类反馈强化学习)就是一个著名的奖励建模实例:从人类对多个回答的排序中学一个奖励函数,然后用 RL 调整语言模型。

在机器人具身任务中,奖励建模尤其适用于那些难以手工写出奖励函数 的目标,例如:

  • “端杯子走路时既不洒水,又看起来自然不抖”;
  • “整理桌面时,既要完成用户指令,又要保持整体美观、避免过度移动无关物体”。

此时直接对奖励建模,比尝试写一大堆手工 reward term 更现实。


5.3.3.3 优缺点

把行为克隆、IRL 和更广义的奖励建模放在一起,可以看到它们各有优势与短板:(ScienceDirect)

  1. 行为克隆(BC)
    • 优点
      • 算法与实现极其简单,可直接复用监督学习工具链;
      • 不依赖环境奖励信号,适合“只有示范、没有 reward”的场景;
      • 训练速度快,工程上容易部署。
    • 缺点
      • 严重依赖示范质量与覆盖范围,分布偏移导致长时任务表现差;
      • 无法超越专家,理论性能上限受示范策略限制;
      • 没有显式奖励函数,不利于解释与迁移到新环境。
  2. 逆强化学习(IRL)
    • 优点
      • 得到的是奖励函数而非单个策略,天然更易迁移到新环境、新约束;
      • 奖励具有一定可解释性,有助于理解专家偏好与安全约束;
      • 在示范较有限、但动力学可知的场景中(如模拟器)具有潜在优势。
    • 缺点
      • 问题本身是“不适定”的:许多不同的奖励函数都可能解释同样的行为;
      • 算法通常需要“外层学奖励 + 内层跑 RL”的双层优化,计算和样本成本高;
      • 在高维连续机器人场景中,稳定且可扩展的 IRL 算法仍是研究热点。
  3. 奖励建模 / 偏好学习
    • 优点
      • 可以利用丰富的人类反馈(打分、对比、语言描述),不局限于轨迹本身;
      • 适合描述复杂、模糊、难以形式化的目标(“自然”“舒适”“礼貌”);
      • 奠定了像 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)

  1. 分布外行动与外推误差(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 值, 导致最终策略在真实环境中选择这些“虚假的高价值动作”,表现极差。

  2. 数据覆盖度与行为策略偏差
    • 如果离线数据只覆盖了极少量任务情形(例如机械臂只在桌子中央抓取某个物体), 那么离线 RL 几乎无法学到在其他场景下的合理策略;
    • 行为策略若过于保守(例如人类操作非常谨慎,只在安全区域活动), 离线 RL 想要学习“更激进、更高回报”的策略,就会严重依赖外推,风险更高。
  3. 离线策略评估困难(Offline Policy Evaluation)
    • 在没有新交互的前提下,我们只能通过已有数据间接估计一个新策略的性能,
    • 这需要重要性采样、模型估计或其它复杂技术,且方差通常很大;
    • 对机器人任务来说,这直接影响到“什么时候敢在真实机器人上部署”这一关键决策。
  4. 真实机器人系统的高维与噪声
    • 视觉输入、高维连续动作、噪声传感器等因素,使得函数逼近更困难,
    • 任何小的外推错误都可能被放大成物理世界中的灾难性行为。

这些挑战意味着:

“把在线 RL 代码里采样环境的那几行换成读数据集”,并不能自动得到一个可用的离线 RL 算法。

需要专门的离线方法来控制外推范围、正则化策略,保证学习过程的保守性。


5.3.4.3 方法概览

针对上述挑战,近年来离线 RL 形成了几条主要思路(在第 9 章会以更系统方式展开,此处只做概览):(arXiv)

  1. 保守 / 约束型值函数方法
    • 核心思想:惩罚那些远离数据分布的状态–动作, 让 Q 函数在数据支持不足的地方更保守,避免虚假的高估;
    • 代表性做法:
      • BCQ(Batch-Constrained Q-learning):限制策略选择动作时,只从“看起来像是数据中出现过的动作”中采样;
      • CQL(Conservative Q-Learning):在目标中加入正则项,使得数据集外动作的 Q 值被压低;
      • 各类行为正则化方法(如在策略更新时约束 \(\pi\) 与行为策略 \(\mu\) 的 KL 距离)。
  2. 策略约束与行为克隆正则(Behavior Regularization)
    • 将行为克隆与 RL 目标结合:
      • 一方面最大化估计回报;
      • 另一方面保持策略不要偏离数据中行为太远;
    • 直觉:
      • 只在“稍微改善”行为的局部空间内优化,
      • 不要一下子跳到数据集中从未尝试过的极端动作。
  3. 模型化离线 RL(Model-based Offline RL)
    • 先用离线数据学习一个环境动力学模型 \(\hat P(s’|s,a)\) 和奖励模型 \(\hat r(s,a)\);
    • 再在这个“学得的模型”里进行规划或 RL;
    • 同样需要通过不确定性估计(例如对模型输出方差建模)来避免在模型不可信区域过度使用外推。
  4. BC 与离线 RL 的组合
    • 行为克隆本质上可以看作一种极端保守的离线 RL:
      • 完全不尝试优化超越行为策略,只在数据分布上拟合专家动作;
    • 最近一些工作指出,在许多实际任务中,简单 BC + 适当数据清洗 就能达到甚至接近更复杂离线 RL 算法的性能;
    • 对机器人来说,常见的实践策略是:
      • 先用 BC 得到一个可靠、稳定的初始策略;
      • 再在此基础上使用保守的离线 RL 微调,希望在安全范围内挖掘额外性能。

【图 5-3-5 占位】 建议插图:对比“在线 RL”与“离线 RL”的示意图:

  • 在线 RL:策略 ↔ 环境,有交互箭头;
  • 离线 RL:策略只连接到一个“固定数据集”方框,箭头从历史日志指向学习算法。

从具身智能的视角看,离线 RL 提供了一条把已有的模仿示范、运行日志、互联网视频 都转化为“可用于决策优化的经验”的路径。 在后续章节中,我们会多次看到模仿学习、奖励学习和离线 RL 如何交织在一起:

  • 用 BC 和 IRL 从示范中挖掘初始策略与价值观,
  • 再用离线 RL 在庞大异质数据上做统一提升,
  • 最终形成可泛化、多任务、可部署的机器人 VLA 模型。