扩散模型的本质:
我们一点点往图片里加噪声,让它慢慢“消失”;
然后训练一个模型,让它学会如何让噪声重新变回图像
这就是 DDPM(Denoising Diffusion Probabilistic Models)。


直觉理解

想象一张清晰的照片,我们往里逐渐加入高斯噪声。
加到最后,它就成了一团随机点——几乎看不出原图。

现在问题来了:

如果我们能训练出一个网络,学会从这团噪声一步步复原出清晰的图像
那么这个模型就能“生成”新的图片了。

这就是 DDPM 的基本思路。它有两个阶段:

  • 前向扩散(Forward Process):往图片里加噪声。
  • 反向扩散(Reverse Process):学会去噪声,重建图片。

前向扩散

每个时间步,我们都往图像中加一点噪声:

  • 控制这一步加多少噪声(一般随时间增大)
  • 是高斯噪声

通过重参数化,有完整的正向转移过程:

这个过程是马尔可夫的
只依赖 ,而与更早的状态无关。

不断展开得到:

  • 第 1 项是 的系数:所有 的连乘。
  • 噪声项 的系数是:
  • 时,乘积为空,定义为 1,所以系数就是

如果我们一开始的图像是 ,经过多步扩散后:

其中:

这一步的含义非常关键:

我们可以直接采样任意时刻的 ,而不用真的一层层加噪。

比如在训练中,我们可以随机选一个 ,直接生成对应的 来训练模型。


在整个过程中噪声不是“完全随机的”

虽然 是高斯噪声,但它和 的组合是有结构的。
别忘了 是“带点原图信息的噪声”,而不是完全乱的点阵。
这正是模型可以反推回去的原因。


反向扩散

反向过程要做的,是从纯噪声 开始,一步步去掉噪声,直到得到

反向过程定义了一个可训练的马尔可夫链:

逐步从 生成

所以严格来说,反向扩散不是直接“计算 ”的数值,而是构造一个近似采样链,通过逐步去噪来间接模拟数据分布。

直觉上,我们希望能建模:

根据贝叶斯公式我们可以得到:

但它很难直接算出来。
于是我们通过贝叶斯技巧引入

我们可以知道是马尔可夫过程,所以上式中的。此时依然是未知的,我们需要继续推导出一个没有的式子。

根据前向扩散,有:

利用概率乘法:

代入高斯形式:

已知如果

那么联合高斯:

条件分布 仍然是高斯,均值和方差可以写为:

代入条件高斯公式即可得到:


让模型学“去噪”而不是学

反向公式中有 ,但生成时我们并不知道原图。
于是,论文提出让模型直接预测噪声

模型输出的其实不是图片,而是“当前图片中含有的噪声”。

我们可以用前向公式反解出

然后带入上面的均值表达式,得到最终的反向采样:

采样时:


训练与生成的全过程

  1. 训练阶段

    • 随机选择
    • 计算
    • 模型输入 ,输出预测噪声
    • 优化目标是让预测噪声接近真实噪声
  2. 生成阶段

    • 从高斯噪声 开始;
    • 使用反向公式一步步去噪,得到
    • 最终生成图像。

原论文中的算法流程图: