1. 课程导入

欢迎进入《DAgger交互式模仿学习驾驶工程》课程。本课程面向已经具备一定深度学习与自动驾驶基础的学习者,目标是把“模仿学习”从理论概念推进到可训练、可评测、可部署的工程闭环。我们将以DAgger(Dataset Aggregation,数据集聚合)为主线,结合驾驶仿真环境、专家策略、神经网络控制器与在线数据采集流程,构建一套完整的交互式模仿学习驾驶系统。

本课程的核心问题:当模仿学习策略在训练分布之外出现偏差时,如何通过交互式数据聚合,让策略逐步逼近专家行为,并在闭环驾驶场景中保持稳定?

一、学习目标:从“会训模型”到“会做系统”

本课程不是单纯讲解DAgger算法公式,而是围绕驾驶工程中的真实链路展开。完成课程后,你应当能够:

  • 理解行为克隆(Behavior Cloning, BC)与DAgger的本质区别,尤其是分布偏移(distribution shift)带来的闭环误差累积问题。
  • 掌握DAgger的交互式数据聚合机制:专家标注、策略 rollout、数据集合并、模型再训练。
  • 能够搭建驾驶仿真环境,定义专家策略、状态空间、动作空间与奖励/评测指标。
  • 能够实现一个可训练的驾驶策略网络,并完成在线迭代训练与闭环评测。
  • 能够分析训练日志、诊断过拟合、分布偏移、动作抖动与恢复失败等典型问题。
  • 能够把DAgger流程工程化:数据版本管理、训练配置、评测基准与可视化复盘。

二、核心概念:DAgger为什么有效

行为克隆直接使用专家轨迹训练策略,但策略在闭环中一旦偏离专家轨迹,就会进入训练时从未见过的状态,导致错误累积。DAgger的核心思想是:让当前策略去驾驶,遇到不确定或偏离的状态时,由专家给出正确动作,再把这些新状态-动作对加入训练集。这样,训练分布会逐渐覆盖策略实际会访问的状态分布。

在驾驶工程中,这相当于“边开边学”:策略先上路,专家在副驾随时纠正,纠正数据不断回流到训练集。随着迭代进行,策略在自身诱导的状态分布上也能获得专家监督,闭环稳定性显著提升。

DAgger 交互式模仿学习驾驶工程整体框架 策略 rollout → 专家纠正 → 数据聚合 → 策略再训练 → 闭环评测 驾驶仿真环境 CARLA / 自研仿真 状态 s:图像+车速+位姿 当前策略 πθ CNN / ResNet 驾驶网络 输出动作 a:转向+油门 专家策略 π* 规则控制器 / 人类驾驶员 提供纠正动作 a* 聚合数据集 D D ← D ∪ {(s, a*)} 版本化 / 采样 / 回放 闭环评测 碰撞率 / 偏离率 / 完成率 平均干预次数 训练与优化 监督学习 / 损失函数 L = ||πθ(s) − a*||² 状态 s 请求纠正 a* 聚合 评测 反馈 再训练 迭代循环:每轮采集新状态,专家标注后合并训练 工程闭环:仿真环境 → 策略 rollout → 专家纠正 → 数据聚合 → 模型训练 → 闭环评测 → 回到仿真环境

三、整体框架:五个工程模块

本课程将DAgger驾驶工程拆解为五个模块,每个模块都有明确的输入、输出与验收标准。

模块 核心任务 关键输出 验收标准
仿真环境 构建可交互驾驶场景,提供状态与动作接口 环境API、场景配置、传感器数据 可稳定运行1000步以上,状态可复现
专家策略 实现规则或人类专家,输出纠正动作 专家控制器、标注接口 专家轨迹无碰撞,动作平滑
策略网络 训练驾驶策略,拟合状态到动作的映射 模型权重、训练日志 训练损失收敛,验证集误差下降
数据聚合 在线采集策略状态,合并专家标注 版本化数据集、采样策略 数据分布覆盖策略访问状态
评测复盘 闭环评测、指标统计、失败案例分析 评测报告、可视化回放 碰撞率、偏离率、干预次数达标

四、实战路线图:从零到闭环

课程将按照“先跑通,再优化,再工程化”的节奏推进。建议你按以下路线学习:

  1. 环境搭建:安装仿真依赖,跑通环境随机策略,观察状态与动作维度。
  2. 行为克隆基线:用专家数据训练BC模型,记录闭环评测结果,观察分布偏移现象。
  3. DAgger迭代:实现策略rollout、专家纠正、数据聚合与再训练循环。
  4. 训练调优:调整学习率、批大小、数据采样比例、损失函数与网络结构。
  5. 闭环评测:设计多场景测试集,统计碰撞率、偏离率、平均干预次数与完成率。
  6. 工程化复盘:加入数据版本管理、训练配置管理、日志分析与可视化回放。

学习建议:每节课都动手运行代码,不要只看不练。DAgger的很多问题只有在闭环rollout中才会暴露,例如动作抖动、恢复失败、专家标注延迟等。

五、常见误区与复盘要点

初学者常把DAgger简单理解为“多收集一点数据”,但实际工程中有几个关键误区:

  • 误区一:只增加专家数据量。如果新数据不是策略实际访问的状态,分布偏移依然存在。DAgger的关键是“策略诱导状态 + 专家标注”。
  • 误区二:忽略专家噪声。人类专家或规则专家都可能存在延迟、抖动或次优动作,需要在训练中做平滑或置信度过滤。
  • 误区三:只看训练损失。训练损失低不代表闭环驾驶好,必须用闭环指标评测。
  • 误区四:数据不做版本管理。DAgger是多轮迭代,数据版本混乱会导致模型无法复现。

排障提示:如果策略在闭环中频繁偏离,优先检查三件事:训练数据是否覆盖偏离状态、专家纠正是否及时、动作输出是否做了限幅与平滑。

六、关键配置示例

下面是一个DAgger训练循环的伪代码配置,后续章节会逐步展开实现细节:

# DAgger 训练循环伪代码
dataset = load_expert_demo()          # 初始专家数据
policy = PolicyNetwork()              # 驾驶策略网络

for iteration in range(N):
    policy.train(dataset)             # 在当前数据集上训练
    states = rollout(policy, env)     # 策略在仿真环境中驾驶
    actions = expert.label(states)    # 专家对访问状态给出纠正动作
    dataset = dataset.union(states, actions)  # 数据聚合
    metrics = evaluate(policy, env)   # 闭环评测
    log(iteration, metrics)

本课程将围绕这条循环,逐步补齐环境、专家、网络、数据与评测五个模块。你最终得到的不仅是一个DAgger算法实现,更是一套可复用的交互式模仿学习驾驶工程框架。