学车最顺的方式,是让教练先开几圈,你坐在后座认真看,甚至录像反复看。可一旦自己握方向盘,你会发现:教练演示时走过的路口,和你自己开时走过的路口,往往不是同一批。教得再好,你也可能因为一次轻微的方向盘偏差,歪进一个从没见过的胡同,然后越开越迷。此时最好的办法,是让教练坐在副驾:你负责开,跑偏了他立刻告诉你该怎么打方向,并且把“这个陌生路口 + 正确操作”记到笔记本里。下次再遇到类似路况,你就有了答案。 这正是模仿学习中 DAgger(在线聚合)的核心思想。行为克隆像“看视频学开车”,而 DAgger 像“副驾教练随车纠错”:通过在线收集当前策略自己遇到的偏离状态,请专家为这些状态补标签,再不断聚合数据集、反复训练,从而解决行为克隆中最危险的状态分布漂移与累积误差问题。

岗位关联

掌握 DAgger,你就能在机器人、自动驾驶等场景中,从静态演示升级为在线纠错,让具身智能策略真正在真实分布中稳定闭环。

目录
  1. 可视化演示
  2. 模仿学习基础
  3. 分布漂移问题
  4. DAgger核心思想
  5. 算法流程解析
  6. 专家策略设计
  7. 部署与评估
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示DAgger在线聚合:通过在线收集分布外数据迭代改进策略,缓解行为克隆中的状态分布漂移与累积误差。

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

分布漂移 策略π 专家π* dπ≠dπ* 行为克隆轨迹偏离专家分布

模仿学习基础

学车最直接的思路,是让教练先开几圈,把你和车都当成观察者,把教练的所有操作录下来。回到家后,你反复回放视频,学着“看到这个路口就打这个方向”。这就是模仿学习的起点:让学习者从专家演示中学习,而不是像强化学习那样靠撞墙试错来摸索。机器人学里,这段“教练开车视频”就是专家演示数据集,里面是一对一对的“状态-动作”样本。

技术上说,我们把这些成对的样本记作 $(s, a^*)$,其中 $s$ 是当前状态,$a^*$ 是专家在该状态下的动作。行为克隆(Behavior Cloning)要做的事,是训练一个策略函数 $\pi(s)$,让它在看到相同状态时,输出尽量贴近专家的动作。这个学习过程本质上就是监督学习:把专家动作当作标签,把状态当作输入。

只看这段“教练视频”学车,在训练场里可能表现不错。但问题在于,视频里的路口分布是固定的,而你自己开车时会经过的路口,是由你当时的状态一步步决定的。一旦稍微开偏,接下来的问题就不一样了。

π^BC=arg⁡min⁡π∈ΠE(s,a)∼DexpL(π(s),a)\hat{\pi}_{BC}=\arg\min_{\pi\in\Pi}\mathbb{E}_{(s,a)\sim\mathcal{D}_{exp}}\mathcal{L}(\pi(s), a)
这个式子的意思是:从教练的笔记里,找一套“打方向”的规则,让模型的预测动作尽可能接近教练的真实操作。
  1. 演示数据集$\mathcal{D}_{exp}$ 是教练预先录制的“状态-动作”演示集,由若干对专家样本组成。
    Dexp={(sk,ak∗)}k=1M\mathcal{D}_{exp}=\{(s_k, a_k^*)\}_{k=1}^{M}
  2. 策略预测与损失$\pi(s)$ 是模型看到状态 $s$ 后给出的动作,$\mathcal{L}$ 用来衡量预测动作与专家动作之间的差距。
    L(π(s),a∗)\mathcal{L}(\pi(s), a^*)
  3. 最小化期望$\arg\min_{\pi\in\Pi}\mathbb{E}$ 表示在候选策略集合 $\Pi$ 中,选择一个能让平均损失最小的策略,也就是最像教练的那套开法。
    arg⁡min⁡π∈ΠE(s,a)∼DexpL(π(s),a)\arg\min_{\pi\in\Pi}\mathbb{E}_{(s,a)\sim\mathcal{D}_{exp}}\mathcal{L}(\pi(s), a)

分布漂移问题

假设教练在训练场示范了右转,你学得也很好。可第一次独自上路,你的方向盘比教练偏了两度,车头没有对准教练视频里的位置。此时你看到的画面,已经不是视频里的任意一帧了。这个“陌生画面”没有标准答案,你只能凭感觉猜。猜错一步,下一帧会更陌生,于是越来越偏。这就是行为克隆最经典的隐患:状态分布漂移。

更准确地说,行为克隆的训练数据来自专家策略诱导出的状态分布,但部署时,状态是由你自己当前策略诱导出来的。这两个分布并不一致,也就是说,模型在推理时会持续遇到训练时几乎没见过的状态。哪怕单步错误很小,在长轨迹上也会像滚雪球一样累积起来,最终让策略彻底失效。

正因为“自己的开法”会决定“自己遇到的路口”,所以单纯扩充教练视频并不够。教练必须陪在你身边,看你跑偏时到底歪到了哪里,然后当面告诉你该怎么救回来。

pπ(s)≠pπ∗(s)p_{\pi}(s) \neq p_{\pi^*}(s)
学车视频里出现的路口分布,和学员自己乱开时遇到的路口分布,并不相同;这正是行为克隆只靠静态演示会翻车的原因。
  1. 专家状态分布$p_{\pi^*}(s)$ 是专家策略 $\pi^*$ 执行时访问状态 $s$ 的概率,也就是教练开车时经过的那些正常路口。
    pπ∗(s)=专家运行时状态出现的概率p_{\pi^*}(s) = \text{专家运行时状态出现的概率}
  2. 当前策略状态分布$p_{\pi}(s)$ 是当前学习策略 $\pi$ 执行时访问状态 $s$ 的概率,也就是学员自己开车时经过的路口。
    pπ(s)=学习者运行时状态出现的概率p_{\pi}(s) = \text{学习者运行时状态出现的概率}
  3. 分布不一致$\neq$ 表示两个分布不匹配,模型会在自己诱导出的新状态上缺少专家参照,导致误差累积。
    pπ(s)≠pπ∗(s)p_{\pi}(s) \neq p_{\pi^*}(s)

DAgger核心思想

DAgger 的全称是 Dataset Aggregation,翻译过来就是“数据集聚合”。它的做法很像一位负责任的副驾教练:不再让你只看录像,而是让你亲自开车,教练坐在旁边盯着。每到一个偏僻路口,只要你的状态偏离了教练的认知范围,教练就立刻给出正确动作,并把“这个陌生状态 + 正确动作”记进笔记本。跑完一圈后,你把所有新记的笔记和原来的笔记合在一起,重新练习一整晚。

这里的“笔记本”就是聚合数据集。DAgger 的核心不是简单重复专家演示,而是让专家在线地为“当前策略自己遇到的状态”打标签。这样,训练数据的分布就会逐渐覆盖策略实际会访问到的状态分布,而不是停留在专家最初的演示分布上。随着迭代轮数增加,策略会越来越逼近专家的表现,同时也能应对自己造成的偏差。

数据集越滚越大,模型就能在越来越广的状态空间里找到正确动作。但光有“记笔记”还不够,还需要一个清晰的迭代流程,让策略在每一轮中真正进步。

Di+1=Di∪{(st,π∗(st))}t=1Ti\mathcal{D}_{i+1} = \mathcal{D}_i \cup \{(s_t, \pi^*(s_t))\}_{t=1}^{T_i}
每一轮练车后,都把“学员刚遇到的陌生路口 + 教练当时的操作”追加进旧教案,让教案越攒越全。
  1. 历史数据集$\mathcal{D}_i$ 是第 $i$ 轮之前已经积累的所有笔记,包括初始专家演示和之前各轮的新标注。
    Di=第 i 轮开始时的全部样本\mathcal{D}_i = \text{第 } i \text{ 轮开始时的全部样本}
  2. 新标注集合$\{(s_t, \pi^*(s_t))\}_{t=1}^{T_i}$ 是这一轮 rollout 中,策略访问到状态 $s_t$ 时,专家给出的动作 $\pi^*(s_t)$。
    at∗=π∗(st)a_t^* = \pi^*(s_t)
  3. 并集聚合$\cup$ 把新笔记和旧笔记合并起来,得到更大的数据集 $\mathcal{D}_{i+1}$,让模型既不忘旧知识,又补上新盲区。
    Di+1=Di∪新标注\mathcal{D}_{i+1} = \mathcal{D}_i \cup \text{新标注}

算法流程解析

把“随车纠错”变成可执行的循环,DAgger 的流程大致是这样的:第一步,先让教练开一段路,收集初始演示数据 $\mathcal{D}_0$。第二步,用这些数据训练一个初始策略。第三步,让当前策略自己开车跑一段轨迹,每到一步就问教练“这里应该怎么做”,并把当前状态和教练给出的动作一起加入数据集。第四步,用聚合后的数据集重新训练策略。重复第三、四步若干轮,直到策略在测试轨迹上足够稳定。

这个流程的关键在于“用当前策略收集轨迹”。正因为轨迹是当前策略跑出来的,它才能暴露当前策略最容易犯错的状态。把专家在这些状态上的动作补进数据集,就相当于把模型最薄弱的路口逐个标记出来,然后集中补课。

反复执行“收集、聚合、重训”,策略就能逐步覆盖自己诱导出的状态分布。但整个过程还有一个重要前提:副驾上得有一位靠谱的教练。

π^i+1=arg⁡min⁡π∈Π∑(s,a)∈Di+1L(π(s),a)\hat{\pi}_{i+1} = \arg\min_{\pi\in\Pi}\sum_{(s,a)\in\mathcal{D}_{i+1}}\mathcal{L}(\pi(s), a)
每一轮重新训练时,不是只学新的笔记,而是把从第一轮到现在所有的“路口 + 正确操作”全部复习一遍,再挑出整体表现最好的策略。
  1. 候选策略空间$\Pi$ 是所有可能策略组成的集合,可以理解为一套允许使用的“开车风格库”。
    π∈Π\pi \in \Pi
  2. 聚合后的数据集$\mathcal{D}_{i+1}$ 包含初始演示、历史所有标注,以及本轮刚收集的新状态-动作对。
    (s,a)∈Di+1(s, a) \in \mathcal{D}_{i+1}
  3. 损失加和与最优策略$\sum_{(s,a)\in\mathcal{D}_{i+1}}\mathcal{L}(\pi(s), a)$ 统计策略在所有教案上的总错误,$\arg\min$ 选择总错误最小的策略作为 $\hat{\pi}_{i+1}$。
    π^i+1=arg⁡min⁡π∈Π∑(s,a)∈Di+1L(π(s),a)\hat{\pi}_{i+1} = \arg\min_{\pi\in\Pi} \sum_{(s,a)\in\mathcal{D}_{i+1}} \mathcal{L}(\pi(s), a)

专家策略设计

DAgger 里的“专家”不一定是真人。你可以请真人安全员坐在副驾,也可以让一套精心设计的规则控制器充当教练,还可以用 MPC 这类基于模型的规划器来计算每个状态下的最优动作。就像驾校教练可以是真人,也可以是高度自动化的模拟器考官,只要它能在偏离状态上给出足够好的动作,就能用来标注数据。

选择专家时,最重要的现实约束是查询成本。真人标注速度慢、费用高;规则策略响应快,但可能只在特定场景下可靠;MPC 规划器精度高,却可能计算延迟大。如果专家查询很贵,我们通常不会要求它在每一步都回答,而是只在高风险或模型置信度低的时刻请它介入。DAgger 的迭代预算也因此要仔细设计:每一轮问多少次、问哪些状态,都会影响整个项目的成本。

选好教练、算清成本后,模型终于可以进入实战。但实战不是终点,而是另一轮“在线学习”的起点。

Ctotal=∑i=1N∑t=1Tic(st)C_{\text{total}} = \sum_{i=1}^{N}\sum_{t=1}^{T_i} c(s_t)
总成本等于每一轮、每一步询问专家的代价之和。教练价格越贵,我们越要精打细算,把有限的提问用在最让它头疼的路口。
  1. 单次查询代价$c(s_t)$ 表示在第 $i$ 轮第 $t$ 步访问状态 $s_t$ 时,请专家给出动作所付出的成本。
    c(st)=单次询问专家所需资源c(s_t) = \text{单次询问专家所需资源}
  2. 单轮累计代价$\sum_{t=1}^{T_i} c(s_t)$ 把第 $i$ 轮轨迹中所有询问成本加在一起,得到这一轮的总开销。
    ∑t=1Tic(st)\sum_{t=1}^{T_i} c(s_t)
  3. 多轮总代价$\sum_{i=1}^{N}$ 把全部训练轮次的成本汇总,得到整个 DAgger 项目的总查询代价。
    ∑i=1N∑t=1Tic(st)\sum_{i=1}^{N}\sum_{t=1}^{T_i} c(s_t)

部署与评估

从训练场走向真实道路,不能直接一把梭。稳妥的做法是先在仿真环境里预部署,让当前策略在大量模拟路况中跑一遍,观察它会在哪些地方跑偏。仿真通过后,再进入真实场景小规模试点,同时让专家或安全员随时准备接管。这时候我们最关心的指标,是专家接管率:策略每走一步,是能独立完成,还是需要人介入?

专家接管率越低,说明策略越接近“老司机”。如果接管率在某类场景中突然升高,说明模型仍然存在分布盲区,此时最好的办法不是硬调参数,而是继续运行 DAgger:把这些新发现的偏离状态收集起来,请专家标注,再聚合进数据集重训。部署与训练不是两个割裂的阶段,而是一条持续迭代的闭环。

把“教练随车纠错”的方法贯穿始终,从初始演示、在线询问、数据聚合,到部署监控、安全降级、迭代补课,DAgger 真正解决的是“自己跑偏后没人教”的困境。

rtakeover=ntakeovernstepr_{\text{takeover}}=\frac{n_{\text{takeover}}}{n_{\text{step}}}
接管率就像一个“独立驾驶得分”:总步数越多、需要教练接管的次数越少,说明策略学得越稳。
  1. 接管次数$n_{\text{takeover}}$ 表示在部署过程中,系统判断需要专家介入并切换控制的总次数。
    ntakeover=专家接管的决策步数n_{\text{takeover}} = \text{专家接管的决策步数}
  2. 总决策步数$n_{\text{step}}$ 表示系统在这一段部署周期内做出控制决策的总步数。
    nstep=全部决策步数n_{\text{step}} = \text{全部决策步数}
  3. 接管率$r_{\text{takeover}}$ 是两者的比值,数值越小说明策略自主性越高,也说明 DAgger 的持续迭代正在发挥作用。
    rtakeover=ntakeovernstepr_{\text{takeover}}=\frac{n_{\text{takeover}}}{n_{\text{step}}}

AI 应用场景

自动驾驶变道策略训练

阶段:数据收集、模型训练、在线部署

解决的问题:传统行为克隆依赖人工录制变道视频,但模型自己执行时,变道中出现的车身姿态和周围车流分布会偏离演示数据,导致变道失败甚至危险。DAgger 让搭载安全员的测试车执行当前策略,在偏离状态立即由安全员接管并给出正确转向,随后聚合进训练集。

具体案例:一家自动驾驶公司用 DAgger 训练高速匝道汇入策略:前几轮模型在汇入点频繁跑偏,安全员每次接管都记录下“偏置车身 + 理想转向”。五轮迭代后,模型在匝道场景的接管率从每千步 40 次降到 3 次。

机械臂轴孔装配学习

阶段:专家策略设计、数据聚合

解决的问题:机械臂装配需要非常精细的力控与位姿调整,单纯模仿示教路径无法应对零件公差差异。DAgger 可以采用 MPC 作为“教练”,在机械臂当前策略探索到的接触状态上计算理想装配动作,把离线规划器变成实时标注器,避免真人反复示教。

具体案例:在柔性零件插入任务中,工程师用基于力传感器的 MPC 作为专家,运行 DAgger 迭代十轮。机械臂在接触状态下的成功率从 62% 提升到 94%,并且只新增了约 2000 条标注样本。

服务机器人导航策略持续优化

阶段:部署监控、安全降级、再训练

解决的问题:机器人部署到商场后,会遇到训练时没有的临时围栏、人群拥堵等状态。通过监控专家接管率,系统判断哪些新状态频繁触发降级,再触发一轮 DAgger 在线聚合,由远程操作员标注这些罕见场景,让导航策略越用越稳。

具体案例:酒店送物机器人在夜间遇到走廊临时充电线,避障策略反复卡死。远程操作员多次接管后,系统把“绕线状态 + 通过动作”聚合进数据集,三天后同类场景不再触发人工接管。

Python 演示

python56 行
import random  def expert_action(x):    # 专家策略: 让状态回到原点    return -x  def make_expert_data(rng, n=50):    data = []    for _ in range(n):        x = rng.uniform(-1.0, 1.0)        data.append((x, expert_action(x)))    return data  def make_policy(dataset):    def policy(x):        return min(dataset, key=lambda p: abs(p[0] - x))[1]    return policy  def rollout(policy, x0=6.0, steps=12, noise=0.05, rng=None):    if rng is None:        rng = random.Random(0)    x = x0    traj = []    for _ in range(steps):        a = policy(x)        traj.append((x, expert_action(x)))        x = x + a + rng.gauss(0, noise)    return traj  def main():    rng = random.Random(42)    bc_data = make_expert_data(rng)    bc_policy = make_policy(bc_data)    bc_traj = rollout(bc_policy, x0=6.0, steps=12, rng=rng)    print("BC max deviation:", round(max(abs(s) for s, _ in bc_traj), 3))    print("BC final state:", round(bc_traj[-1][0], 3))     dag_data = bc_data[:]    for i in range(4):        policy = make_policy(dag_data)        traj = rollout(policy, x0=6.0, steps=12, rng=rng)        dag_data.extend(traj)        max_dev = max(abs(s) for s, _ in traj)        print("DAgger round", i + 1,              "max dev:", round(max_dev, 3),              "dataset size:", len(dag_data))    print("DAgger final state:", round(traj[-1][0], 3))  if __name__ == "__main__":    main()
目的:用最近邻策略模拟行为克隆和 DAgger。行为克隆只在 $[-1,1]$ 区间见过专家演示,遇到 $x=6$ 时会因为支持集外漂移而逐步逼近;DAgger 不断把当前策略轨迹上的状态与专家动作聚合进数据集,几轮后就能精准应对原始盲区。
  1. data.append((x, expert_action(x)))生成初始专家演示样本,相当于教练先开一段路并记录操作。
  2. return min(dataset, key=lambda p: abs(p[0] - x))[1]用最近邻策略预测动作,状态离哪个训练样本最近,就采用那个样本对应的专家动作。
  3. traj.append((x, expert_action(x)))在 rollout 中为当前策略遇到的状态询问专家,相当于副驾教练现场给出纠正操作。
  4. x = x + a + rng.gauss(0, noise)让状态按当前策略的动作演化,完成一次闭环控制。
  5. dag_data = bc_data[:]DAgger 保留初始专家演示,不从零开始,也避免忘记旧知识。
  6. dag_data.extend(traj)把当前轨迹上的新标注聚合进历史数据集,这是 DAgger 的核心操作。

常见误区

误区只要把专家演示数据多复制几份、多训练几个 epoch,模型就能学会复杂任务。

正解行为克隆的本质是“从静态分布中做监督学习”,它默认训练状态和部署状态同分布。但模型一旦实际执行,自己的错误会改变未来状态,导致它遇到从没见过的输入。反复看同样的视频,并不会让学员学会处理“自己跑偏后出现的陌生路口”。

为何常见:传统监督学习中,测试集和训练集通常来自同一分布,这个惯性思维让初学者低估了闭环控制中的状态分布漂移。

误区DAgger 就是把所有轮次的专家数据放在一起训练,重点是“数据量越大越好”。

正解DAgger 的关键不在于“拼数据”,而在于“数据来自哪里”。每一轮新增样本必须来自当前策略自己 rollout 遇到的状态,并让专家给这些状态补充动作。如果只是随机堆积各种来源的数据,分布盲区仍然存在。好比教练必须坐在你车里记下你歪到的地方,而不是把驾校所有学员的错题本混在一起给你看。

为何常见:看到“聚合”这个词,容易联想到简单的数据合并,忽略了“在线”和“当前策略诱导分布”这两个更重要的限定。

误区DAgger 必须依赖真人操作员全程坐在旁边,否则没法获得标注。

正解专家策略可以是一个真实的人类,也可以是一套规则控制器、一个 MPC 规划器,甚至是一个验证过的旧策略。关键是它能在当前策略访问到的偏离状态上给出高质量动作。选哪种专家,取决于准确性、时延、成本和安全性之间的权衡。

为何常见:模仿学习常让人联想到“人演示给机器人看”,所以忽略了自动化专家策略在工业场景中的广泛使用。

误区DAgger 训练完成后,部署阶段不再需要专家参与,也不需要更新数据。

正解现实部署仍会遇到新的分布变化,比如天气、路况、环境布置改变。正确做法是把部署看作在线监控阶段,持续统计专家接管率,发现问题后继续收集状态、聚合标注、增量重训。训练与部署是不断循环的闭环,而不是一次性动作。

为何常见:离线训练和在线部署被人为分开,让人误以为策略一旦训练好就是静态的;但具身智能系统的分布很少一成不变。

面试题

Q1. 下列哪项最符合 DAgger 的核心含义?

单选题 · easy

  • A.数据集聚合← 正确答案
  • B.深度注意力
  • C.动态动作引导
  • D.数据同化生成

答案:A。DAgger 是 Dataset Aggregation 的缩写,核心是在线收集当前策略遇到的分布外状态,让专家标注后聚合进数据集并重训。它既不是注意力机制,也不是强化学习中的动态动作引导,更不是数据同化。

Q2. 行为克隆的核心做法是?

单选题 · easy

  • A.从专家演示中做监督学习← 正确答案
  • B.与环境交互试错获取奖励
  • C.仅优化机器人硬件参数
  • D.手工编写全部控制规则

答案:A。行为克隆把专家演示中的状态当输入、动作当标签,用监督学习拟合策略。与环境交互试错是强化学习,手工编写规则是传统控制方法,它们都不是行为克隆的特点。

Q3. 行为克隆在长时间任务中失效的主要原因是?

单选题 · mid

  • A.状态分布随时间漂移且误差累积← 正确答案
  • B.专家演示数据太多难存储
  • C.神经网络模型训练速度慢
  • D.专家动作本身不够精确

答案:A。行为克隆的策略会改变自己访问到的状态分布,一旦产生小偏差,后续状态与训练分布越来越远,误差不断累积。数据存储、训练速度和专家动作精度都不是这类失效的核心原因。

Q4. 在 DAgger 迭代中,新增训练数据来自?

单选题 · mid

  • A.当前策略遇到的状态加专家动作← 正确答案
  • B.初始专家演示的随机重采样
  • C.仅仿真环境的随机状态
  • D.另一个预训练策略输出

答案:A。DAgger 的关键是让当前策略 rollout,然后把轨迹上访问到的状态交给专家标注。随机重采样、纯随机状态或其他策略输出的数据,都无法直接暴露当前策略自己的分布盲区。

Q5. 专家策略设计时需要考虑的首要现实约束是?

单选题 · mid

  • A.查询成本和安全问题← 正确答案
  • B.专家策略可视化方案
  • C.数据集存储格式
  • D.演示视频录制帧率

答案:A。专家策略可能昂贵、缓慢或不稳定,查询成本和运行安全决定了 DAgger 迭代的可行性与边界。可视化方案、存储格式和视频帧率都不是最核心的现实约束。

Q6. 下列哪些是 DAgger 解决分布漂移的关键步骤?

多选题 · mid

  • A.用当前策略收集轨迹← 正确答案
  • B.询问专家标注遇到状态← 正确答案
  • C.把新数据聚合进历史集← 正确答案
  • D.丢弃所有历史专家数据

答案:ABC。DAgger 用当前策略收集轨迹,才能暴露自己的盲区;专家标注这些状态,才能给出正确答案;新数据聚合进历史集,才能保留旧知识。丢弃历史数据会导致灾难性遗忘,不是正确做法。

Q7. 关于 DAgger 的数据集,正确说法是?

单选题 · hard

  • A.包含初始演示与历轮新标注,规模单调增长← 正确答案
  • B.每轮训练前都会清空重来
  • C.只保留最近一轮的轨迹
  • D.只包含专家初始演示状态

答案:A。DAgger 在初始演示集基础上不断聚合新标注,数据集通常单调增长。清空重来、只保留最新数据或只用初始演示,都会让模型遗忘历史经验或无法覆盖当前策略诱导出的新分布。

Q8. 相比行为克隆,DAgger 的优势包括?

多选题 · hard

  • A.在自身诱导状态分布上学习← 正确答案
  • B.缓解误差累积导致轨迹跑偏← 正确答案
  • C.无需再设计损失函数
  • D.让新标注落在策略薄弱区域← 正确答案

答案:ABD。DAgger 让专家在当前策略自己遇到的状态上标注,相当于针对薄弱区域补课,从而缓解状态漂移与误差累积。但它仍然需要设计损失函数来训练策略,所以选项 C 错误。

Q9. 如果 DAgger 的专家策略偶尔给出错误标注,合理的处理方式是?

单选题 · extreme

  • A.用鲁棒聚合和仿真校验过滤错误← 正确答案
  • B.直接在错误标注上继续训练
  • C.忽略所有新数据只靠初始演示
  • D.用随机动作覆盖专家输出

答案:A。现实中专家并非完美,错误标注会污染聚合数据集。更稳妥的做法是设计鲁棒损失、异常样本筛选,并用仿真环境校验聚合后的策略。直接训练错误标签会让模型学坏,完全忽略新数据则失去在线纠错价值,随机覆盖更是无效。

Q10. 部署后持续监控 DAgger 策略,最合适的指标是?

单选题 · hard

  • A.专家接管率和离线误差← 正确答案
  • B.单次推理耗时毫秒数
  • C.模型权重文件体积
  • D.训练数据总条数

答案:A。专家接管率反映真实部署中策略需要人工介入的比例,离线误差则能在无真人场景下快速衡量策略质量。推理耗时、模型体积和训练数据条数都只反映工程资源,不能直接体现策略可靠性。