218 lines
11 KiB
Markdown
218 lines
11 KiB
Markdown
---
|
||
title: 1-DDPM-Diffusion扩散模型
|
||
draft: false
|
||
tags:
|
||
- DDPM
|
||
- 扩散模型
|
||
- 生成模型
|
||
- 深度学习
|
||
---
|
||
# Diffusion 扩散模型 (DDPM) 核心理论与严格推导
|
||
|
||
![[Pasted image 20260516171530.png]]
|
||
|
||
## 一、 概述与核心思想
|
||
|
||
Diffusion 扩散模型是一个类似多层 VAE(变分自编码器)架构的生成模型。它的核心思想可以提炼为两个互逆的过程:
|
||
|
||
1. **前向过程(加噪)**:通过输入一个具体的真实样本 $x_0$,在给定的时间步长 $T$ 内,通过不断注入高斯噪声,使整个样本最终完全失去原有特征,退化到一个已知的标准正态分布状态(纯噪声)。
|
||
|
||
2. **逆向过程(去噪)**:然后,模型通过神经网络拟合前向过程确定的**真实后验分布**,最终学习到一个近似的逆向转移概率 $p_\theta(x_{t-1}|x_t)$,从而实现从纯噪声中逐步生成真实数据的目的。
|
||
|
||
|
||
---
|
||
|
||
## 二、 第一部分:前向过程(噪声处理与马尔可夫链)
|
||
|
||
前向过程(Forward Process)是一个参数固定的马尔可夫链(Markov Chain)。我们人为定义每一步的加噪过程如下:
|
||
|
||
$$x_t = \sqrt{\alpha_t} x_{t - 1} + \sqrt{1 - \alpha_t} \epsilon_t$$
|
||
|
||
其中,$\epsilon_t \sim \mathcal{N}(0, I)$ 是引入的标准高斯噪声,$\alpha_t$ 是预设的超参数(通常随着时间步 $t$ 的增加,$\alpha_t$ 会逐渐减小,这意味着越往后加入的噪声比例越大)。为了书写和推导方便,通常也定义 $\beta_t = 1 - \alpha_t$。
|
||
|
||
这个式子可以等价改写为条件概率分布的形式:
|
||
|
||
$$q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{\alpha_t} x_{t - 1}, (1 - \alpha_t) I)$$
|
||
|
||
其中,前一部分 $\sqrt{\alpha_t} x_{t - 1}$ 是均值,后一部分 $(1 - \alpha_t) I$ 是协方差矩阵(方差)。
|
||
|
||
### 多步跳跃推导(重参数化技巧)
|
||
|
||
由马尔可夫链的性质,每一个 $x_t$ 只和上一个时间的 $x_{t-1}$ 状态有关。我们可以将上述式子展开,推导任意时刻 $x_t$ 与初始状态 $x_0$ 的直接关系:
|
||
|
||
$$x_t = \sqrt{\alpha_t} x_{t - 1} + \sqrt{1 - \alpha_t} \epsilon_t$$
|
||
|
||
$$x_{t-1} = \sqrt{\alpha_{t-1}} x_{t - 2} + \sqrt{1 - \alpha_{t-1}} \epsilon_{t-1}$$
|
||
|
||
将 $x_{t-1}$ 代入 $x_t$ 的表达式中:
|
||
|
||
$$x_t = \sqrt{\alpha_t} (\sqrt{\alpha_{t-1}} x_{t - 2} + \sqrt{1 - \alpha_{t-1}} \epsilon_{t-1}) + \sqrt{1 - \alpha_t} \epsilon_t$$
|
||
|
||
$$x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t - 2} + \sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-1} + \sqrt{1 - \alpha_t} \epsilon_t$$
|
||
|
||
根据高斯分布的可加性:两个独立的高斯分布 $\mathcal{N}(0, \sigma_1^2 I)$ 和 $\mathcal{N}(0, \sigma_2^2 I)$ 相加,结果仍是高斯分布 $\mathcal{N}(0, (\sigma_1^2 + \sigma_2^2) I)$。
|
||
|
||
上述两个噪声项的方差之和为:$\alpha_t (1 - \alpha_{t-1}) + (1 - \alpha_t) = 1 - \alpha_t \alpha_{t-1}$。
|
||
|
||
合并噪声项后得到:
|
||
|
||
$$x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t - 2} + \sqrt{1 - \alpha_t \alpha_{t-1}} \bar{\epsilon}$$
|
||
|
||
依次代入上述式子直到 $x_0$,我们定义 $\bar{\alpha}_t = \prod_{i=1}^t \alpha_i$,化简后得到最终的一步到位公式:
|
||
|
||
$$x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon'$$
|
||
|
||
_(注意此处 $\epsilon' \sim \mathcal{N}(0, I)$ 是累积合成后的标准高斯噪声)_
|
||
|
||
这一个结论可以衍生出以下**三个极其重要的等价推论**:
|
||
|
||
1. 可以直接反解出真实输入:
|
||
|
||
$$x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(x_t - \sqrt{1 - \bar{\alpha}_t} \epsilon')$$
|
||
|
||
2. 随机变量的分布表达:
|
||
|
||
$$x_t \sim \mathcal{N}(\sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I)$$
|
||
|
||
3. 概率密度函数表达:
|
||
|
||
$$q(x_t|x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I)$$
|
||
|
||
|
||
---
|
||
|
||
## 三、 第二部分:逆向过程与学习真实后验分布
|
||
|
||
我们希望模型能够学习到逆向过程的条件分布 $p_\theta(x_{t-1} | x_t)$。为了训练这个神经网络,我们需要一个目标,即用前向过程的**真实后验分布** $q(x_{t-1} | x_t, x_0)$ 作为指导。
|
||
|
||
_(训练时的近似目标:$q(x_{t-1} | x_t, x_0) \approx p_\theta(x_{t-1} | x_t)$)_
|
||
|
||
### 1. 贝叶斯公式展开
|
||
|
||
将已知条件 $x_0$ 视作先验条件,由条件贝叶斯公式 $P(A|B,C) = \frac{P(B|A,C) P(A|C)}{P(B|C)}$,我们得到:
|
||
|
||
$$q(x_{t-1} | x_t, x_0) = \frac{q(x_t | x_{t-1}, x_0) q(x_{t-1} | x_0)}{q(x_t | x_0)}$$
|
||
|
||
由于马尔可夫链的性质,$x_t$ 只依赖于 $x_{t-1}$,所以等式右边第一项中的 $x_0$ 可以消掉(即 $q(x_t | x_{t-1}, x_0) = q(x_t | x_{t-1})$),得到:
|
||
|
||
$$q(x_{t-1} | x_t, x_0) = \frac{q(x_t | x_{t-1}) q(x_{t-1} | x_0)}{q(x_t | x_0)}$$
|
||
|
||
### 2. 高斯分布的配方推导
|
||
|
||
根据第一部分的结论,公式右侧的三个概率分布均为已知的高斯分布:
|
||
|
||
- $q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{\alpha_t} x_{t - 1}, (1 - \alpha_t) I)$
|
||
|
||
- $q(x_{t-1} | x_0) = \mathcal{N}(x_{t-1}; \sqrt{\bar{\alpha}_{t-1}} x_0, (1 - \bar{\alpha}_{t-1}) I)$
|
||
|
||
- $q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I)$
|
||
|
||
|
||
我们将单变量正态分布的概率密度函数 $\rho(x) = \frac{1}{\sqrt{2\pi \sigma^2}} e^{-\frac{(x - \mu)^2}{2 \sigma^2}}$ 代入。由于我们只关心 $x_{t-1}$ 的分布形式,可以省略常数项,只看指数部分(高斯乘积与除法操作):
|
||
|
||
$$q(x_{t-1} | x_t, x_0) \propto \exp \left\{ -\frac{1}{2} \left[ \frac{(x_t - \sqrt{\alpha_t} x_{t-1})^2}{1 - \alpha_t} + \frac{(x_{t-1} - \sqrt{\bar{\alpha}_{t-1}} x_0)^2}{1 - \bar{\alpha}_{t-1}} - \frac{(x_t - \sqrt{\bar{\alpha}_t} x_0)^2}{1 - \bar{\alpha}_t} \right] \right\}$$
|
||
|
||
由于我们要求的是关于 $x_{t-1}$ 的分布,我们将括号内式子展开,并提取包含 $x_{t-1}^2$ 和 $x_{t-1}$ 的项,将其凑成 $a x_{t-1}^2 - 2b x_{t-1} + c$ 的形式:
|
||
|
||
$$= \exp \left\{ -\frac{1}{2} \left[ \left( \frac{\alpha_t}{1-\alpha_t} + \frac{1}{1-\bar{\alpha}_{t-1}} \right) x_{t-1}^2 - 2 \left( \frac{\sqrt{\alpha_t}}{1-\alpha_t} x_t + \frac{\sqrt{\bar{\alpha}_{t-1}}}{1-\bar{\alpha}_{t-1}} x_0 \right) x_{t-1} + C(x_t, x_0) \right] \right\}$$
|
||
|
||
配方后,它必然构成一个新的高斯分布 $\mathcal{N}(x_{t-1}; \tilde{\mu}_t, \tilde{\beta}_t I)$,其中:
|
||
|
||
- 方差的倒数(精度):$\frac{1}{\tilde{\beta}_t} = \frac{\alpha_t}{1-\alpha_t} + \frac{1}{1-\bar{\alpha}_{t-1}} = \frac{\alpha_t - \bar{\alpha}_t + 1 - \alpha_t}{(1-\alpha_t)(1-\bar{\alpha}_{t-1})} = \frac{1-\bar{\alpha}_t}{(1-\alpha_t)(1-\bar{\alpha}_{t-1})}$
|
||
|
||
- 均值:$\tilde{\mu}_t = \tilde{\beta}_t \times \left( \frac{\sqrt{\alpha_t}}{1-\alpha_t} x_t + \frac{\sqrt{\bar{\alpha}_{t-1}}}{1-\bar{\alpha}_{t-1}} x_0 \right)$
|
||
|
||
|
||
### 3. 后验分布的最终形态
|
||
|
||
经过上述代数计算,我们最终得到真实后验分布的参数:
|
||
|
||
$$q(x_{t-1} | x_t, x_0) = \mathcal{N}\left( x_{t-1}; \tilde{\mu}_t(x_t, x_0), \tilde{\beta}_t I \right)$$
|
||
|
||
**其中均值(与 $x_0$ 和 $x_t$ 有关):**
|
||
|
||
$$\tilde{\mu}_t(x_t, x_0) = \frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1 - \bar{\alpha}_t} x_0 + \frac{\sqrt{\alpha_t} (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} x_t$$
|
||
|
||
_(这里记 $\beta_t = 1 - \alpha_t$)_
|
||
|
||
**其中方差(这是一个随时间 $t$ 变化的超参数/常量):**
|
||
|
||
$$\tilde{\beta}_t = \frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \cdot \beta_t$$
|
||
|
||
这个 $q(x_{t-1} | x_t, x_0)$ 就是训练时用于指导模型 $p_\theta$ 学习的”Ground Truth”近似函数。
|
||
|
||
---
|
||
|
||
## 四、 ELBO 分解:从变分下界到噪声预测
|
||
|
||
### 4.1 变分推断框架
|
||
|
||
DDPM 的训练目标可以通过**变分下界 (Evidence Lower Bound, ELBO)** 推导。设真实数据分布为 $x_0 \sim q(x_0)$,我们希望学习一个生成模型 $p_\theta$。
|
||
|
||
ELBO 的分解如下:
|
||
|
||
$$\log p_\theta(x_0) \geq \mathcal{L}_{\text{ELBO}} = \underbrace{\mathbb{E}_{q(x_1|x_0)} \left[ \log p_\theta(x_0|x_1) \right]}_{\text{Reconstruction Term}} + \sum_{t=1}^{T} \underbrace{\mathbb{E}_{q(x_t|x_0)} \left[ \text{KL}(q(x_{t-1}|x_t, x_0) \| p_\theta(x_{t-1}|x_t)) \right]}_{\text{Latent Matching Term}}$$
|
||
|
||
**直觉解释**:
|
||
|
||
- **Reconstruction Term**:给定 $x_1$,要求模型能够重建 $x_0$。这对应于解码器的重建能力。
|
||
- **Latent Matching Term**:要求模型学习到的逆向分布 $p_\theta(x_{t-1}|x_t)$ 尽可能接近真实后验 $q(x_{t-1}|x_t, x_0)$。$t$ 越大(越接近纯噪声),这一项的权重通常越大。
|
||
|
||
### 4.2 从 ELBO 到噪声预测损失的严格推导
|
||
|
||
关键步骤在于**重参数化与均值替换**。
|
||
|
||
已知真实后验均值:
|
||
|
||
$$\tilde{\mu}_t(x_t, x_0) = \frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1 - \bar{\alpha}_t} x_0 + \frac{\sqrt{\alpha_t} (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} x_t$$
|
||
|
||
由前向过程反解 $x_0$:
|
||
|
||
$$x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(x_t - \sqrt{1 - \bar{\alpha}_t} \epsilon)$$
|
||
|
||
代入 $\tilde{\mu}_t$,化简后得到:
|
||
|
||
$$\tilde{\mu}_t(x_t, x_0) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon \right)$$
|
||
|
||
由于 $p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_t)$,且 $\Sigma_t$ 为固定常量,最小化 KL 散度等价于最小化均方误差:
|
||
|
||
$$\| \tilde{\mu}_t - \mu_\theta \|^2 \propto \left\| \epsilon - \underbrace{\sqrt{1 - \bar{\alpha}_t} \cdot \mu_\theta(x_t, t)}_{\text{网络预测的等效噪声}} \right\|^2$$
|
||
|
||
**结论**:网络 $\epsilon_\theta(x_t, t)$ 直接预测噪声 $\epsilon$,与预测均值 $\mu_\theta$ 在最优解下完全等价。
|
||
|
||
---
|
||
|
||
## 五、 模型优化与损失函数
|
||
|
||
在实际训练中,我们希望神经网络预测的概率分布 $p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta)$ 尽可能的逼近上述推导出的真实后验分布 $q$。
|
||
|
||
通过最小化两者之间的 KL 散度(KL Divergence),由于两者的方差都被设定为确定的常数,这个优化问题直接简化为**拟合两个高斯分布的均值**(即让 $\mu_\theta$ 去逼近 $\tilde{\mu}_t$):
|
||
|
||
$$L \propto \| \tilde{\mu}_t - \mu_\theta \|^2$$
|
||
|
||
进一步地,如果我们将前向过程中推导出的 $x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(x_t - \sqrt{1 - \bar{\alpha}_t} \epsilon)$ 代入到均值表达式 $\tilde{\mu}_t$ 中,会发现拟合均值本质上等价于**让神经网络去预测前向过程中加入的噪声 $\epsilon$**。
|
||
|
||
最终,通过严密的化简,DDPM的损失函数化简为一个极其优雅的噪声预测损失(Noise Prediction Loss):
|
||
|
||
$$L_{simple} = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right]$$
|
||
|
||
这意味着,网络 $\epsilon_\theta$ 只需要根据当前的带噪图像 $x_t$ 和时间步 $t$,预测出这一步中注入的噪声 $\epsilon$ 即可。
|
||
|
||
### 5.1 采样过程(反向过程)
|
||
|
||
训练完成后,我们通过以下步骤从纯噪声生成样本:
|
||
|
||
**Algorithm: DDPM Sampling**
|
||
|
||
1. **初始化**:$x_T \sim \mathcal{N}(0, I)$(纯噪声)
|
||
2. **迭代去噪**:对 $t = T, T-1, \dots, 1$ 执行:
|
||
|
||
$$x_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon_\theta(x_t, t) \right) + \sqrt{\tilde{\beta}_t} \cdot z, \quad z \sim \mathcal{N}(0, I)$$
|
||
|
||
其中 $\epsilon_\theta$ 是训练好的噪声预测网络,$\tilde{\beta}_t = \frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \cdot \beta_t$。
|
||
|
||
3. **输出**:$x_0$ 即为生成的样本
|
||
|
||
**物理意义**:每一步迭代,模型根据当前带噪状态 $x_t$ 预测注入的噪声,然后减去这部分噪声(即”去噪”),再加上少量的随机方差 $\sqrt{\tilde{\beta}_t} z$ 以保持概率流的对齐。
|
||
|
||
--- |