skip to content
s7ev3n'space

Diffusion Models

/ 26 min read

Diffusion Model(扩散模型)是目前图像、视频生成模型的基础,其核心思想是通过逐步添加噪声(正向扩散)和逐步去噪(反向生成)的过程,将数据从原始分布逐步转换为噪声分布,再通过学习逆过程逐步去除噪音生成高质量样本。

Denoising Diffusion Probabilistic Model

Diffusion model早在2015年论文1中提出,但是在2020年Denoising Diffusion Probabilistic Model, DDPM2工作中得到显著改进,可以生成高质量图像。扩散模型被人熟知包含正向加噪过程和反向去噪过程。

Denoising

所谓“噪音”指的是标准正态分布。

正向扩散过程:把复杂数据“拆解”成简单的噪声 正向过程的核心任务是逐步向数据中添加噪声,直到它变成完全随机的高斯噪声。这一步看似简单,但它的意义非常深刻。真实世界的数据分布往往是高度复杂的,比如图像、语音、文本,它们的特征空间可能有无数个维度,分布形态也极其不规则。直接建模这样的分布几乎是不可能。但通过正向过程,我们可以把这种复杂性“分解”掉。每一步只添加一点点噪声,逐步掩盖数据的细节,最终让数据完全服从高斯分布,这样一来,原本复杂的分布就被转化成一个简单的高斯分布,学习任务的难度大大降低。这一步的设计,实际上是为了让模型有一个明确的起点和终点,避免在复杂分布中迷失方向。

反向扩散过程:从噪声中“重建”数据的本质 反向过程要从完全随机的噪声中逐步还原出原始数据,这一步是整个Diffusion Model的核心,它通过训练神经网络,学习如何在每一步中去除噪声,最终将噪声还原为有意义的数据样本。反向过程并不是简单地“撤销”正向过程,而是通过学习噪声的逆操作,逐步还原数据的本质特征。每一步的去噪操作都相当于在问:“如果我现在有一个带噪声的样本,它最可能的前一步是什么样子?”通过这种方式,模型能够逐步剥离噪声,最终还原出原始数据。这种逐步逼近的方式,不仅让学习任务变得可控,还让模型能够捕捉到数据的深层结构。

这两个过程的存在,实际上是为了应对生成模型中的一个核心难题:如何在复杂的分布中采样。生成模型,比如GAN,直接从随机噪声中生成数据,但这种方式容易导致模式崩塌(mode collapse),即生成的样本多样性不足。而Denoising Diffusion Model通过正向和反向过程,把生成任务分解成多个小步骤,每一步都只学习一个简单的任务——添加或去除噪声。这种分步学习的方式,不仅提高了模型的稳定性,还显著提升了生成样本的质量和多样性。

正向扩散过程

我们令x0\mathbf{x_0}为真实数据图像,从真实的数据分布q(x)\mathbb{q(x)}从采样,是正向过程初始时的数据,从00TT步,逐渐加入微小的噪音,经过足够多的步数,最终xT\mathbf{x_T}为从标准高斯分布中随机采样出来的(噪音)数据,即xTN(0,I)\mathbf{x_T} \sim \mathcal{N}(\mathbf{0},\mathbf{I})。正向过程可以使用下图(来自2)表示: forward_diff

正向扩散过程定义为马尔科夫过程(即当前步tt只与上一步t1t-1有关):

q(x1:Tx0)=t=1Tq(xtxt1)\begin{equation} q(\mathbf{x}_{1:T} \vert \mathbf{x}_0) = \prod^T_{t=1} q(\mathbf{x}_t \vert \mathbf{x}_{t-1}) \end{equation}

其中每一步加的噪音q(xtxt1)q(\mathbf{x}_t \vert \mathbf{x}_{t-1})服从正态分布:

q(xtxt1)=N(xt;1βtxt1,βtI)\begin{equation} q(\mathbf{x}_t \vert \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \mathbf{x}_{t-1}, \beta_t\mathbf{I}) \end{equation}

利用重参数化(Reparameterization Trick)从N(xt;1βtxt1,βtI)\mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \mathbf{x}_{t-1}, \beta_t\mathbf{I})进行采样:

xt=1βtxt1+βtϵt,ϵtN(0,I)\begin{equation} \mathbf{x_t} = \sqrt{1-\beta_t}\mathbf{x_{t-1}} + \sqrt{\beta_t}\epsilon_{t}, \quad \epsilon_t \sim \mathcal{N}(\mathbf{0},\mathbf{I}) \end{equation}

Parameterization of βt\beta_t

βt\beta_t是什么?

βt\beta_t对前向扩散过程中对噪音进行控制的参数,在DDPM2论文中,βt\beta_t是从β1=104\beta_1=10^{-4}βT=0.02\beta_T=0.02线性增加的常量,T=1000T=1000。对比归一化[1,1][-1,1]之后的像素值,βt\beta_t是很小的值,即每一步添加的噪音是很小的。

为什么使用βt\sqrt{\beta_t}对方差进行缩放?

这会涉及到两种不同的控制方差的方法:Variance Exploding vs Variance Preserving

  • Variance Exploding方差爆炸:
xt=xt1+βtϵx_t=x_{t-1} + \sqrt \beta_t \epsilon

假设初始方差是Var(x0)=IVar(x_0)=I,方差的变化:Var(x1)=Var(x0)+β1I=I+β1IVar(x_1)=Var(x_0)+\beta_1 I=I+\beta_1 I,递推下去Var(xT)=Var(x0)+t=1TβtVar(x_T)=Var(x_0)+\sum_{t=1}^{T}\beta_t, 即经过TT步之后,方差I+t=1TβtI+\sum_{t=1}^{T}\beta_t会随着扩散步数TT增大(“爆炸”),训练和采样都会变得不稳定。

  • Variance Preserving方差保持 DDPM采用的是这个控制方差的方法通过缩放避免方差爆炸:
xt=αtxt1+βtϵ,αt+βt=1x_t=\sqrt \alpha_t x_{t-1} + \sqrt \beta_t \epsilon, \quad \alpha_t + \beta_t=1

方差的变化:Var(x1)=α1Var(x0)+β1I=IVar(x_1)=\alpha_1 Var(x_0) + \beta_1 I = I,递推下去,Var(xT)Var(x_T)保持不变,所以称为方差保持。

重写采样公式

我们试着展开上面的采样公式,展开之前,我们先对变量做一些变换,有助于公式的推导,令αt=1βt\alpha_t=1-\beta_t

xt=αtxt1+1αtϵt=αt(αt1xt2+1αt1ϵt1)+1αtϵt=αtαt1xt2+αt(1αt1)ϵt1+1αtϵti.i.d gaussian noise\begin{align} \mathbf{x_t} &= \sqrt{\alpha_t}\mathbf{x_{t-1}} + \sqrt{1-\alpha_t}\epsilon_{t} \\ &=\sqrt{\alpha_t}( \sqrt{\alpha_{t-1}}\mathbf{x_{t-2}} + \sqrt{1-\alpha_{t-1}}\epsilon_{t-1}) + \sqrt{1-\alpha_t}\epsilon_{t} \\ &=\sqrt{\alpha_t\alpha_{t-1}}\mathbf{x_{t-2}} + \underbrace{ \sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon_{t-1} + \sqrt{1-\alpha_t}\epsilon_{t}}_{\text{i.i.d gaussian noise}} \end{align}

如果继续展开更多步,噪声项会变得越来越多,因为都是独立同分布的噪声项,由于正态分布是可以叠加的,可以对噪声项进行简化。注意到αt(1αt1)ϵt1N(0,αt(1αt1)I)\sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon_{t-1} \sim \mathcal{N}(0,\alpha_t(1-\alpha_{t-1})\mathbf{I}),因为ϵt1N(0,I)\epsilon_{t-1} \sim \mathcal{N}(\mathbf{0},\mathbf{I}),对它进行相乘,不改变均值,但是会改变方差。同理,1αtϵtN(0,(1αt)I)\sqrt{1-\alpha_t}\epsilon_{t} \sim \mathcal{N}(0,(1-\alpha_{t})\mathbf{I}),两个噪声项之和也服从高斯分布,新的分布是N(0,αt(1αt1)+(1αt)I)=N(0,(1αtαt1)I)\mathcal{N}(0,\alpha_t(1-\alpha_{t-1})+(1-\alpha_{t})\mathbf{I})=\mathcal{N}(\mathbf{0}, (1-\alpha_t\alpha_{t-1})\mathbf{I}),两个噪音项的和相当于从新的分布采样,令ϵˉt2\bar{\epsilon}_{t-2}是合并后从N(0,I)\mathcal{N}(\mathbf{0},\mathbf{I})的采样值,再经过缩放:

αt(1αt1)ϵt1+1αtϵt=1αtαt1ϵˉt2\begin{equation} \sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon_{t-1} + \sqrt{1-\alpha_t}\epsilon_{t}=\sqrt{1-\alpha_t\alpha_{t-1}}\bar{\epsilon}_{t-2} \end{equation}

则,

xt=αtxt1+1αtϵt=αtαt1xt2+1αtαt1ϵˉt2\begin{align} \mathbf{x_t} &= \sqrt{\alpha_t}\mathbf{x_{t-1}} + \sqrt{1-\alpha_t}\epsilon_{t} \\ &= \sqrt{\alpha_t\alpha_{t-1}}\mathbf{x_{t-2}} + \sqrt{1-\alpha_t\alpha_{t-1}}\bar{\epsilon}_{t-2} \end{align}

我们可以一路推导到x0\mathbf{x_0}

xt=αˉtx0+1αˉtϵ,αˉt=s=1tαs\begin{align} \mathbf{x}_t &= \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon}, \quad \bar{\alpha}_t=\prod^t_{s=1}\alpha_s \end{align}

这个递推公式等价于从下面的分布进行采样:

q(xtx0)=N(xt;αˉtx0,(1αˉt)I)q(\mathbf{x}_t \vert \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t} \mathbf{x}_0, (1 - \bar{\alpha}_t)\mathbf{I})

然后,我们再换回来βt=1αt\beta_t=1-\alpha_t:

q(xtx0)=N(xt;1βˉtx0,βˉtI)q(\mathbf{x}_t \vert \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{1-\bar{\beta}_t} \mathbf{x}_0, \bar{\beta}_t\mathbf{I})

逆向扩散过程

注意这一节中的大量公式可能会比较绕: 正向过程q(x1:Tx0)=t=1Tq(xtxt1)q(\mathbf{x}_{1:T} \vert \mathbf{x}_0) = \prod^T_{t=1} q(\mathbf{x}_t \vert \mathbf{x}_{t-1}),真实的逆向过程q(xt1xt)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t),近似逆向过程的分布p(xT)t=1Tpθ(xt1xt)\mathbf{p}(\mathbf{x}_T)\prod_{t=1}^{T}\mathbf{p}_{\theta}(\mathbf{x}_{t-1} \vert \mathbf{x}_t)

逆向扩散过程,即生成过程,逐步从噪音(标准正态分布)xT\mathbf{x}_T中去噪,最终得到图像x0\mathbf{x}_{0}。上一节,得到了正向扩散q(xtxt1)q(\mathbf{x}_t \vert \mathbf{x}_{t-1}),并且它服从高斯分布N(xt;1βtxt1,βtI)\mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \mathbf{x}_{t-1}, \beta_t\mathbf{I}),那么真实的逆向扩散(论文中也称为前向过程的后验分布forward process posteriors)应是q(xt1xt)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t),这个分布根据DDPM论文中的叙述,当βt\beta_t足够小,同样是服从高斯分布。但是,真实的逆向扩散q(xt1xt)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t)难以计算,于是使用模型来近似逆向扩散,设模型为pθ(xt1xt)\mathbf{p}_{\theta}(\mathbf{x}_{t-1} \vert \mathbf{x}_t)

逆向扩散过程同样使用马尔可夫过程来描述:

pθ(x0:T)=p(xT)t=1Tpθ(xt1xt)\begin{equation} \mathbf{p}_{\theta}(\mathbf{x}_{0:T})=\mathbf{p}(\mathbf{x}_T)\prod_{t=1}^{T}\mathbf{p}_{\theta}(\mathbf{x}_{t-1}|\mathbf{x}_t) \end{equation}

其中,θ\theta是DDPM模型的权重参数。

由于真实的逆向扩散q(xt1xt)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t)服从高斯分布,因此可以假设模型近似的逆向扩散pθ(xt1xt)p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t)同样服从高斯分布

pθ(xt1xt)N(xt1;μθ(xt,t),Σθ(xt,t))p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t) \sim \mathcal{N}(\mathbf{x}_{t-1}; \boldsymbol{\mu}_\theta(\mathbf{x}_t, t), \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t))

[TODO] 为什么:如果正向过程q(xtxt1)=N(xt;1βtxt1,βtI)q(\mathbf{x}_t \vert \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \mathbf{x}_{t-1}, \beta_t\mathbf{I})中的βt\beta_t足够小,那么逆向扩散q(xt1xt)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t)也是高斯分布:q(xt1xt)=N(xt1;μ~(xt),β~tI)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \tilde{\boldsymbol{\mu}}(\mathbf{x}_t), \tilde{\beta}_t \mathbf{I})

优化目标

Diffusion模型优化目标的结论是比较简单的,但是公式的推导和理解是需要静下心来慢慢看懂、推导的!

Variational Lower Bound

VAE试图一步生成图像不同,逆向过程逐步去除噪音,可以更好的近似真实的数据分布p(x0)\mathbf{p(x_0)},生成质量非常高的图片。也可以把逆向扩散过程理解成马尔科夫分层自编码器(Markovian Hierarchical Variational Autoencoder,MHVAE),此时逆向过程中的x1,x2,,xT1\mathbf{x_1, x_2, \dots, x_{T-1}}都可以看成是隐变量。

生成模型的最终目标都是学习到真实数据的分布,即p(x0)\mathbf{p(x_0)},从而可以从其中采样生成非常真实的图像。由于无法对真实数据的分布进行建模,VAE中引入了隐变量zz,并通过对联合概率的边缘化p(x)=zp(x,z)dz\mathbf{p}(x) = \int_z \mathbf{p}(x,z) dz建模分布,并推导出logp(x)\log p(x)的变分下界(ELBO)。逆向扩散过程也一样,只是存在更多的中间隐变量,与VAE的ELBO是一致的(详细推导见VAE博文中):

logp(x0)=logx1x2xTp(x0,x1,,xT)dx1dx2dxT=logx1:Tp(xT)t=1Tpθ(xt1xt)dx1:T=logx1:Tpθ(x0:T)dx1:Tq(x1:Tx0)q(x1:Tx0)引入正向扩散过程=logx1:Tq(x1:Tx0)pθ(x0:T)q(x1:Tx0)dx1:T=logEq(x1:Tx0)[pθ(x0:T)q(x1:Tx0)]期望的定义Eq(x1:Tx0)log[pθ(x0:T)q(x1:Tx0)]:=LVLBvia Jensen’s inequality\begin{align} \log\mathbf{p(x_0)} &= \log \int_{x_1} \int_{x_2} \cdots \int_{x_T} p(x_0, x_1, \dots, x_T) dx_1 dx_2 \cdots dx_T \\ &=\log\int_{x_{1:T}} p(x_T)\prod_{t=1}^{T}p_{\theta}(x_{t-1}|x_t) d_{x_{1:T}} \\ &=\log\int_{x_{1:T}}p_{\theta}(x_{0:T}) d_{x_{1:T}}\frac{q(x_{1:T}|x_0)}{q(x_{1:T}|x_0)} & \small{\text{引入正向扩散过程}} \\ &=\log\int_{x_{1:T}} q(x_{1:T}|x_0)\frac{p_{\theta}(x_{0:T})}{q(x_{1:T}|x_0)}d_{x_{1:T}} \\ &=\log\mathbb{E}_{q(x_{1:T}|x_0)}\Big[\frac{p_{\theta}(x_{0:T})}{q(x_{1:T}|x_0)}\Big] & \small{\text{期望的定义}}\\ &\geq \mathbb{E}_{q(x_{1:T}|x_0)} \log\Big[\frac{p_{\theta}(x_{0:T})}{q(x_{1:T}|x_0)}\Big]:= L_{VLB} & \small{\text{via Jensen's inequality}} \end{align}

优化目标LL是最大化(LVLBL_{VLB}),等价于最小化LVLB-L_{VLB}(Variational Lower Bound or Evidence lower bound, ELBO),可以将公式LVLBL_{VLB}进一步拆解2:

L=LVLB=Eq(x1x0)[logpθ(x0x1)]L0: reconstruction term+Eq(xT1x0)[DKL(q(xTxT1)p(xT)])LT: prior matching term+t=1T1Eq(xt1,xt+1x0)[DKL(q(xtxt1))pθ(xtxt+1])LT1: consistency term\begin{align} L &= -L_{VLB} \\ &= \begin{aligned} &-{\underbrace{\mathbb{E}_{q(x_{1} \vert x_0)}\left[\log p_{\theta}(x_0|x_1)\right]}_{L_{0}\text{: reconstruction term}}}\\ &+ {\underbrace{\mathbb{E}_{q(x_{T-1} \vert x_0)}\left[ D_{KL}(q(x_T \vert x_{T-1}) \parallel {p(x_T)}\right])}_{L_T\text{: prior matching term}}} \\ &+ {\sum_{t=1}^{T-1}\underbrace{\mathbb{E}_{q(x_{t-1}, x_{t+1} \vert x_0)}\left[ D_{KL} (q(x_{t} \vert x_{t-1})) \parallel {p_{\theta}(x_{t}|x_{t+1}}\right])}_{L_{T-1}\text{: consistency term}}} \end{aligned} \end{align}
[TODO]详细推导过程: L=a\begin{aligned} L &= a \end{aligned}

请注意的是:上面的公式和DDPM论文公式(5)和What are Diffusion Models?3中的公式目前还不同,不要着急,请往后面看,后面的推导会让公式相同。

注意到优化目标被拆分为三大类,T+1T+1项:

  • DDPM论文中的L0L_0被称为重建项(reconstruction term),它和VAE中ELBO的第一项是相似的,从隐变量x1x_1恢复真实数据x0x_0L0L_0项在DDPM论文3.33.3节有讨论,
  • DDPM论文中的LTL_T被称为先验匹配项(prior term),由于p(xT)p(x_T)和前向扩散q(xTxT1)q(x_T \vert x_{T-1})是已知的,所以这项属于常数项,在优化过程可以忽略
  • DDPM论文中的LT1L_{T-1}被称为一致性项(consistency term),是真正要优化的目标:真实的正向扩散q(xtxt1)q(x_{t}\vert x_{t-1})和模型估计的逆向扩散pθ(xtxt+1)p_{\theta}(x_t\vert x_{t+1})的KL散度,即逆向扩散得到的xtx_t逼近正向扩散得到的xtx_t。但是,这里需要对xt1,xt+1x_{t-1}, x_{t+1}同时采样,如果使用MCMC采样求期望,同时对两个随机变量进行采样,会导致更大的方差,使得优化过程不稳定,因此直接优化LT1L_{T-1}并不可行4。下图可以更直观的描述这个过程:
diffusion_derivation_1

Rewrite Variational Lower Bound

LT1L_{T-1}的改造:q(xtxt1)=q(xtxt1,x0)q(x_t \vert x_{t-1}) = q(x_t \vert x_{t-1}, x_0),由于扩散过程是马尔科夫过程,所以条件概率中增加x0x_0后是等价的。 引入x0x_0不仅可以对LL进行改写(Parameterization),还可以使得不可计算的q(xtxt1)q(x_t \vert x_{t-1})变成可以计算的q(xtxt1,x0)q(x_t \vert x_{t-1}, x_0)

首先,对LL的改写:q(xtxt1)=q(xtxt1,x0)q(x_t \vert x_{t-1}) = q(x_t \vert x_{t-1}, x_0)通过贝叶斯公式展开:

q(xtxt1,x0)=q(xt1xt,x0)q(xtx0)q(xt1x0)q(x_t \vert x_{t-1}, x_0) = \frac{q(x_{t-1} \vert x_t, x_0)q(x_t \vert x_0)}{q(x_{t-1} \vert x_0)}

带入上式到前面的公式(17)(17),我们得到LL的新的等价形式:

L=LVLB=Eq(x1x0)[logpθ(x0x1)]L0: reconstruction term+Eq(xT1x0)[DKL(q(xTx0)p(xT)])LT: prior matching term+t=2TEq(xtx0)[DKL(q(xt1xt,x0))pθ(xt1xt])LT1: denoising matching term\begin{align} L &= -L_{VLB} \\ &= \begin{aligned} &-{\underbrace{\mathbb{E}_{q(x_{1} \vert x_0)}\left[\log p_{\theta}(x_0|x_1)\right]}_{L_{0}\text{: reconstruction term}}}\\ &+ {\underbrace{\mathbb{E}_{q(x_{T-1} \vert x_0)}\left[ D_{KL}(q(x_T \vert x_{0}) \parallel {p(x_T)}\right])}_{L_T\text{: prior matching term}}} \\ &+ {\sum_{t=2}^{T}\underbrace{\mathbb{E}_{q(x_{t} \vert x_0)}\left[ D_{KL} (q(\red{x_{t-1} \vert x_{t}, x_0})) \parallel {p_{\theta}(x_{t-1} \vert x_{t}}\right])}_{L_{T-1}\text{: denoising matching term}}} \end{aligned} \end{align}
[TODO]详细推导过程2: L=a\begin{aligned} L &= a \end{aligned}

此时得到的优化目标和DDPM论文终于一致,看下每一项都有什么变化:

  • 重建项L0L_0没有任何变化
  • 先验匹配项LTL_Tq(xTxT1)q(x_T \vert x_{T-1})变成了q(xTx0)q(x_T \vert x_{0}),由于正向扩散已知,所以这一项基本等于没有变化
  • LT1L_{T-1}有巨大的变化(改称为denosing matching term):从正向扩散q(xtxt1)q(x_{t} \vert x_{t-1})变为了逆向扩散q(xt1xt,x0)q(\red{x_{t-1} \vert x_{t}, x_0}),方向和pθ(xtxt1)p_{\theta}(x_t \vert x_{t-1})变为相同,直观变化见下图。另外,条件概率中增加了x0x_0之后,采样只需要采样一个变量xtx_t即可。 diffusion_derivation_2

现在问题是如何处理q(xt1xt,x0)q(\red{x_{t-1} \vert x_{t}, x_0})?这是前向过程的后验分布(foward process posteriors)q(xt1xt)q(x_{t-1}\vert x_t)中引入x0x_0的原因,因为这使得它变得可计算(tractable)了。

第二,可计算的q(xtxt1,x0)q(x_t \vert x_{t-1}, x_0) 逆向过程中提到,q(xt1xt)q(x_{t-1} \vert x_{t})也是一个高斯分布,但是它的参数需要整个数据集计算来估计,基本是不可计算的(intractable),但是增加了x0x_0之后,就可以计算了,定义 q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; {\tilde{\boldsymbol{\mu}}}(\mathbf{x}_t, \mathbf{x}_0), {\tilde{\beta}_t} \mathbf{I}),然后继续推导:

q(xt1xt,x0)=q(xtxt1,x0)q(xt1x0)q(xtx0)via Gaussian PDFexp(12((xtαtxt1)2βt+(xt1αˉt1x0)21αˉt1(xtαˉtx0)21αˉt))=exp(12(xt22αtxtxt1+αtxt12βt+xt122αˉt1x0xt1+αˉt1x021αˉt1(xtαˉtx0)21αˉt))=exp(12((αtβt+11αˉt1)xt12(2αtβtxt+2αˉt11αˉt1x0)xt1+C(xt,x0)))\begin{aligned} q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) &= q(\mathbf{x}_t \vert \mathbf{x}_{t-1}, \mathbf{x}_0) \frac{ q(\mathbf{x}_{t-1} \vert \mathbf{x}_0) }{ q(\mathbf{x}_t \vert \mathbf{x}_0) } \quad \small{\text{via Gaussian PDF}} \\ &\propto \exp \Big(-\frac{1}{2} \big(\frac{(\mathbf{x}_t - \sqrt{\alpha_t} \mathbf{x}_{t-1})^2}{\beta_t} + \frac{(\mathbf{x}_{t-1} - \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0)^2}{1-\bar{\alpha}_{t-1}} - \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t} \mathbf{x}_0)^2}{1-\bar{\alpha}_t} \big) \Big) \\ &= \exp \Big(-\frac{1}{2} \big(\frac{\mathbf{x}_t^2 - 2\sqrt{\alpha_t} \mathbf{x}_t \color{blue}{\mathbf{x}_{t-1}} \color{black}{+ \alpha_t} \color{red}{\mathbf{x}_{t-1}^2} }{\beta_t} + \frac{ \color{red}{\mathbf{x}_{t-1}^2} \color{black}{- 2 \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0} \color{blue}{\mathbf{x}_{t-1}} \color{black}{+ \bar{\alpha}_{t-1} \mathbf{x}_0^2} }{1-\bar{\alpha}_{t-1}} - \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t} \mathbf{x}_0)^2}{1-\bar{\alpha}_t} \big) \Big) \\ &= \exp\Big( -\frac{1}{2} \big( \color{red}{(\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}})} \mathbf{x}_{t-1}^2 - \color{blue}{(\frac{2\sqrt{\alpha_t}}{\beta_t} \mathbf{x}_t + \frac{2\sqrt{\bar{\alpha}_{t-1}}}{1 - \bar{\alpha}_{t-1}} \mathbf{x}_0)} \mathbf{x}_{t-1} \color{black}{ + C(\mathbf{x}_t, \mathbf{x}_0) \big) \Big)} \end{aligned}

其中,C(xt,x0)C(\mathbf{x}_t, \mathbf{x}_0)是不包含xt1\mathbf{x}_{t-1},所以相当于常数项。上面的公式看起来有些复杂,我们整理一下q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; {\tilde{\boldsymbol{\mu}}}(\mathbf{x}_t, \mathbf{x}_0), {\tilde{\beta}_t} \mathbf{I})的均值和方差是:

β~t=1αˉt11αˉtβtμ~t(xt,x0)=αt(1αˉt1)1αˉtxt+αˉt1βt1αˉtx0\begin{align} \tilde{\beta}_t &= {\frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \beta_t} \\ \tilde{\boldsymbol{\mu}}_t (\mathbf{x}_t, \mathbf{x}_0) &= \frac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1 - \bar{\alpha}_t} \mathbf{x}_0\\ \end{align}

其中,αt=1βt\alpha_t = 1 - \beta_t以及αˉt=i=1tαi\bar{\alpha}_t = \prod_{i=1}^t \alpha_i

从正向扩散过程可知,x0=1αˉt(xt1αˉtϵt)\mathbf{x}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(\mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon}_t),因此带入后,μ~t(xt,x0)\tilde{\boldsymbol{\mu}}_t (\mathbf{x}_t, \mathbf{x}_0)还可以进一步简化为:

μ~t(xt)=1αt(xt1αt1αˉtϵt)\begin{align} \tilde{\boldsymbol{\mu}}_t (\mathbf{x}_t) &= {\frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \Big)} \end{align}

最后得到:

q(xt1xt,x0)N(xt1;1αt(xt1αt1αˉtϵt),1αˉt11αˉtβtI)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) \sim \mathcal{N}(\mathbf{x}_{t-1};{\frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \Big)}, {\frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \beta_t} \mathbf{I})

Training Loss

铺垫了这么多,让我们回溯一下,优化目标LL主要是优化LT1=t=2TEq(xtx0)[DKL(q(xt1xt,x0))pθ(xt1xt])L_{T-1}=\sum_{t=2}^{T} \mathbb{E}_{q(x_{t} \vert x_0)}\left[ D_{KL} (q(x_{t-1} \vert x_{t}, x_0)) \parallel {p_{\theta}(x_{t-1} \vert x_{t}}\right]),其中我们刚刚在上一节得到q(xt1xt,x0)N(xt1;1αt(xt1αt1αˉtϵt),1αˉt11αˉtβtI)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) \sim \mathcal{N}(\mathbf{x}_{t-1};{\frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \Big)}, {\frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \beta_t} \mathbf{I}),并且在逆向扩散中定义pθ(xt1xt)N(xt1;μθ(xt,t),Σθ(xt,t))p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t) \sim \mathcal{N}(\mathbf{x}_{t-1}; \boldsymbol{\mu}_\theta(\mathbf{x}_t, t), \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t)),那么我们代入到LT1L_{T-1}中进行KL散度的计算。

在代入公式前,DDPM论文对pθ(xt1xt)N(xt1;μθ(xt,t),Σθ(xt,t))p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t) \sim \mathcal{N}(\mathbf{x}_{t-1}; \boldsymbol{\mu}_\theta(\mathbf{x}_t, t), \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t))中的Σθ(xt,t)\boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t)进行的简化,即设置此项为常量,我们可以设置其与q(xt1xt,x0)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0)的方差相同。

 DKL(q(xt1xt,x0)pθ(xt1xt))=DKL(N(xt1;μq,Σq(t))N(xt1;μθ,Σq(t)))=12[logΣq(t)Σq(t)d+tr(Σq(t)1Σq(t))+(μθμq)TΣq(t)1(μθμq)]=12[log1d+d+(μθμq)TΣq(t)1(μθμq)]=12[(μθμq)TΣq(t)1(μθμq)]=12[(μθμq)T(σq2(t)I)1(μθμq)]=12σq2(t)[μθ(xt,t)μq(xt,x0)22]\begin{aligned} & \quad \ D_{KL}({q(x_{t-1}|x_t, x_0)} \parallel {p_{{\theta}}(x_{t-1}|x_t)}) \\ &= D_{KL}({\mathcal{N}(x_{t-1}; {\mu}_q,{\Sigma}_q(t))}\parallel{\mathcal{N}(x_{t-1}; {\mu}_{{\theta}},{\Sigma}_q(t))})\\ &=\frac{1}{2}\left[\log\frac{{\Sigma}_q(t)}{{\Sigma}_q(t)} - d + \text{tr}({\Sigma}_q(t)^{-1}{\Sigma}_q(t)) + ({\mu}_{{\theta}}-{\mu}_q)^T {\Sigma}_q(t)^{-1} ({\mu}_{{\theta}}-{\mu}_q)\right]\\ &=\frac{1}{2}\left[\log1 - d + d + ({\mu}_{{\theta}}-{\mu}_q)^T {\Sigma}_q(t)^{-1} ({\mu}_{{\theta}}-{\mu}_q)\right]\\ &=\frac{1}{2}\left[({\mu}_{{\theta}}-{\mu}_q)^T {\Sigma}_q(t)^{-1} ({\mu}_{{\theta}}-{\mu}_q)\right]\\ &=\frac{1}{2}\left[({\mu}_{{\theta}}-{\mu}_q)^T \left(\sigma_q^2(t)\textbf{I}\right)^{-1} ({\mu}_{{\theta}}-{\mu}_q)\right]\\ &=\frac{1}{2\sigma_q^2(t)}\left[\left\lVert{\mu}_{{\theta}}(\mathbf{x}_t,t)-{\mu}_q(\mathbf{x}_t,\mathbf{x}_0)\right\rVert_2^2\right] \end{aligned}

到这里可以发现,最终模型的优化目标是q(xt1xt,x0)q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0)分布的均值μq(xt,x0){\mu}_q(\mathbf{x}_t,\mathbf{x}_0)。 既然μθ(xt,t)\mu_{\theta}(\mathbf{x}_t,t)要尽量近似μq(xt,x0){\mu}_q(\mathbf{x}_t,\mathbf{x}_0),那么不妨假设μθ(xt,t)\mu_{\theta}(\mathbf{x}_t,t)与其有相似的形式,并且利用公式(24)(24)进行展开,DDPM2在这里对DPM1进行了重要的改进(了解DPM):将ϵt\epsilon_t变为xtx_ttt的函数ϵθ(xt,t){\epsilon}_{ {\theta}}(x_t, t)

μθ(xt,t)=1αtxt1αt1αˉtαtϵθ(xt,t){\mu}_{{\theta}}(x_t, t) = \frac{1}{\sqrt{\alpha_t}}x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar\alpha_t}\sqrt{\alpha_t}} {\epsilon}_{ {\theta}}(x_t, t)

近似函数ϵθ(xt,t)\epsilon_{\theta}(x_t, t)表示输入xtx_t预测正向过程添加的噪音ϵ\epsilon

12σq2(t)[μθ(xt,t)μ~t(xt,x0)2]=12σq2(t)[1αt(xt1αt1αˉtϵθ(xt,t))1αt(xt1αt1αˉtϵt)2]=(1αt)22αt(1αˉt)σq2(t)[ϵθ(xt,t)ϵt2]=(1αt)22αt(1αˉt)σq2(t)[ϵθ(αˉtx0+1αˉtϵt,t)ϵt2]\begin{aligned} & \quad \frac{1}{2\sigma_q^2(t)}\Big[ \| {{\boldsymbol{\mu}_\theta(\mathbf{x}_t, t)- \tilde{\boldsymbol{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0)}} \|^2 \Big] \\ &= \frac{1}{2\sigma_q^2(t)} \Big[ \| {\frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\boldsymbol{\epsilon}}_\theta(\mathbf{x}_t, t) \Big)} - {\frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \Big)} \|^2 \Big] \\ &= \frac{ (1 - \alpha_t)^2 }{2 \alpha_t (1 - \bar{\alpha}_t) \sigma_q^2(t)} \Big[ \|\boldsymbol{\boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) - \epsilon}_t \|^2 \Big] \\ &= \frac{ (1 - \alpha_t)^2 }{2 \alpha_t (1 - \bar{\alpha}_t) \sigma_q^2(t)} \Big[\|\boldsymbol{\boldsymbol{\epsilon}_\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon}_t, t)-\epsilon}_t\|^2 \Big] \end{aligned}

其中ϵt\epsilon_t表示前向扩散过程t1t-1步到tt步中所添加的高斯噪音,即模型从预测均值μt\mu_t变成预测噪音ϵt\epsilon_t

Simplified Loss

DDPM论文中,通过实验发现,忽略上面公式中的权重(1αt)22αt(1αˉt)σq2(t)\frac{ (1 - \alpha_t)^2 }{2 \alpha_t (1 - \bar{\alpha}_t)\sigma_q^2(t)}可以有更好的结果:

Ltsimple=Et[1,T],x0,ϵt[ϵθ(xt,t)ϵt2]=Et[1,T],x0,ϵt[ϵθ(αˉtx0+1αˉtϵt,t)2ϵt]\begin{aligned} L_t^\text{simple} &= \mathbb{E}_{t \sim [1, T], \mathbf{x}_0, \boldsymbol{\epsilon}_t} \Big[\| \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) - \boldsymbol{\epsilon}_t \|^2 \Big] \\ &= \mathbb{E}_{t \sim [1, T], \mathbf{x}_0, \boldsymbol{\epsilon}_t} \Big[\|\boldsymbol{\epsilon}_\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon}_t, t)\|^2 - \boldsymbol{\epsilon}_t \Big] \end{aligned}

Training and Sampling (Generate)

训练过程见如下伪代码:

  • 从标准高斯分布中随机采样一个噪声,注意每一个时刻都是独立重新采样的随机高斯噪声,所以不同步ttϵ\epsilon是不一样的值
  • 代入上式中计算得到xtx_t
  • xtx_ttt和输入模型,模型输出值ϵθ(xt,t)\epsilon_{{\theta}}(x_t, t)作为预测噪声
  • 最小化ϵ\epsilonϵθ(xt,t)\epsilon_{{\theta}}(x_t, t)之间的平方误差
diffusion training

采样过程,即生成过程的伪代码如下: diffusion generate 在采样(图像生成)过程有一个细节,最后生成的图像(输出值)x~0\tilde{x}_0并不是通过xt1x_{t-1}计算得到的。而最终生成的图像x0x_0是根据下面公式得到的,当t=1t=1时,x~0\tilde{x}_0μ~\tilde{\mu}是相等的,

μ~=1αt(xtβt1αtˉϵθ(xt,t))=1α1(x11α11α1ˉϵˉ)=1α1(x11α11α1ˉϵˉ)=1α1(x11α11α1ϵˉ)=1α1(x11α1ϵˉ)=x~0\begin{align}\begin{aligned}\tilde{\mu} &= \frac{1} {\sqrt{\alpha_t}} (x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha_t}} } \epsilon_{\theta}(x_t,t) )\\&= \frac{1} {\sqrt{\alpha_1}} (x_1 - \frac{1-\alpha_1}{\sqrt{1-\bar{\alpha_1}} } \bar{\epsilon} )\\&= \frac{1} {\sqrt{\alpha_1}} (x_1 - \frac{1-\alpha_1}{\sqrt{1-\bar{\alpha_1}} } \bar{\epsilon} )\\&= \frac{1} {\sqrt{\alpha_1}} (x_1 - \frac{1-\alpha_1}{\sqrt{1-\alpha_1} } \bar{\epsilon} )\\&= \frac{1} {\sqrt{\alpha_1}} (x_1 - \sqrt{1-\alpha_1} \bar{\epsilon} )\\&= \tilde{x}_0\end{aligned}\end{align}

也就是说我们最终输出的x~0\tilde{x}_0q(xt1xt,x0,t=1)q(x_{t-1}|x_t, x_0,t=1),而不是q(xt1xt,x0,t=1)q(x_{t-1}|x_t, x_0,t=1)的采样值。

Footnotes

  1. Deep Unsupervised Learning using Nonequilibrium Thermodynamics 2

  2. Denoising Diffusion Probabilistic Model 2 3 4 5

  3. What are Diffusion Models?,不适合初学者

  4. DPM解读(图2.1.4)