Diffusion|DDPM & DDIM 从加噪到采样的完整推导
阅读提示: 这里是学习DDPM和DDIM非常重要的理解推导过程,有助于之后按照这个范式去学习的Flow Matching,因为思想是基于这种扩散来做的,不过引入了向量场去计算这里的降噪直线的性质和速度,也是我在理解流匹配出现问题时打算回到最开始的原理去学习一下这样,可能涉及到一些概率论的知识,包括先验和后验以及Bayes以及Markov的内容,可能有点困难,但是好好理解也还好。祝食用愉快~🪣
1 问题设定与符号
扩散模型把数据生成写成「先逐步加噪,再学习去噪」。
- 前向(加噪):人为定义、完全已知的马尔可夫链
- 反向(去噪 / 采样):需要学习,因为不知道如何从纯噪声一步步回到数据分布
常用符号
| 符号 | 含义 |
|---|---|
| 干净样本(真实图像 / 数据) | |
| 第 步加噪后的样本 | |
| 时间步,取 ; 通常很大(如 1000) | |
| 第 步噪声日程,取值在 ,训练前固定 | |
| ,第 步保留信号的比例 | |
| 从 0 到 累积信号系数,见下式 | |
| 标准高斯噪声, | |
| 神经网络预测的噪声 | |
| 由网络估计得到的干净样本 |
累积系数定义为:
关键事实:噪声日程 (因而 、)在训练前就固定。
因此一旦知道时间步 ,就知道这一时刻固定的加噪强度:
- 信号系数:
- 噪声系数:
与网络无关,可查表得到。
2 前向过程
2.1 单步加噪
含义:在 上按比例 缩小信号,再加方差为 的高斯噪声。
2.2 从 一步跳到任意 (边缘分布,闭式)
反复代入单步公式,并用高斯的可加性,得到:
等价写成分布:
同理:
这一点极其重要:不必真的走 步,只要有 和 ,就能直接采样 。训练时也是这样构造输入的。
2.3 由 反解 (代数闭式)
把边缘公式变形:
- 若 是真噪声,则 精确
- 若换成网络输出 ,则得到的是估计
表达式是闭式;数值是否精确取决于 是否为真。
3 反向的核心目标
生成时的处境:
- 手里有很噪的 (从 开始往回走)
- 想得到稍微干净一点的
- 若还知道真 ,则最合理的一步是用条件后验
读法:
“ 在已经观察到 ,并且知道原始图是 的条件下,中间态 应服从什么分布。 ”
真实采样时没有真 ,所以用网络估一个 塞进去。
但首先必须把「有真 时」的精确后验推出来——这就是 DDPM 反向步的理论骨架。
时间线示意:
x0 --------► x_{t-1} --------► x_t
已知(理想) 未知(要求) 已知
4 Bayes 分解
4.1 问题:想要的分布不能直接抄
前向模型直接给出的是:
- :从 加一步噪
- 、:从干净图跳到某时刻
没有直接给出 。
所以需要用概率定义,把「难写的反向量」用「已知的前向量」表达出来。
4.2 Bayes 公式(一般形式)
对任意随机变量 :
这不是额外物理假设,只是条件概率定义的改写。
令 ,,,得到:
4.3 Markov 性质带来的简化
前向被定义成马尔可夫链:
下一步只依赖当前步,不依赖更早历史。因此:
直觉: 是在 上加噪声得到的;一旦 固定,再告诉你 是谁,都不会改变「从 到 」这一步的加噪规律。
于是:
4.4 分解后三项的角色
关于 的依赖可以读成:
- 似然 :这个 加一步噪,能否解释当前的 ?
- 先验 :从 看, 时刻本来应该像什么?
- 分母 :不含 ,只负责归一化
5 条件后验的闭式推导
目标:求出
中的均值 与方差 。
5.1 为何后验仍是高斯
右边出现的三个分布都是高斯:
| 分布 | 均值 | 方差(×) |
|---|---|---|
两个关于 的高斯因子相乘(log 密度相加 = 二次型相加),结果仍是高斯。
因此后验必为高斯,只需确定 与 。
5.2 用精度加权求后验
把 记为 (多维时各坐标独立,一维推导即可推广)。
来自似然 的约束
反解成对 的高斯约束:
来自先验
两个高斯融合的经典公式
若同一变量同时满足
则后验:
代入:
5.3 计算后验方差
分子化简(用 与 ):
因此:
含义:已知两端 与 之后,中间点 的不确定度通常小于单步新加噪声 ;前面的分式是修正因子。
5.4 计算后验均值
将
乘入。
的系数:
的系数:
于是:
5.5 汇总:有真 时的精确后验
其中
这是真正的 Bayes 后验:在前向过程固定且 为真时,公式精确、闭式。
6 后验均值与方差的含义
把 想成:
“ 在「从 出发、到 结束」的加噪轨迹上, 时刻最可能落在哪里。 ”
- 更信 :均值往 靠
- 更信 :均值往「把当前噪图倒退一步」靠
两项是精度加权意义下的折中(高斯桥 / 布朗桥在中间时刻的条件均值)。
则是这座「桥」上中间点的剩余方差:两端钉死后,中间不再完全自由。
7 真实采样:用估计的 x0 代替真 x0
7.1 理想情况
若知道真 :
这是精确从 抽样。
从 做到 ,相当于在「 已知」的条件世界里模拟前向过程的时间反转。
7.2 现实:只有 ,没有
网络学习预测噪声(DDPM 常见做法):
由边缘公式反解估计干净样本:
说明:
- 表达式:闭式代数变形
- 数值:估计值,因为
- 大 时:,分母小,噪声预测的一点误差会被放大, 往往很糊
然后假装 就是真 ,代入后验:
(实现里方差有时改用 等变体,原理相同。)
7.3 误差
| 步骤 | 数学身份 | 误差来源 |
|---|---|---|
| 、 公式 | Bayes 后验的精确闭式 | 无 |
| 由 闭式反解 | 网络近似 | |
| 代入后的「后验」 | 仍写成高斯 | 错了,整个条件分布偏了 |
| 再加 | 按该高斯抽样 | 额外随机性 |
8 与噪声预测参数化的等价写法
把
代入 ,合并 与 的系数(用 、),得到 DDPM 论文常用形式:
其中 常取 或 。
逐项含义:
- :网络认为 里混了多少噪声
- :要从 里去掉「本步对应」的那部分噪声
- 除以 :对应前向 的尺度还原
- :按后验方差再注入噪声,避免方差塌缩、保持正确随机性
这与「先估 再代入 」完全等价,只是实现上少一个中间变量。
9 训练目标
DDPM 并不直接拟合后验参数;它拟合前向里的噪声(与预测 本质等价):
其中
在一定简化下,这与「让学习到的反向高斯转移贴近真实反向」的 KL 相关。
关键推论:
训练只依赖边缘 ,不依赖你采样时一步走多远、是否马尔可夫。
因此只要采样时仍匹配同一套边缘噪声水平,就可以换采样器——这是 DDIM 能「不重训、只改采样」的根源。
10 精确 / 闭式 / 估计:一张表分清
| 量 | 是否闭式 | 是否精确 |
|---|---|---|
| 噪声日程 、 | 是(日程给定) | 是(定义) |
| 真后验公式 、 | 是 | 代入真 时精确 |
| 形式闭式 | 否,网络估计 | |
| 代入 后的均值 | 公式仍闭式 | 近似 |
| 实际采到的 | 从近似高斯抽样 | 随机近似,不是唯一真值 |
11 DDPM 的限制
- 马尔可夫:,必须一步步
,不能随意跳到很远的更早时刻而不改公式含义。 - 随机:每步 。步数砍太少时,随机误差与离散化误差都难被后续步纠正。
因此 DDPM 往往需要成百上千步才能得到好样本;硬减步数质量下降明显。
12 DDIM
12.1 核心思想
Song et al. 引入非马尔可夫的推断过程族,使得:
- 边缘 仍与 DDPM 相同:
→ 同一套 ,不用重训。
- 给定 后,可以构造到任意更早噪声水平 (,不必 )的转移。
12.2 直观图像
前向在「真 + 真噪声方向 」下:
同一 、同一 在任意更早时刻 上「应该」是:
DDIM 用网络估 与 (二者线性相关、信息等价),再把「预测的干净图 + 同一噪声方向」投影到目标时刻的噪声强度上。
于是不必经过每一个中间整数时间步。
12.3 与 DDPM 的关系
- DDPM:像每一步都在局部后验里抖一下,再走一小格
- DDIM:像先估终点方向,再沿概率流 / 噪声 ODE 落到更低噪声水平;可大步、可全确定
13 统一更新式与 sigma 的两种极端
从 到 的 DDIM 一般形式(把 换成任意 同理):
13.1 三项分别是什么
把「预测的干净图」放到 时刻应有的信号尺度。
沿同一噪声方向,补上 时刻应有的噪声中与 共线的确定性部分。
新鲜随机噪声;控制随机性大小。
13.2 两个极端
- :完全确定性(常说的 DDIM 采样)
- :可退化为 DDPM 的随机更新
中间取值则在「更确定」与「更随机」之间插值。
13.3 少步采样怎么做
取时间子序列
(例如从 1000 步日程里抽 50 个点),每步用同一公式做
每跳一次,用新的状态重新估 ,大步误差被逐步校正。
确定性路径()进一步减少随机抖动,少步时往往明显好于硬砍步数的 DDPM。
14 加速
DDIM 加速不是因为多训了数据信息,而是采样时显式利用了三样东西:
- 已知日程
任意目标噪声强度的尺度都可查表。 - 已知(估出) 或
知道该往哪张干净图、沿哪个噪声方向走。 - 因此反向不必是「只依赖 的马尔可夫小步 + 强制随机」
可以是 的大步,甚至完全确定。
训练不用改,因为训练只看边缘 。
log 密度配方法
只保留与 有关的项。一维记号 。
相加后 的二次项系数(精度)为:
故
一次项配出均值,结果与精度加权相同:
符号速查
DDPM 一步:
DDIM 一步:
笔者的话
“ 看完的话不妨看看流匹配吧,也是一个火热的方向。相信我,理解完这一篇之后,你就没有那么大的负担了~ ”