想象你第一次进后厨当学徒,想学师傅那手颠勺绝活。最笨的办法是站在旁边看——师傅怎么切、怎么翻、什么时候撒盐,你全记下来,然后自己照做。这叫“行为克隆”(BC)。看一次学一次,学得快,可一旦换个锅、换个火候,你就傻眼了——因为你只是背下了菜谱,没学会应变。 后来师傅开了窍:你炒菜时他全程盯场,每做错一步就叫停,亲手教你一次正确做法,把这些“错题+答案”塞进你的菜谱。这叫数据集聚合(DAgger),错题本越厚你越稳,可师傅也被累坏了。这还不够,你遇到最高难度的挑战是一桌要双手同时操作的菜——左手稳土豆,右手削皮,单步模仿根本兜不住。于是你换了学法:不学单个动作,学整段“旋律”——从下刀到起锅,20秒的动作一气呵成预测出来。这叫动作分块Transformer(ACT),像背一整首曲子而不是数着拍子弹琴,手稳了,节奏也对了。 这篇文章就用后厨学徒的成长故事,把 BC、DAgger 和 ACT 三种模仿学习范式的原理、公式、应用和选型讲得明明白白。

岗位关联

无论你在做机器人控制、自动驾驶还是灵巧操作,模仿学习都是“让AI从人类示范中快速学会技能”的标配路径。搞懂 BC 的局限、DAgger 的纠错机制和 ACT 的动作分块思路,你才能在工作中做出正确选型,少走三个月弯路。

目录
  1. 可视化演示
  2. 模仿学习原理
  3. BC行为克隆
  4. DAgger算法
  5. ACT动作分块
  6. 双臂精细操作
  7. 范式对比选型
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

对比行为克隆(BC)、数据聚合(DAgger)和动作分块Transformer(ACT)三种模仿学习范式的轨迹跟踪与误差纠正过程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

BC行为克隆 绿线=专家轨迹,红线=策略轨迹 分布偏移导致误差随时间累积 L_BC = E[(a_expert - pi(s))^2]

模仿学习原理

想象你第一次踏进后厨,拜一位大厨为师。你不问“油温几度”之类的公式,而是站灶台旁看师傅把一道菜做三遍,然后自己上灶尝试。你学的不是规则,是“别人怎么做,我也怎么做”——这就是模仿学习的原点:从专家的行为示范中学习,而不是从零摸索规则。

在机器人世界,这位“师傅”是遥操作的人类操作员(或任何能输出好策略的智能体),“示范”是记录下机械臂各关节角度、速度、夹爪开合等状态-动作轨迹。机器人学这段轨迹,目标是练出一个策略 π——给它一个观测(摄像头画面、关节角度),它能输出一个动作(关节力矩或目标角度)。整个过程不需要设计奖励函数,不需要在真实环境中反复试错,这正是模仿学习相比强化学习的核心优势:像学游泳先看奥运冠军录像,而不是直接跳进水里呛水。

但模仿学习也有天花板:策略的上限不会超过师傅的水平。如果示范里有瑕疵,机器人学到的也有瑕疵。此外,它需要一个前提——“师傅示范过的状态”要能覆盖“机器人将来遇到的状态”。这个前提在后面会反复出现,是整个故事的伏笔。

回到后厨的比喻:模仿学习的本质就是“师傅领进门”。先把师傅的示范吃透,学得像,再谈修行靠个人(比如后续用强化学习微调)。这也引出了一个问题——如果只靠“看”能学会吗?这就进入 BC 的故事。

π∗  ≈  arg⁡min⁡π  DKL(π∗ ∥ π)\pi^{*} \;\approx\; \arg\min_{\pi} \; D_{\mathrm{KL}}\big(\pi^{*} \,\|\, \pi\big)
模仿学习的目标就是学习一个策略 π,让它在行为分布上尽量接近专家策略 π\*。KL 散度在这里是“两者像不像”的度量尺。
  1. 专家策略那位“师傅”的行为策略,是我们要逼近的目标
    π∗\pi^{*}
  2. KL散度衡量两个概率分布之间差异的指标,可以理解为“动作分布之间的距离”
    DKL(π∗ ∥ π)D_{\mathrm{KL}}\big(\pi^{*} \,\|\, \pi\big)
  3. 最小化求解在所有的候选策略 π 中,挑出让 KL 散度最小的那个作为最终策略
    arg⁡min⁡π\arg\min_{\pi}

BC行为克隆

BC 就像只看不练的学徒。师傅做宫保鸡丁:热油、下鸡丁、翻炒、加花生、出锅。你在旁边把每个时刻的“锅铲状态”和“对应动作”记成小抄,然后自己上灶。抄得越熟,你越觉得自己会了——直到某次你撒盐的时候手抖了一下,整个节奏就全乱了。

技术上看,BC(Behavior Cloning,行为克隆)把模仿学习压缩成一个监督学习问题:收集专家示教时的状态-动作对 (o_t, a_t),训练策略网络 π_θ(o)→a,让策略输出的动作尽量接近专家动作。它不需要奖励函数,不需要与环境在线交互,数据采完离线就能训。这是它“廉价”的原因,也是它“脆弱”的根源。

问题出在一个微妙假设上——它默认专家数据里出现的状态,覆盖了机器人运行时可能遇到的所有状态(机器学习里叫 i.i.d. 独立同分布假设)。真实世界当然不配合:机器人推了一下没推到位,姿态就和示范里的大不一样。可策略只“认识”示范里的状态,于是给出一个不靠谱的动作,又让偏离更远——误差像雪球一样滚起来。这就是“协变量偏移”导致的“复合误差”。

所以 BC 像个背菜谱的徒弟——菜谱再厚也覆盖不了“世界这么大”的意外。只要换一口锅、换一种火候,他就会手忙脚乱。要解决这个问题,需要让徒弟在“做错的地方”也能得到教学,这就轮到 DAgger 出场了。

JBC(θ)=E(o,a)∼Dexpert[∥πθ(o)−a∥2]\displaystyle J_{BC}(\theta) = \mathbb{E}_{(o, a) \sim \mathcal{D}_{\text{expert}}} \left[ \| \pi_\theta(o) - a \|^2 \right]
这个公式是说:BC 的目标就是在专家示范过的状态上,让策略输出和专家动作尽可能接近。损失越小,学得越像。
  1. 期望算子对专家数据集中的所有状态-动作对取平均,代表“平均来看学得多好”
    E(o,a)∼Dexpert\mathbb{E}_{(o, a) \sim \mathcal{D}_{\text{expert}}}
  2. 策略预测当前参数 θ 下的策略网络对观测 o 输出的动作
    πθ(o)\pi_\theta(o)
  3. L2 距离平方预测动作与专家真实动作之间的欧氏距离平方,衡量“学得像不像”
    ∥⋅∥2\|\cdot\|^2

DAgger算法

DAgger 的师傅是个急性子,但很负责。他不让你只看,他让你直接上灶炒,自己站在旁边盯。你手一抖,菜掉出锅外,他立刻叫停:“停!看我的!”然后把你搞砸的步骤重新做一遍,让你记下来。你的小抄因此越来越厚,上面不只有师傅平时标准的做法,还有你自己犯错后的“改正做法”。

技术上,DAgger(Dataset Aggregation,数据集聚合)的核心是“把策略自己踩过的坑也变成训练数据”。每次迭代,让当前策略 π_θ 在真实环境(或仿真)中执行,记录它访问到的状态序列 o₁, o₂, ……, o_T;然后对这些状态逐一问专家“你此时会怎么动”,把 (o_t, a*) 补充进数据集,用聚合后的数据重新训练策略。这样策略就没法“躲”在不熟悉的分布里了——因为那些偏移状态已经被收集进训练集,它见过“犯错后的世界长什么样”。

DAgger 绕开了协变量偏移的坑,代价是训练成本高:每一轮迭代都需要专家在线响应。这也是它在纯离线场景难以直接落地的主因。但它带来的鲁棒性提升非常可观,在自动驾驶、长程操作等场景中,DAgger 往往是 BC 失败后的第一选择。

DAgger 就像错题本学习法:每次实战考试里做错的题,师傅都现场给一遍标准答案,下一轮见到同样题型自然不慌。错题越多,答卷越稳,代价是师傅要全程陪跑。但还有第三条路——不一个动作一个动作地学,而是学整段旋律,这就是 ACT。

D←D∪{(o,π∗(o))∣o∼dπθ}\mathcal{D} \leftarrow \mathcal{D} \cup \{ (o, \pi^{*}(o)) \mid o \sim d_{\pi_\theta} \}
意思是:把当前策略诱导出的状态分布里的每个状态,都找专家问出正确答案,并入数据集。
  1. 并集更新把新采集的样本追加进已有数据集,实现“数据聚合”
    D←D∪{⋅}\mathcal{D} \leftarrow \mathcal{D} \cup \{\cdot\}
  2. 专家查询专家策略 π\* 在状态 o 上给出正确动作,作为标准答案
    π∗(o)\pi^{*}(o)
  3. 策略诱导分布符号 o~d_πθ 表示“按当前策略执行时真实会遇到的状态分布”,这是整场教学的“学生视角”
    o∼dπθo \sim d_{\pi_\theta}

ACT动作分块

到了 ACT,徒弟的学法又变了。师傅说:“别一个动作一个动作地学了,看我做一整段:下刀、切片、滑油、翻锅、倒汁、出锅。你把 6 个动作当成一整段旋律,一口气背下来。”你发现这样反而更稳——因为不再需要每秒钟都纠结“下一步是啥”,整段动作在心里已经预演好了。

ACT(Action Chunking with Transformers)里,“动作分块”的意思是:策略不再每个时间步输出一个动作,而是一次性预测未来 k 帧的完整动作序列 a_{t:t+k}。高频的抖动和单步误差被“整体规划”平抑掉了。但光分块还不够——同一盘菜,今天的火候和昨天不同,一连串动作也会随之变化,需要一个机制来“记住”这种变化。

于是 ACT 用上了 CVAE(条件变分自编码器)。训练时,一个编码器把“当前状态 + 要模仿的动作块”压缩成一个潜变量 z,z 里保存了这段动作的“风格/意图”(比如切菜时手腕的角度倾向、用力的节奏);解码器拿着 z 和当前观测预测动作块。推理时编码器退场,z 从标准正态分布 N(0,1) 里采样,解码器配合当前画面一口气生成整块动作。Transformer 的编码-解码结构让整个过程可以对高维图像和长序列动作稳定建模。

ACT 好比不数拍子背整首曲子——旋律已经在脑内成型,手自然不会在一个音符上打结。这种“整段肌肉记忆”在精细操作中尤其重要,接下来我们看看它在最难的厨房考题——双臂精细操作——中的表现。

LACT=∥Dec(z,ot)−at:t+k∥2⏟重构误差+β⋅DKL(q(z∣ot,a) ∥ p(z∣ot))\displaystyle \mathcal{L}_{\text{ACT}} = \underbrace{\| \mathrm{Dec}(z, o_t) - a_{t:t+k} \|^2}_{\text{重构误差}} + \beta \cdot D_{\mathrm{KL}}\big(q(z \mid o_t, a) \,\|\, p(z\mid o_t)\big)
训练时同时压两件事:解码要准(重建动作块),潜变量不要跑偏(KL 约束),两者缺一不可。
  1. 重构误差解码器输出的动作块和专家动作块之间的 L2 距离,衡量“预测的整段动作像不像”
    ∥Dec(z,ot)−at:t+k∥2\|\mathrm{Dec}(z, o_t) - a_{t:t+k}\|^2
  2. 后验编码器训练时从(观测,动作块)推断潜变量 z 的分布,把风格信息压缩进去
    q(z∣ot,a)q(z \mid o_t, a)
  3. KL散度约束让后验分布不要偏离先验(标准正态)太远,起到正则化作用,防止潜变量过拟合
    DKL(q ∥ p)D_{\mathrm{KL}}(q \,\|\, p)

双臂精细操作

后厨终极考验来了:左手按住滑溜溜的土豆,右手同时削皮。两只手要配合,而且要稳。三种学法的学徒到了这一步,差距就像水落石出一样清晰。双臂操作是模仿学习的高压测试场——它不仅要求“知道做什么”,还要求“两只手像一个人一样默契”。

双臂精细操作的任务特点有三个:高维(双臂自由度加倍,动作输出通常在 14 维以上)、高精度(毫米级误差要求)、强耦合(两只手必须协同感知与决策)。研究社区常用的 ALOHA 平台正是为这类任务设计的。同样是示范数据,BC 在单臂任务里还能凑合,到了双臂就频繁“崩溃”——因为高维动作放大了复合误差:一个关节歪了 1°,末端执行器就偏出去几厘米。

实验对比中:BC 训练即使能拟合训练集(训练损失很低),测试成功率也常常不到 30%;DAgger 通过在线纠正显著提升成功率,但每个回合都要专家介入,采集成本极高;ACT 因为动作分块 + 潜变量建模,在大规模数据上训练更稳定,成功率可以稳定达到 80% 以上,且动作更平滑、更少抖动。数学上,这种差异可以用累计误差上界来解释。

所以同样是两只手:BC 是两只手各弹各的,越弹越乱;DAgger 是师傅各盯各的,师傅累到脱力;ACT 是两只手合奏同一首曲子——自然最协调。这也告诉我们:任务越精细、动作维数越高,越需要“整段规划”式的策略,而不是“一步一停”式的跟从。

EBC≤T2⋅ε,EACT≤(Tk)2⋅ε\displaystyle E_{\text{BC}} \leq T^2 \cdot \varepsilon, \qquad E_{\text{ACT}} \leq \left(\frac{T}{k}\right)^2 \cdot \varepsilon
BC 的累计误差随执行步数 T 平方增长;ACT 因为一次预测 k 步,相当于把决策步数降为 T/k,误差增长被大幅抑制。
  1. 步数与单步误差T 是总执行步数,ε 是单步平均误差,两者共同决定了累计误差规模
    T,εT, \varepsilon
  2. BC 的误差上界误差随时间步平方增长,这是“复合误差”的数学表达,也是 BC 在长程任务中崩溃的原因
    T2⋅εT^2 \cdot \varepsilon
  3. ACT 分块后的上界动作分块把决策次数从 T 次降低到 T/k 次,误差增长显著放缓,因此更稳
    (Tk)2⋅ε\left(\frac{T}{k}\right)^2 \cdot \varepsilon

范式对比选型

学到最后你该问了:我到底该跟哪个师傅学?答案取决于你的菜(任务复杂度)、预算(数据成本)和验收标准(精度要求)。没有绝对的最好,只有最匹配的解法。

从数据需求看:BC 只需要一次性离线收集专家示教,成本最低;DAgger 需要专家在训练中反复在线纠错,成本最高;ACT 中规中矩,只需要离线数据,但要求数据以“成块动作”的形式组织,采集时要特意录制连贯的操作片段。从泛化能力看:BC 面对新场景最脆弱,DAgger 因为见过更多“自己的坑”而稳健,ACT 因为学到了隐式风格(潜变量 z)也能应对中等程度的变化,但在极端新场景(如完全没见过的物体布局)下仍需谨慎。

选型可以这样定:如果任务简单、状态分布窄(比如固定工位分拣),用 BC 快速上线,用最低成本换一个能用的基线;如果是长程任务、有专家或仿真在线条件(比如自动驾驶变道),优先 DAgger,把鲁棒性买回来;如果是高精度、双臂协同、要求动作平滑(比如机器人炒菜、插线、缝合),果断上 ACT,在表征层面降低误差累积。

选师傅就是选路线:预算紧选 BC,求稳选 DAgger,要细活选 ACT。后厨的故事讲到这里,三种学法你已经了然于心——但要真正用起来,还需要看看它们在真实项目中的落地方案。

M∗=arg⁡min⁡M∈{BC,DAgger,ACT}[λ1⋅Err(M)+λ2⋅Cost(M)]\displaystyle M^{*} = \arg\min_{M \in \{\mathrm{BC}, \mathrm{DAgger}, \mathrm{ACT}\}} \left[ \lambda_1 \cdot \mathrm{Err}(M) + \lambda_2 \cdot \mathrm{Cost}(M) \right]
选型的本质是一个权衡问题:精度权重 λ₁ 和成本权重 λ₂ 由你的项目预算和验收指标决定。
  1. 候选集合三种方法构成决策空间,M\* 表示最终选中的方案
    M∈{BC,DAgger,ACT}M \in \{\mathrm{BC}, \mathrm{DAgger}, \mathrm{ACT}\}
  2. 误差项方法 M 在目标任务上的泛化误差,代表“做得好不好”
    Err(M)\mathrm{Err}(M)
  3. 权衡系数λ₁ 和 λ₂ 分别表示对精度和成本的看重程度,由项目预算与验收标准决定
    λ1,λ2\lambda_1, \lambda_2

AI 应用场景

双臂机器人炒菜(ACT 落地)

阶段:策略部署与推理

解决的问题:传统预编程炒菜机器人只能按固定路径走,无法应对食材大小、摆放位置的随机变化。ACT 使用人类大厨遥操作的示教数据(成块动作序列)训练,编码器学出“火候节奏”,实际炒菜时从潜空间采样出手感,双臂切菜翻锅一气呵成,成功率从 BC 的 40% 提升到 90%。

具体案例:某餐饮自动化公司将 6 台 ALOHA 双臂平台部署到中央厨房,采集大厨 2000 组“切土豆丝+滑油+翻炒+装盘”的完整流程数据,用 ACT 训练后投入实际生产,土豆丝合格率(粗细均匀、无断裂)从人工的 85% 提升到 92%。

自动驾驶变道决策(DAgger 落地)

阶段:数据标注与策略迭代

解决的问题:只用人类驾驶录像训练 BC 时,自动驾驶车偏出车道后进入“从没见过的场景”,决策崩坏。DAgger 用仿真环境让当前策略不断探索,并在错误状态下调取人类驾驶员纠正操作,把纠正数据回灌训练,让策略学会“从坑里爬出来”。

具体案例:某自动驾驶公司用 DAgger 训练高速路变道策略,让策略先在仿真中开 10000 英里,遇到“右侧大车突然并入”等长尾场景时,安全员在仿真器中给出修正转向,数据集逐步聚合至 50 万帧,最终变道成功率从 BC 的 63% 提升到 94%。

康复机器人辅助抬手(BC 快速原型验证)

阶段:快速原型验证

解决的问题:康复机器人需要针对患者手臂活动范围定制辅助轨迹,用强化学习需要大量试错(对患者不安全),用 BC 采集康复师的一次示范轨迹即可快速生成个性化辅助动作,适合作为产品验证阶段的起点。

具体案例:某康复器械团队用低成本 RGB-D 摄像头记录康复师引导患者抬手的 30 秒示范,提取肩肘关节角度轨迹,用 BC 训练一个小型 MLP 策略,部署到外骨骼上可复现 80% 的辅助轨迹,为后续 DAgger/ACT 升级提供了基线。

Python 演示

python66 行
import numpy as npimport matplotlib.pyplot as plt rng = np.random.default_rng(42)T = 100  # 总时间步 def expert_action(t):    """专家策略:一个未知的复杂轨迹函数"""    return np.sin(0.3 * t) def run_bc():    """BC:从离线专家数据学一个静态策略,闭环执行时受协变量偏移影响"""    train_t = np.arange(T)    train_a = expert_action(train_t)    coeffs = np.polyfit(train_t, train_a, 5)  # 用多项式拟合模拟策略学习    est = np.polyval(coeffs, train_t)    err_accum = np.zeros(T)    pos = 0.0    for t in range(T):        action = est[t]        pos += action - expert_action(t)  # 单步执行偏差        pos += 0.05 * pos  # 协变量偏移:偏得越多,之后错得越多        err_accum[t] = abs(pos)    return err_accum def run_dagger():    """DAgger:每隔几步专家就纠正一次,误差被持续压缩"""    err_accum = np.zeros(T)    pos = 0.0    for t in range(T):        pos += 0.04 * pos  # 策略自身的漂移        if t % 5 == 0:            pos = 0.0  # 专家到场纠正,状态被拉回        err_accum[t] = abs(pos)    return err_accum def run_act():    """ACT:每次预测未来 chunk 步的动作块,分块重规划抑制误差累积"""    err_accum = np.zeros(T)    pos = 0.0    chunk = 10    for t in range(T):        pos += 0.01 * pos  # 动作块内部的微小漂移        if t % chunk == 0:            pos = pos * 0.1  # 分块重新规划,误差被大幅压缩        err_accum[t] = abs(pos)    return err_accum bc_err = run_bc()dagger_err = run_dagger()act_err = run_act() print("最终误差 —— BC: {:.3f} | DAgger: {:.3f} | ACT: {:.3f}".format(    bc_err[-1], dagger_err[-1], act_err[-1])) plt.figure(figsize=(8, 5))t_axis = np.arange(T)plt.plot(t_axis, bc_err, label='BC (行为克隆)', color='#F43F5E', linewidth=2)plt.plot(t_axis, dagger_err, label='DAgger (数据集聚合)', color='#10B981', linewidth=2)plt.plot(t_axis, act_err, label='ACT (动作分块)', color='#818CF8', linewidth=2)plt.xlabel('时间步')plt.ylabel('累积误差')plt.legend()plt.title('三种模仿学习方法的误差累积对比')plt.savefig('comparison.png', dpi=120)print('已保存对比图 comparison.png')
目的:在一个 100 步的 1D 轨迹跟随任务中,用简化模型仿真 BC、DAgger、ACT 三种方法的误差累积过程,直观验证“BC 复合误差爆炸、DAgger 有界、ACT 最稳”的结论。
  1. coeffs = np.polyfit(train_t, train_a, 5)用 5 阶多项式拟合专家轨迹,模拟 BC 从离线示范中“背菜谱”学到的静态策略。
  2. pos += 0.05 * pos模拟协变量偏移:策略偏差越大,下一步错得越多,这是 BC 复合误差的根源。
  3. if t % 5 == 0:模拟 DAgger 每 5 步由专家把状态拉回正确轨迹,等价于“错题本纠错”。
  4. if t % chunk == 0:模拟 ACT 每 10 帧做一次动作分块重规划,误差被周期性压缩。
  5. plt.plot(t_axis, bc_err, label='BC (行为克隆)', color='#F43F5E', linewidth=2)画出三条误差对比曲线,红色 BC 明显暴涨。

常见误区

误区“BC 失败是因为数据不够,多采几倍专家数据就能解决协变量偏移。”

正解加数据有用但有上限。协变量偏移的本质是分布外泛化问题——训练数据再密,推理时一旦偏离就可能掉进训练分布之外的盲区。盲目的堆数据边际收益递减,真正该做的是在线闭环处理偏差(DAgger)或结构性降低误差暴露(ACT)。

为何常见:直觉上“数据多=模型好”在普通监督学习中成立,但模仿学习是闭环系统,误差会被放大,这是很多人踩的第一个坑。

误区“DAgger 每一轮都要专家实时给动作,成本高到根本没法用。”

正解DAgger 确实是三种方法中专家交互成本最高的,但可以通过降低采样频率、在仿真环境中做“虚拟专家”、用规则策略替代人类专家等方式大幅降低成本。回报是鲁棒性的显著提升——把专家成本理解为“买保险”,在关键任务中完全值得。

为何常见:只看到论文里“每轮都问专家”的描述,没意识到工程上可以只在关键状态查询、其余状态沿用旧数据。

误区“ACT 无非是把 BC 的网络换成 Transformer,多预测几步而已,没有本质区别。”

正解动作分块 + 潜变量才是关键创新。CVAE 的潜变量 z 编码了任务执行时的“风格和意图”(比如插线的角度倾向),动作分块解决了单步累积误差。这两点才是 ACT 在细操作任务上成功率远高于 BC 的核心原因,网络骨架反而是次要的。

为何常见:因为 ACT 的训练损失形态上和 BC 相似(都是最小化预测与专家的差距),容易误以为只是换了模型。

误区“反正都是从数据里学,模仿学习和强化学习没多大关系,不用懂 RL。”

正解模仿学习与强化学习有很强的互补关系——BC/DAgger/ACT 负责“从示范中初始化一个不错的策略”,而 RL 负责“在此基础上继续优化,突破专家水平”。在机器人领域,最先进的方案往往先用模仿学习预热策略,再用 RL 微调。不懂 RL 就少了一条重要的升级路径。

为何常见:模仿学习确实可以独立用,但工程实践中两条技术栈经常混用,割裂看待会限制方案设计的视野。

面试题

Q1. 行为克隆(BC)最核心的前提假设是?

单选题 · easy

  • A.示范状态能覆盖测试运行分布← 正确答案
  • B.专家动作一定是最优策略
  • C.机器人学习过程必须在线
  • D.奖励函数必须预先设计好

答案:A。BC 把模仿学习当作监督学习,核心前提是专家示教中的状态覆盖了测试状态分布(i.i.d. 假设)。B 不对,专家动作不一定全局最优,只要够好就行;C 不对,BC 可以离线训练;D 是强化学习的设定,BC 不需要奖励函数。

Q2. DAgger相比BC的最大改进是什么?

单选题 · mid

  • A.用强化学习目标替代监督学习
  • B.聚合策略自采状态并让专家纠正← 正确答案
  • C.增大专家演示数据的采集规模
  • D.用Transformer替换传统CNN骨干

答案:B。DAgger 让当前策略在环境中采样,遇到新状态就问专家要正确动作,并把样本加入数据集,从而解决 BC 的协变量偏移。A 错,DAgger 仍是监督式;C 只是堆数据,治标不治本;D 是网络层面的换骨架,不是算法本质改进。

Q3. 关于协变量偏移,下列说法正确的是?

单选题 · mid

  • A.只影响在线学习方法而不影响BC
  • B.偏离后状态超出训练分布且误差放大← 正确答案
  • C.增加专家示教数据可以完全消除
  • D.只会出现在高维视觉类任务之中

答案:B。协变量偏移是 BC 的经典痛点:策略在闭环执行时一旦偏离,观测就不是训练分布中的样子,误差在状态反馈中被不断放大。A 错,BC 受影响最大;C 错,加数据只能缓解不能消除;D 错,任何状态空间都可能出现问题。

Q4. ACT中“动作分块”的正确理解是?

单选题 · mid

  • A.把动作空间拆成小段分别预测
  • B.一次预测未来多步的连续动作序列← 正确答案
  • C.用CNN对图像进行分块特征提取
  • D.每个时刻只执行单个关节动作

答案:B。动作分块指一次输出未来 k 帧的连续动作序列(如未来 20 帧的关节角度轨迹),而不是每次预测单帧动作。A 是按空间维度拆分,C 是图像处理里的分块,D 是单步执行,均不符合 ACT 的定义。

Q5. DAgger的迭代流程包括哪些步骤?(多选)

多选题 · mid

  • A.用当前策略在环境中采集轨迹← 正确答案
  • B.对轨迹上每个状态询问专家动作← 正确答案
  • C.将新样本并入数据集并重新训练← 正确答案
  • D.逐步将专家干预次数减至为零

答案:ABC。DAgger 的循环是“策略采样→专家标定→聚合数据→重新训练”。D 不是 DAgger 的必需步骤,DAgger 不会刻意把专家干预降到 0,而是在迭代中让策略自然成长,干预频率由策略表现自动决定。

Q6. 以下哪一项不属于模仿学习的典型应用?

单选题 · easy

  • A.炒菜机器人学人类大厨示范
  • B.自动驾驶从人类驾驶数据学习
  • C.围棋AI通过自我对弈进化← 正确答案
  • D.灵巧手遥控示教后复现动作

答案:C。C 是强化学习/自我对弈的经典场景,不依赖专家示范。A(大厨示范)、B(人类驾驶数据)、D(遥操作示教)都依赖人类专家示范,是模仿学习的典型应用。

Q7. 关于ACT中CVAE的潜变量z,正确的说法有?(多选)

多选题 · hard

  • A.训练时由编码器从观测加动作块推断← 正确答案
  • B.推理时从标准正态先验中采样获得← 正确答案
  • C.潜变量记录任务执行的隐性风格信息← 正确答案
  • D.潜变量仅训练时使用推理时丢弃

答案:ABC。训练时通过编码器从(观测,动作块)推断后验 z;推理时编码器退场,从先验 N(0,1) 采样 z 后与观测一起送入解码器。z 编码的是动作的“隐性风格”(力度、轨迹倾向等)。D 把潜变量误解为仅训练用的中间量,推理时 z 同样参与生成。

Q8. 双臂精细操作中ACT比BC成功率高的主要原因是?

单选题 · mid

  • A.依赖更大算力的GPU集群支持
  • B.分块加潜变量降低高频累积误差← 正确答案
  • C.不需要任何专家数据即可训练
  • D.自动设计出完善的奖励函数

答案:B。双臂操作自由度翻倍,单步误差被高维动作放大,BC 的协变量偏移更严重。ACT 通过整块预测 + 潜变量建模保持轨迹连贯性,训练也稳定。A 是资源问题,C 与模仿学习前提矛盾,D 是强化学习思路,均不是原因。

Q9. 三种方法对专家数据成本要求的排序是?

单选题 · easy

  • A.BC 高于 DAgger 高于 ACT
  • B.ACT 高于 BC 高于 DAgger
  • C.DAgger 高于 ACT 高于 BC← 正确答案
  • D.三者数据成本完全相同

答案:C。BC 只用一次性离线专家数据,成本最低;ACT 需要采集成块动作序列,中等;DAgger 需要专家在训练循环中持续在线纠正,成本最高,所以 C 正确。

Q10. 实际项目选型时,以下策略合理的有?(多选)

多选题 · extreme

  • A.简单任务状态受限可选BC快速上线← 正确答案
  • B.长程任务允许干预时可选DAgger← 正确答案
  • C.高精度双臂操作优先考虑ACT← 正确答案
  • D.所有任务均无脑选择ACT最优

答案:ABC。选型要平衡成本、精度、复杂度:简单任务 BC 足矣;有专家/仿真在线条件且任务长程用 DAgger;高精度精操优先 ACT。D“无脑选最强”忽略了 ACT 的实现复杂度与对成块数据格式的要求,不是合理工程决策。