扩散模型Diffusion model | DDPM

扩散模型Diffusion model | DDPM

论文原文:Denoising Diffusion Probabilistic Model

前言—和VAE的联系

DDPM实际上是VAE而不是扩散模型

多步扩散

DDPM将VAE的编码过程和生成过程分解为T步,每一个 p ( x t ∣ x t − 1 ) p(x_{t}|x_{t−1}) p(xtxt1) q ( x t − 1 ∣ x t ) q(x_{t−1}|x_{t}) q(xt1xt)仅负责建模一个微小变化,它们依然建模为正态分布。

对于微小变化来说,可以用正态分布足够近似地建模(高斯混合模型的思想),类似于曲线在小范围内可以用直线近似,多步分解就有点像用分段线性函数拟合复杂曲线,因此理论上可以突破传统单步VAE的拟合能力限制。

编码能力

DDPM是放弃了模型的编码能力,最终只得到一个纯粹的生成模型

核心推导步骤

引入了一个 q ( x t − 1 ∣ x t , x 0 ) q(x_{t−1}|x_{t},x_{0}) q(xt1xt,x0)来进行裂项相消,然后转化为正态分布的KL散度形式。

而后用 p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t−1}|x_{t}) pθ(xt1xt)来近似 q ( x t − 1 ∣ x t , x 0 ) q(x_{t−1}|x_{t},x_{0}) q(xt1xt,x0)从而极大似然 p θ ( x 0 ) p_{\theta}(x_{0}) pθ(x0)

模型推导

在这里插入图片描述

前向过程

给定一个从真实数据分布 x 0 ∼ q ( x ) x_{0}\sim q(x) x0q(x)中采样的数据点,前向扩散过程中分 T T T步向样本中加入少量高斯噪声,产生一系列带噪声的样本 x 0 , . . . , x T x_{0},...,x_{T} x0,...,xT。加入噪声的均值和方差由控制。即
x t = α t x t − 1 + β t ε t , ε t ∼ N ( 0 , I ) \boldsymbol{x}_t=\alpha_t\boldsymbol{x}_{t-1}+\beta_t\boldsymbol{\varepsilon}_t,\quad\boldsymbol{\varepsilon}_t\sim\mathcal{N}(\boldsymbol{0},\boldsymbol{I}) xt=αtxt1+βtεt,εtN(0,I)
其中有 α t , β t > 0 \alpha_t,\beta_t>0 αt,βt>0 α t 2 + β t 2 = 1 \alpha_t^2+\beta_t^2=1 αt2+βt2=1(方便下述正态分布相加计算), β t \beta_t βt通常很接近于0.

反向过程

如果我们可以反转上述过程并从 q ( x t − 1 │ x t ) q(x_{t-1}│x_{t} ) q(xt1xt)中采样,我们将能够从高斯噪声输入 x T ∼ N ( 0 , I ) \boldsymbol{x}_T\sim\mathcal{N}(\boldsymbol{0},\boldsymbol{I}) xTN(0,I)中重建真实样本。由 x t = α t x t − 1 + β t ε t \boldsymbol{x}_t=\alpha_t\boldsymbol{x}_{t-1}+\beta_t\boldsymbol{\varepsilon}_t xt=αtxt1+βtεt可知, x t − 1 = 1 α t ( x t − β t ε t ) \boldsymbol{x}_{t-1}=\frac1{\alpha_t}(\boldsymbol{x}_t-\beta_t\boldsymbol{\varepsilon}_t) xt1=αt1(xtβtεt),由于此过程难以直接计算,可以用神经网络模拟为
μ ( x t ) = 1 α t ( x t − β t ϵ θ ( x t , t ) ) \boldsymbol{\mu}(\boldsymbol{x}_t)=\frac1{\alpha_t}(\boldsymbol{x}_t-\beta_t\boldsymbol{\epsilon}_\theta(\boldsymbol{x}_t,t)) μ(xt)=αt1(xtβtϵθ(xt,t))
那么我们的损失函数可以理解为(考虑了扩散过程中的时间因素):
∥ x t − 1 − μ ( x t ) ∥ 2 = β t 2 α t 2 ∥ ε t − ϵ θ ( x t , t ) ∥ 2 \left\|\boldsymbol{x}_{t-1}-\boldsymbol{\mu}(\boldsymbol{x}_t)\right\|^2=\frac{\beta_t^2}{\alpha_t^2}\left\|\boldsymbol{\varepsilon}_t-\boldsymbol{\epsilon}_\theta(\boldsymbol{x}_t,t)\right\|^2 xt1μ(xt)2=αt2βt2εtϵθ(xt,t)2
忽略前面系数,带入之前的 x t {x}_{t} xt,得到
∥ ε t − ϵ θ ( α ˉ t x 0 + α t β ˉ t − 1 ε ˉ t − 1 + β t ε t , t ) ∥ 2 \left\|\varepsilon_t-\epsilon_\theta(\bar{\alpha}_t\boldsymbol{x}_0+\alpha_t\bar{\beta}_{t-1}\bar{\boldsymbol{\varepsilon}}_{t-1}+\beta_t\boldsymbol{\varepsilon}_t,t)\right\|^2 εtϵθ(αˉtx0+αtβˉt1εˉt1+βtεt,t) 2

这里选择回退一步到 x t − 1 x_{t-1} xt1来给出 x t x_{t} xt,因为我们已经事先采样了 ε t \varepsilon_t εt,而 ε t \varepsilon_t εt ε ˉ t \bar{\varepsilon}_{t} εˉt不是相互独立的,所以给定 ε t \varepsilon_t εt的情况下,我们不能完全独立地采样 ε ˉ t \bar{\varepsilon}_{t} εˉt

损失

上述损失函数实际上包含了4个需要采样的随机变量,要采样的随机变量越多,就越难对损失函数做准确的估计。可以通过一个积分技巧来将 ε t \varepsilon_t εt ε ˉ t − 1 \bar{\varepsilon}_{t-1} εˉt1合并成单个正态随机变量
大致就是去构造两个独立的方程式去解方程:
α t β ˉ t − 1 ε ˉ t − 1 + β t ε t = β t ε ∣ ε ∼ N ( 0 , I ) , β t ε ˉ t − 1 − α t β ˉ t − 1 ε t = β ˉ t ω ∣ ω ∼ N ( 0 , I ) \alpha_t\bar{\beta}_{t-1}\boldsymbol{\bar{\varepsilon}}_{t-1}+\beta_t\boldsymbol{\varepsilon}_t ={{\beta}}_{t}\boldsymbol{\varepsilon}|\boldsymbol{\varepsilon}\sim\mathcal{N}(\mathbf{0},\boldsymbol{I}),\beta_t\bar{\boldsymbol{\varepsilon}}_{t-1}-\alpha_t\bar{\boldsymbol{\beta}}_{t-1}\boldsymbol{\varepsilon}_t = \bar{\beta}_t\boldsymbol{\omega}|\boldsymbol{\omega}\sim\mathcal{N}(\mathbf{0},\boldsymbol{I}) αtβˉt1εˉt1+βtεt=βtεεN(0,I)βtεˉt1αtβˉt1εt=βˉtωωN(0,I)

解出来代回去即可得到DDPM最终用的损失函数:
∥ ε − β ˉ t β t ϵ θ ( α ˉ t x 0 + β ˉ t ε , t ) ∥ 2 \left\|\varepsilon-\frac{\bar{\beta}_t}{\beta_t}\epsilon_\theta(\bar{\alpha}_t\boldsymbol{x}_0+\bar{\beta}_t\boldsymbol{\varepsilon},t)\right\|^2 εβtβˉtϵθ(αˉtx0+βˉtε,t) 2

变分下界

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

推理生成

训练完之后,我们就可以从一个随机噪声 x T ∼ N ( 0 , I ) \boldsymbol{x}_T\sim\mathcal{N}(\boldsymbol{0},\boldsymbol{I}) xTN(0,I)出发反向传播 T T T步来进行生成。同时需要进行随机采样,那么需要补上噪声项。
x t − 1 = 1 α t ( x t − β t ϵ θ ( x t , t ) ) + σ t z , z ∼ N ( 0 , I ) \boldsymbol{x}_{t-1}=\frac1{\alpha_t}(\boldsymbol{x}_t-\beta_t\boldsymbol{\epsilon}_\theta(\boldsymbol{x}_t,t))+\sigma_t\boldsymbol{z},\quad\boldsymbol{z}\sim\mathcal{N}(\mathbf{0},\boldsymbol{I}) xt1=αt1(xtβtϵθ(xt,t))+σtz,zN(0,I)

实质上,DDPM的采样每次都从一个随机噪声出发,需要重复迭代T步来得到一个样本输出

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值