从零实现 DDPM/DDIM,构建 Diffusion Policy 用于驾驶动作生成,掌握条件扩散与 Classifier-Free Guidance。
扩散模型通过两个过程学习数据分布:
前向 (加噪): x_0 → x_1 → ... → x_T (逐步加噪声)
反向 (去噪): x_T → x_{T-1} → ... → x_0 (逐步去噪声)
训练: 学习反向过程如何去噪
推理: 从随机噪声 x_T ~ N(0,I) 开始, 逐步去噪得到 x_0
前向过程:
q(x_t | x_{t-1}) = N(rt(1-b_t) * x_{t-1}, b_t * I)
x_t = sqrt(a_bar_t) * x_0 + sqrt(1-a_bar_t) * eps
反向过程:
p(x_{t-1} | x_t) = N(mu_theta(x_t, t), sigma_t^2 * I)
mu_theta = 1/sqrt(a_t) * (x_t - (1-a_t)/sqrt(1-a_bar_t) * eps_theta)
训练目标: 最小化 ||eps_theta(x_t, t) - eps||^2
无条件扩散生成随机样本, 条件扩散生成特定类别样本。CFG 允许在两者之间插值:
eps_cfg = eps_uncond + w * (eps_cond - eps_uncond)
训练时以概率 p_drop 随机丢弃条件标签:
- p_drop = 0: 纯条件生成
- p_drop = 0.1: CFG 训练 (推理时 w > 1)
| w | 行为 |
|---|---|
| w = 0 | 无条件生成 (随机) |
| w = 1 | 正常条件生成 |
| w = 1.5-2.0 | 增强条件 (更"自信") |
| w >> 2 | 过度强调条件 (可能质量下降) |
观测 → Encoder → obs_feat (条件)
↓
x_T ~ N(0,I) → 去噪器(obs_feat, t) → x_{T-1} → ... → x_0 (动作序列)
| 方面 | BC | Diffusion Policy |
|---|---|---|
| 输出 | 单点预测 | 完整分布 |
| 多模态 | 困难 | 天然支持 |
| 动作平滑 | 有抖动 | 逐步去噪, 平滑 |
| 可控性 | 弱 | CFG 控制风格 |
摄像头 → 特征提取 → obs_feat
↓
随机噪声 → N 步去噪 → 动作序列 (steer, throttle, brake)
- DDIM 10 步采样实现实时推理 (~50ms)
- CFG 控制谨慎/激进风格
- 多模态采样 + 安全性过滤
1. ✅ DDPM: 前向加噪 + 反向去噪
2. ✅ 噪声调度: cosine/linear/sigmoid
3. ✅ CFG: 条件-无条件插值控制生成
4. ✅ Diffusion Policy: 扩散模型生成动作序列
5. ✅ DDIM: 10 步加速采样
下一章: RL Planning — 强化学习驾驶策略优化