1. 使用扩散模型的原因:为什么要学习 “恢复” 而非 “创造”?
在自动驾驶的路径规划中,传统算法往往试图让模型直接给出一个完美的答案 —— 一条精确的轨迹。但人类驾驶的本质是多模态且高度非线性的:面对前方的障碍物,向左绕行和向右绕行在概率上可能是等效的。
如果让模型直接预测一个如此复杂的分布,它往往会在多种可能性之间 “取平均”,最终吐出一条撞上障碍物的、平滑却错误的 “折中轨迹”。
DDPM(Denoising Diffusion Probabilistic Models)的核心思想实现了一次降维打击:
与其直接预测那个捉摸不透的复杂分布,不如学习如何一步步从纯粹的混乱(随机噪声)中恢复出有意义的结构。
问: 把原本清晰的专家轨迹变成一团乱码,再费劲变回来,这难道不是多此一举吗?
答: 关键在于 步进式修正” 的难度分级 。在 𝐻 维的状态空间里,直接画出一条完美的曲线极难;但如果我给你一条几乎已经成型的轨迹,让你识别并剔除其中微小的、不符合物理规律的扰动(噪声),这就变成了数值回归问题。通过 𝑇 步微小的去噪,扩散模型将一个复杂的高维生成问题,转化为了一个连续的、可微的梯度下降问题。
2. 为什么扩散模型能让 “生成问题” 转化为 “回归问题”?
在传统的生成模型(如 GAN 或早期的 VAE)中,我们要解决的是一个全局拟合问题:模型必须一次性理解从 “随机噪声” 到 “完美轨迹” 之间极其复杂的非线性映射。这种映射充满了断裂和多模态,数学上极难收敛。
扩散模型通过 “分步采样” 实现了一个巧妙的数学转换:
2.1 局部线性化:将 “大象” 拆成 “原子”
在 DDPM 的 𝑇 步链条中,如果 𝑇 足够大(例如 𝑇 =1000 ),那么相邻两个状态 𝑥𝑡 和 𝑥𝑡−1 之间的差异是极其微小的。
- 全局看:从纯噪声到轨迹是复杂的非线性分布生成。
- 局部看:从 𝑥𝑡 恢复 𝑥𝑡−1,由于变化极其微细,这种变换在局部可以被近似看作是加性高斯噪声的去除。
2.2 预测目标的降级
当我们把目标从 “预测轨迹” 转变为 “预测这一步注入的噪声 𝜖 ” 时,根据扩散模型的加噪公式:
𝑥𝑡=√¯𝛼𝑡𝑥0+√1−¯𝛼𝑡𝜖
其中 𝑥0 是专家轨迹,𝜖 是我们注入的随机噪声。神经网络 𝜖𝜃(𝑥𝑡,𝑡) 的任务变成了:已知受损的状态 𝑥𝑡,推测出那个被注入的 𝜖。
问: 为什么说这是 “回归”?
答: 因为 𝜖 是从标准正态分布 𝑁(0,𝐼) 中采样出来的。神经网络不再需要去预测一个具有复杂拓扑结构的 “轨迹分布”,它只需要去预测一个连续的数值向量。
在训练时,我们的损失函数(Loss Function)极其简单:
𝐿=‖𝜖−𝜖𝜃(𝑥𝑡,𝑡)‖2
这就是最典型的 均方误差回归(MSE Regression)。
扩散模型把一个需要 “艺术创作” 的生成难题,拆解成了 1000 个 “找不同” 的回归练习。
- 不再纠结多模态:在每一个微小的去噪步中,模型只需要根据当前的残缺状态,指明一个 “脱离混沌” 的方向。
- 误差容忍度:即使某一步回归得不够精确,后续的 999 步迭代依然有反复修正的机会。
这种将 “分布生成” 向 “数值回归” 的降维处理,正是扩散模型在处理复杂车辆动力学约束时,比直接回归轨迹参数(如多项式系数)要稳健得多的根本原因。
3. 为什么局部微小的、看似随机的去噪动作,能产生具有全局一致性和物理逻辑的轨迹?
3.1 采样阶段的特征分级
- 初期( 𝑡 →𝑇 ):在噪声迷雾中捕捉 “多峰概率质心”
采样从纯高斯噪声开始。此时 𝑥𝑇 就像一团漫无目的的 “云团”。由于噪声占绝对主导,微观物理细节(如曲率、瞬时加速度)完全被淹没在方差中。
- 质心定位:对于 PnC 任务(如避障),概率分布 𝑃(𝑥) 天生是多峰(Multi-modal)的。左绕还是右绕?这是两个不同的概率高峰。模型此时通过回归噪声,本质上是在判定:当前这个随机点更靠近哪一个概率 “吸引子”?它确立的是全局语义的质心。
- 中期( 𝑡 →𝑚𝑖𝑑 ):锁定拓扑结构
随着 𝑇 次回归的累积,轨迹的形状开始显现。模型开始处理中频特征,通过反馈循环将轨迹约束在特定的驾驶流形内。
- 后期( 𝑡 →0 ):消除毛刺与物理对齐
此时信噪比极高,原本被掩盖的物理信号浮现。神经网络发挥其精细感知能力,微调每一帧之间的位移增量,确保最终输出的 𝑥0 满足执行器的平滑输入要求。
3.2 为什么预测噪声与预测轨迹等价?
在训练扩散模型时,我们最常用的损失函数是 MSE:
min𝜃𝔼𝑥0,𝜖‖𝜖−𝜖𝜃(𝑥𝑡,𝑡)‖2
这里的 𝜖 是我们亲手注入的噪声。看起来我们在训练一个 “猜噪声” 的模型,但由于 𝑥𝑡 =√¯𝛼𝑡𝑥0 +√1−¯𝛼𝑡𝜖,预测噪声和预测原始信号 𝑥0 在数学上是完全等价的。
如果你想求 𝑥0,只需要对上面的线性方程做简单的移项:
𝑥0=𝑥𝑡−√1−¯𝛼𝑡𝜖√¯𝛼𝑡
在一个确定的时刻 𝑡,¯𝛼𝑡 是已知的常数。
- 如果你知道噪声 𝜖,你就能精准地算出 𝑥0。
- 反之,如果你知道 𝑥0,你也能精准地推导出当初注入的 𝜖。
3.2.1. √𝛼𝑡 到底是什么?
在扩散模型(如 DDPM)的定义中,为了控制加噪的节奏,我们引入了一组随时间变化的超参数:
- 𝛽𝑡 ∈(0,1):每一时刻注入的噪声方差比例。
- 𝛼𝑡 =1 −𝛽𝑡:每一时刻保留的原始信号比例。
- ¯𝛼𝑡 =∏𝑡𝑖=1𝛼𝑖:这是你在公式里真正看到的那个项。(注:为了书写方便,很多文献直接简写为 $\alpha_t$)。
如果我们想让加噪后的 𝑥𝑡 始终保持一个标准正态分布(均值为 0,方差为 1),那么我们就必须保证系数的平方和等于 1。那么就需要 (√¯𝛼𝑡)2 +(√1−¯𝛼𝑡)2 =¯𝛼𝑡 +1 −¯𝛼𝑡 =1,即为:
𝑥𝑡=√¯𝛼𝑡𝑥0+√1−¯𝛼𝑡𝜖
物理意义:
√¯𝛼𝑡 是一个衰减系数。它决定了经过 𝑡 步后,原始信号 𝑥0 还剩下多少 “浓度”。
- 当 𝑡 =0 时,¯𝛼0 =1,信号是完美的。
- 当 𝑡 =𝑇 时,¯𝛼𝑇 ≈0,信号彻底湮灭。
根据高斯分布的性质,我们不需要真的模拟 𝑇 次加噪,可以直接一步到位:
𝑥𝑡=√¯𝛼𝑡𝑥0+√1−¯𝛼𝑡𝜖,𝜖∼N(0,𝐼)
在这个等式里,𝑥𝑡 是我们观测到的(输入),而 𝑥0 (有效信息)和 𝜖 (噪声垃圾)是两个互相牵制的变量。
3.2.2 纯噪声的轨迹如何还原成有意义的轨迹?
在整个高纬空间中,我们希望从初始解出发,逐步的走向 𝑃(𝑥𝑡) 最大的地方。也就是说,我们应该在原来的信号上沿着 𝑃(𝑥𝑡) 的梯度方向走。
这里我们把梯度成为 Score Function (∇log𝑝(𝑥))
为什么要取对数呢?
- 单调性:对数是单调递增的,不会改变 𝑝(𝑥) 极大值的位置。
- 消除归一化常数:概率分布通常包含极其复杂的归一化系数(配分函数)$Z$,即 𝑝(𝑥) =1𝑍𝑒−𝑓(𝑥)。对 ln𝑝(𝑥) 求导时,ln𝑍 作为常数项直接消失,我们只需要处理能量函数 𝑓(𝑥) 的导数。
- 数值稳定性:概率值可能极小(如 $10^{-100}$),取对数后变为线性刻度,更适合神经网络处理。
那么怎么得到这个梯度呢?
我们首先人为地给专家轨迹 𝑥0 注入混乱。(我们先令 𝜎2 =1 −¯𝛼𝑡 )
𝑥𝑡=√¯𝛼𝑡𝑥0+𝜎𝜖
这意味着,给定 𝑥0,观测值 𝑥𝑡 的概率密度函数是一个均值为 √¯𝛼𝑡𝑥0 的正态分布:
𝑝(𝑥𝑡|𝑥0)=1√2𝜋𝜎exp(−‖𝑥𝑡−√¯𝛼𝑡𝑥0‖22𝜎2)
取对数,求导,有:
∇𝑥𝑡ln𝑝(𝑥𝑡|𝑥0)=∇𝑥𝑡(−‖𝑥𝑡−√¯𝛼𝑡𝑥0‖22𝜎2+const)
∇𝑥𝑡ln𝑝(𝑥𝑡|𝑥0)=−𝑥𝑡−√¯𝛼𝑡𝑥0𝜎2=−𝜖𝜎
也就是说,噪声其实就是一个梯度方向的向量。这就解释了为什么我们减去噪声,就能让轨迹向着真实的轨迹靠近。
3.2.3 没有 𝑥0 怎么得到预测的噪声呢?
我们的神经网络学习的时候是给他 ( 𝑥0,𝜖,𝑡 ) 这样一个三元组的。
但是推理去噪点时候我们可以有逐步减小的 t,但是没有 𝑥0 啊,怎么让模型去预测 𝜖 呢?我要是有 𝑥0 干嘛还要做预测,直接用不就完了吗,这不成鸡生蛋蛋生鸡了。
推理(Inference/Sampling)阶段的本质是盲人摸象。
在训练的时候,我们庞大的数据可能对应着一系列的模态 𝑥(1)0,𝑥(2)0,...。
在自动驾驶中他可能是左转、直行、右转的专家轨迹,在图像生成中可能是猫猫狗狗的照片。
当你把模型部署到车上,给它一个纯噪声 𝑥𝑇 时,根本没有所谓的 “ 𝑥0 ”。
我们想要推断,只能靠贝叶斯定理提供的后验概率
𝑝(𝑥0|𝑥𝑡)=𝑝(𝑥𝑡|𝑥0)𝑝(𝑥0)𝑝(𝑥𝑡)
而 MSE 在统计学上有一个特性:它的最优解是所有可能结果的 “条件期望”。这意味着模型输出的噪声预测值 𝜖𝜃 实际上等价于:
𝜖𝜃(𝑥𝑡,𝑡)≈∫𝜖(𝑥𝑡,𝑥0)𝑝(𝑥0|𝑥𝑡)𝑑𝑥0
在这种无 $x_0$ 的条件下
∇𝑥𝑡ln𝑝(𝑥𝑡)=−𝔼[𝜖|𝑥𝑡]𝜎≈−𝜖𝜃(𝑥𝑡,𝑡)𝜎
接下来,我们知道
𝑥𝑡=√¯𝛼𝑡𝑥0+𝜎𝜖⇒𝜖=𝑥𝑡−√¯𝛼𝑡𝑥0𝜎
在推理时,对于一个确定的观测值 𝑥𝑡,变量是 𝑥0 和 𝜖。我们对等式两边同时取关于 𝑥0 的后验期望 𝔼[ ⋅|𝑥𝑡]:
𝔼[𝜖|𝑥𝑡]=𝔼[𝑥𝑡−√¯𝛼𝑡𝑥0𝜎∣𝑥𝑡]
由于 𝑥𝑡、√¯𝛼𝑡 和 𝜎 在给定时刻 𝑡 时都是观测到的常数,根据期望的线性性质
𝔼[𝜖|𝑥𝑡]=𝑥𝑡−√¯𝛼𝑡𝔼[𝑥0|𝑥𝑡]𝜎
此时代入就有
∇𝑥𝑡ln𝑝(𝑥𝑡)=−1𝜎⋅(𝑥𝑡−√¯𝛼𝑡𝔼[𝑥0|𝑥𝑡]𝜎)
∇𝑥𝑡ln𝑝(𝑥𝑡)=−𝑥𝑡−√¯𝛼𝑡𝔼[𝑥0|𝑥𝑡]𝜎2
它不需要知道具体的 𝑥0 是哪一个。它只需要根据当前的 𝑥𝑡,计算出在它记忆的所有专家经验中,最可能的回归方向。
3.3 为什么不会像直接对所有轨迹取平均一样直接从几条轨迹的中间走 —— 多模态坍缩
我们其实有多种不同的专家轨迹 𝑥(1)0,𝑥(2)0,…,在采样初期( 𝑡 很大),𝔼[𝑥0|𝑥𝑡] 确实是所有模态的加权。
就行我们对 x 轴 y 轴两条线取平均的话,他就沿着 45 度的 y=x 直线去走了。
但随着采样迭代( 𝑡 →0 ),𝑥𝑡 会因为采样中的随机性(噪声注入)稍微偏向某一个模态。模型在每一个微小的 𝑑𝑡 步都在求期望,一旦偏离平衡点,贝叶斯后验 𝑝(𝑥0|𝑥𝑡) 就会发生正反馈效应,让期望值迅速向某一个具体的模态 “坍缩”。随着 𝑡 →0,噪声变小,后验分布 𝑝(𝑥0|𝑥𝑡) 会迅速坍缩(变得非常尖锐),最终锁定在某一个具体的 𝑥(𝑛)0 上。