它从不学画画,只学猜噪声
扩散模型(DDPM 及其后续工作)的训练目标有一个值得注意的特点:网络不直接输出图像,而是输出一个噪声向量。初看这与「生成」的目标相悖,但这一设计并非随意选择,而是由反向过程的数学结构所决定的。本文从反向过程的学习目标出发,说明「预测噪声」如何从推导中自然浮现。
1. 扩散模型的基本框架
扩散模型的灵感来自非平衡热力学:一滴墨水滴进水里,从集中到扩散,最终变成均匀的混合状态。扩散模型借用了这个思想——把真实数据一步步「毁掉」成纯噪声,再训练一个模型学会把噪声一步步「还原」成真实数据。
整个模型由两个过程构成。
前向过程是人为定义的加噪过程:从数据 出发,逐步注入高斯噪声,经过 步后逼近标准正态分布 。每一步的转移核为
其中 是预设的噪声调度(noise schedule)。整个前向过程是一条马尔可夫链——每一步只依赖上一步,与更早的状态无关。
由于高斯分布的可加性,可绕过逐步采样,直接写出任意时刻的闭式形式:
这里 ,,。可以清楚地看到: 是保留下来的原始信号, 是注入的噪声。随着 增大, 逐渐趋零,信号消失殆尽。
反向过程是待学习的去噪过程,从纯噪声逐步恢复数据。生成模型的全部困难都集中在这一步。
2. 反向过程的学习目标
反向过程需要学习分布 ——给定当前带噪样本,上一步应当是什么。该分布无法直接获得,但存在一个关键的切入点:
若已知原始数据 ,则真实的后验 有闭式解。
原因在于前向过程完全由高斯转移构成,而高斯分布的条件分布仍是高斯。对三个高斯分布应用贝叶斯公式,可得该后验仍为高斯:
其均值为
训练的本质就是:让网络学的反向去噪过程,尽可能贴近这个已知的后验分布。
3.「预测噪声」如何浮现
观察上式中的各量:
- 是当前输入,已知;
- 、、 由噪声调度定义,已知;
- 是前向过程注入的噪声,未知。
后验均值的唯一未知量是噪声 。 换言之,若网络能够预测 ,即可确定后验分布的均值,从而确定去噪方向。于是,让网络预测噪声,与「学习去噪」在数学上是等价的:
这正是 DDPM 采用噪声预测参数化的原因。这个参数化也直接决定了损失函数的形式。
4. 参数化的选择
需要指出的是,「预测噪声」并非唯一可行的参数化。由前向闭式关系 ,噪声 、干净样本 与上一步 三者可以相互换算。因此,预测三者中的任意一个在数学上等价,只是未知量的选择不同。
DDPM 选择预测噪声,主要基于数值稳定性的考虑。当 接近 时, 几乎为纯噪声,此时直接预测 的目标高度多解且难以优化;而噪声 服从标准高斯,目标明确、无歧义。原论文(Ho et al., 2020)的实验也表明预测噪声的效果最优。
5. 损失函数
扩散模型真正想最大化的是数据对数似然 ,但这需要对所有中间潜变量 积分,无法直接算。于是用变分推断把它松弛为 ELBO(证据下界)。整个推导的线索是:
后验 可解析算 → 它是高斯,有明确均值 → 网络只需学这个均值 → 均值最终只依赖噪声 → 损失退化成预测噪声的 MSE。
令网络的反向分布取与真实后验相同的形式。由于两者都是高斯且方差一致,二者之间的 KL 散度退化为均值差的加权平方。将均值公式代入并化简(完整推导见扩散模型的损失推导):
DDPM 实验发现,丢掉前面的权重系数、均匀采样时间步 ,训练反而更稳定。最终训练目标为
整个生成模型的训练由此收敛为一个均方误差:网络只需让预测的噪声逼近真实注入的噪声。
用代码写出来,训练循环非常简洁:
for x0 in dataloader: # x0 ~ 训练数据 t = torch.randint(0, T, (x0.shape[0],)) # 采样时间步 eps = torch.randn_like(x0) # 采样噪声 ε ~ N(0,I) xt = sqrt(alpha_bar[t]) * x0 + sqrt(1 - alpha_bar[t]) * eps # 构造 x_t loss = F.mse_loss(model(xt, t), eps) # L_simple = ‖ε - ε_θ‖² loss.backward(); opt.step()6. 这一设计的后续意义
「预测噪声」是理解扩散模型后续发展的基础。后续的三个重要工作——DDIM、CFG 和 Latent Diffusion——都直接建立在这一参数化之上。
DDIM:确定性加速采样
DDPM 采样慢的根源在于:反向过程被定义成马尔可夫链,必须老老实实走完 (通常 1000)步。DDIM(Song et al., ICLR 2021)的关键洞察是:训练损失 只依赖边缘分布 ,不依赖具体的联合分布。因此采样时可以将马尔可夫链替换为非马尔可夫的隐式过程:先用噪声预测估计干净样本 ,再按目标时刻的噪声比例重新加噪回去——
这个过程没有随机项,给定初始噪声 后生成结果唯一。实际效果是 50 步即可替代 1000 步,质量几乎不下降。从连续时间的视角看(见 Score SDE),DDIM 正是概率流 ODE 的离散化——ODE 的解是平滑曲线,离散化时步长可以更大,而不像 SDE 的随机游走那样必须小步。
CFG:无分类器引导
直接条件生成的结果往往偏「保守」——能满足条件,但不够鲜明。CFG(Classifier-Free Guidance, Ho & Salimans, 2022)的思路是:训练时以一定概率(通常 10%–20%)随机丢弃条件,让同一个网络既能做条件生成、也能做无条件生成。采样时将「条件预测」沿「条件 − 无条件」的方向外推:
是引导强度,通常取 5–10。这个公式的含义是:条件噪声预测与无条件噪声预测之差,就是条件引导的方向。放大这个方向,就得到更「听话」的结果。更深层地,由 Tweedie 公式,噪声预测与分数(score) 只差一个系数(见第 1 节的噪声预测参数化)——因此这个外推实质上是在分数空间里做条件引导。
Latent Diffusion:从像素到潜空间
直接在像素空间扩散太贵:一张 512×512 的图有约 26 万维,而像素间大量信息是冗余的。Latent Diffusion(Rombach et al., 2022)把扩散过程从像素空间搬到低维的潜在空间:先用 VAE 把图像压缩成小的 latent 表示,在 latent 上做扩散/去噪,最后用 VAE 解码回像素。Stable Diffusion 就是这条路线的代表。
原图 → VAE 编码器 → 压缩 latent → 在 latent 中扩散/去噪 → 生成 latent → VAE 解码器 → 输出图片损失函数的形式与第 5 节完全一致——只是把 换成了 latent 。文本条件通过编码器变成 embedding,用 cross-attention 注入 U-Net 的每一层。采样时用 CFG 做引导、DDIM 做加速,三者无缝组合。
参考资料
- Ho, J., Jain, A., & Abbeel, P. (2020). Denoising Diffusion Probabilistic Models. NeurIPS.
- Song, J., Meng, C., & Ermon, S. (2021). Denoising Diffusion Implicit Models. ICLR.
- Ho, J. & Salimans, T. (2022). Classifier-Free Diffusion Guidance. NeurIPS Workshop.
- Rombach, R., Blattmann, A., Lorenz, D., Esser, P., & Ommer, B. (2022). High-Resolution Image Synthesis with Latent Diffusion Models. CVPR.
- Song, Y., Sohl-Dickstein, J., Kingma, D. P., Kumar, A., Ermon, S., & Poole, B. (2021). Score-Based Generative Modeling through Stochastic Differential Equations. ICLR.
- Bishop, C. M. & Bishop, H. (2024). Deep Learning: Foundations and Concepts. Springer. 第 20 章.