在 AI 绘画(如 Midjourney, Stable Diffusion)和视频生成(如 Sora)大火的今天,扩散模型 (Diffusion Models) 已经成为了生成式 AI 的绝对皇冠。

但对于很多开发者来说,扩散模型的数学门槛似乎很高:变分推断、马尔可夫链、高斯分布……别担心,本文将拨开复杂的数学迷雾,带你从零推导扩散模型的本质原理。

# 1. 核心直觉:搞破坏 vs. 搞修复

扩散模型的灵感来源于非平衡热力学。我们可以把它想象成一个“墨水扩散”的过程。

# 前向过程 (Forward Process):毁灭

想象你往一杯清水里滴入一滴墨水。随着时间的推移,墨水分子会逐渐扩散,直到整杯水变成均匀的浑浊状态。在图像处理中,这个过程等同于:不断地向一张清晰的图片中添加高斯噪声,直到它变成一张完全随机的雪花屏。

# 逆向过程 (Reverse Process):创造

如果我们能把时间倒流呢?如果我们能从那一杯浑浊的墨水中,精准地把每一个墨水分子还原回最初的那一滴形状呢?
这就是扩散模型要做的事:从纯噪声(雪花屏)开始,一步步去除噪声,最终“无中生有”地变出一张清晰的图像。


# 2. 数学推导:前向过程 qq

前向过程是一个固定的马尔可夫链 (Markov Chain)。我们规定每一步都加入微小的高斯噪声。

给定真实数据 x0x_0,我们在 tt 时刻加入噪声得到 xtx_t

# 单步加噪公式

xt=1βtxt1+βtϵt1,ϵN(0,I)x_t = \sqrt{1 - \beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1}, \quad \epsilon \sim \mathcal{N}(0, \mathbf{I})

  • βt\beta_t:预先设定的方差调度 (Variance Schedule),控制每一步加多少噪声(通常很小)。
  • 1βt\sqrt{1-\beta_t}:为了保持数据分布的方差稳定而加的系数。

# 任意步加噪(重参数化技巧)

如果我们想求第 100 步的状态 x100x_{100},不需要一步步迭代。令 αt=1βt\alpha_t = 1 - \beta_tαˉt=i=1tαi\bar{\alpha}_t = \prod_{i=1}^t \alpha_i,我们可以直接得出:

xt=αˉtx0+1αˉtϵx_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon

这意味着:任何时刻的图像 xtx_t,都可以看作是原图 x0x_0 和纯噪声 ϵ\epsilon 的线性组合。


# 3. 数学推导:逆向过程 pθp_\theta

这是 AI 发挥作用的地方。我们要把 xTx_T 变回 x0x_0

理论上,如果前向过程的步长 βt\beta_t 足够小,那么逆向过程 p(xt1xt)p(x_{t-1}|x_t) 也近似于一个高斯分布

由于我们无法直接算出这个分布,我们训练一个神经网络 θ\theta 来近似它:

pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \boldsymbol{\mu}_\theta(x_t, t), \boldsymbol{\Sigma}_\theta(x_t, t))

这里有两个未知数:

  1. 均值 μθ\boldsymbol{\mu}_\theta:去噪后的图像中心在哪里?(这是核心难点)
  2. 方差 Σθ\boldsymbol{\Sigma}_\theta:通常固定为常数,不进行学习。

通常使用 U-Net 结构的神经网络来预测噪声。


# 4. 训练目标:AI 到底在学什么?

我们要让 AI 预测的分布 pθp_\theta 尽可能接近真实的逆向分布 qq
在数学上,这等价于最小化变分下界(ELBO),最终简化为最小化预测噪声的均方误差 (MSE)

# 核心发现

经过复杂的贝叶斯公式推导,我们发现真实的后验均值 μ~t\tilde{\boldsymbol{\mu}}_t 其实只取决于一个变量:当前时刻包含的噪声 ϵ\epsilon

Loss=Et,x0,ϵ[ϵϵθ(xt,t)2]\text{Loss} = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right]

这是扩散模型最反直觉也最精妙的地方:
神经网络不需要学会画图,它只需要学会**“找茬”**。

  • 输入:一张带噪点的图 xtx_t
  • 输出:这张图里包含的噪声 ϵθ\epsilon_\theta 是多少。
  • Label:前向过程中实际加入的真噪声 ϵ\epsilon

# 5. 采样过程:从 0 到 1 的生成

一旦模型训练好(能准确预测噪声了),我们就可以开始生成图像了。这是一个迭代的“去噪”过程。

# 采样算法 (Sampling Algorithm)

  1. 从混沌开始:随机采样一个标准正态分布噪声 xTN(0,I)x_T \sim \mathcal{N}(0, \mathbf{I})

  2. 循环迭代:从 t=Tt = T11

    • 让模型看着 xtx_t,预测噪声 ϵθ\epsilon_\theta
    • 根据预测的噪声,计算出上一时刻的均值。
    • 加上一点点随机扰动 zz(Langevin 动力学),防止生成的图像过于死板。

    xt1=1αt(xtβt1αˉtϵθ(xt,t))+σtzx_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon_\theta(x_t, t) \right) + \sigma_t z

  3. 最终结果:当循环结束得到 x0x_0,就是一张清晰的图片。

如上图所示,随着步数 tt 的减小,纯噪声逐渐显现出清晰的数字轮廓。


# 6. 总结

扩散模型之所以强大,是因为它放弃了 GAN 那种“一步到位”的生成方式,而是选择了“慢工出细活”。

  1. 前向 (Forward):物理过程,把数据变成噪声。
  2. 逆向 (Reverse):AI 过程,通过预测噪声,把数据一步步还原。
  3. 训练 (Training):本质是在训练一个“去噪器”,计算 Loss 只需简单的 MSE。

正是这种迭代式的生成过程,让扩散模型拥有了捕捉极其复杂数据分布的能力,从而诞生了今天令人惊叹的 AIGC 时代。