扩散模型最近在两三年成了图像生成领域的热门方向,但不少人翻完论文还是不明白它到底在干什么。核心其实只有两个动作:先往真实数据里不断加噪声,再把噪声一步步去掉。这两个过程分别叫做正向加噪和反向去噪,理解了它们,整个模型的训练与采样逻辑就清晰了。

正向加噪:把清楚的图像慢慢变成纯噪声
正向加噪可以理解为给一张照片持续撒上越来越重的噪点。在数学设定里,我们有一张真实图片 x0,然后按时间步 t 从 1 到 T 逐步生成 xt。每一步都从高斯分布里取一点噪声混进去,并且混合比例由预设的方差表控制。越往后,原图信息越少,到最后 xT 基本就是一张和标准正态分布没区别的随机图。这个过程不需要训练,是固定好的算法。
为什么非要一步一步加而不是一次加满?因为逐步加噪让每一步的变化都很小,这样反向去噪时网络只需要学习“去掉一点点噪声”这种简单映射。如果直接一步到位,反向模型就要面对从纯随机到复杂图像的巨大跨度,根本学不动。下面这段伪代码展示了单步加噪的逻辑:
import numpy as np
def forward_step(x, t, sqrt_alphas_cumprod, sqrt_one_minus_alphas_cumprod):
# x 是当前图像,epsilon 是标准高斯噪声
epsilon = np.random.randn(*x.shape)
# 按照累积系数混合原图与噪声
x_t = sqrt_alphas_cumprod[t] * x + sqrt_one_minus_alphas_cumprod[t] * epsilon
return x_t
# 假设有 1000 步,beta 从小到大
T = 1000
betas = np.linspace(1e-4, 0.02, T)
alphas = 1.0 - betas
sqrt_alphas_cumprod = np.cumprod(np.sqrt(alphas))
sqrt_one_minus_alphas_cumprod = np.sqrt(1.0 - np.cumprod(alphas))
从工程角度看,正向过程虽然简单,但步数 T 的选择很关键。步数太少,加噪不充分,反向生成会模糊;步数太多,采样时就得跑同样多的网络推断,速度极慢。现在很多加速采样方法,本质就是在反向阶段跳过部分步数,但正向训练依然保持细粒度。
反向去噪:训练网络倒着把噪声收回去
反向去噪才是扩散模型真正学习的部分。我们手里有了成对数据 (xt, xt-1),目标就是训练一个神经网络(通常是 U-Net)接收 xt 和步数 t,预测这一步加进去的噪声是什么,或者预测上一步的干净图。因为正向规则已知,只要网络能准确猜出噪声,就能从 xT 开始逐帧往回算,直到得到 x0。
训练时损失函数非常直白:把网络预测的噪声和正向实际采样的噪声算均方误差。这比直接回归图像像素稳定得多,也算扩散模型好训的原因之一。下面给出一个最简训练循环片段:
def train_step(model, x0, optimizer, T, sqrt_alphas_cumprod, sqrt_one_minus_alphas_cumprod):
t = np.random.randint(1, T)
epsilon = np.random.randn(*x0.shape)
x_t = sqrt_alphas_cumprod[t] * x0 + sqrt_one_minus_alphas_cumprod[t] * epsilon
# 模型预测噪声
pred_noise = model(x_t, t)
loss = ((pred_noise - epsilon) ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
return loss
采样阶段就是反复调用这个模型。从随机噪声 xT 出发,每步用模型算出要减掉的噪声,得到稍干净的 xt-1,循环到 x0。实际实现里还会引入方差调度来让生成更平滑。很多人觉得反向像“无中生有”,其实它只是把正向录像倒放,而录像内容在训练时已经见过了。
通俗比喻:墨水与水杯的双向过程
如果还是觉得公式绕,可以想象杯子里装满清水代表清晰图像。正向加噪就是往杯里滴墨水并搅拌,滴得越多水越浑,最后彻底看不出本来面目。这个搅浑动作是物理规律,不需要学习。反向去噪则像训练一个高手,让他盯着浑水杯,学会一点点把墨水分子归位、让水重变清。他练熟了,你给他一杯任意墨浓度的水,他都能倒推出某时刻的清澈程度。
这个比喻也解释了为什么扩散模型生成质量高:因为它不是直接背下图片,而是理解了“噪声如何掩盖结构”。所以面对从没见过的随机噪声,它也能沿着学过的去噪轨迹,稳定产出合理图像。相比之下,早期 GAN 更像凭空画假图,容易崩坏。理解了水杯比喻,再回头看论文里的马尔可夫链和变分下界,就会明白那些只是给这个双向过程找的数学外衣。
总结来说,正向加噪是固定的破坏规则,反向去噪是学习的重建规则。两者组成一个可训练的闭环,让模型从噪声中雕刻出数据。下次再看到扩散模型,先想水杯和墨水,技术细节自然就顺着通了。
diffusion_modelforward_noisereverse_denoise修改时间:2026-08-14 07:00:28