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

想象一张清晰的照片,我们往里逐渐加入高斯噪声。
加到最后,它就成了一团随机点——几乎看不出原图。
现在问题来了:
如果我们能训练出一个网络,学会从这团噪声一步步复原出清晰的图像,
那么这个模型就能“生成”新的图片了。
这就是 DDPM 的基本思路。它有两个阶段:
- 前向扩散(Forward Process):往图片里加噪声。
- 反向扩散(Reverse Process):学会去噪声,重建图片。
前向扩散
每个时间步,我们都往图像中加一点噪声:
控制这一步加多少噪声(一般随时间增大) 是高斯噪声
通过重参数化,有完整的正向转移过程:
这个过程是马尔可夫的:
不断展开得到:
- 第 1 项是
的系数:所有 的连乘。 - 噪声项
的系数是:
- 当
时,乘积为空,定义为 1,所以系数就是 。
如果我们一开始的图像是
其中:
这一步的含义非常关键:
我们可以直接采样任意时刻的
,而不用真的一层层加噪。
比如在训练中,我们可以随机选一个
在整个过程中噪声不是“完全随机的”
虽然
别忘了
这正是模型可以反推回去的原因。
反向扩散
反向过程要做的,是从纯噪声
反向过程定义了一个可训练的马尔可夫链:
逐步从
所以严格来说,反向扩散不是直接“计算
直觉上,我们希望能建模:
根据贝叶斯公式我们可以得到:
但它很难直接算出来。
于是我们通过贝叶斯技巧引入
我们可以知道
根据前向扩散,有:
利用概率乘法:
代入高斯形式:
已知如果
那么联合高斯:
条件分布
- 令
, , , ,
代入条件高斯公式即可得到:
让模型学“去噪”而不是学
反向公式中有
于是,论文提出让模型直接预测噪声。
模型输出的其实不是图片,而是“当前图片中含有的噪声”。
我们可以用前向公式反解出
然后带入上面的均值表达式,得到最终的反向采样:
采样时:
训练与生成的全过程
训练阶段
- 随机选择
; - 计算
; - 模型输入
,输出预测噪声 ; - 优化目标是让预测噪声接近真实噪声
。
- 随机选择
生成阶段
- 从高斯噪声
开始; - 使用反向公式一步步去噪,得到
; - 最终生成图像。
- 从高斯噪声
原论文中的算法流程图: