当前位置: 首页 > news >正文

DDPM理论基础解析

DDPM

    • 加噪过程
    • 去噪过程

DDPM模型主要分为两个过程:

1、Forward加噪过程(从右往左),数据集的真实图片中逐步加入高斯噪声,最终变成一个杂乱无章的高斯噪声,这个过程一般发生在训练的时候。加噪过程满足一定的数学规律。
2、Reverse去噪过程(从左往右),指对加了噪声的图片逐步去噪,从而还原出真实图片,这个过程一般发生在预测生成的时候。尽管在这里说的是加了噪声的图片,但实际去预测生成的时候,是随机生成一个高斯噪声来去噪。去噪的时候不断根据 X t X_t Xt​的图片生成 X t − 1 X_{t-1} Xt1的噪声,从而实现图片的还原。

加噪过程

Forward加噪过程主要符合如下的公式:
x t = α t x t − 1 + 1 − α t z t (1) x_t=\sqrt{\alpha_t} x_{t-1}+\sqrt{1-\alpha_t} z_{t} \tag{1} xt=αt xt1+1αt zt(1)其中 α t \sqrt{\alpha_t} αt 是预先设定好的超参数,被称为Noise schedule,通常是小于1的值,在论文中 α t \alpha_t αt​的值从0.9999到0.998。 ϵ t − 1 ∼ N ( 0 , 1 ) \epsilon_{t-1} \sim N(0, 1) ϵt1N(0,1)是高斯噪声。由公式(1)迭代推导。 x t = a t ( a t − 1 x t − 2 + 1 − α t − 1 z 2 ) + 1 − α t z 1 = a t a t − 1 x t − 2 + ( a t ( 1 − α t − 1 ) z 2 + 1 − α t z 1 ) x_t=\sqrt{a_t}\left(\sqrt{a_{t-1}} x_{t-2}+\sqrt{1-\alpha_{t-1}} z_2\right)+\sqrt{1-\alpha_t} z_1=\sqrt{a_t a_{t-1}} x_{t-2}+\left(\sqrt{a_t\left(1-\alpha_{t-1}\right)} z_2+\sqrt{1-\alpha_t} z_1\right) xt=at (at1 xt2+1αt1 z2)+1αt z1=atat1 xt2+(at(1αt1) z2+1αt z1)其中每次加入的噪声都服从高斯分布 z 1 , z 2 , … ∼ N ( 0 , 1 ) z_1, z_2, \ldots \sim \mathcal{N}(0, 1) z1,z2,N(0,1),两个高斯分布的相加高斯分布满足公式: N ( 0 , σ 1 2 ) + N ( 0 , σ 2 2 ) ∼ N ( 0 , ( σ 1 2 + σ 2 2 ) ) \mathcal{N}\left(0, \sigma_1^2 \right)+\mathcal{N}\left(0, \sigma_2^2 \right) \sim \mathcal{N}\left(0,\left(\sigma_1^2+\sigma_2^2\right) \right) N(0,σ12)+N(0,σ22)N(0,(σ12+σ22)) ,因此,得到 x t x_t xt ​的公式为:
x t = a t a t − 1 x t − 2 + 1 − α t α t − 1 z 2 x_t = \sqrt{a_t a_{t-1}} x_{t-2}+\sqrt{1-\alpha_t \alpha_{t-1}} z_2 xt=atat1 xt2+1αtαt1 z2因此不断往里面套,就可以直接得出 x 0 x_0 x0 ​到 x t x_t xt​的公式:
x t = α t ‾ x 0 + 1 − α t ‾ z t x_t=\sqrt{\overline{\alpha_t}} x_0+\sqrt{1-\overline{\alpha_t}} z_t xt=αt x0+1αt zt其中 α t ‾ = ∏ i t α i \overline{\alpha_t}=\prod_i^t \alpha_i αt=itαi,这是随Noise schedule设定好的超参数, z t − 1 ∼ N ( 0 , 1 ) z_{t-1} \sim N(0, 1) zt1N(0,1) 也是个高斯噪声。通过上述两个公式,我们可以不断的将图片进行破坏加噪。

去噪过程

反向过程就是通过估测噪声,多次迭代逐渐将被破坏的 x t x_t xt​恢复成 x 0 x_0 x0,在恢复时刻,我们已经知道的是 x t x_t xt,这是图片在t 时刻的噪声图。一下子从 x t x_t xt恢复成 x 0 x_0 x0是不可能的,我们只能一步一步的往前推,首先从 x t x_t xt恢复成 x t − 1 x_{t-1} xt1。根据贝叶斯公式,已知 x t x_t xt反推 x t − 1 x_{t-1} xt1
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) ​ q\left(x_{t-1} \mid x_t, x_0\right)=q\left(x_t \mid x_{t-1}, x_0\right) \frac{q\left(x_{t-1} \mid x_0\right)}{q\left(x_t \mid x_0\right)}​ q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)
右边的三个东西都可以从 x 0 x_0 x0开始推得到:
q ( x t − 1 ∣ x 0 ) = a ˉ t − 1 x 0 + 1 − a ˉ t − 1 z ∼ N ( a ˉ t − 1 x 0 , 1 − a ˉ t − 1 ) q ( x t ∣ x 0 ) = a ˉ t x 0 + 1 − α ˉ t z ∼ N ( a ˉ t x 0 , 1 − α ˉ t ) q ( x t ∣ x t − 1 , x 0 ) = a t x t − 1 + 1 − α t z ∼ N ( a t x t − 1 , 1 − α t ) q\left(x_{t-1} \mid x_0\right)=\sqrt{\bar{a}_{t-1}} x_0+\sqrt{1-\bar{a}_{t-1}} z \sim \mathcal{N}\left(\sqrt{\bar{a}_{t-1}} x_0, 1-\bar{a}_{t-1}\right)\\q\left(x_t \mid x_0\right) = \sqrt{\bar{a}_t} x_0+\sqrt{1-\bar{\alpha}_t} z \sim \mathcal{N}\left(\sqrt{\bar{a}_t} x_0 , 1-\bar{\alpha}_t\right)\\q\left(x_t \mid x_{t-1}, x_0\right)=\sqrt{a_t} x_{t-1}+\sqrt{1-\alpha_t} z \sim \mathcal{N}\left(\sqrt{a_t} x_{t-1}, 1-\alpha_t\right) q(xt1x0)=aˉt1 x0+1aˉt1 zN(aˉt1 x0,1aˉt1)q(xtx0)=aˉt x0+1αˉt zN(aˉt x0,1αˉt)q(xtxt1,x0)=at xt1+1αt zN(at xt1,1αt)因此,由于右边三个东西均满足正态分布, q ( x t − 1 ∣ x t , x 0 ) q\left(x_{t-1} \mid x_t, x_0\right) q(xt1xt,x0)满足分布如下: ∝ exp ⁡ ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t + ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) \propto \exp \left(-\frac{1}{2}\left(\frac{\left(x_t-\sqrt{\alpha_t} x_{t-1}\right)^2}{\beta_t}+\frac{\left(x_{t-1}-\sqrt{\bar{\alpha}_{t-1}} x_0\right)^2}{1-\bar{\alpha}_{t-1}}-\frac{\left(x_t-\sqrt{\bar{\alpha}_t} x_0\right)^2}{1-\bar{\alpha}_t}\right)\right) exp(21(βt(xtαt xt1)2+1αˉt1(xt1αˉt1 x0)21αˉt(xtαˉt x0)2))把标准正态分布展开后,乘法就相当于加,除法就相当于减,把他们汇总,继续化简,咱们现在要求的是上一时刻的分布 ∝ exp ⁡ ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t + ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) = exp ⁡ ( − 1 2 ( x t 2 − 2 α t x t x t − 1 + α t x t − 1 2 β t + x t − 1 2 − 2 α ˉ t − 1 x 0 x t − 1 + α ˉ t − 1 x 0 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) = exp ⁡ ( − 1 2 ( ( α t β t + 1 1 − α ˉ t − 1 ) x t − 1 2 − ( 2 α t β t x t + 2 α ˉ t − 1 1 − α ˉ t − 1 x 0 ) x t − 1 + C ( x t , x 0 ) ) ) ​ \begin{aligned} & \propto \exp \left(-\frac{1}{2}\left(\frac{\left(x_t-\sqrt{\alpha_t} x_{t-1}\right)^2}{\beta_t}+\frac{\left(x_{t-1}-\sqrt{\bar{\alpha}_{t-1}} x_0\right)^2}{1-\bar{\alpha}_{t-1}}-\frac{\left(x_t-\sqrt{\bar{\alpha}_t} x_0\right)^2}{1-\bar{\alpha}_t}\right)\right) \\ & =\exp \left(-\frac{1}{2}\left(\frac{x_t^2-2 \sqrt{\alpha_t} x_t x_{t-1}+\alpha_t x_{t-1}^2}{\beta_t}+\frac{x_{t-1}^2-2 \sqrt{\bar{\alpha}_{t-1}} x_0 x_{t-1}+\bar{\alpha}_{t-1} x_0^2}{1-\bar{\alpha}_{t-1}}-\frac{\left(x_t-\sqrt{\bar{\alpha}_t} x_0\right)^2}{1-\bar{\alpha}_t}\right)\right) \\ & =\exp \left(-\frac{1}{2}\left(\left(\frac{\alpha_t}{\beta_t}+\frac{1}{1-\bar{\alpha}_{t-1}}\right) x_{t-1}^2-\left(\frac{2 \sqrt{\alpha_t}}{\beta_t} x_t+\frac{2 \sqrt{\bar{\alpha}_{t-1}}}{1-\bar{\alpha}_{t-1}} x_0\right) x_{t-1}+C\left(x_t, x_0\right)\right)\right) \end{aligned} ​ exp(21(βt(xtαt xt1)2+1αˉt1(xt1αˉt1 x0)21αˉt(xtαˉt x0)2))=exp(21(βtxt22αt xtxt1+αtxt12+1αˉt1xt122αˉt1 x0xt1+αˉt1x021αˉt(xtαˉt x0)2))=exp(21((βtαt+1αˉt11)xt12(βt2αt xt+1αˉt12αˉt1 x0)xt1+C(xt,x0)))正态分布满足公式, exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) = exp ⁡ ( − 1 2 ( 1 σ 2 x 2 − 2 μ σ 2 x + μ 2 σ 2 ) ) \exp \left(-\frac{(x-\mu)^2}{2 \sigma^2}\right)=\exp \left(-\frac{1}{2}\left(\frac{1}{\sigma^2} x^2-\frac{2 \mu}{\sigma^2} x+\frac{\mu^2}{\sigma^2}\right)\right) exp(2σ2(xμ)2)=exp(21(σ21x2σ22μx+σ2μ2)),其中 σ \sigma σ就是方差, μ \mu μ就是均值,配方后我们就可以获得均值和方差。

此时的均值为: μ ~ t ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 β t 1 − α ˉ t x 0 \tilde{\mu}_t\left(x_t, x_0\right)=\frac{\sqrt{\alpha_t}\left(1-\bar{\alpha}_{t-1}\right)}{1-\bar{\alpha}_t} x_t+\frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1-\bar{\alpha}_t} x_0 μ~t(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtαˉt1 βtx0根据之前的公式, x t = α t ‾ x 0 + 1 − α t ‾ z t x_t=\sqrt{\overline{\alpha_t}} x_0+\sqrt{1-\overline{\alpha_t}} z_t xt=αt x0+1αt zt,我们可以使用 x t x_t xt 反向估计得到 x 0 x_0 x0​,其满足分布 x 0 = 1 α ˉ t ( x t − 1 − α ˉ t z t ) x_0=\frac{1}{\sqrt{\bar{\alpha}_t}}\left(\mathrm{x}_t-\sqrt{1-\bar{\alpha}_t} z_t\right) x0=αˉt 1(xt1αˉt zt)

最终得到均值为 μ ~ t = 1 a t ( x t − β t 1 − a ˉ t z t ) \tilde{\mu}_t=\frac{1}{\sqrt{a_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\bar{a}_t}} z_t\right) μ~t=at 1(xt1aˉt βtzt) z t z_t zt代表t时刻的噪音是什么。由 z t z_t zt无法直接获得,网络便通过当前时刻的 x t x_t xt ​经过神经网络计算 z t z_t zt ϵ θ ( x t , t ) \epsilon_\theta\left(x_t, t\right) ϵθ(xt,t)也就是上面提到的 z t z_t zt ϵ θ \epsilon_\theta ϵθ代表神经网络。
x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z x_{t-1}=\frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}} \epsilon_\theta\left(x_t, t\right)\right)+\sigma_t z xt1=αt 1(xt1αˉt 1αtϵθ(xt,t))+σtz由于加噪过程中的真实噪声 ϵ \epsilon ϵ 在复原过程中是无法获得的,因此DDPM的关键就是训练一个由 x t x_t xt和t估测橾声的模型 ϵ θ ( x t , t ) \epsilon_\theta\left(x_t, t\right) ϵθ(xt,t),其中 θ \theta θ就是模型的训练参数, σ t \sigma_t σt 也是一个高斯噪声 σ t ∼ N ( 0 , 1 ) \sigma_t \sim N(0,1) σtN(0,1),用于表示估测与实际的差距。在DDPM中,使用U-Net作为估测噪声的模型。

本质上,我们就是训练这个Unet模型,该模型输入为 x t x_t xt和t,输出为 x t x_t xt时刻的高斯噪声。即利用 x t x_t xt和 t 预测这一时刻的高斯噪声。这样就可以一步一步的再从噪声回到真实图像。

相关文章:

  • 使用chainlit出现【无法访问服务器】或【Could not reach the server.】解决方案
  • Redis的主从复制
  • 解码AI大脑:Claude的思维显微镜与语言炼金术
  • 数学知识——矩阵乘法
  • 牛客KY222 打印日期
  • Spring Boot 3.5新特性解析:自动配置再升级,微服务开发更高效
  • 【设计模式】模板模式
  • LeetCode详解之如何一步步优化到最佳解法:26. 删除有序数组中的重复项
  • 解决leetcode第3510题移除最小数对使数组有序II
  • Flutter性能优化终极指南:从JIT到AOT的深度调优
  • 视频孪生赋能交警构建“空地一体“智慧交管体系的创新实践
  • leetcode797图论-对邻接矩阵和邻接表不同形式进行dfs与bfs遍历方法
  • 【C++差分数组 树上倍增】P6869 [COCI2019-2020#5] Putovanje|普及+
  • 电影舆情分析可视化平台管理端实现
  • Redisson的RedLock与联锁(MultiLock)的区别
  • 手持式RFID读写器对比固定式读写器的差异优势
  • Mathwork Platform - Matlab Help Center - Concept and Application
  • 前端面试宝典---数据类型
  • Redis基础指令(Windows)
  • 每日一题——AB10 反转链表
  • wordpress 哪些网站吗/东莞seo建站公司
  • 如何建立虚拟架构网站/北京网站快速排名优化
  • 网站建设加入购买按钮/企业推广视频
  • 汽车电子商务网站建设规划书/做网页用什么软件好
  • 桂林网站制作培训学校/怎么进行推广
  • 网站如何做优化推广/关键词点击工具