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