第11章

第11章:模仿学习与行为克隆

实现驾驶行为克隆(BC/DAgger/ACT),掌握动作分块、自回归策略与驾驶风格迁移。

行为克隆DAggerACT动作分块专家混合(MoE)

BC, ACT, DAgger — 从专家数据学习驾驶策略


第一部分: Behavior Cloning

1.1 什么是行为克隆?

给定专家驾驶数据 D = {(o_i, a_i)}, 学习 policy pi_theta(a|o):


loss = MSE(pi_theta(o_i), a_i)  # 直接回归

1.2 协变量偏移 (Covariate Shift)

问题: 训练时模型只见过专家分布的状态; 测试时一旦偏离, 误差迅速累积:


train: o_i ~ expert_dist  →  a_i ~ expert
test:  o_t ~ pi_dist      →  a_t 可能越来越偏离

1.3 自动驾驶动作空间


action = (steer, throttle, brake, gear)
  steer:  [-1.0, 1.0]  (左满舵 → 右满舵)
  throttle: [0.0, 1.0]
  brake: [0.0, 1.0]
  gear: {0, 1}  (前进/倒车)

第二部分: ACT Action Chunking

2.1 为什么需要 Action Chunking?

单步预测的问题:

- 高频推理 (每帧), 计算量大

- 动作不连贯 (抖动)

- 累积误差使轨迹偏离

2.2 ACT 架构


obs → Encoder → obs_feat
                  ↓
          z ~ N(0, I)  →  Decoder → action_chunk (a_t, ..., a_{t+K-1})

训练时: z 从 CVAE encoder 采样 (有真值动作)

推理时: z 从 N(0, I) 采样

2.3 损失函数


L = L_recon(action_chunk_pred, action_chunk_gt) + beta * KL(N(mu, sigma) || N(0, I))

KL 项鼓励潜在空间接近标准正态分布。


第三部分: DAgger

3.1 核心思想

BC 的问题是训练数据只包含专家状态, DAgger 通过迭代纠正这一点。

3.2 算法流程


Round 0: 训练 pi_0 on expert data D_0
Round r:
  1. 运行 pi_r, 收集 o (可能偏离)
  2. 专家标签 a_expert for each o
  3. D_r = D_{r-1} ∪ {(o, a_expert)}
  4. 训练 pi_{r+1} on D_r

3.3 数据混合


D_r = beta * D_new + (1-beta) * D_old

beta = 0.5^r, 随轮数指数衰减。


第四部分: 自动驾驶应用

4.1 数据采集

- 人类驾驶数据: 摄像头 + 方向盘/油门/刹车记录

- 典型场景: 城市道路、高速公路、停车场

4.2 局限

- 无法超越专家水平

- 长尾场景泛化差

- 需要大量高质量数据

- 不能探索更好的策略

4.3 后续改进

- 第12章: Diffusion Policy (生成式动作)

- 第13章: RL Planning (强化学到更好的策略)


总结

1. ✅ BC: 直接从专家数据回归动作

2. ✅ ACT: CVAE + 动作块预测 (减少误差累积)

3. ✅ DAgger: 在线数据聚合纠正分布偏移

4. ✅ Action Chunking: K 步一次推理, 动作平滑


下一章: Diffusion Policy — 用扩散模型生成驾驶动作