← 返回题目列表

什么是扩散模型(Diffusion Model)?它的核心思想是什么?

高频 中等 第 5 / 25 题 更新于 2026/09/25
扩散模型生成模型DDPMAIGC
学习 AI 实战项目

简化版

扩散模型先定义固定的前向扰动过程,把数据逐渐变成接近已知噪声分布,再学习反向去噪或对应的 score。生成时从噪声采样,沿离散反向链、ODE 或 SDE 多步求解到数据分布。它避开了典型的对抗博弈并易于注入条件,但质量、稳定性和采样成本仍取决于模型、数据与求解器。

详细版

扩散模型由两个方向相反的过程组成:

1. 前向扩散(加噪,固定不学)

  • 从真实图像 x₀ 出发,共 T 步(原始 DDPM 取 T=1000)。
  • 每一步按一个很小的方差 β_t 往图里掺高斯噪声,x₀ → x₁ → … → x_T。
  • T 步之后,x_T 几乎就是标准高斯噪声,看不出原图任何信息。
  • 这个过程没有参数,是人为设计好的,不需要训练。

2. 反向去噪(生成,需要学)

  • 目标是学会从 x_t 推回 x_{t-1},即把噪声一点点去掉。
  • 用一个神经网络(通常是 U-Net)来近似每一步的去噪,网络实际预测的是「这一步掺进去的噪声」。
  • 训练完成后,从纯噪声 x_T ~ N(0, I) 开始,反复调用网络去噪 T 步,最终得到一张清晰图像 x₀。

为什么这样设计有效

  • 把复杂生成分解为一族不同噪声水平下的去噪任务,常可用回归或 score-matching 目标训练,不需要生成器—判别器同步博弈。
  • 这通常改善优化可控性,但不保证没有训练故障或分布覆盖问题;与 GAN、VAE 的质量比较也必须在相同数据、规模和预算下进行。

关键特性

  • 在许多视觉任务上能取得较强质量与覆盖,训练目标通常较直接。
  • 天然缺点是采样慢(要跑很多步网络),后续用 DDIM、蒸馏、Latent Diffusion 等手段加速。
  • 容易接入条件(文本、边缘图、深度图),是可控生成的理想载体。

完整版教学

一、先建立直觉:为什么是「加噪 + 去噪」

想象你有一张清晰照片,每一步都按预设强度随机撒入一点噪声,最终使原图信号弱到近似已知噪声分布。噪声调度是固定的,但每次抽到的噪声是随机的,所以前向过程不是一条确定轨迹。

真正难的是反过来:给定带噪样本,估计通向高数据密度区域的局部方向。经典 ε-prediction 预测的是闭式表达中从 x₀ 一步构造 x_t 所用的总噪声 ε,不是单独识别“上一小步刚加入的噪声”。采样器利用该预测换算反向均值或导数,逐步得到新样本;步数可以与训练离散点数不同。

记住这个类比:加噪是「往下滑到噪声」,去噪是「顺着网络的指引一步步爬回真实图像」。生成的本质是「从随机噪声出发,沿着学到的路径爬回数据分布」。

二、前向过程:数学上到底做了什么

前向过程是一条马尔可夫链,每一步只依赖上一步:

q(x_t | x_{t-1}) = N(x_t; √(1-β_t)·x_{t-1}, β_t·I)

其中 β_t 是预先设定的一串很小的数(噪声方差表,noise schedule),从 β_1 到 β_T 逐渐变大。每一步都把上一张图缩小一点点(乘 √(1-β_t))再掺入方差为 β_t 的噪声。

直接一步步加噪要算 t 次,但它有一个极其重要的闭式解:定义 α_t = 1-β_t,再定义 ᾱ_t = α_1·α_2·…·α_t(从 1 到 t 的连乘),则可以一步从 x₀ 直接跳到任意时刻 x_t:

x_t = √ᾱ_t · x₀ + √(1-ᾱ_t) · ε,   ε ~ N(0, I)

这行公式是整个扩散模型的地基,务必记住。它说明:

  • x_t 就是「原图按 √ᾱ_t 缩放」加上「一团按 √(1-ᾱ_t) 缩放的标准高斯噪声」。
  • t 越大,ᾱ_t 越接近 0,原图成分越少、噪声越多;当 t=T,ᾱ_T ≈ 0,x_T 几乎就是纯噪声 N(0, I)。
  • 训练时可以随机抽一个 t 直接构造 x_t,不用真的跑 t 步,这让训练非常高效。

例如 ᾱ_t=0.81、标量 x₀=0.5、本次噪声 ε=-1 时,x_t=0.9×0.5+√0.19×(-1)≈0.014。这个数值例子也说明网络面对的是“信号与累计噪声的混合物”,而不是只找最后一步的小噪声。

三、反向过程:网络学的是「预测噪声」

反向过程也是一条马尔可夫链,我们希望学到:

p_θ(x_{t-1} | x_t) = N(x_{t-1}; μ_θ(x_t, t), Σ_t)

理论推导(基于变分下界 ELBO)会得到一个复杂的均值表达式,但 DDPM 论文做了一个漂亮的简化:与其让网络预测均值 μ,不如让网络直接预测前向过程在这一步掺进去的噪声 ε。因为由第二节的闭式解,x_t 完全由 x₀ 和 ε 决定,知道了 ε 就等价于知道了 x₀,均值可以反解出来。

于是网络就是一个「噪声预测器」ε_θ(x_t, t):输入当前带噪图 x_t 和时间步 t,输出它认为掺进去的噪声。均值由下式给出:

μ_θ(x_t, t) = 1/√α_t · ( x_t − β_t/√(1-ᾱ_t) · ε_θ(x_t, t) )

直观理解:把网络预测的噪声按比例从 x_t 里减掉,再缩放回去,就得到上一步 x_{t-1} 的均值。

四、训练在优化什么:一个惊人简洁的损失

把 ELBO 推导 + 噪声预测的重参数化代入、再扔掉权重系数后,DDPM 的训练目标简化成一个「预测噪声的均方误差」:

L_simple = E_{ t, x₀, ε } [ ‖ ε − ε_θ( √ᾱ_t·x₀ + √(1-ᾱ_t)·ε , t ) ‖² ]

训练一步的流程只有 4 行,非常好记:

  1. 从数据集里取一张真实图 x₀;
  2. 随机采一个时间步 t ∈ {1,…,T},随机采一团噪声 ε ~ N(0,I);
  3. 用闭式解直接合成带噪图 x_t = √ᾱ_t·x₀ + √(1-ᾱ_t)·ε;
  4. 让网络 ε_θ(x_t, t) 去预测 ε,用 MSE 反传更新。

易错点:网络预测的不是去噪后的图,也不是原图 x₀,而是「加进去的那团噪声 ε」(这叫 ε-prediction)。当然也存在预测 x₀ 或预测 v(v-prediction)的变体,但最经典、最常被问的是预测噪声。

五、采样/推理:从噪声生成一张新图

训练好后,生成流程(DDPM 采样)如下:

  1. 采一张纯噪声 x_T ~ N(0, I);
  2. 对 t = T, T-1, …, 1 循环:
    • 用网络算出 ε_θ(x_t, t);
    • 按第三节公式算均值 μ_θ,再加一点随机噪声 σ_t·z(t=1 时不加),得到 x_{t-1};
  3. 循环结束得到 x₀,就是生成的图像。

原始 DDPM 常用很多次网络前向,生成成本高;但推理 NFE 不必等于训练时间步数,DDIM、高阶求解器与蒸馏可显著减少调用。Latent Diffusion 则降低每次调用的空间成本,这几种加速解决的是不同维度。

六、从另一个视角理解:得分匹配与 SDE

面试深挖时常会问扩散模型和 score-based 模型的关系。二者在高斯扰动与适当参数化下紧密对应,但术语覆盖的模型族与连续/离散表述并不完全相同。

  • Score-based 模型学的是数据分布的对数梯度 ∇ₓ log p(x)(称为 score,得分),指向「数据更密集的方向」。
  • 对高斯条件扰动,最优噪声预测与带噪边缘分布的 score 可通过尺度换算;常写成 s_θ(x_t,t)=-ε_θ(x_t,t)/√(1-ᾱ_t)。这里说的是训练最优解/参数化关系,不是任意未收敛网络都精确相等。
  • 宋飏(Yang Song)等人用**随机微分方程(SDE)**把两者统一:前向是一个把数据推向噪声的 SDE,反向是对应的逆时间 SDE,采样就是解这个逆 SDE。DDPM 是它的离散化特例。

记住这个联系即可,不必展开推导——它能让你在面试里显得「知道底层」。

七、和其他生成模型的定位对比

维度扩散模型GANVAE自回归(如像素级)
训练稳定性通常较直接对博弈平衡敏感通常较稳定通常较稳定
生成质量常有较强感知质量可很锐利,但有模式遗漏风险简单像素似然常偏平滑可很高,取决于顺序与规模
采样速度慢(多步)快(一次前向)快很慢(逐像素)
多样性/覆盖通常较好,非保证可能丢模式取决于后验与解码器取决于训练与采样
可控条件注入机制丰富同样可以条件化同样可以条件化同样可以条件化

扩散模型常以多次函数评估换取较好的质量—覆盖权衡,并形成了丰富的条件控制生态。它成为视觉生成主流之一也受益于潜空间计算、预训练数据和开源工具链,不能只归因于单一理论优势。

八、常见误区与追问

  • 误区:扩散模型在训练时从纯噪声完整生成图片。 训练通常随机采一个时间步直接构造 xt,预测噪声并计算损失,无需每次走完整链。
  • 追问:为什么前向过程能一步采样任意 t? 高斯噪声的组合仍是高斯,可用累计 alpha_bar_t 得到闭式重参数化。
  • 追问:反向过程为什么需要多步? 模型只学习局部噪声条件下的方向,采样器需沿时间从高噪声逐步积分回数据分布。
  • 误区:模型预测的必然是 ε。 也可预测 x0 或 velocity;参数化会改变损失权重、数值性质和调度器接口。
  • 追问:扩散模型的核心代价是什么? 迭代采样带来高延迟,训练和高分辨率特征也消耗大量算力与显存。

九、加强记忆

用“固定扰动—学习反演—数值采样”串起扩散模型:前向高斯过程有闭式边缘 x_t=√ᾱ_t·x₀+√(1-ᾱ_t)·ε,经典 DDPM 训练网络预测累计噪声 ε,采样器再把预测换算成反向均值或导数。ε、x₀、v 和 score 是不同参数化;训练网格也不等于推理 NFE。DDIM 改变采样路径,CFG 放大条件差分,潜扩散降低单步空间成本——先分清它们分别修改哪一层,才不会把扩散模型记成“固定一千步的 U-Net”。