← 返回题目列表

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

高频 中等 第 4 / 25 题 更新于 2026/08/03
扩散模型生成模型DDPMAIGC

简化版

扩散模型是一类生成模型,核心思想是「先学会破坏,再学会修复」:前向过程把一张真实图像分很多步逐渐加高斯噪声,直到变成纯噪声;再训练一个神经网络学会反向过程——从纯噪声一步步去噪,还原出图像。生成新图时就从一堆随机噪声出发,反复去噪,采样出一张全新的图。它训练稳定、生成质量高,是 Stable Diffusion、DALL·E、Sora 等文生图/文生视频模型的底座。

详细版

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

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₀

为什么这样设计有效

  • 把「一步到位生成整张图」这个极难的任务,拆成「上千步、每步只去掉一点点噪声」的简单任务,每一步都好学,整体训练非常稳定。
  • 对比 GAN 不用对抗训练,避免了模式崩溃和训练不稳定;对比 VAE,生成清晰度更高。

关键特性

  • 生成质量高、多样性好、训练稳定。
  • 天然缺点是采样慢(要跑很多步网络),后续用 DDIM、蒸馏、Latent Diffusion 等手段加速。
  • 容易接入条件(文本、边缘图、深度图),是可控生成的理想载体。

完整版教学

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

想象你有一张清晰照片,把它放进一台每秒撒一点沙子的机器,撒到最后照片被沙子完全盖住,成了一片均匀的雪花噪声。这个「撒沙」的过程是确定的、简单的、可控的。

真正难的是反过来:给你一片雪花噪声,让你还原出照片。扩散模型的聪明之处在于——它不要求网络一步还原,而是让网络只回答一个简单得多的问题:「当前这张有点噪的图,和上一步相比,多撒进去的那层沙子长什么样?」把这层沙子减掉,就往清晰的方向前进了一小步。走上千步,就从雪花噪声走回了照片。

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

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

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

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 步,这让训练非常高效。

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

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

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₀,就是生成的图像。

这里暴露了扩散模型最大的痛点:要跑 T=1000 次网络前向,生成一张图很慢。这正是后续 DDIM(减少步数)、Latent Diffusion(在压缩的潜空间做扩散)、一致性模型/蒸馏(几步甚至一步生成)要解决的问题。

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

面试深挖时常会问「扩散模型和 score-based 模型什么关系」。答案是:它们是同一件事的两种语言

  • Score-based 模型学的是数据分布的对数梯度 ∇ₓ log p(x)(称为 score,得分),指向「数据更密集的方向」。
  • DDPM 预测的噪声 ε_θ 和 score 只差一个系数:score ≈ −ε_θ / √(1-ᾱ_t)。预测噪声,本质就是在估计得分。
  • 宋飏(Yang Song)等人用**随机微分方程(SDE)**把两者统一:前向是一个把数据推向噪声的 SDE,反向是对应的逆时间 SDE,采样就是解这个逆 SDE。DDPM 是它的离散化特例。

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

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

维度扩散模型GANVAE自回归(如像素级)
训练稳定性高(纯回归损失)低(对抗博弈易崩)
生成质量很高高但易模式崩溃偏模糊高但慢
采样速度慢(多步)快(一次前向)很慢(逐像素)
多样性/覆盖容易丢模式
可控条件注入天然友好一般一般一般

扩散模型用「牺牲采样速度」换来了「训练稳定 + 高质量 + 易控制」,而速度问题恰好是工程上可以逐步优化的,这就是它成为当今生成式视觉主流的根本原因。

八、常见误区与追问

  • 误区:扩散模型只是把噪声慢慢擦掉。 更准确地说,模型学习的是每个噪声强度下如何估计噪声、干净样本或速度向量,采样器再用这些估计反推图像。
  • 追问:为什么采样步数能减少但质量不一定崩? 因为 DDIM、DPM-Solver 等方法改变了反向路径的数值求解方式,但步数越少越依赖模型预测精度和调度设计。
  • 误区:条件越强图像越好。 CFG、ControlNet 或文本条件过强会带来过饱和、结构僵硬、细节扭曲,条件控制本质上是质量、多样性和服从度的权衡。
  • 追问:训练目标里的噪声调度为什么重要? 它决定模型在哪些噪声区间学得更充分,直接影响高频细节、全局结构和采样稳定性。
  • 误区:扩散模型一定比 GAN 慢且只能离线生成。 传统扩散采样步数多,但蒸馏、潜空间扩散、DiT 优化和少步采样已经显著降低了推理成本。

九、加强记忆

扩散模型简要说抓住本质:前向按固定噪声表把图加噪成高斯噪声(有闭式解 x_t = √ᾱ_t·x₀ + √(1-ᾱ_t)·ε),反向训练一个 U-Net 预测每步的噪声 ε,损失就是预测噪声的 MSE;生成时从纯噪声出发反复去噪 T 步。 三个关键词钉死:加噪有闭式解、网络预测噪声、采样多步慢。理解了「把生成拆成上千步小去噪」这个化整为零的思想,剩下的 DDIM、CFG、Latent Diffusion 都只是在这套框架上做加速和加条件。