DDPM扩散模型数学推导

文章探讨了在原始数据上添加高斯噪声后的扩散过程,通过正向和逆向传播的数学描述,展示了如何利用贝叶斯公式和神经网络预测噪声项,实现从最终噪声到初始数据的反向推进。

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

扩散过程

x0→x1→x2→⋯→xN∼N(0,I) x_0\rightarrow x_1 \rightarrow x_2 \rightarrow\cdots\rightarrow x_N \sim N(0,I) x0x1x2xNN(0,I)

在原始数据分布上添加高斯噪声,使之在最后成为一个纯噪声。
αt=1−βt \alpha_t = 1-\beta_t αt=1βt

扩散过程中β\betaβ越来越大,α\alphaα越来越小。

加噪公式:
xt=αtxt−1+1−αtϵt x_t = \sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon_t xt=αtxt1+1αtϵt
其中ϵ∼N(0,1)\epsilon\sim N(0,1)ϵN(0,1),噪声参数增大使得在扩散过程中的不同步骤间相对的扩散幅度一致。

对于xt−1x_{t-1}xt1有:
xt−1=αt−1xt−2+1−αt−1ϵt−1 x_{t-1}=\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}}\epsilon_{t-1} xt1=αt1xt2+1αt1ϵt1
代入上式得:
xt=αtαt−1xt−2+αt(1−αt−1)ϵt−1+1−αtϵ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 xt=αtαt1xt2+αt(1αt1)ϵt1+1αtϵt
这里有两个正态分布ϵt,ϵt−1\epsilon_t,\epsilon_{t-1}ϵt,ϵt1,要对他们的结果进行求和,可以使用卷积,当然也可以直接根据正态分布求和的性质,可知求和后的方差为之前两个方差之和:
xt=αtαt−1xt−2+1−αtαt−1ϵ x_t = \sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_t\alpha_{t-1}}\epsilon xt=αtαt1xt2+1αtαt1ϵ
不断向后迭代代入,可得:
xt=∏i=0tαix0+1−∏i=0tαiϵ x_t = \sqrt{\prod_{i=0}^{t}\alpha_i}x_0+\sqrt{1-\prod_{i=0}^{t}\alpha_i}\epsilon xt=i=0tαix0+1i=0tαiϵ这里ϵ\epsilonϵ是另一个新的服从N(0,1)\mathcal{N(0,1)}N(0,1)的分布,记 α‾t=∏i=0tαi\overline{\alpha}_t=\prod_{i=0}^{t}\alpha_iαt=i=0tαi,正向过程的表达式可写为
xt=α‾tx0+1−α‾tϵ x_t = \sqrt{\overline{\alpha}_t}x_0+\sqrt{1-\overline{\alpha}_t}\epsilon xt=αtx0+1αtϵ

逆向过程

要倒推的话,根据贝叶斯公式:
P(xt−1∣xt)=P(xt∣xt−1)P(xt−1)P(xt) P(x_{t-1}|x_t) = \frac{P(x_t|x_{t-1})P(x_{t-1})}{P(x_t)} P(xt1xt)=P(xt)P(xtxt1)P(xt1)写的更完整一点,加上given x0x_0x0,得到
P(xt−1∣xt,x0)=P(xt∣xt−1,x0)P(xt−1∣x0)P(xt∣x0) P(x_{t-1}|x_t, x_0) = \frac{P(x_t|x_{t-1},x_0)P(x_{t-1}|x_0)}{P(x_t|x_0)} P(xt1xt,x0)=P(xtx0)P(xtxt1,x0)P(xt1x0)这三个概率可以分别替换成其属于的正态分布:
P(xt∣xt−1,x0)=αtxt−1+1−αtϵt∼N(αtxt−1,1−αt)P(xt−1∣x0)=α‾t−1x0+1−α‾t−1ϵ∼N(α‾t−1x0,1−α‾t−1)P(xt∣x0)=α‾tx0+1−α‾tϵ∼N(α‾tx0,1−α‾t) P(x_t|x_{t-1},x_0) = \sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon_t\sim\mathcal{N}(\sqrt{\alpha_t}x_{t-1},1-\alpha_t)\\ P(x_{t-1}|x_0) = \sqrt{\overline{\alpha}}_{t-1}x_{0}+\sqrt{1-\overline{\alpha}_{t-1}}\epsilon\sim\mathcal{N}(\sqrt{\overline{\alpha}}_{t-1}x_{0},1-\overline{\alpha}_{t-1})\\ P(x_{t}|x_0) = \sqrt{\overline{\alpha}}_{t}x_{0}+\sqrt{1-\overline{\alpha}_{t}}\epsilon\sim\mathcal{N}(\sqrt{\overline{\alpha}}_{t}x_{0},1-\overline{\alpha}_{t})\\ P(xtxt1,x0)=αtxt1+1αtϵtN(αtxt1,1αt)P(xt1x0)=αt1x0+1αt1ϵN(αt1x0,1αt1)P(xtx0)=αtx0+1αtϵN(αtx0,1αt)
将这三个分布带入贝叶斯公式进行计算化简,得到P(xt−1∣xt,x0)P(x_{t-1}|x_t,x_0)P(xt1xt,x0)满足的分布
P(xt−1∣xt,x0)∼N(at(1−a‾t−1)1−a‾txt+at−1(1−a‾t)1−a‾tx0,(1−at1−a‾t−11−a‾t)2) P(x_{t-1}|x_t,x_0)\sim\mathcal{N}(\frac{\sqrt{a_t}(1-\overline{a}_{t-1})}{1-\overline{a}_t}x_t+\frac{\sqrt{a_{t-1}}(1-\overline{a}_{t})}{1-\overline{a}_t}x_0, (\frac{\sqrt{1-a_t}\sqrt{1-\overline{a}_{t-1}}}{\sqrt{1-\overline{a}_t}})^2) P(xt1xt,x0)N(1atat(1at1)xt+1atat1(1at)x0,(1at1at1at1)2)同时,将x0x_0x0由上面的公式xt=α‾tx0+1−α‾tϵx_t = \sqrt{\overline{\alpha}_t}x_0+\sqrt{1-\overline{\alpha}_t}\epsilonxt=αtx0+1αtϵ反解带入,得到
P(xt−1∣xt,x0)∼N(at(1−a‾t−1)1−a‾txt+at−1(1−a‾t)1−a‾t×xt−1−a‾t×ϵa‾t,(1−at1−a‾t−11−a‾t)2) P(x_{t-1}|x_t,x_0)\sim\mathcal{N}(\frac{\sqrt{a_t}(1-\overline{a}_{t-1})}{1-\overline{a}_t}x_t+\frac{\sqrt{a_{t-1}}(1-\overline{a}_{t})}{1-\overline{a}_t}\times\frac{x_t-\sqrt{1-\overline{a}_t}\times\epsilon}{\sqrt{\overline{a}_t}}, (\frac{\sqrt{1-a_t}\sqrt{1-\overline{a}_{t-1}}}{\sqrt{1-\overline{a}_t}})^2) P(xt1xt,x0)N(1atat(1at1)xt+1atat1(1at)×atxt1at×ϵ,(1at1at1at1)2)
这里面只有从x0x_0x0xtx_txt添加的噪声ϵ\epsilonϵ是未知,如果我们使用神经网络来预测这里添加的ϵ\epsilonϵ是什么,就可以得到xt−1x_{t-1}xt1遵循的正态分布,再从该分布中进行一次采样,即可得到xt−1x_{t-1}xt1,如此循环以上过程,即可不断倒退到最开始的图片x0x_0x0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShadyPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值