DDPM扩散模型数学推导

扩散过程

x 0 → x 1 → x 2 → ⋯ → x N ∼ 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 α越来越小。

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

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

逆向过程

要倒推的话,根据贝叶斯公式:
P ( x t − 1 ∣ x t ) = P ( x t ∣ x t − 1 ) P ( x t − 1 ) P ( x t ) 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 x 0 x_0 x0,得到
P ( x t − 1 ∣ x t , x 0 ) = P ( x t ∣ x t − 1 , x 0 ) P ( x t − 1 ∣ x 0 ) P ( x t ∣ x 0 ) 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 ( x t ∣ x t − 1 , x 0 ) = α t x t − 1 + 1 − α t ϵ t ∼ N ( α t x t − 1 , 1 − α t ) P ( x t − 1 ∣ x 0 ) = α ‾ t − 1 x 0 + 1 − α ‾ t − 1 ϵ ∼ N ( α ‾ t − 1 x 0 , 1 − α ‾ t − 1 ) P ( x t ∣ x 0 ) = α ‾ t x 0 + 1 − α ‾ t ϵ ∼ N ( α ‾ t x 0 , 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)=αt xt1+1αt ϵtN(αt xt1,1αt)P(xt1x0)=α t1x0+1αt1 ϵN(α t1x0,1αt1)P(xtx0)=α tx0+1αt ϵN(α tx0,1αt)
将这三个分布带入贝叶斯公式进行计算化简,得到 P ( x t − 1 ∣ x t , x 0 ) P(x_{t-1}|x_t,x_0) P(xt1xt,x0)满足的分布
P ( x t − 1 ∣ x t , x 0 ) ∼ N ( a t ( 1 − a ‾ t − 1 ) 1 − a ‾ t x t + a t − 1 ( 1 − a ‾ t ) 1 − a ‾ t x 0 , ( 1 − a t 1 − a ‾ t − 1 1 − 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,(1at 1at 1at1 )2)同时,将 x 0 x_0 x0由上面的公式 x t = α ‾ t x 0 + 1 − α ‾ t ϵ x_t = \sqrt{\overline{\alpha}_t}x_0+\sqrt{1-\overline{\alpha}_t}\epsilon xt=αt x0+1αt ϵ反解带入,得到
P ( x t − 1 ∣ x t , x 0 ) ∼ N ( a t ( 1 − a ‾ t − 1 ) 1 − a ‾ t x t + a t − 1 ( 1 − a ‾ t ) 1 − a ‾ t × x t − 1 − a ‾ t × ϵ a ‾ t , ( 1 − a t 1 − a ‾ t − 1 1 − 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)×at xt1at ×ϵ,(1at 1at 1at1 )2)
这里面只有从 x 0 x_0 x0 x t x_t xt添加的噪声 ϵ \epsilon ϵ是未知,如果我们使用神经网络来预测这里添加的 ϵ \epsilon ϵ是什么,就可以得到 x t − 1 x_{t-1} xt1遵循的正态分布,再从该分布中进行一次采样,即可得到 x t − 1 x_{t-1} xt1,如此循环以上过程,即可不断倒退到最开始的图片 x 0 x_0 x0

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Colab是一个基于云端的Jupyter笔记本环境,可以免费使用GPU和TPU资源。DDPM(Diffusion Probabilistic Models)是一种生成模型,用于生成高质量的图像。在Colab上部署DDPM扩散模型可以让你在云端快速搭建和训练模型。 以下是Colab部署DDPM扩散模型的步骤: 1. 打开Colab网站(https://colab.research.google.com/)并登录你的Google账号。 2. 创建一个新的笔记本或者打开一个已有的笔记本。 3. 在笔记本中导入所需的库和模型。你可以使用PyTorch或TensorFlow等深度学习框架来实现DDPM模型。 4. 准备数据集。根据你的需求,可以选择使用已有的数据集或者自己准备数据集。 5. 定义DDPM模型的结构和参数。根据DDPM的论文或者相关资料,实现DDPM模型的网络结构和训练参数。 6. 加载数据集并进行预处理。根据你的数据集格式和要求,加载数据集并进行必要的预处理,例如图像大小调整、归一化等。 7. 定义损失函数和优化器。根据DDPM模型的训练目标,选择合适的损失函数和优化器。 8. 进行模型训练。使用加载的数据集和定义的损失函数、优化器,进行模型的训练。可以设置合适的训练轮数和批次大小。 9. 保存训练好的模型。在训练完成后,保存模型以备后续使用。 10. 进行模型评估和生成。使用保存的模型对新数据进行评估和生成,观察生成效果并进行调整。 以上是在Colab上部署DDPM扩散模型的一般步骤。具体实现过程中,可能还需要根据你的具体需求进行一些调整和优化。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ShadyPi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值