模仿学习的局限性

在自动驾驶的策略学习中,模仿学习(Imitation Learning)曾一度被视为“最自然的起点”。毕竟,人类司机的驾驶行为本身就是最宝贵的经验财富。但随着技术的深入,我们逐渐发现:只学“师傅怎么开”,远远不够。

🧭 行为克隆:从人类数据中“照猫画虎”

行为克隆(Behavior Cloning)是模仿学习中最基础的一种方式。它的核心思想非常简单:

给模型一堆人类驾驶数据(状态 → 动作),让它学会在相同状态下做出相同动作。

比如:

  • 状态:前方红灯,车速 40km/h,距离停止线 30 米;
  • 动作:轻踩刹车,减速至 0。

模型通过监督学习拟合这个“状态-动作”映射关系,就像学生在背标准答案。

⚠️ 问题一:分布偏移(Covariate Shift)

现实中,模型一旦开始“自己开车”,就会遇到一个严重的问题:它看到的状态,和训练时的数据分布不一样。

举个例子:

  • 人类司机通常不会偏离车道,所以训练数据中“偏离车道”的状态很少;
  • 但模型一旦轻微偏离车道,它就进入了“没见过的状态”;
  • 然后它可能进一步偏离,错误会像雪球一样越滚越大。

这就是所谓的分布偏移:训练数据和实际运行时的数据分布不一致,导致模型在“未知状态”下表现不稳定。

🔁 问题二:错误无法自我纠正

更严重的是,行为克隆模型没有“后悔机制”。它不会意识到自己做错了,也不会主动修正。

比如:

  • 模型误判绿灯为红灯,停在路口;
  • 它不知道这是错误,也不会尝试重新判断;
  • 结果就是“卡死”在原地,或者做出更糟糕的决策。

模仿学习就像是让模型“看录像学开车”。它能快速掌握基本技能,但一旦进入真实世界,面对复杂多变的路况,它就容易“懵圈”。

我们需要一种方法,让模型不仅能模仿,还能在犯错时被及时纠正、从错误中学习。这正是 DAgger 登场的时刻。

DAgger 原理详解

DAgger,全称 Dataset Aggregation,是一种解决模仿学习中“分布偏移”问题的策略学习方法。它的核心思想非常直白:让模型自己“上路”,然后请专家在它犯错时及时纠正,并把这些纠正过的数据加入训练集,反复迭代,直到模型足够稳健。

🔁 核心思想:从“只学师傅”到“边做边学”

传统模仿学习只依赖人类驾驶数据,模型从未真正“自己开车”。而 DAgger 的关键在于:

让模型自己做决策,暴露它真实运行时会遇到的状态分布,然后请专家来“补课”。

这个过程可以类比为:

  • 第一次考试,学生只靠背书,结果错了一堆;
  • 老师把错题讲一遍,学生再练;
  • 下一次考试,学生就不会再犯同样的错。

🛠️ 执行流程:训练 - 执行 - 纠正 - 再训练

DAgger 的标准流程如下:

  1. 初始训练:用人类专家数据训练一个初始策略(π₀);
  2. 模型执行:让 π₀ 在仿真环境中“自己开车”,收集它实际遇到的状态;
  3. 专家纠正:在这些状态下,请专家提供正确动作(即 π* 的行为);
  4. 数据聚合:将这些新数据(状态,专家动作)加入训练集;
  5. 策略更新:用聚合后的数据重新训练策略 π₁;
  6. 重复步骤 2-5,直到模型性能收敛。

这个过程形成了一个闭环学习系统,模型不断暴露自己的“盲区”,并通过专家指导逐步修正。

📊 与传统模仿学习的对比

特性 行为克隆(Behavior Cloning) DAgger
数据来源 仅来自专家演示 来自专家 + 模型执行过程
状态分布 训练时 ≠ 测试时 训练时 ≈ 测试时(逐步对齐)
错误纠正能力 有(专家实时纠正)
鲁棒性 差,容易“雪崩” 强,能自我修正

DAgger 的本质,是让模型主动暴露自己的弱点,而不是被动接受专家演示。它不再“只学别人怎么做”,而是“自己做错了再学”,这使得它在面对复杂、长尾、非典型场景时更具鲁棒性。

 DAgger 在自动驾驶中的实际应用

🧪 仿真环境:模型“试着开”,专家“盯着看”

在真实道路上让模型“试错”显然不现实,因此主流自动驾驶公司(如 Waymo、Cruise、Aurora 等)通常会在高保真仿真环境中部署 DAgger。

流程如下:

  1. 模型在仿真中执行策略,模拟真实驾驶;
  2. 系统记录模型在每个状态下的决策;
  3. 专家(人类或专家策略模型)对这些状态提供“正确动作”作为参考;
  4. 将这些状态-动作对加入训练集,进行下一轮训练。

这种方式可以在不影响安全的前提下,让模型暴露大量“真实运行时的错误行为”。

🧑‍🏫 专家策略的来源:人类 or 模型

DAgger 中的“专家”可以有多种形式:

  • 人类专家:直接由工程师或专业司机在仿真中标注正确操作;
  • 规则引擎:使用传统规则系统作为“参考标准”;
  • 强化学习策略:用性能更强的 RL 策略作为教师模型;
  • 混合专家系统:根据场景动态选择专家来源。

这种灵活性使得 DAgger 能适配不同阶段、不同复杂度的训练任务。

🧩 示例:Waymo 如何用 DAgger 优化策略模型

Waymo 在其端到端策略学习研究中,曾使用 DAgger 变体来训练其驾驶策略网络。具体做法包括:

  • 在仿真中部署初始策略;
  • 记录模型在复杂交叉口、非结构化道路等场景下的行为;
  • 使用高性能规划模块作为“专家”提供纠正;
  • 将这些数据加入训练集,迭代优化策略网络。

这种方式显著提升了模型在“长尾场景”中的表现能力。

🔗 与强化学习的结合:Hybrid DAgger

DAgger 也常与强化学习(RL)结合使用,形成所谓的“Hybrid Imitation + RL”框架:

  • 初期用 DAgger 快速收敛到一个可用策略;
  • 后期用 RL 微调策略,优化长期回报;
  • 结合两者的优势:DAgger 快速稳定,RL 更具探索性。

这种组合在端到端自动驾驶策略学习中越来越常见。

工程挑战与优化方向

DAgger 在理论上非常优雅、在仿真中效果显著,但在实际工程落地过程中,仍面临不少挑战。

💰 挑战一:专家成本高,标注效率低

DAgger 的核心在于“专家纠正”,但这也意味着:

  • 每次模型执行后,都需要专家重新标注大量状态;
  • 如果专家是人类司机,成本极高;
  • 如果是规则系统或 RL 策略,可能存在精度或泛化问题。

优化方向:

  • 使用“半自动专家系统”,结合规则引擎和人类复核;
  • 引入“主动学习”机制,仅在模型不确定或高风险状态下请求专家;
  • 利用历史数据构建“专家缓存”,减少重复标注。

📉 挑战二:数据分布不均,训练不稳定

DAgger 会不断聚合新数据,但这些数据往往集中在模型容易出错的“边缘场景”,导致训练集分布偏移,模型可能过拟合这些“异常状态”。

优化方向:

  • 设计采样策略,平衡“专家数据”和“模型数据”的比例;
  • 引入“经验回放池”,控制不同类型数据的采样频率;
  • 使用“重要性采样”或“加权损失函数”缓解分布不均问题。

🧪 挑战三:仿真与现实存在差距(Sim2Real Gap)

DAgger 多数在仿真中执行,但仿真环境再真实,也难以完全还原现实世界的复杂性。这会导致模型在仿真中表现良好,但上线后仍可能出错。

优化方向:

  • 提高仿真环境的保真度(如 Waymo 的“Replay Simulation”);
  • 引入“Domain Randomization”技术,增强模型泛化能力;
  • 在安全可控的封闭道路上进行小规模真实部署,收集真实 DAgger 数据。

🧠 挑战四:策略更新频繁,部署成本高

DAgger 是一个持续迭代的过程,每轮都需要重新训练并部署新策略,这在大规模系统中会带来工程复杂度和部署风险。

优化方向:

  • 使用“在线蒸馏”技术,将频繁更新的策略压缩为稳定版本;
  • 构建“策略版本管理系统”,支持灰度发布与回滚;
  • 结合强化学习,减少 DAgger 迭代次数。

🔬 挑战五:DAgger 本身的变体设计

原始 DAgger 算法虽然有效,但在实际应用中往往需要根据任务特性进行调整。例如:

  • SafeDAgger:引入安全策略,避免模型执行高风险动作;
  • MetaDAgger:结合元学习,提升在新场景下的适应能力;
  • AggreVaTe / LOLS:将 DAgger 推广到结构化决策和非确定性任务中。

这些变体为 DAgger 在更复杂的自动驾驶任务中提供了更强的适应性和灵活性。

CARLA 中的“左转失败”问题

在使用 CARLA 训练端到端策略模型时,研究者常遇到一个典型问题:模型在左转时容易失败,表现为:

  • 提前转向,压线;
  • 误判对向来车,强行左转;
  • 或者犹豫不决,卡在路口。

这些问题在训练数据中很少出现,因为人类司机通常能顺利完成左转,导致模型在训练时几乎没见过“左转失败”的状态

📍阶段一:初始策略训练(π₀)
  • 数据来源:人类驾驶演示,覆盖城市道路、红绿灯、简单交叉口;
  • 训练结果:模型在直行和右转表现良好,但左转成功率 < 50%。
📍阶段二:DAgger 第一次迭代
  • 执行策略:π₀ 在仿真中执行左转任务;
  • 问题观察
    • 提前转向,压线;
    • 对向车道判断不准确;
  • 专家介入:人工标注 120 个关键状态下的正确操作;
  • 训练数据扩展:原始数据 + 新增专家纠正数据;
  • 策略更新:π₁
📍阶段三:DAgger 第二次迭代
  • 执行策略:π₁ 在新场景中测试;
  • 改进表现:左转成功率提升至 75%,但在夜间/雨天表现不稳定;
  • 优化措施
    • 引入天气扰动(domain randomization);
    • 增加仿真中“低能见度”场景;
    • 专家再次标注 80 个状态;
  • 策略更新:π₂
📍阶段四:策略稳定 + 蒸馏部署
  • π₂ 表现:左转成功率 > 90%,在多种天气和交通密度下均表现稳定;
  • 部署优化
    • 使用策略蒸馏压缩模型;
    • 部署至低功耗推理平台;
    • 进行封闭道路实车验证。
✅ 总结

通过 2 轮 DAgger 迭代,模型从“左转频繁失败”成长为“稳健应对复杂交叉口”,整个过程耗时约 3 天,专家标注约 200 条状态,仿真执行约 10 小时。

随着自动驾驶系统越来越多地采用端到端策略学习、世界模型、强化学习等方法,DAgger 的角色也在演化:

  • 在 世界模型 中,它可以作为“虚拟世界中的纠错机制”;
  • 在 RLHF 框架 中,它可以高效采集“人类反馈数据”;
  • 在 多模态大模型 驱动的系统中,它可以帮助策略模块快速适应新场景。

未来的自动驾驶系统,可能不再依赖单一范式,而是融合模仿、强化、反馈、规划等多种机制。而 DAgger,正是连接这些机制的关键一环。

Logo

分享最新的 NVIDIA AI Software 资源以及活动/会议信息,精选收录AI相关技术内容,欢迎大家加入社区并参与讨论。

更多推荐