人人都能看懂的DDPM反向降噪过程公式推导

博客介绍图像反向降噪过程。先回顾前向加噪,提出训练噪声预测模型。阐述重参数技巧、正态分布概率密度函数和贝叶斯公式等数学基础。由x0、xt反推xt - 1,推断其分布并推导均值、方差。最后利用重参数技巧实现反向降噪,结果与论文算法一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0 前言

上一篇介绍了前向加噪过程,得到如下从 x0x_0x0 一步到 xtx_txt 过程:

  1. αt+βt=1\alpha_t +\beta_t=1αt+βt=1,其中 βt\beta_tβt 是正态分布方差,即第 ttt 步产生的噪声从 N(0,βt)N(0,\beta_t)N(0,βt) 采样。
  2. Xt=α‾tX0+1−α‾tztX_t = \sqrt{\overline{\alpha}_t} X_0 + \sqrt{1- \overline{\alpha}_t}z_tXt=αtX0+1αtzt,其中XtX_tXt表示第t步加噪后的图像,X0X_0X0表示初始图像。α‾t=αtαt−1αt−2...α1\overline{\alpha}_t = \alpha_t\alpha_{t-1}\alpha_{t-2}...\alpha_1αt=αtαt1αt2...α1ztz_tzt ~N(0,1)N(0, 1)N(0,1)

可以看到,加噪过程唯一不确定的是从标准正态分布中随机采样的噪声ztz_tzt。因此,我们训练一个噪声预测模型,模型预测当前图像的噪声ztz_tzt,记作ϵ\epsilonϵ

这样,可以从随机噪声中一步就可以预测到X0=1α‾t(Xt−1−α‾tϵ)X_0=\frac{1}{\sqrt{\overline \alpha_t}} (X_t-\sqrt{1-\overline\alpha_t}\epsilon)X0=αt1(Xt1αtϵ),然而,从图像中精准的预测ztz_tzt比较困难,尤其是在初始随机噪声中。

如果我们知道真实的X0X_0X0,结合XtX_tXt,我们可以比较置信的推导出xt−1x_{t-1}xt1。然而我们不可能知道真实X0X_0X0,但是可以借助模型预测,虽然从XtX_tXt直接预测X0X_0X0不够准确,但是此时预测出的X0X_0X0是根据当前XtX_tXt输入预测的最大可能性的X0X_0X0。可以将模型预测的X0X_0X0假设为真实X0X_0X0。直接反推Xt−1X_{t-1}Xt1,随着不断地反向迭代降噪,最终得到的X0X_0X0越来越接近真实分布。

1 数学基础

1.1 重参数技巧

X∼N(μ,σ2),Y∼N(0,1)X\sim N(\mu,\sigma^2),Y\sim N(0, 1)XN(μ,σ2)YN(0,1) , 则从 XXX 中随机采样zzz 等价于从标准正态分布 YYY 中采样 z′z'zz=μ+σz′z=\mu+\sigma z'z=μ+σz

1.2 正态分布概率密度函数

X∼N(μ,σ2)X∼N(\mu,\sigma^2)XN(μ,σ2),则其概率密度函数:
f(x)=12πσe−(x−μ)22σ2 f(x)=\frac{1}{\sqrt{2\pi}\sigma }e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=2πσ1e2σ2(xμ)2

1.3 贝叶斯公式
p(Xt−1∣Xt)=p(Xt∣Xt−1)p(Xt−1)p(Xt) p(X_{t-1}|X_t) = p(X_t|X_{t-1}) \frac{p(X_{t-1})}{p(X_t)} p(Xt1Xt)=p(XtXt1)p(Xt)p(Xt1)

2 由 x0x_0x0xtx_txt 反推 xt−1x_{t-1}xt1

2.1 推断xt−1x_{t-1}xt1分布

根据加噪过程,有如下4个公式:
q(xt−1∣x0)∼N(α‾t−1x0,(1−α‾t−1)I)公式(1)q(xt∣x0)∼N(α‾tx0,(1−α‾t)I)公式(2)q(xt∣xt−1)=αtxt−1+1−αtzt公式(3)q(xt∣xt−1,x0)=q(xt∣xt−1)∼N(αtxt−1,(1−αt)I)公式(4) \begin{aligned} &q(x_{t-1}|x_0) \sim N(\sqrt{\overline{\alpha}_{t-1}}x_0, (1-\overline{\alpha}_{t-1})I) &\qquad 公式(1)\\ &q(x_t|x_0) \sim N(\sqrt{\overline{\alpha}_t}x_0, (1-\overline{\alpha}_t)I) &\qquad 公式(2)\\ \\ &q(x_t|x_{t-1}) =\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}z_t &\qquad 公式(3)\\ &q(x_t|x_{t-1},x_0) = q(x_t|x_{t-1}) \sim N(\sqrt{\alpha_t}x_{t-1},(1-\alpha_t)I) &\qquad 公式(4) \end{aligned} q(xt1x0)N(αt1x0,(1αt1)I)q(xtx0)N(αtx0,(1αt)I)q(xtxt1)=αtxt1+1αtztq(xtxt1,x0)=q(xtxt1)N(αtxt1,(1αt)I)公式(1)公式(2)公式(3)公式(4)

在已知 xtx_txtx0x_0x0 时,反推xt−1x_{t-1}xt1,套用贝叶斯公式:

q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt−1∣x0)q(xt∣x0)=q(xt∣xt−1)q(xt−1∣x0)q(xt∣x0) \begin{aligned} 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)} \\ &=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)} \end{aligned} q(xt1xt,x0)=q(xtx0)q(xtxt1,x0)q(xt1x0)=q(xtx0)q(xtxt1)q(xt1x0)
因为 q(xt−1∣x0)q(x_{t-1}|x_0)q(xt1x0)q(xt∣x0)q(x_t|x_0)q(xtx0)q(xt∣xt−1,x0)q(x_t|x_{t-1},x_0)q(xtxt1,x0) 三项都服从正态分布,所以q(xt−1∣xt,x0)q(x_{t-1}|x_t, x_0)q(xt1xt,x0)服从某个正态分布,接下来只需计算这个正态分布的均值和方差。

2.2 推导xt−1x_{t-1}xt1均值、方差

从概率密度函数入手,q(xt−1∣xt,x0)q(x_{t-1}|x_t, x_0)q(xt1xt,x0) 概率密度如下:
12π1−αte−(xt−αtxt−1)22(1−αt)12π1−α‾t−1e−(xt−1−α‾t−1x0)22(1−α‾t−1)12π1−α‾te−(xt−α‾tx0)22(1−α‾t)=12π(1−αt)(1−α‾t−1)1−α‾te−[(xt−αtxt−1)22(1−αt)+(xt−1−α‾t−1x0)22(1−α‾t−1)−(xt−α‾tx0)22(1−α‾t)]公式(5) \begin{aligned} &\frac{\frac{1}{\sqrt{2\pi}\sqrt{1-\alpha_t}} e^{-\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{2(1-\alpha_t)}} \frac{1}{\sqrt{2\pi}\sqrt{1-\overline{\alpha}_{t-1}} }e^{-\frac{(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}}x_0)^2}{2(1-\overline{\alpha}_{t-1})}}} {\frac{1}{\sqrt{2\pi}\sqrt{1-\overline{\alpha}_t} }e^{-\frac{(x_t-\sqrt{\overline{\alpha}_t}x_0)^2}{2(1-\overline{\alpha}_t)}}} \\ \\ &=\frac{1}{\sqrt{2\pi}\sqrt\frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})}{1-\overline{\alpha}_t}} e^{-[\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{2(1-\alpha_t)}+\frac{(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}}x_0)^2}{2(1-\overline{\alpha}_{t-1})}-\frac{(x_t-\sqrt{\overline{\alpha}_t}x_0)^2}{2(1-\overline{\alpha}_t)}]} \qquad\qquad公式(5) \end{aligned} 2π1αt1e2(1αt)(xtαtx0)22π1αt1e2(1αt)(xtαtxt1)22π1αt11e2(1αt1)(xt1αt1x0)2=2π1αt(1αt)(1αt1)1e[2(1αt)(xtαtxt1)2+2(1αt1)(xt1αt1x0)22(1αt)(xtαtx0)2]公式(5)

前面有说到q(xt−1∣xt,x0)q(x_{t-1}|x_t, x_0)q(xt1xt,x0)服从某个正态分布,因此公式(1)是对应正态分布的概率密度函数。而正态分布的概率密度函数形式为f(x)=12πσe−(x−μ)22σ2f(x)=\frac{1}{\sqrt{2\pi}\sigma }e^{-\frac{(x-\mu)^2}{2\sigma^2}}f(x)=2πσ1e2σ2(xμ)2,对号入座,
12πσe(...)=12π(1−αt)(1−α‾t−1)1−α‾te(...) \frac{1}{\sqrt{2\pi}\sigma } e^{(...)}= \frac{1}{\sqrt{2\pi}\sqrt\frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})}{1-\overline{\alpha}_t}} e^{(...)} 2πσ1e(...)=2π1αt(1αt)(1αt1)1e(...)
即可以得知q(xt−1∣xt,x0)q(x_{t-1}|x_t, x_0)q(xt1xt,x0)的方差只能为:
σ2=(1−αt)(1−α‾t−1)1−α‾t公式(6) \sigma^2 = \frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})} {1-\overline{\alpha}_t} \qquad\qquad公式(6) σ2=1αt(1αt)(1αt1)公式(6)

为了凑成正态分布的概率密度函数,整理指数部分为−(x−μ)22σ2-\frac{(x-\mu)^2}{2\sigma^2}2σ2(xμ)2,即分母凑成2σ22\sigma^22σ2形式,结合公式(2):
−[(xt−αtxt−1)22(1−αt)+(xt−1−α‾t−1x0)22(1−α‾t−1)−(xt−α‾tx0)22(1−α‾t)]=−[(xt−αtxt−1)22σ2∗1−α‾t−11−α‾t+(xt−1−α‾t−1x0)22σ2∗1−αt1−α‾t−(xt−α‾tx0)22σ2∗(1−αt)(1−α‾t−1)(1−α‾t)2]=−12σ2[xt−12−2αt(1−α‾t−1)xt+α‾t−1(1−αt)x01−α‾txt−1+(αt(1−α‾t−1)xt+α‾t−1(1−αt)x01−α‾t)2]=−12σ2[xt−1−αt(1−α‾t−1)xt+α‾t−1(1−αt)x01−α‾t]2 \begin{aligned} &-[\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{2(1-\alpha_t)}+\frac{(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}}x_0)^2}{2(1-\overline{\alpha}_{t-1})}-\frac{(x_t-\sqrt{\overline{\alpha}_t}x_0)^2}{2(1-\overline{\alpha}_t)}] \\ \\ &=-[\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{2\sigma^2 } * \frac { 1-\overline{\alpha}_{t-1}} {1-\overline{\alpha}_t} +\frac{(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}}x_0)^2}{2\sigma^2} * \frac{1-\alpha_t} {1-\overline{\alpha}_t} -\frac{(x_t-\sqrt{\overline{\alpha}_t}x_0)^2}{2\sigma^2} * \frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})} {(1-\overline{\alpha}_t)^2} ] \\ \\ &=-\frac{1}{2\sigma^2}[x_{t-1}^2 - 2 \frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t}x_{t-1} +(\frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t})^2 ] \\ \\ &=-\frac{1}{2\sigma^2}[x_{t-1} - \frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t}]^2 \end{aligned} [2(1αt)(xtαtxt1)2+2(1αt1)(xt1αt1x0)22(1αt)(xtαtx0)2]=[2σ2(xtαtxt1)21αt1αt1+2σ2(xt1αt1x0)21αt1αt2σ2(xtαtx0)2(1αt)2(1αt)(1αt1)]=2σ21[xt1221αtαt(1αt1)xt+αt1(1αt)x0xt1+(1αtαt(1αt1)xt+αt1(1αt)x0)2]=2σ21[xt11αtαt(1αt1)xt+αt1(1αt)x0]2
对号入座,可得均值:
μ=αt(1−α‾t−1)xt+α‾t−1(1−αt)x01−α‾t公式(7)\mu= \frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t} \qquad\qquad公式(7)μ=1αtαt(1αt1)xt+αt1(1αt)x0公式(7)

将公式(7)中的x0x_0x0用模型预测噪声 ϵ\epsilonϵxtx_txt 替换:
xt=α‾tx0+1−α‾tϵ=>x0=xt−1−α‾tϵα‾t \begin{aligned} &x_t = \sqrt{\overline\alpha_t}x_0+ \sqrt{1-\overline\alpha_t}\epsilon \\ \\ => \quad&x_0 = \frac {x_t- \sqrt{1-\overline\alpha_t}\epsilon}{\sqrt{\overline \alpha_t}} \end{aligned} =>xt=αtx0+1αtϵx0=αtxt1αtϵ
替换 x0x_0x0 并化简得到均值:
μ=αt(1−α‾t−1)xt+α‾t−1(1−αt)x01−α‾t=αt(1−α‾t−1)xt+1αt(1−αt)(xt−1−α‾tϵ)1−α‾t=1αtαt(1−α‾t−1)xt+(1−αt)xt−(1−αt)1−α‾tϵ)1−α‾t=1αt(1−α‾t)xt−(1−αt)1−α‾tϵ)1−α‾t=1αt(xt−1−αt1−α‾tϵ) \begin{aligned} \mu&= \frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t} \\ \\ &=\frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+ \frac{1}{\sqrt{\alpha_t}}(1-\alpha_t)(x_t-\sqrt{1-\overline \alpha_t} \epsilon) }{1-\overline\alpha_t} \\ \\ &=\frac{1}{\sqrt{\alpha_t}} \frac {\alpha_t(1-\overline\alpha_{t-1})x_t+(1-\alpha_t)x_t - (1-\alpha_t)\sqrt{1-\overline\alpha_t}\epsilon)} {1-\overline\alpha_t} \\ \\ &=\frac{1}{\sqrt{\alpha_t}} \frac{(1-\overline\alpha_t)x_t-(1-\alpha_t)\sqrt{1-\overline\alpha_t}\epsilon)}{1-\overline\alpha_t} \\ \\ &=\frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ 1-\alpha_t }{\sqrt{1-\overline\alpha_t}} \epsilon) \end{aligned} μ=1αtαt(1αt1)xt+αt1(1αt)x0=1αtαt(1αt1)xt+αt1(1αt)(xt1αtϵ)=αt11αtαt(1αt1)xt+(1αt)xt(1αt)1αtϵ)=αt11αt(1αt)xt(1αt)1αtϵ)=αt1(xt1αt1αtϵ)

至此,我们得到了q(xt−1∣xt,x0)q(x_{t-1}|x_t, x_0)q(xt1xt,x0)所服从正态分布的均值 μ\muμ 和方差 σ2\sigma^2σ2
μ=1αt(xt−1−αt1−α‾tϵ)公式(8)σ2=(1−αt)(1−α‾t−1)1−α‾t=1−α‾t−11−α‾tβt公式(9) \begin{aligned} \mu &= \frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ 1-\alpha_t }{\sqrt{1-\overline\alpha_t}} \epsilon)&\qquad\qquad公式(8)\\ \\ \sigma^2 &= \frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})} {1-\overline{\alpha}_t} = \frac{1-\overline{\alpha}_{t-1}} {1-\overline{\alpha}_t} \beta_t &\qquad\qquad公式(9) \end{aligned} μσ2=αt1(xt1αt1αtϵ)=1αt(1αt)(1αt1)=1αt1αt1βt公式(8)公式(9)
注意公式(9),作者实验发现,σ2=1−α‾t−11−α‾tβt\sigma^2 =\frac{1-\overline{\alpha}_{t-1}} {1-\overline{\alpha}_t} \beta_tσ2=1αt1αt1βtσ2=βt\sigma^2 =\beta_tσ2=βt 效果相似。这也很好理解,因为1−α‾t−11−α‾t\frac{1-\overline{\alpha}_{t-1}} {1-\overline{\alpha}_t}1αt1αt1本身就近似等于1。

方差替换后效果相似原文
因此,方差就直接被替换。再次重新整理最终的均值和方差:
μ=1αt(xt−βt1−α‾tϵ)σ2=βt \begin{aligned} \mu &= \frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ \beta_t}{\sqrt{1-\overline\alpha_t}} \epsilon) \\ \\ \sigma^2 &= \beta_t \end{aligned} μσ2=αt1(xt1αtβtϵ)=βt
可得:

q(xt−1∣xt)∼N(μ,σ2)=N(1αt(xt−βt1−α‾tϵ),βt) q(x_{t-1}|x_t) \sim N(\mu, \sigma^2) = N(\frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ \beta_t}{\sqrt{1-\overline\alpha_t}} \epsilon) , \beta_t) q(xt1xt)N(μ,σ2)=N(αt1(xt1αtβtϵ),βt)

3 反向降噪

利用重参数技巧:
xt−1=μt+σz=1αt(xt−βt1−α‾tϵ)+βtz \begin{aligned} x_{t-1} &= \mu_t + \sigma z \\\\ &=\frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ \beta_t}{\sqrt{1-\overline\alpha_t}} \epsilon) + \sqrt{\beta_t} z \end{aligned} xt1=μt+σz=αt1(xt1αtβtϵ)+βtz

与论文降噪采样算法完全一致。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值