从 DDPM 到 DDIM 的演进推导:定义前向 -> 求解分布 -> 寻找反向步 -> 破除马尔可夫约束
为建立严密逻辑链条,系统总结与推导脉络如下:
一、核心 Motivation:从“物理模拟”到“数学加速”
(一)DDPM:定义游戏规则
- 目标:学习反向马尔可夫链,将纯高斯噪声还原为数据。
- 痛点:采样效率极低。反向推导严格依赖相邻时刻马尔可夫假设($x_{t - 1}$ 需由 $x_t$ 得到),生成图像需循环 1000 步,无法跳步。
(二)DDIM:打破“相邻”的枷锁
- 核心改进动机
- 加速采样:构建可“跳步”的采样公式(如从 $t = 100$ 直接跳到 $t = 50$ )。
- 确定性映射:让初值噪声 $x_T$ 与生成图像 $x_0$ 一一对应,支持图像编辑(Inversion)。
- 变与不变
- 不变:训练目标(Objective)不变。DDIM 发现 DDPM 训练仅依赖边缘分布 $q(xt|x_0)$,可直接复用 DDPM 训练好的 $\epsilon\theta$ 模型。
- 变化:前向过程假设改变。DDPM 假设前向为马尔可夫过程;DDIM 重新定义“非马尔可夫”前向过程,边缘分布与 DDPM 保持一致。
二、DDPM 核心推导:马尔可夫链的闭环
DDPM 推导分“前向加噪”和“反向去噪”两步。
(一)Step 1:前向过程(扩散)
- 单步定义:给定 $x{t - 1}$,下一步 $x_t$ 增加少量噪声:
$q(x_t | x{t - 1}) = \mathcal{N}(xt; \sqrt{1 - \beta_t}x{t - 1}, \beta_t\mathbf{I})$ - 任意时刻推导:利用递归性质 + 重参数化技巧,直接写出 $x_t$ 关于 $x_0$ 的分布(令 $\alpha_t = 1 - \beta_t$):
$x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1 - \bar{\alpha}_t}\epsilon, \quad \epsilon \sim \mathcal{N}(0, \mathbf{I})$
这是扩散模型核心性质:已知原始数据,可直接采样任意时刻噪声图像。
(二)Step 2:反向过程(采样)
- 核心难点:无法直接求 $q(x_{t - 1}|x_t)$。
- 贝叶斯中转:利用贝叶斯公式 $q(x{t - 1}|x_t, x_0) = q(x_t|x{t - 1}, x0) \frac{q(x{t - 1}|x_0)}{q(x_t|x_0)}$,右边三项均为已知高斯分布。
- 采样公式:代入高斯分布密度函数计算,求出 $q(x{t - 1}|x_t, x_0)$ 均值。因未知真实 $x_0$,模型 $\epsilon\theta$ 预测 $xt$ 噪声间接预测 $x_0$:
$x{t - 1} = \frac{1}{\sqrt{\alphat}} \left( x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon\theta(x_t, t) \right) + \sigma_t z, \quad z \sim \mathcal{N}(0, \mathbf{I})$
三、DDIM 核心推导:重构前向概率流
DDIM 关键洞察:只要 $q(x_t|x_0)$ 不变,反向过程无需遵循马尔可夫链。
(一)Step 1:定义非马尔可夫前向过程
DDIM 构造含超参数 $\sigma_t$ 的通用分布形式:
$q\sigma(x{t - 1}|xt, x_0) = \mathcal{N}(x{t - 1}; \text{mean}, \sigma_t^2\mathbf{I})$
为保证边缘分布 $q(x_t|x_0)$ 与 DDPM 一致,均值项设计为三部分组合。
(二)Step 2:统一采样公式(核心结论)
基于上述构造,DDIM 推导出采样公式:
$x{t - 1} = \underbrace{\sqrt{\bar{\alpha}{t - 1}} \left( \frac{xt - \sqrt{1 - \bar{\alpha}_t}\epsilon\theta(xt, t)}{\sqrt{\bar{\alpha}_t}} \right)}{\text{预测的 } x0 \text{ 部分}} + \underbrace{\sqrt{1 - \bar{\alpha}{t - 1} - \sigmat^2} \cdot \epsilon\theta(xt, t)}{\text{指向 } xt \text{ 的修正方向}} + \underbrace{\sigma_t \epsilon_t}{\text{随机噪声}}$
(三)Step 3:动机的实现(为什么能加速?)
- 跳步(Sub - sampling):DDPM 中 $x{t - 1}$ 依赖 $x_t$;DDIM 公式可将 $t - 1$ 替换为任意更小时刻 $\tau$,支持从 $x{1000}$ 直接推导 $x_{900}$,跳过中间步骤。
- 确定性(DDIM 核心):令 $\sigma_t = 0$ 时,随机噪声项消失,$x_T$(纯噪声)确定则生成轨迹确定,扩散模型等价于求解常微分方程(ODE)。
四、总结:两者的本质差异对比
| 维度 | DDPM | DDIM |
|---|---|---|
| 推导基石 | 马尔可夫链的贝叶斯推导 | 满足边缘分布一致性的非马尔可夫构造 |
| 采样公式 | DDIM 中 $\sigma_t$ 取特定值的特例 | 泛化框架,调节 $\sigma_t$ 控随机性 |
| 数学形态 | 随机微分方程 (SDE) | $\sigma_t = 0$ 时为常微分方程 (ODE) |
| 实用价值 | 奠定生成质量,推理慢 | 开启快速采样与图像编辑大门 |
一些更详细的推导
这是一份经过严格数学逻辑梳理的 DDPM 与 DDIM 核心架构总结。我们不仅关注公式本身,更关注每一个公式背后的逻辑必然性。
1. DDPM 核心推导:变分下界($L_{vlb}$)的完整脉络
DDPM 的目标是最小化负对数似然 $-\log p\theta(x_0)$。由于直接计算边缘分布不可行,我们推导其变分上界(即变分下界 $L{vlb}$ 的负数)。
Step 1: 引入变分推断
利用 Jensen 不等式,将目标函数展开为路径上的联合分布:
$
-\log p\theta(x_0) \le \mathbb{E}{q(x{1:T}|x_0)} \left[ \log \frac{q(x{1:T}|x0)}{p\theta(x{0:T})} \right] = L{vlb}
$
Step 2: 展开与分解
根据马尔可夫链性质,$q(x{1:T}|x_0) = \prod{t=1}^T q(xt|x{t-1})$ 且 $p\theta(x{0:T}) = p(xT) \prod{t=1}^T p\theta(x{t-1}|x_t)$。
代入上式并利用贝叶斯公式 $q(xt|x{t-1}, x0) = \frac{q(x{t-1}|xt, x_0)q(x_t|x_0)}{q(x{t-1}|x_0)}$ 进行重组(此处省略项对消的代数过程):
- $L_T$:前向扩散终点与先验噪声的距离,由于前向过程固定,该项为常数。
- $L{t-1}$:核心训练项。它要求模型 $p\theta(x{t-1}|x_t)$ 去拟合以 $x_0$ 为条件的后验分布 $q(x{t-1}|x_t, x_0)$。
Step 3: 核心推导动机
为什么 $L_{t-1}$ 变得可计算了?
因为在给定 $x0$ 时,$q(x{t-1}|x_t, x_0)$ 具有闭式解(高斯分布)。通过计算两个高斯分布的 KL 散度,DDPM 将生成问题转化为了噪声预测问题:
$
L{simple} = \mathbb{E}{x0, \epsilon, t} \left[ | \epsilon - \epsilon\theta(x_t, t) |^2 \right]
$
2. DDIM 核心推导:基于“待定系数法”重构后验分布
DDIM 的核心洞察是:DDPM 的训练目标只依赖于边缘分布 $q(x_t|x_0)$。
为什么只依赖边缘分布?
回顾 DDPM 的损失函数 $L{\text{simple}} = \mathbb{E}{x0, \epsilon} [| \epsilon - \epsilon\theta(xt, t) |^2]$,其中输入的 $x_t$ 是通过 $x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon$ 得到的。可以看出,计算 Loss 仅需知道 $t$ 时刻 $x_t$ 相对于 $x_0$ 的分布(即边缘分布),而不需要知道 $x_t$ 究竟是经过怎样的路径(是否通过马尔可夫链)生成的(后面有进一步解释)。
这意味着: 只要我们构造一个新的前向过程,保证其边缘分布与 DDPM 一致,就能直接复用训练好的 $\epsilon\theta$ 模型,这为我们重新设计采样路径提供了理论自由度。
Step 1: 明确已知条件与约束
我们需要构造的分布必须满足以下两个核心约束(为了保证能复用 DDPM 训练好的模型):
- 边缘分布守恒:任意时刻 $t$,数据必须满足高斯分布:
- 时刻 $t-1$ 的一致性:同理,时刻 $t-1$ 也必须满足:
Step 2: 待定系数法构建 $x_{t-1}$
为了建立 $x_{t-1}$ 与 $x_t$ 的联系,我们观察到 $x_t$ 可以唯一确定当前时刻的累积噪声 $\epsilon_t$(在给定 $x_0$ 时):
我们可以假设生成的 $x{t-1}$ 是由三部分组成的线性组合:“信号部分” ($x_0$)、“已知噪声部分” ($\epsilon_t$) 和 “新引入的随机噪声” ($\epsilon{new}$)。
设定待定系数方程:
其中 $\epsilon_{new} \sim \mathcal{N}(0, \mathbf{I})$,$\sigma_t$ 是我们手动引入控制随机性的超参数。
求解系数 $C_1$ 和 $C_2$:
我们要让上式满足 Step 1 中的边缘分布定义 $x{t-1} \sim \mathcal{N}(\sqrt{\bar{\alpha}{t-1}}x0, (1-\bar{\alpha}{t-1})\mathbf{I})$。
匹配均值(确定 $C_1$):
对 $x_{t-1}$ 取期望(给定 $x_0$),噪声项均值为 0:根据边缘分布定义,均值应为 $\sqrt{\bar{\alpha}{t-1}} x_0$。
$\therefore C_1 = \sqrt{\bar{\alpha}{t-1}}$匹配方差(确定 $C_2$):
计算 $x{t-1}$ 的方差。由于 $\epsilon_t$ 和 $\epsilon{new}$ 相互独立,方差具有可加性:根据边缘分布定义,总方差应为 $1 - \bar{\alpha}{t-1}$。
$\therefore C_2^2 = (1 - \bar{\alpha}{t-1}) - \sigmat^2 \implies C_2 = \sqrt{1 - \bar{\alpha}{t-1} - \sigma_t^2}$
Step 3: 得到最终生成公式
将解出的系数代回原方程,我们得到了 $x{t-1}$ 的解析形式(这也是 $q(x{t-1}|x_t, x_0)$ 的采样实现):
在实际采样(反向过程)中,$x_0$ 是未知的,也无法获取真实的 $\epsilont$。因此,我们利用训练好的神经网络 $\epsilon\theta(x_t, t)$ 来预测噪声,并推导出预测的 $x_0$(记为 $\hat{x}_0$):
- 估计噪声:$\epsilont \approx \epsilon\theta(x_t, t)$
- 估计原图:$\hat{x}0 = \frac{x_t - \sqrt{1-\bar{\alpha}_t}\epsilon\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}}$
将 $\hat{x}0$ 和 $\epsilon\theta$ 代入 Step 3 的公式,即得到 DDIM 最终采样公式:
通过这种推导,我们可以清晰地看到:
- DDPM 是上述公式中 $\sigma_t^2$ 取最大值(即完全匹配马尔可夫链方差)时的特例。
- DDIM 是令 $\sigma_t=0$ 时的特例,此时随机项消失,采样变为确定的线性组合。
最后的说明——为什么:计算 Loss 仅需知道 $t$ 时刻 $x_t$ 相对于 $x_0$ 的分布(即边缘分布),而不需要知道 $x_t$ 究竟是经过怎样的路径(是否通过马尔可夫链)生成的?
简单来说,原因在于:我们在训练时,是直接“跳”到 $t$ 时刻生成 $x_t$ 的,根本没有通过马尔可夫链一步步走过去。
以下是详细的逻辑拆解:
1. 训练数据的构造方式:直接采样,而非递归生成
在 DDPM 的训练代码(以及算法原理)中,为了获得训练样本 $x_t$,我们并没有执行 $x_0 \to x_1 \to x_2 \dots \to x_t$ 这样的 $t$ 次加噪步骤。
相反,利用高斯分布的可加性,我们使用了一个“一步直达”的公式(即边缘分布公式):
这意味着:
- 当你计算 Loss 时,计算机做的事情是:随机取一张图 $x_0$,随机取一个时间 $t$,随机取一个噪声 $\epsilon$,直接通过上述公式算出 $x_t$。
- 在这个瞬间,中间状态 $x1, x_2, \dots, x{t-1}$ 在计算图中根本不存在。
2. 神经网络的视角:只看当前,不问过往
再看 Loss 函数的具体计算过程:
神经网络 $\epsilon_\theta$ 接收的输入只有两个:
- 当前的状态 $x_t$
- 当前的时间 $t$
神经网络的任务是:“看着这张 $t$ 时刻的噪声图,猜猜刚才加了多少噪($\epsilon$)”。
关键点在于:只要 $x_t$ 的分布是正确的(即满足 $q(x_t|x_0)$),神经网络就能学会去噪。至于这个 $x_t$ 到底是怎么来的——是严格遵循马尔可夫链一步步加噪来的,还是像 DDIM 那样通过其他非马尔可夫路径来的,甚至是直接用公式算出来的——神经网络完全不知道,也不在乎。
3. 数学上的独立性(目标函数的解耦)
虽然 DDPM 的 Loss 推导最初是从联合分布 $q(x_{1:T}|x_0)$ 的变分下界(ELBO)开始的:
但经过推导化简后,最终的 $L_{\text{simple}}$ 变成了对每个时刻 $t$ 的独立期望:
注意这里的期望 $\mathbb{E}$ 下标变成了 $q(x_t|x_0)$。这意味着,优化 $t$ 时刻的 Loss,只取决于 $t$ 时刻的边缘分布。各个时刻 $t$ 之间的依赖关系在 Loss 函数的最终形式中被解耦了。
3. DDIM 为什么能“跳步”?
DDIM 跳步公式
定义一个子序列 $\tau = [\tau_1, \tau_2, \dots, \tau_S]$,其中 $S \ll T$。采样公式改写为:
$
x{\tau{i-1}} = \sqrt{\bar{\alpha}{\tau{i-1}}} \hat{x}0 + \sqrt{1-\bar{\alpha}{\tau{i-1}}-\sigma{\taui}^2} \epsilon\theta(x{\tau_i}, \tau_i) + \sigma{\tau_i} \epsilon
$
核心原因分析:为什么 DDIM 能跳而 DDPM 不能?
核心原因:概率依赖的解耦
- DDPM 的局限:DDPM 的采样逻辑建立在反向马尔可夫链 $p(x_{t-1}|x_t)$ 上。这个分布只有在步长极小($\beta_t \to 0$)时,才能被近似为高斯分布。如果你强行跳步(比如从 $t=1000$ 跳到 $t=500$),步长过大,高斯近似失效,生成质量会崩溃。
- DDIM 的突破:DDIM 重新定义的 $q(x_{t-1}|x_t, x_0)$ 本质上不是通过相邻步的近似得到的,而是通过强制匹配全局边缘分布 $q(x_t|x_0)$ 构造出来的。这意味着无论 $t$ 和 $t-1$ 之间跨度有多大,这个数学关系在定义上永远成立。
确定性轨迹 vs 概率漂移
DDIM 在 $\sigma_t=0$ 时变成了一个确定性的常微分方程(ODE)求解过程。在 ODE 框架下,跨步采样本质上就是更粗粒度的数值积分(如欧拉法),虽然会有截断误差,但不会像 DDPM 那样因为概率分布不匹配而导致“迷失方向”。
4. 总结对比
| 特性 | DDPM | DDIM |
|---|---|---|
| 数学基础 | 马尔可夫链 + 贝叶斯后验近似 | 非马尔可夫构造 + 边缘分布匹配 |
| 采样公式项 | 均值(包含当前噪声)+ 固定方差噪声 | 预测 $x_0$ 项 + 修正方向项 + 可变噪声项 |
| 跳步能力 | 不支持(受限于马尔可夫高斯近似) | 支持(解耦了步间依赖,满足全局一致性) |
| 生成性质 | 随机性随机演化 | 确定性映射(当 $\sigma_t=0$) |