--- 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$ 以保持概率流的对齐。 ---