跳转到内容

输入关键词开始搜索

    DDPM 前向与反向扩散公式推导

    概念更新 2026-07-01置信度 high#概念#扩散模型#视觉生成#基础

    前向加噪用重参数化一步直达,反向去噪用贝叶斯公式 + 神经网络近似——两者都是确定性推导,没有“玄学”。

    扩散模型(Denoising Diffusion Probabilistic Models, DDPM)的两条核心公式:

    前向加噪(任意 tt 一步直达):

    xt=αˉtx0+1αˉtε,εN(0,I)x_t = \sqrt{\bar{\alpha}_t}, x_0 + \sqrt{1 - \bar{\alpha}_t}, \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, I)

    反向去噪(逐步从噪声恢复数据):

    xt1=1αt(xt1αt1αˉtεθ(xt,t))+σtδ,δN(0,I)x_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}},\varepsilon\theta(x_t, t)\right) + \sigma_t \delta, \quad \delta \sim \mathcal{N}(0, I)

    这两条公式分别是 DDPM 训练和推理的数学核心。下面从 Markov 链的物理直觉出发,逐步推导。

    DDPM 将加噪定义为 Markov 扩散过程——每一步在前一步基础上加高斯噪声:

    q(xtxt1)=N(xt;  1βtxt1,  βtI)(1)q(x_t \mid x_{t-1}) = \mathcal{N}\left(x_t;; \sqrt{1-\beta_t}, x_{t-1},; \beta_t I\right) \qquad (1)

    符号 含义
    βt(0,1)\beta_t \in (0,1) 噪声调度(noise schedule),控制每步加多少噪声,通常 β1<β2<<βT\beta_1 < \beta_2 < \dots < \beta_T
    1βt\sqrt{1-\beta_t} 对先前状态的缩放因子:“保留信号”的比例
    βtI\beta_t I 新添加噪声的方差

    为什么是这个形式? 这是**方差保持(variance-preserving, VP)**扩散过程。经过 TT 步后,xTx_T 渐进收敛到 N(0,I)\mathcal{N}(0, I)——无论 x0x_0 是什么分布。这是扩散模型能从任意噪声出发生成任意图像的数学根基。

    重参数化:一步跳到任意 tt

    Section titled “重参数化:一步跳到任意 ”

    高斯分布的核心性质——两个独立高斯之和仍为高斯——意味着不需要迭代 tt 步才能得到 xtx_t

    先引入简写 αt=1βt\alpha_t = 1 - \beta_t,利用重参数化技巧把 (1)(1) 写成:

    xt=αtxt1+1αtεt1,εt1N(0,I)x_t = \sqrt{\alpha_t}, x_{t-1} + \sqrt{1-\alpha_t}, \varepsilon_{t-1}, \quad \varepsilon_{t-1} \sim \mathcal{N}(0, I)

    递归展开:

    xt=αtxt1+1αtεt1=αt(αt1xt2+1αt1εt2)+1αtεt1=αtαt1xt2+αt(1αt1)εt2+1αtεt1两个独立高斯噪声的加权和=αtαt1xt2+1αtαt1ε\begin{aligned} x_t &= \sqrt{\alpha_t}, x_{t-1} + \sqrt{1-\alpha_t}, \varepsilon_{t-1} \[4pt] &= \sqrt{\alpha_t},\left(\sqrt{\alpha_{t-1}}, x_{t-2} + \sqrt{1-\alpha_{t-1}}, \varepsilon_{t-2}\right) + \sqrt{1-\alpha_t}, \varepsilon_{t-1} \[4pt] &= \sqrt{\alpha_t \alpha_{t-1}}, x_{t-2} + \underbrace{\sqrt{\alpha_t(1-\alpha_{t-1})}, \varepsilon_{t-2} + \sqrt{1-\alpha_t}, \varepsilon_{t-1}}{\text{两个独立高斯噪声的加权和}} \[4pt] &= \sqrt{\alpha_t \alpha{t-1}}, x_{t-2} + \sqrt{1 - \alpha_t \alpha_{t-1}}, \varepsilon' \end{aligned}

    继续递归到底,定义 αˉt=s=1tαs\bar{\alpha}_t = \prod_{s=1}^t \alpha_s,得到最终形式:

    xt=αˉtx0+1αˉtε,εN(0,I)(2)\boxed{x_t = \sqrt{\bar{\alpha}_t}, x_0 + \sqrt{1 - \bar{\alpha}_t}, \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, I)} \qquad (2)

    关键洞察αˉt[0,1]\bar{\alpha}_t \in [0, 1] 随时间递减——t=0t=0αˉ01\bar{\alpha}_0 \approx 1(几乎原图),t=Tt=TαˉT0\bar{\alpha}_T \approx 0(几乎纯噪声)。不需要逐步迭代,任意 tt 一步直达,训练效率大幅提升。

    如果我们知道 x0x_0,反向条件分布 q(xt1xt,x0)q(x_{t-1} \mid x_t, x_0) 可以用贝叶斯公式精确推导:

    q(xt1xt,x0)=q(xtxt1)q(xt1x0)q(xtx0)q(x_{t-1} \mid x_t, x_0) = \frac{q(x_t \mid x_{t-1}), q(x_{t-1} \mid x_0)}{q(x_t \mid x_0)}

    把三个高斯分布概率密度函数代入、展开、整理,得到同样形式的高斯:

    q(xt1xt,x0)=N(xt1;  μt(xt,x0),  βtI)q(x_{t-1} \mid x_t, x_0) = \mathcal{N}\left(x_{t-1};; \tilde{\mu}_t(x_t, x_0),; \tilde{\beta}_t I\right)

    其中精确均值 μ~t\tilde{\mu}_t 为:

    μt(xt,x0)=αˉt1βt1αˉtx0+αt(1αˉt1)1αˉtxt(3)\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 \qquad(3)t(xt,x0)=1αˉtαˉt1βtx0+1αˉtαt(1αˉt1)xt(3)

    问题:推理时根本没有 x0x_0。这个精确后验只是理论公式,没法直接用。

    神经网络近似:从预测 x0x_0 到预测噪声

    Section titled “神经网络近似:从预测 到预测噪声”

    用网络参数化的高斯近似真实后验:

    pθ(xt1xt)=N(xt1;  μθ(xt,t),  σt2I)p_\theta(x_{t-1} \mid x_t) = \mathcal{N}\left(x_{t-1};; \mu_\theta(x_t, t),; \sigma_t^2 I\right)

    然后用变分下界(ELBO)推导损失。Ho et al. (2020) 的关键实验发现:与其让网络预测 x0x_0 再代入 (3)(3) 算均值,不如直接预测噪声 ε\varepsilon,效果更好。

    推导如下——由 (2)(2) 解出 x0x_0

    x0=1αˉt(xt1αˉtε)(4)x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}\left(x_t - \sqrt{1-\bar{\alpha}_t},\varepsilon\right) \qquad(4)

    (4)(4) 代入 (3)(3)μ~t\tilde{\mu}_t 公式,消去 x0x_0

    μt=αˉt1βt1αˉtxt1αˉtεαˉt+αt(1αˉt1)1αˉtxt=1αt(xt1αt1αˉtε)\begin{aligned} \tilde{\mu}t &= \frac{\sqrt{\bar{\alpha}{t-1}},\beta_t}{1-\bar{\alpha}_t} \cdot \frac{x_t - \sqrt{1-\bar{\alpha}_t},\varepsilon}{\sqrt{\bar{\alpha}t}} + \frac{\sqrt{\alpha_t},(1-\bar{\alpha}{t-1})}{1-\bar{\alpha}_t},x_t \[4pt] &= \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}},\varepsilon\right) \end{aligned}t=1αˉtαˉt1βtαˉtxt1αˉtε+1αˉtαt(1αˉt1)xt=αt1(xt1αˉt1αtε)

    用网络预测 εθ(xt,t)\varepsilon_\theta(x_t, t) 替代真实 ε\varepsilon,就得到采样公式:

    xt1=1αt(xt1αt1αˉtεθ(xt,t))+σtδ(5)\boxed{x_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}},\varepsilon\theta(x_t, t)\right) + \sigma_t \delta} \qquad (5)

    最后一项 σtδ\sigma_t \deltaδN(0,I)\delta \sim \mathcal{N}(0, I))是随机采样时加回的微小噪声——也是生成多样性的来源

    训练目标也简化成极简 MSE:

    L=Eε,t[εεθ(xt,t)2]\mathcal{L} = \mathbb{E}{\varepsilon, t}\left[|\varepsilon - \varepsilon\theta(x_t, t)|^2\right]

    DDPM 论文发现所有复杂的系数在消去 x0x_0 后都成了常数因子,直接去掉反而训练更稳定。最终 Loss 就是预测噪声与真实噪声的 L2 距离。

    如何嵌入自回归:MAR 的 Diffusion Loss

    Section titled “如何嵌入自回归:MAR 的 Diffusion Loss”

    MAR 对标准 DDPM 做了一个关键改造——加入自回归产生的条件 zz

    Loss

    L(z,x)=Eε,t[εεθ(xtt,z)2]\mathcal{L}(z, x) = \mathbb{E}{\varepsilon, t}\left[ |\varepsilon - \varepsilon\theta(x_t \mid t, z)|^2 \right]

    其中 zz 是 Transformer 产生的条件向量,去噪 MLP εθ\varepsilon_\theta 的输入多了一个 zz。梯度从 Diffusion Loss 穿过 zz 流向整个 Transformer。

    采样(加温度):

    xt1=1αt(xt1αt1αˉtεθ(xtt,z))+τσtδx_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}},\varepsilon\theta(x_t \mid t, z)\right) + \tau \cdot \sigma_t \delta

    温度 τ\tau 缩放噪声方差,控制生成多样性——等价于离散自回归中的 temperature 采样。

    维度 DDPM (Diffusion) Flow Matching
    前向路径形状 曲线αˉt\bar{\alpha}_t 决定弯曲程度) 直线
    预测目标 噪声 ε\varepsilon 速度 v=x1εv = x_1 - \varepsilon
    推理步数 通常 50–1000 通常更少
    温度方案 缩放 σtδ\sigma_t \delta 有别的方式

    详见 条件流匹配(CFM)