什么是扩散模型(Diffusion Model)?它的核心思想是什么?
简化版
扩散模型先定义固定的前向扰动过程,把数据逐渐变成接近已知噪声分布,再学习反向去噪或对应的 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 行,非常好记:
- 从数据集里取一张真实图
x₀; - 随机采一个时间步
t ∈ {1,…,T},随机采一团噪声ε ~ N(0,I); - 用闭式解直接合成带噪图
x_t = √ᾱ_t·x₀ + √(1-ᾱ_t)·ε; - 让网络
ε_θ(x_t, t)去预测ε,用 MSE 反传更新。
易错点:网络预测的不是去噪后的图,也不是原图 x₀,而是「加进去的那团噪声 ε」(这叫 ε-prediction)。当然也存在预测 x₀ 或预测 v(v-prediction)的变体,但最经典、最常被问的是预测噪声。
五、采样/推理:从噪声生成一张新图
训练好后,生成流程(DDPM 采样)如下:
- 采一张纯噪声
x_T ~ N(0, I); - 对
t = T, T-1, …, 1循环:- 用网络算出
ε_θ(x_t, t); - 按第三节公式算均值
μ_θ,再加一点随机噪声σ_t·z(t=1 时不加),得到x_{t-1};
- 用网络算出
- 循环结束得到
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 是它的离散化特例。
记住这个联系即可,不必展开推导——它能让你在面试里显得「知道底层」。
七、和其他生成模型的定位对比
| 维度 | 扩散模型 | GAN | VAE | 自回归(如像素级) |
|---|---|---|---|---|
| 训练稳定性 | 通常较直接 | 对博弈平衡敏感 | 通常较稳定 | 通常较稳定 |
| 生成质量 | 常有较强感知质量 | 可很锐利,但有模式遗漏风险 | 简单像素似然常偏平滑 | 可很高,取决于顺序与规模 |
| 采样速度 | 慢(多步) | 快(一次前向) | 快 | 很慢(逐像素) |
| 多样性/覆盖 | 通常较好,非保证 | 可能丢模式 | 取决于后验与解码器 | 取决于训练与采样 |
| 可控条件注入 | 机制丰富 | 同样可以条件化 | 同样可以条件化 | 同样可以条件化 |
扩散模型常以多次函数评估换取较好的质量—覆盖权衡,并形成了丰富的条件控制生态。它成为视觉生成主流之一也受益于潜空间计算、预训练数据和开源工具链,不能只归因于单一理论优势。
八、常见误区与追问
- 误区:扩散模型在训练时从纯噪声完整生成图片。 训练通常随机采一个时间步直接构造
xt,预测噪声并计算损失,无需每次走完整链。 - 追问:为什么前向过程能一步采样任意 t? 高斯噪声的组合仍是高斯,可用累计
alpha_bar_t得到闭式重参数化。 - 追问:反向过程为什么需要多步? 模型只学习局部噪声条件下的方向,采样器需沿时间从高噪声逐步积分回数据分布。
- 误区:模型预测的必然是 ε。 也可预测
x0或 velocity;参数化会改变损失权重、数值性质和调度器接口。 - 追问:扩散模型的核心代价是什么? 迭代采样带来高延迟,训练和高分辨率特征也消耗大量算力与显存。
九、加强记忆
用“固定扰动—学习反演—数值采样”串起扩散模型:前向高斯过程有闭式边缘 x_t=√ᾱ_t·x₀+√(1-ᾱ_t)·ε,经典 DDPM 训练网络预测累计噪声 ε,采样器再把预测换算成反向均值或导数。ε、x₀、v 和 score 是不同参数化;训练网格也不等于推理 NFE。DDIM 改变采样路径,CFG 放大条件差分,潜扩散降低单步空间成本——先分清它们分别修改哪一层,才不会把扩散模型记成“固定一千步的 U-Net”。