你第一次进驾校,教练没给你讲任何理论,直接开车带你上路。他一边打方向盘一边念叨:“前面车距近了,轻点刹车”“这个弯道,入弯前减速”……你坐在副驾驶上,眼睛盯着路况,心里默默记下“看到什么→该做什么”。几天后,教练把方向盘交给你,你激动地上路,却发现:车速、弯道角度、前车距离,全都跟教练示范时不一样了!你越紧张,操作越变形,偏差越滚越大。 这个“看教练示范→模仿成一门手艺”的学习方式,正是模仿学习(Imitation Learning);而其中最朴素、最常用的一种,叫行为克隆(Behavioral Cloning,简称 BC)。它不推演环境规律,不算长期回报,只是把专家的“状态-动作”结对记录成数据集,让神经网络“照葫芦画瓢”:见到相似的场景,输出相似的操作。 但行为克隆有一个著名的坑:复合误差(Compounding Error)。就像新手司机一个小方向偏差被道路不断放大,最终冲出公路。今天,我们就坐在副驾驶上,把行为克隆从原理、数据、模型到优化、评估、挑战,完整地走一遍。

岗位关联

掌握行为克隆的原理与陷阱,是入门机器人学习、自动驾驶与游戏 AI 的必修课。你不仅能“照猫画虎”,更知道“虎”为什么会画歪,以及如何把它扶正。

目录
  1. 可视化演示
  2. 行为克隆原理:照葫芦画瓢的示教-复刻范式
  3. 数据采集关键:示范课的质量与多样性
  4. 网络模型搭建:从眼睛到手脚的端到端通路
  5. 训练优化策略:多练多悟,防“背死书”
  6. 性能评估指标:出师考核考什么
  7. 典型挑战困境:从复合误差到DAGGER纠偏
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示行为克隆三大核心阶段:专家示教数据收集、策略网络监督训练、协变量偏移问题与轨迹发散,支持模式切换对比。

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

示教数据收集 专家沿轨迹移动,采集(s,a)对 橙色箭头表示当前动作a D={(s_i,a_i)}_{i=1}^N 数据集D由N个状态-动作对组成

行为克隆原理:照葫芦画瓢的示教-复刻范式

学车第一课,教练通常不讲理论,直接开车带你兜一圈。你坐在副驾驶,看教练如何根据前方的路况打方向盘、踩油门。你脑子里记下的不是汽车原理,而是“什么画面配什么手脚动作”。行为克隆干的就是这件事:把教练的示范过程整理成一份“场景-操作”笔记,交给神经网络去背。

在模仿学习的大家庭里,行为克隆是最朴素的一支。它不去推理“为什么教练要这样打方向”(那是逆强化学习的事),也不去试错探索“怎样开更好”(那是强化学习的事)。它只做一件事:给定一组专家示范的数据对 $\{(s_i, a_i)\}$,训练一个策略网络 $\pi_\theta$,使得面对同样的状态 $s$,输出的动作尽量接近专家动作 $a$。这也解释了为什么入门上手快——一个监督学习框架就能跑通。

最常用的训练目标是最小化均方误差损失:

训练完成后,学员就有了“条件反射”:看到熟悉的画面,直接输出操作。可问题在于,他背的是教练示范时的“标准路况”;一旦上路遇到“非标准路况”,条件反射就可能失灵。这正是下一节要给示范数据“扩充题库”的原因。

L(θ)=1N∑i=1N∥πθ(si)−ai∥2\displaystyle \mathcal{L}(\theta) = \frac{1}{N} \sum_{i=1}^{N} \left\| \pi_\theta(s_i) - a_i \right\|^2
这个公式的意思是:把模型在每一条示范数据上的“动作预测”和“专家真实动作”的误差平方求平均。误差平方让大偏差受到重罚,就像教练猛敲方向盘纠正大错误。
  1. 状态-动作对$(s_i, a_i)$ 是第 $i$ 条专家示范,$s_i$ 是“此时看到了什么路况”,$a_i$ 是“教练此时做了哪个操作”。
    (si,ai)(s_i, a_i)
  2. 策略网络预测$\pi_\theta(s_i)$ 是当前学到的策略在同样路况下给出的操作,它要向 $a_i$ 看齐。
    πθ(si)\pi_\theta(s_i)
  3. 误差平方$\left\| \cdot \right\|^2$ 计算预测操作与真实操作之间距离的平方,大偏差被放大惩罚,像教练对大幅偏离方向的错误格外严厉。
    ∥πθ(si)−ai∥2\left\| \pi_\theta(s_i) - a_i \right\|^2
  4. 平均求和$\frac{1}{N}\sum_{i=1}^{N}$ 把整本“学车笔记”的所有示范样本误差加总求平均,相当于做一次期末统考,总分越低说明背得越像教练。
    1N∑i=1N\frac{1}{N} \sum_{i=1}^{N}

数据采集关键:示范课的质量与多样性

如果教练整个教学周期只在一段没有车的笔直公路上示范,学员毕业了也只会在直路上踩油门。城市环岛、窄路会车、雨天湿滑这些“题型”没见过,一上路就抓瞎。所以示范数据的第一要义是覆盖各种路况——状态的多样性,这是一切行为克隆的地基。

行为克隆的样本来自专家演示,数据质量直接决定模型上限。采集时有三个关键点:多样性——状态空间里各种边缘情况都要覆盖,比如突然窜出行人、车道线磨损;预处理——特征需要归一化,让网络更好收敛;传感器同步——画面、转向、速度必须时间对齐,否则“看到的画面”和“记录的操作”对不上,等于给学员发了一份错乱的笔记。

数据归一化是让不同量纲的特征可比的关键操作:

一份好的学车笔记,既要“题型全”(多样性),又要“字迹工整”(干净、对齐、归一化),学员才能高效吸收。数据准备阶段花的功夫,往往比调模型更决定最终效果——这是工程现场反复应验的经验。

snorm=s−μσ\displaystyle s_{\text{norm}} = \frac{s - \mu}{\sigma}
把每个状态减去所有样本的均值、再除以标准差,让数据以 0 为中心、以 1 为尺度。就像把“车速 80 码”和“车距 30 米”这两种不同单位的数字统一翻译成“相对平均水平偏离了多少个身位”。
  1. 均值 $\mu$所有示范样本状态的平均值,代表“平均路况”。
    μ=1N∑i=1Nsi\mu = \frac{1}{N}\sum_{i=1}^{N} s_i
  2. 标准差 $\sigma$状态分布的离散程度,代表“路况变化幅度”。
    σ=1N∑i=1N(si−μ)2\sigma = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(s_i - \mu)^2}
  3. 归一化结果 $s_{\text{norm}}$把每个状态搬到以 0 为中心、以 1 为尺度的坐标系里,网络学起来更轻松、收敛更快。
    snorm=s−μσs_{\text{norm}} = \frac{s - \mu}{\sigma}

网络模型搭建:从眼睛到手脚的端到端通路

学员的大脑里有一条通路:眼睛看到画面 → 大脑自动提取“前面有弯道、车距太近”等特征 → 手脚执行操作。传统自动驾驶把这条通路拆成感知、预测、规划、控制多个独立模块,就像驾校分科目教学,每个科目单独训练再拼装。而端到端行为克隆把整套“眼睛到手脚”直接压进一个神经网络。

输入是摄像头原始画面(像素矩阵),中间由卷积神经网络自动提取视觉特征,输出端是方向盘转角这样的连续动作(回归任务)。这条路之所以可行,是因为网络可以看作一个多层复合函数,逐层把“像素”翻译成“操作”:

学员最终形成肌肉记忆,看到弯道手自然就打方向,不需要先重建三维世界再计算轨迹——这是端到端范式最迷人的地方。代价是:中间过程不可解释,一旦出错,很难定位是“眼睛”看错了还是“手”打错了。

a=W2 σ(W1x+b1)+b2\displaystyle a = W_2 \, \sigma(W_1 x + b_1) + b_2
一个两层简化网络:输入一帧画面 $x$,第一层提取“线条与色块”线索,激活函数引入非线性,第二层把这些线索组装成方向盘转角 $a$。层数越多,能表达的操作越细腻。
  1. 输入 $x$一帧图像的像素向量,等于学员此刻看到的画面。
    xx
  2. 线性变换 $W_1 x + b_1$第一层做特征提取,把原始光影转成“有没有车道线”“弯道在左边还是右边”这类线索。
    W1x+b1W_1 x + b_1
  3. 激活函数 $\sigma$引入非线性,让网络能表达复杂映射;没有它,多层叠加也只是一条直线,学不会转向这种非线性操作。
    σ(W1x+b1)\sigma(W_1 x + b_1)
  4. 输出层 $a$第二层加权组合特征,得到连续动作值——方向盘转角。
    a=W2 σ(W1x+b1)+b2a = W_2 \, \sigma(W_1 x + b_1) + b_2

训练优化策略:多练多悟,防“背死书”

一个死记硬背的学员,换条路就不会开了。教练对付“背死书”的办法有两个:一是变换练习场景,今天白天练、明天傍晚练,晴天雨天都练;二是明确告诉学员“别把特殊情况当普遍规律”。对应到行为克隆,就是数据增强与正则化。

数据增强在图像类任务中格外有效:随机裁剪、水平翻转、亮度与对比度抖动,用来模拟白天黑夜、摄像头轻微位移、天气变化。正则化则从另一侧抑制模型过分复杂,防止它把训练集中的噪声细节当作金科玉律。把正则项加入损失函数后,训练目标变成:

训练策略的本质就是给学员安排“变式练习”和“简明心法”,让模型在没见过的路况上也能稳住操作,而不是带着一本错题本上路。实战中,增强与正则的力度要反复实验,才能找到“既灵活又不漂浮”的手感。

Ltotal=LBC+λ∥θ∥2\displaystyle \mathcal{L}_{\text{total}} = \mathcal{L}_{\text{BC}} + \lambda \|\theta\|^2
行为克隆的拟合误差加上一个“模型复杂度”惩罚项。$\lambda$ 越大,模型越倾向保持简单;$\lambda$ 太小,模型就可能过拟合,变成一个只在训练路上开得好的“路霸”。
  1. 基础损失 $\mathcal{L}_{\text{BC}}$行为克隆的拟合误差,衡量“动作模仿得像不像”。
    LBC=1N∑i=1N∥πθ(si)−ai∥2\mathcal{L}_{\text{BC}} = \frac{1}{N}\sum_{i=1}^{N}\left\| \pi_\theta(s_i) - a_i \right\|^2
  2. 正则项 $\|\theta\|^2$模型所有参数平方和,衡量“模型有多复杂、多爱钻牛角尖”。
    ∥θ∥2\|\theta\|^2
  3. 平衡系数 $\lambda$控制“多爱记细节”与“多保简单”的权衡,是一个需要调试的超参数。
    λ\lambda

性能评估指标:出师考核考什么

学员能不能拿驾照,不能只看“笔记默写”成绩,要真上路考倒库、侧方停车、实际路考。行为克隆的评估也一样:离线指标看“笔记背得熟不熟”,在线闭环指标看“真开车稳不稳”。这两者经常相差悬殊。

离线指标计算模型在验证集上的损失或轨迹偏差,方便快捷,但只能作参考;更有说服力的是在线评估——把模型放进仿真环境闭环驾驶,统计任务成功率和最大横向偏移。所谓闭环,就是模型每一步的决策会改变下一步看到的状态。轨迹偏差定义如下:

一句话:别只看训练误差好看,要上车跑一圈,用闭环中的表现说话。许多在测试集上“完美”的模型,一进闭环就翻车,这正是复合误差在作怪——下一节就来拆解这个最大的坑。

D=1T∑t=1T∥stclone−stexpert∥\displaystyle D = \frac{1}{T} \sum_{t=1}^{T} \left\| s_t^{\text{clone}} - s_t^{\text{expert}} \right\|
把克隆模型驾驶时每一时刻的位置,与专家在同一时刻的参考位置做差求平均。$D$ 越大,说明学员跑偏越严重。
  1. 专家状态 $s_t^{\text{expert}}$专家在第 $t$ 时刻的标准位置,相当于教练示范车的定位。
    stexperts_t^{\text{expert}}
  2. 克隆状态 $s_t^{\text{clone}}$克隆模型在同一时刻的实际位置,相当于学员开到的位置。
    stclones_t^{\text{clone}}
  3. 偏差求和 $\sum_{t=1}^{T}$把每一时刻的偏离距离加起来,总共考察 $T$ 个时刻。
    ∑t=1T∥stclone−stexpert∥\sum_{t=1}^{T}\left\| s_t^{\text{clone}} - s_t^{\text{expert}} \right\|
  4. 平均 $D$除以 $T$ 得到平均偏差,作为“全程跑偏度”的量化指标。
    D=1T∑t=1T⋯D = \frac{1}{T}\sum_{t=1}^{T}\cdots

典型挑战困境:从复合误差到DAGGER纠偏

新手最怕的就是“方向偏一点→车歪→更紧张→打得更歪”的恶性循环。方向偏差让车离开期望路线,歪了之后面对的路况全是训练时没见过的,于是判断更加失准,偏差继续放大。这就是驾驶版的复合误差,也是行为克隆最臭名昭著的失败模式。

技术根源在于训练与推理的分布不一致:训练时,模型看到的都是专家轨迹附近的状态;推理时,只要第一步有微小偏差,后面面对的就全变成了“自己一手造出来的陌生状态”。监督学习的基本假设——训练集和测试集独立同分布——被打破了。于是偏差像滚雪球一样不断放大。

缓解手段主要有三级:一是数据增强,在训练输入上叠加噪声、平移,相当于让学员提前“预演”歪一点的路况;二是数据聚合,把模型自己开出来的轨迹也收集起来;三是最经典的 DAGGER(Dataset Aggregation,数据集聚合)——让学员先开一段,教练实时接管纠正,把这些“歪路上的正解”全部记入笔记再训练:

最好的教练不是只示范标准动作,而是让学员先开一段,在学员的“歪路况”上及时纠正,把这些纠偏片段记入笔记——这就是 DAGGER 的精神。理解了复合误差和 DAGGER,你就真正摸清了行为克隆从“玩具”走向“工程”的分水岭。

LDAGGER(θ)=∑(si,ai∗)∈Dagg∥πθ(si)−ai∗∥2\displaystyle \mathcal{L}_{\text{DAGGER}}(\theta) = \sum_{(s_i, a_i^*) \in \mathcal{D}_{\text{agg}}} \left\| \pi_\theta(s_i) - a_i^* \right\|^2
DAGGER 的损失函数形式上与行为克隆一致,但数据集 $\mathcal{D}_{\text{agg}}$ 不再是“静态的专家示范”,而是“专家示范 ∪ 学员自己轨迹上的专家纠正”。这正是它能在歪路上也给出正确指引的原因。
  1. 聚合数据集 $\mathcal{D}_{\text{agg}}$由专家示范和“学员驾驶轨迹上的专家纠正对”合并而成,既有标准路况也有歪路况。
    Dagg=Ddemo∪Dcorrection\mathcal{D}_{\text{agg}} = \mathcal{D}_{\text{demo}} \cup \mathcal{D}_{\text{correction}}
  2. 专家纠正动作 $a_i^*$专家看到学员的歪轨迹状态后给出的正解操作,相当于教练在学员跑偏时抢过方向盘的正确操作。
    ai∗a_i^*
  3. 策略预测 $\pi_\theta(s_i)$模型在歪轨迹状态 $s_i$ 上输出的动作,要向 $a_i^*$ 看齐。
    πθ(si)\pi_\theta(s_i)
  4. 平方误差求和让模型在“自己真会碰到的状态”上学会输出正确操作,而不只是在“专家走过的状态”上自嗨。
    ∑(si,ai∗)∈Dagg∥πθ(si)−ai∗∥2\sum_{(s_i, a_i^*) \in \mathcal{D}_{\text{agg}}} \left\| \pi_\theta(s_i) - a_i^* \right\|^2

AI 应用场景

自动驾驶端到端驾驶(NVIDIA DAVE-2)

阶段:数据采集与模型训练

解决的问题:传统自动驾驶依赖人工标注车道线、障碍物,再用大量规则代码覆盖长尾场景,工程量巨大且总有漏网之鱼。行为克隆让系统直接学习人类驾驶员的“画面→操作”对应关系,省去手工设计中间表示。

具体案例:2016 年 NVIDIA 的 DAVE-2 系统在车上装了三台摄像头,采集人类驾驶时记录的方向盘转角与画面帧。训练一个端到端卷积网络后,车辆在高速公路和普通道路上实现了一定程度的自主驾驶,甚至能应对未标注的车道线片段。

机械臂技能学习与示教

阶段:模型部署与技能迁移

解决的问题:工业机械臂编程周期长,传统方式需要工程师手动逐点示教路径,且难以迁移到新工件。行为克隆让操作员直接拖拽机械臂完成一次动作,系统记录关节角度与视觉状态,自动学会“抓取-搬运-放置”的操作策略。

具体案例:仓储分拣场景中,操作员用手持示教器拖拽机械臂夹取不同尺寸的货物,同时记录上方相机画面与关节角度。训练后,机械臂能复现操作员的动作习惯,对类似货物自动执行分拣,极大缩短换产调试时间。

游戏AI模仿人类玩家

阶段:数据生成与模型预训练

解决的问题:强化学习训练游戏 AI 往往需要数百万次环境交互,耗时长且探索效率低。行为克隆可以先从人类玩家的操作数据中“抄作业”,让 AI 快速学会基础操作,再用强化学习微调冲击高分。

具体案例:在驾驶类或沙盒类游戏中,录制人类玩家的“屏幕画面+按键操作”作为专家示范,训练网络初步学会跟车、转向、采集资源等技能,随后接入强化学习在真实对局中继续优化,训练时间可缩短数倍。

Python 演示

python46 行
import numpy as np np.random.seed(42)  def expert_policy(state):    """专家策略:根据横向偏差和航向角给出方向盘转角(含一点非线性)"""    lateral, angle = state    return -0.6 * lateral - 1.2 * angle - 0.5 * lateral ** 3  def collect_demo(n=600):    """1. 采集专家示范数据:状态-动作对"""    states, actions = [], []    for _ in range(n):        s = np.random.uniform(-0.5, 0.5, size=2)        states.append(s)        actions.append(expert_policy(s))    return np.array(states), np.array(actions)  def clone_policy(states, actions):    """2. 行为克隆:最小二乘拟合线性策略"""    X = np.hstack([states, np.ones((len(states), 1))])    return np.linalg.inv(X.T @ X) @ X.T @ actions  def run_episode(policy_fn, steps=200):    """3. 闭环驾驶仿真:返回全程最大横向偏差"""    lateral, angle, v, dt = 0.30, 0.02, 1.0, 0.1    max_dev = 0.0    for _ in range(steps):        s = np.array([lateral, angle])        steer = policy_fn(s)        lateral += v * np.sin(angle) * dt        angle += steer * dt        max_dev = max(max_dev, abs(lateral))    return max_dev  states, actions = collect_demo()theta = clone_policy(states, actions)bc_policy = lambda s: float(np.hstack([s, [1.0]]) @ theta) print("专家策略的最大横向偏差:", round(run_episode(expert_policy), 3))print("行为克隆的最大横向偏差:", round(run_episode(bc_policy), 3))
目的:最小化实现行为克隆并直观对比“专家”与“克隆”在闭环驾驶中的表现。
  1. states.append(s)记录一条“路况状态”,相当于学员看到的一个画面。
  2. actions.append(expert_policy(s))记录专家在这个状态下给出的方向盘转角,构成“画面→操作”对。
  3. X = np.hstack([states, np.ones((len(states), 1))])给特征加一列 1,把偏置项塞进权重向量一起求解。
  4. np.linalg.inv(X.T @ X) @ X.T @ actions最小二乘法闭式解,一步算出让克隆损失最小的策略参数。
  5. lateral += v * np.sin(angle) * dt仿真车体运动学:航向角决定横向位置变化,模拟“打方向后车身移动”。
  6. steer = policy_fn(s)策略根据当前状态输出动作,是闭环中累积误差的起点。

常见误区

误区有初学者认为,“模仿学习不就是照着专家示范训练一个行为克隆模型嘛,没什么别的花样。”于是把 BC 和模仿学习画上等号。

正解模仿学习是“向专家示范学习”的大家族,行为克隆只是其中一种“静态数据集+监督回归”的实现。家族里还有逆强化学习(先反推专家的奖励函数再优化策略)、DAGGER(在线交互式纠正分布偏移)、以及生成式模仿等多个分支。BC 只是最直接的入门代表,而非全貌。

为何常见:大多数教程用 BC 作为模仿学习的第一个例子,导致初学者容易把“特例”当成“全体”。

误区“行为克隆失败一定是数据不够,我只要把专家演示录上几万小时,模型肯定无敌。”

正解单纯增加同分布的数据无法解决复合误差。模型失败的根源不是数据少,而是推理时自身产生的状态与训练分布不一致(分布偏移)。更有效的做法是提升状态的多样性,或使用 DAGGER 在模型自身的歪轨迹上采集专家纠正。几万小时直路数据,不如一段覆盖环岛和雨天的数据有价值。

为何常见:监督学习“数据多=效果好”的直觉深入人心,但行为克隆是闭环决策问题,静态数据再多也覆盖不了模型自己跑出来的歪轨迹。

误区“模型在专家示范数据上的损失已经降到零点零几,验证集偏差也很小,实车肯定稳了。”

正解训练误差低只能说明“背笔记”背得好,不代表闭环驾驶不跑偏。评估必须在闭环里做:让模型自己连续输出动作,观察状态演化。复合误差下,离线指标漂亮、在线一塌糊涂是常态。正确的做法是先在仿真环境中闭环测试,再逐步过渡到真实平台。

为何常见:人们习惯用监督学习的“测试集准确率”来评估模型,把这种离线思维直接套到闭环决策任务上,忽略了决策会改变未来数据分布这一本质。

误区“DAGGER 听起来高大上,说白了就是把网络变宽变深、多训几个 epoch 呗?”

正解DAGGER 的核心不是换模型,而是改变训练数据分布:让模型先跑出轨迹,再请专家对模型自己遇到的(非专家轨迹上的)状态给出纠正动作,把这些“歪路上的正解”混合进训练集。它从根源上缓解训练与推理分布不一致的问题,与模型容量、训练轮数没有直接关系。

为何常见:“Dataset Aggregation“这个名称容易让人以为是”再加数据再训一遍”,忽略了它真正解决的是分布偏移。

面试题

Q1. 行为克隆本质上属于哪种学习范式?

单选题 · easy

  • A.监督学习范式← 正确答案
  • B.无监督学习范式
  • C.强化学习范式
  • D.自监督学习范式

答案:A。行为克隆直接用“状态-动作”标注数据训练一个映射函数,输入状态、输出动作,有明确的监督信号(专家动作),因此是监督学习。强化学习需要与环境交互获取奖励,无监督学习没有标签,自监督学习靠构造伪标签,都与行为克隆的训练方式不符。

Q2. 行为克隆的训练数据由哪两部分构成?

单选题 · easy

  • A.状态与动作配对← 正确答案
  • B.奖励与回报序列
  • C.图像与标注框
  • D.输入与权重矩阵

答案:A。行为克隆记录的是专家在每个状态下的动作,即“状态-动作对”(s, a),对应驾校笔记里的“路况→操作”。“奖励与回报”是强化学习的数据,“图像与标注框”是目标检测的数据,“输入与权重矩阵”是模型内部结构,都不是训练数据的原始形式。

Q3. “复合误差”指的是什么现象?

单选题 · mid

  • A.多个模型误差叠加
  • B.模型训练误差波动
  • C.闭环中偏差累积放大← 正确答案
  • D.损失函数计算错误

答案:C。复合误差指行为克隆模型在闭环推理时,单步很小的预测偏差会改变下一步状态,而新状态偏离训练分布又导致更大的预测偏差,形成雪球效应。它不是多个模型叠加,也不是训练期的波动或代码 bug,而是训练与推理分布不一致带来的结构性失败。

Q4. 复合误差产生的根本原因是什么?

单选题 · mid

  • A.学习率设置过大
  • B.训练数据量不足
  • C.训练与推理分布不同← 正确答案
  • D.模型参数量过少

答案:C。训练时模型看到的都是专家轨迹附近的状态,而推理时自己产生的偏差会让它进入陌生的状态,训练分布与推理分布不一致(分布偏移)是复合误差的根源。学习率、数据量、参数量虽然影响性能,但不是复合误差特有的原因。

Q5. DAGGER 算法最核心的改进是什么?

单选题 · hard

  • A.增加模型容量
  • B.在自身轨迹上问专家纠正← 正确答案
  • C.使用更强数据增强
  • D.堆叠更深层的网络

答案:B。DAGGER 让模型先跑一段轨迹,再请专家对模型自己遇到的状态给出纠正动作,把这些“歪路上的正解”加入训练集。它针对的是行为克隆最大的痛点——分布偏移。增大容量、增强数据、加深网络都只是通用手段,没有解决“训练状态≠推理状态”这一核心矛盾。

Q6. 下列哪些做法能有效缓解行为克隆的复合误差?

多选题 · mid

  • A.采用DAGGER在线纠正← 正确答案
  • B.增加演示数据量← 正确答案
  • C.训练加入噪声扰动← 正确答案
  • D.只保留少量高精度数据

答案:ABC。DAGGER 通过在线专家纠正直接解决分布偏移;增加演示数据量(尤其是多样化的数据)能扩大训练分布覆盖;训练时加入噪声扰动模拟推理时的偏移,增强鲁棒性。只保留少量高精度数据会缩小数据覆盖,反而加剧分布偏移,是错误选项。

Q7. 端到端行为克隆中,网络的输入通常是?

单选题 · mid

  • A.传感器原始观测输入← 正确答案
  • B.人工设计特征向量
  • C.语义分割标签图
  • D.精确目标函数值

答案:A。端到端行为克隆的卖点就是“从原始传感器到动作”一步到位,输入通常是摄像头图像等原始观测,网络自动学习特征提取。人工设计特征和语义分割标签都需要额外处理流程,属于非端到端或混合方案;目标函数值不是输入而是优化目标。

Q8. 关于行为克隆的常见误区,下列理解正确的有?

多选题 · hard

  • A.数据越多,成功概率越大
  • B.分布偏移会让模型失败← 正确答案
  • C.行为克隆不需要奖励信号← 正确答案
  • D.行为克隆能解决一切任务

答案:BC。行为克隆使用专家示范作为监督信号,完全不需要奖励函数,因此 C 正确;分布偏移导致训练与推理不一致是模型失败的主因,B 正确。数据多但如果分布单一仍会失败,A 错误;行为克隆不适合需要长期探索或复杂因果推理的任务,D 错误。

Q9. 预测连续动作(如方向盘转角)时,行为克隆通常采用哪种损失函数?

单选题 · easy

  • A.均方误差损失函数← 正确答案
  • B.交叉熵分类损失
  • C.策略梯度目标损失
  • D.对比学习损失函数

答案:A。连续动作输出是回归问题,最常用均方误差(MSE)作为损失,衡量预测转角与真实转角的平方距离。交叉熵用于分类离散动作,策略梯度属于强化学习,对比学习需要正负样本对构造,都不适合直接的连续动作回归。

Q10. 评估行为克隆模型时,常用的闭环评测指标有哪些?

多选题 · mid

  • A.任务成功率指标← 正确答案
  • B.轨迹偏差度量← 正确答案
  • C.模型参数量大小
  • D.泛化能力验证← 正确答案

答案:ABD。闭环评估关注模型实际完成任务的能力:任务成功率(是否到达终点)、轨迹偏差(与专家路线偏离多少)、以及在未见过场景下的泛化能力。模型参数量只是网络规模描述,与“开得好不好”没有直接关系,不属于性能评估指标。