扩散模型的损失推导

定义

扩散模型真正想最大化的是数据对数似然 log⁡pθ(x0)\log p_\theta(x_0),但 pθ(x0)p_\theta(x_0) 需要对所有中间潜变量 x1:Tx_{1:T} 积分,无法直接算。于是用变分推断把它松弛成可优化的下界——ELBO(Evidence Lower Bound,证据下界):

log⁡pθ(x0)≥Eq(x1:T∣x0)[log⁡pθ(x0:T)q(x1:T∣x0)]=:L\log p_\theta(x_0) \geq \mathbb{E}_{q(x_{1:T}\mid x_0)}\left[\log\frac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)}\right] =: \mathcal{L}

DDPM 里那个「硬给」的损失 Lsimple=∥ϵ−ϵθ(xt,t)∥2L_{simple} = \|\epsilon - \epsilon_\theta(x_t, t)\|^2,正是从这个 ELBO 一步步简化出来的。

直观理解

训练的本质是:让反向去噪过程(网络学的)尽可能贴近前向加噪过程的逆(已知的)。

关键洞察在于:前向过程虽然整体是「加噪」,但只要给定 x0x_0 和 xtx_t,就能算出 xt−1x_{t-1} 最可能长什么样——即后验 q(xt−1∣xt,x0)q(x_{t-1}\mid x_t, x_0) 有闭式解(因为加噪是线性高斯的)。这个后验就是去噪的「标准答案」,网络照着它学即可。

所以整个推导的线索是:

后验 q(xt−1∣xt,x0)q(x_{t-1}\mid x_t,x_0) 可解析算 → 它是高斯,有明确均值 → 网络只需学这个均值 → 均值最终只依赖「加进去的噪声 ϵ\epsilon」→ 损失退化成预测噪声的 MSE。

公式推导

1. 展开 ELBO 成三项

利用马尔可夫性质与贝叶斯公式,把 L\mathcal{L} 拆开:

L=Eq[log⁡pθ(x0∣x1)]⏟L0−∑t=2TDKL(q(xt−1∣xt,x0) ∥ pθ(xt−1∣xt))⏟Lt−1−DKL(q(xT∣x0) ∥ p(xT))⏟LT\mathcal{L} = \underbrace{\mathbb{E}_q[\log p_\theta(x_0\mid x_1)]}_{L_0} - \underbrace{\sum_{t=2}^{T} D_{KL}\big(q(x_{t-1}\mid x_t,x_0)\,\|\,p_\theta(x_{t-1}\mid x_t)\big)}_{L_{t-1}} - \underbrace{D_{KL}\big(q(x_T\mid x_0)\,\|\,p(x_T)\big)}_{L_T}
  • LTL_T:让 xTx_T 接近标准噪声,不含可训练参数(βt\beta_t 固定时它接近 0),可忽略
  • Lt−1L_{t-1}:主体,逐时间步比较「真实后验」与「网络反向」
  • L0L_0:最后一步解码,DDPM 里也常近似忽略

2. 后验 q(xt−1∣xt,x0)q(x_{t-1}\mid x_t,x_0) 的闭式解

前向的三个分布都是高斯:q(xt∣x0)q(x_t\mid x_0)、q(xt−1∣x0)q(x_{t-1}\mid x_0)、q(xt∣xt−1)q(x_t\mid x_{t-1})。对高斯套贝叶斯,得后验仍是高斯:

q(xt−1∣xt,x0)=N(μ~t(xt,x0), β~tI)q(x_{t-1}\mid x_t,x_0) = \mathcal{N}\left(\tilde\mu_t(x_t,x_0),\ \tilde\beta_t I\right) μ~t=αˉt−1 βt1−αˉtx0+αt(1−αˉt−1)1−αˉtxt,β~t=1−αˉt−11−αˉtβt\tilde\mu_t = \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 \tilde\beta_t = \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_t

其中 αt=1−βt\alpha_t = 1-\beta_t,αˉt=∏s=1tαs\bar\alpha_t = \prod_{s=1}^t \alpha_s(见 diffusion process)。

3. 把 x0x_0 换成噪声表示

由重参数化 xt=αˉt x0+1−αˉt ϵx_t = \sqrt{\bar\alpha_t}\,x_0 + \sqrt{1-\bar\alpha_t}\,\epsilon,反解:

x0=xt−1−αˉt ϵαˉtx_0 = \frac{x_t - \sqrt{1-\bar\alpha_t}\,\epsilon}{\sqrt{\bar\alpha_t}}

代入 μ~t\tilde\mu_t,消掉 x0x_0:

μ~t=1αt(xt−βt1−αˉt ϵ)\tilde\mu_t = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\,\epsilon\right)

这是关键一步:后验均值被写成「当前 xtx_t 减掉一个可预测的噪声」,于是「学后验」等价于「学噪声」。

4. 网络参数化与 KL 化简

让网络取同样形式,只是把未知的 ϵ\epsilon 换成网络输出 ϵθ(xt,t)\epsilon_\theta(x_t,t):

μθ(xt,t)=1αt(xt−βt1−αˉt ϵθ(xt,t))\mu_\theta(x_t,t) = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\,\epsilon_\theta(x_t,t)\right)

两个方差相同的高斯,其 DKLD_{KL} 退化为均值差的加权平方:

Lt−1=E[12σt2∥μ~t−μθ∥2]∝E[∥ϵ−ϵθ(xt,t)∥2]L_{t-1} = \mathbb{E}\left[\frac{1}{2\sigma_t^2}\|\tilde\mu_t - \mu_\theta\|^2\right] \propto \mathbb{E}\left[\|\epsilon - \epsilon_\theta(x_t,t)\|^2\right]

5. 丢掉系数 → LsimpleL_{simple}

DDPM 实验发现,直接丢掉前面的权重系数、均匀采样时间步 tt,训练反而更稳:

Lsimple=Et, x0, ϵ[∥ϵ−ϵθ(xt,t)∥2]L_{simple} = \mathbb{E}_{t,\,x_0,\,\epsilon}\left[\|\epsilon - \epsilon_\theta(x_t,t)\|^2\right]

[!note] 结论 「预测噪声」不是拍脑袋定的,而是「学反向过程」在数学上等价的结果;LsimpleL_{simple} 是 ELBO 的简化形式,简化掉的是那些 KL 项的权重系数。

相关

  • DDPM — 这个损失的最终使用与采样公式
  • diffusion process — 前向过程 q(xt∣x0)q(x_t\mid x_0) 的闭式采样
  • 马尔可夫链 — 前向/反向的马尔可夫结构
  • KL散度 — 损失中 KL 项的来源