DDPM(Denoising Diffusion Probabilistic Models)扩散模型简述

引言

扩散模型最早是在2015年的Deep Unsupervised Learning using Nonequilibrium Thermodynamics文章中提出的,但当时扩散模型并不work,所以并没有被广泛应用。在2020年,Denoising Diffusion Probabilistic Models(简称为DDPM)的出现,将扩散模型带到了一个新高度。并且在其之前主流的生成网络GAN,还存在一些缺点,因为其要训练两个网络,难度较大,容易不收敛,多样性较差,并且模型在训练过程中不稳定,只要骗过判别器即可。而生成模型用一种更简单的方法诠释了生成模型应该如何学习和生成,感觉更简单,之后扩散模型可能会替代GAN成为主流的生成模型。
扩散模型图示

以上是扩散模型的图示,可以看到扩散模型分为两个阶段,分为前向过程和逆向过程。

  • 前向过程即上图中 x 0 \mathbf{x}_0 x0 x T \mathbf{x}_T xT的过程,我们向原始图像中逐步添加高斯噪声,并且后一时刻都是由前一时刻添加噪声得到的,这样我们就得到 x 1 \mathbf{x}_1 x1 x 2 \mathbf{x}_2 x2,…, x T \mathbf{x}_T xT x T \mathbf{x}_T xT是完全的高斯噪声。前向过程存在的意义就是帮助神经网络去训练逆向过程,也即前向过程中得到的噪声就是一系列标签,根据这些标签,逆向过程在去噪的时候就知道噪音是怎么加进去的,进而进行训练。正向过程对应网络的训练过程
  • 逆向过程即上图中 x T \mathbf{x}_T xT x 0 \mathbf{x}_0 x0的过程。我们从标准正态分布采样的高斯噪声 x T \mathbf{x}_T xT,逐步对其去噪,得到 x T − 1 \mathbf{x}_{T-1} xT1 x T − 2 \mathbf{x}_{T-2} xT2,…, x 0 \mathbf{x}_0 x0 x 0 \mathbf{x}_0 x0是没有噪声的的图像。逆向过程对应网络的推理过程。

前向过程Forward Process

前向过程又称扩散过程,其是一个马尔科夫过程(即当前状态只和前一个状态有关)。我们向原始图像 x 0 \mathbf{x}_0 x0中逐步添加高斯噪声,噪声的标准差是固定值 β t \beta_t βt来确定的,均值是固定值 β t \beta_t βt和和 t − 1 t-1 t1时刻的数据 x t − 1 \mathbf{x}_{t-1} xt1确定的。随着 t t t不断增大,最终分布 x T \mathbf{x}_T xT服从于各向同性的高斯分布了。那么我们要加多少次噪声呢,也即 T T T取多大好呢?论文中将 T T T看做成一个超参数, T = 1000 T=1000 T=1000,即加1000次噪声后, x T \mathbf{x}_T xT会变成各向同性的高斯分布。下方是论文中给出的扩散过程 x t \mathbf{x}_t xt的分布。
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1})=\mathcal{N}(\mathbf{x}_{t};\sqrt{1-\beta_{t}}\mathbf{x}_{t-1},\beta_{t}\mathbf{I}) q(xtxt1)=N(xt;1βt xt1,βtI)
我们可以利用重参数化技巧,将其改写成下面的式子
x t = 1 − β t x t − 1 + β t z t − 1 \mathbf{x}_t=\sqrt{1-\beta_{t}}\mathbf{x}_{t-1}+\sqrt{\beta_{t}}\mathbf{z}_{t-1} xt=1βt xt1+βt zt1
通过这个式子,我们就可以很直观的看到这个噪声是怎么加的,即 a × I m a g e + b × N o i s e a ×Image + b ×Noise a×Image+b×Noise I m a g e Image Image是前一时刻生成的图像,即上式中的 x t − 1 \mathbf{x}_{t-1} xt1 N o i s e Noise Noise是标准正态分布,即上式中 z t − 1 ∼ N ( 0 , I ) \mathbf{z}_{t-1}\sim\mathcal{N}(0,\mathbf{I}) zt1N(0,I)。并且这里图像和噪音的权重是不断变化的,也即上式中的 β t \beta_t βt,论文中将其称作扩散率,也是按照超参数处理, β \beta β的范围从0.0001逐步增大到0.02。为什么扩散率是逐渐增大的呢,也即为什么噪音所占的比例越来越大呢?可以反过来理解,在加噪声的过程中,扩散率逐渐增大,对应着在去噪声的过程中,扩散率逐渐减小,也就是说,去噪的过程是先把"明显"的噪声给去除,对应着较大的扩散率;当去到一定程度,逐渐逼近真实真实图像的时候,去噪速率逐渐减慢,开始微调,也就是对应着较小的扩散率。

重参数化技巧

如果我们要对高斯分布 N ( μ , σ 2 ) \mathcal{N}(\mu, \sigma^2) N(μ,σ2)进行采样一个噪声 ϵ \epsilon ϵ,等价于先从标准正态分布 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1)中采样的到一个噪声 z \mathbf{z} z,然后对其乘上标准差 σ \sigma σ,加上均值 μ \mu μ,即 ϵ = μ + σ ⋅ z \epsilon=\mu+\sigma\cdot\mathbf{z} ϵ=μ+σz。举个例子,上面我们已经得到了 x t \mathbf{x}_t xt是从高斯分布 N ( 1 − β t x t − 1 , β t I ) \mathcal{N}(\sqrt{1-\beta_{t}}\mathbf{x}_{t-1},\beta_{t}\mathbf{I}) N(1βt xt1,βtI)采样出来的噪声,该高斯分布的均值为 1 − β t x t − 1 \sqrt{1-\beta_{t}}\mathbf{x}_{t-1} 1βt xt1,标准差为 β t \sqrt{\beta_{t}} βt ,所以 x t = 1 − β t x t − 1 + β t z \mathbf{x}_t=\sqrt{1-\beta_{t}}\mathbf{x}_{t-1}+\sqrt{\beta_{t}}\mathbf{z} xt=1βt xt1+βt z

解释结束

现在我们可以根据 x t − 1 \mathbf{x}_{t-1} xt1得到 x t \mathbf{x}_t xt,那么如果我们给出了原始图像 x 0 \mathbf{x}_0 x0。能不能通过一次计算就得到加噪任意 t t t次之后的 x t \mathbf{x}_t xt?答案是可以的。
首先令 α t = 1 − β t \alpha_{t}=1-\beta_{t} αt=1βt α ˉ t = α 1 ∗ α 2 ∗ ⋯ ∗ α t \bar{\alpha}_{t}=\alpha_1\ast\alpha_2\ast\dots\ast\alpha_{t} αˉt=α1α2αt z ~ t ∼ N ( 0 , I ) \tilde{\mathbf{z}}_{t}\sim\mathcal{N}(0,\mathbf{I}) z~tN(0,I),则
x t = α t x t − 1 + 1 − α t z t − 1 = α t ∗ ( α t − 1 x t − 2 + 1 − α t − 1 z t − 2 ) + 1 − α t z t − 1 = α t α t − 1 x t − 2 + α t − α t α t − 1 z t − 2 + 1 − α t z t − 1 ∗ = α t α t − 1 x t − 2 + 1 − α t α t − 1 z ˉ t − 2 = … = α ˉ t x 0 + 1 − α ˉ t z ~ t \begin{aligned} \mathbf{x}_t & = \sqrt{\alpha_{t}}\mathbf{x}_{t-1}+\sqrt{1-\alpha_{t}}\mathbf{z}_{t-1} \\ & = \sqrt{\alpha_{t}}\ast(\sqrt{\alpha_{t-1}}\mathbf{x}_{t-2}+\sqrt{1-\alpha_{t-1}}\mathbf{z_{t-2}})+\sqrt{1-\alpha_{t}}\mathbf{z}_{t-1} \\ & = \sqrt{\alpha_{t}\alpha_{t-1}}\mathbf{x}_{t-2}+\sqrt{\alpha_{t}-\alpha_{t}\alpha_{t-1}}\mathbf{z}_{t-2}+\sqrt{1-\alpha_{t}}\mathbf{z}_{t-1} \qquad *\\ & = \sqrt{\alpha_{t}\alpha_{t-1}}\mathbf{x}_{t-2}+\sqrt{1-\alpha_{t}\alpha_{t-1}}\bar{\mathbf{z}}_{t-2} \\ & = \dots \\ & = \sqrt{\bar{\alpha}_{t}}\mathbf{x_{0}}+\sqrt{1-\bar{\alpha}_{t}}\tilde{\mathbf{z}}_{t} \end{aligned} xt=αt xt1+1αt zt1=αt (αt1 xt2+1αt1 zt2)+1αt zt1=αtαt1 xt2+αtαtαt1 zt2+1αt zt1=αtαt1 xt2+1αtαt1 zˉt2==αˉt x0+1αˉt z~t
通过重参数化,我们能得到 q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(\mathbf{x}_t\mid\mathbf{x}_0)=\mathcal{N}(\mathbf{x}_t;\sqrt{\bar{\alpha}_t}\mathbf{x}_0,(1-\bar{\alpha}_t)\mathbf{I}) q(xtx0)=N(xt;αˉt x0,(1αˉt)I)

对于 ∗ * 处运算的解释

对于任意两个正态分布 x ∼ N ( μ 1 , σ 1 2 ) \mathbf{x}\sim\mathcal{N}(\mu_1,\sigma_1^2) xN(μ1,σ12) y ∼ N ( μ 2 , σ 2 2 ) \mathbf{y}\sim\mathcal{N}(\mu_2,\sigma_2^2) yN(μ2,σ22),其和的分布 x + y ∼ N ( μ 1 + μ 2 , σ 1 2 + σ 2 2 ) \mathbf{x}+\mathbf{y}\sim\mathcal{N}(\mu_1+\mu_2,\sigma_1^2+\sigma_2^2) x+yN(μ1+μ2,σ12+σ22)

因此对于两个标准正态分布 z t − 2 \mathbf{z}_{t-2} zt2 z t − 1 \mathbf{z}_{t-1} zt1,将其前面乘上一个系数, α t − α t α t − 1 z t − 2 ∼ N ( 0 , α t − α t α t − 1 ) \sqrt{\alpha_{t}-\alpha_{t}\alpha_{t-1}}\mathbf{z}_{t-2}\sim\mathcal{N}(0,\alpha_{t}-\alpha_{t}\alpha_{t-1}) αtαtαt1 zt2N(0,αtαtαt1) 1 − α t z t − 1 ∼ N ( 0 , 1 − α t ) \sqrt{1-\alpha_{t}}\mathbf{z}_{t-1}\sim\mathcal{N}(0,1-\alpha_{t}) 1αt zt1N(0,1αt),因此 α t − α t α t − 1 z t − 2 + 1 − α t z t − 1 ∼ N ( 0 , 1 − α t α t − 1 ) \sqrt{\alpha_{t}-\alpha_{t}\alpha_{t-1}}\mathbf{z}_{t-2}+\sqrt{1-\alpha_{t}}\mathbf{z}_{t-1}\sim\mathcal{N}(0,1-\alpha_{t}\alpha_{t-1}) αtαtαt1 zt2+1αt zt1N(0,1αtαt1),也即 1 − α t α t − 1 z ˉ t − 2 \sqrt{1-\alpha_{t}\alpha_{t-1}}\bar{\mathbf{z}}_{t-2} 1αtαt1 zˉt2。这里不同形式 z \mathbf{z} z单纯起区分作用,本质上都属于标准正态分布 N ( 0 , I ) \mathcal{N}(0,\mathbf{I}) N(0,I)的不同采样。

解释结束

以上就是前向过程大概内容,我们从前向过程得到的 x t \mathbf{x}_t xt将会作为标签,帮助网络学习如何从 x T \mathbf{x}_T xT中一步步去噪,最终得到 x 0 \mathbf{x}_0 x0


后向过程Reverse Process

后向过程又称逆扩散过程。我们希望能够从一个噪声分布 x T \mathbf{x}_T xT中逐步去预测出来目标分布 x 0 \mathbf{x}_0 x0。后向过程仍然是一个马尔科夫链过程。根据我们输入的 x t \mathbf{x}_{t} xt去求 x t − 1 \mathbf{x}_{t-1} xt1的分布,即求 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t}) q(xt1xt),直接对该公式求解比较困难,可以使用贝叶斯公式将其转化为我们已知的量 q ( x t − 1 ∣ x t ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ) q ( x t ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t})=q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1})\frac{q(\mathbf{x}_{t-1})}{q(\mathbf{x}_{t})} q(xt1xt)=q(xtxt1)q(xt)q(xt1)
由前向过程, q ( x t ∣ x t − 1 ) q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1}) q(xtxt1)已知,但是 q ( x t − 1 ) q(\mathbf{x}_{t-1}) q(xt1) q ( x t ) q(\mathbf{x}_{t}) q(xt)未知,但是如果我们给其加上一个先决条件 q ( x 0 ) q(\mathbf{x}_0) q(x0),也即 q ( x t − 1 ∣ x 0 ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_0) q(xt1x0) q ( x t ∣ x 0 ) q(\mathbf{x}_{t}\mid\mathbf{x}_0) q(xtx0),这两个分布由前向过程我们是已知的,所以对 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t}) q(xt1xt)加上一个条件 x 0 \mathbf{x}_0 x0,得到一个多元条件分布
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(\mathbf{x}_{t-1}\mid\mathbf{x}_{t},\mathbf{x}_0)=q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1},\mathbf{x}_0)\frac{q(\mathbf{x}_{t-1}\mid\mathbf{x}_0)}{q(\mathbf{x}_{t}\mid\mathbf{x}_0)} q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)
由于扩散过程是马尔科夫过程,所以 q ( x t ∣ x t − 1 , x 0 ) = q ( x t ∣ x t − 1 ) q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1},\mathbf{x}_0)=q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1}) q(xtxt1,x0)=q(xtxt1)
至此,所有分布我们都已知了,由于正态分布 N ( μ , σ 2 ) \mathcal{N}(\mu,\sigma^2) N(μ,σ2)的概率密度函数 p ( x ) = 1 2 π σ e − 1 2 ( x − μ σ ) 2 ∝ e x p ( − 1 2 ( x − μ σ ) 2 ) = e x p ( − 1 2 ( 1 σ 2 x 2 − 2 μ σ 2 x + μ 2 σ 2 ) ) p(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{1}{2}(\frac{x-\mu}{\sigma})^2}\propto exp({-\frac{1}{2}(\frac{x-\mu}{\sigma})^2})=exp(-\frac{1}{2}(\frac{1}{\sigma^2}x^2-\frac{2\mu}{\sigma^2}x+\frac{\mu^2}{\sigma^2})) p(x)=2π σ1e21(σxμ)2exp(21(σxμ)2)=exp(21(σ21x2σ22μx+σ2μ2)),故

  • q ( x t ∣ x t − 1 ) = N ( x t ; α t x t − 1 , ( 1 − α t ) I ) ∝ e x p ( − 1 2 ( x t − α t x t − 1 ) 2 1 − α t ) q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1})=\mathcal{N}(\mathbf{x}_{t};\sqrt{\alpha_{t}}\mathbf{x}_{t-1},(1-\alpha_{t})\mathbf{I})\propto exp(-\frac{1}{2}\frac{(\mathbf{x}_{t}-\sqrt{\alpha_{t}}\mathbf{x}_{t-1})^2}{1-\alpha_{t}}) q(xtxt1)=N(xt;αt xt1,(1αt)I)exp(211αt(xtαt xt1)2)
  • x t − 1 = α ˉ t − 1 x 0 + 1 − α ˉ t − 1 z ~ t − 1 \mathbf{x}_{t-1}=\sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_{t-1}}\tilde{\mathbf{z}}_{t-1} xt1=αˉt1 x0+1αˉt1 z~t1,利用重参数技巧,则 q ( x t − 1 ∣ x 0 ) = N ( x t − 1 ; α ˉ t − 1 x 0 , ( 1 − α ˉ t − 1 ) I ) ∝ e x p ( − 1 2 ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{0})=\mathcal{N}(\mathbf{x}_{t-1};\sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0,(1-\bar{\alpha}_{t-1})\mathbf{I})\propto exp(-\frac{1}{2}\frac{(\mathbf{x}_{t-1}-\sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0)^2}{1-\bar{\alpha}_{t-1}}) q(xt1x0)=N(xt1;αˉt1 x0,(1αˉt1)I)exp(211αˉt1(xt1αˉt1 x0)2)
  • x t = α ˉ t x 0 + 1 − α ˉ t z ~ t \mathbf{x}_{t}=\sqrt{\bar{\alpha}_{t}}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_{t}}\tilde{\mathbf{z}}_{t} xt=αˉt x0+1αˉt z~t,同样利用重参数技巧,则 q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) ∝ e x p ( − 1 2 ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) q(\mathbf{x}_{t}\mid\mathbf{x}_{0})=\mathcal{N}(\mathbf{x}_{t};\sqrt{\bar{\alpha}_{t}}\mathbf{x}_0,(1-\bar{\alpha}_{t})\mathbf{I})\propto exp(-\frac{1}{2}\frac{(\mathbf{x}_{t}-\sqrt{\bar{\alpha}_{t}}\mathbf{x}_0)^2}{1-\bar{\alpha}_{t}}) q(xtx0)=N(xt;αˉt x0,(1αˉt)I)exp(211αˉt(xtαˉt x0)2)

这样一来我们对概率分布的运算就可以转化为指数运算。由于对指数进行乘除运算相当于对其系数的加减运算,故
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) ∝ e x p ( − 1 2 [ ( x t − α t x t − 1 ) 2 1 − α t + ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ] ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t},\mathbf{x}_0)=q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1})\frac{q(\mathbf{x}_{t-1}\mid\mathbf{x}_0)}{q(\mathbf{x}_{t}\mid\mathbf{x}_0)}\propto exp(-\frac{1}{2}[\frac{(\mathbf{x}_{t}-\sqrt{\alpha_{t}}\mathbf{x}_{t-1})^2}{1-\alpha_{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}}]) q(xt1xt,x0)=q(xtxt1)q(xtx0)q(xt1x0)exp(21[1αt(xtαt xt1)2+1αˉt1(xt1αˉt1 x0)21αˉt(xtαˉt x0)2])
由于我们目标是求与 x t − 1 \mathbf{x}_{t-1} xt1有关的条件分布,所以将平方项进一步展开化简为关于 x t − 1 \mathbf{x}_{t-1} xt1的二次函数
q ( x t − 1 ∣ x t , x 0 ) ∝ e x p ( − 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 ) ] ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t},\mathbf{x}_0)\propto exp(-\frac{1}{2}[(\frac{\alpha_{t}}{\beta_{t}}+\frac{1}{1-\bar{\alpha}_{t-1}})\mathbf{x}_{t-1}^2-(\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}-C(\mathbf{x}_t,\mathbf{x}_0)]) q(xt1xt,x0)exp(21[(βtαt+1αˉt11)xt12(βt2αt xt+1αˉt12αˉt1 x0)xt1C(xt,x0)])
这里 C ( x t , x 0 ) C(\mathbf{x}_t,\mathbf{x}_0) C(xt,x0) ( x t − α ˉ t x 0 ) 2 1 − α ˉ t \frac{(\mathbf{x}_{t}-\sqrt{\bar{\alpha}_{t}}\mathbf{x}_0)^2}{1-\bar{\alpha}_{t}} 1αˉt(xtαˉt x0)2,也即 q ( x t ∣ x 0 ) q(\mathbf{x}_t\mid\mathbf{x}_0) q(xtx0)。由于上式是关于 x t − 1 \mathbf{x}_{t-1} xt1的函数,由于 q ( x t ∣ x 0 ) q(\mathbf{x}_t\mid\mathbf{x}_0) q(xtx0)不含 x t − 1 \mathbf{x}_{t-1} xt1,故将其视为常数 C C C。由于 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t},\mathbf{x}_0) q(xt1xt,x0)服从于正态分布,所以我们只需要找到其均值和方差就能求出其分布。怎么求?
现在我们考虑正态分布 N ( μ , σ 2 ) \mathcal{N}(\mu,\sigma^2) N(μ,σ2)的概率密度函数 p ( x ) = 1 2 π σ e − 1 2 ( x − μ σ ) 2 ∝ e x p ( − 1 2 ( x − μ σ ) 2 ) = e x p ( − 1 2 ( 1 σ 2 x 2 − 2 μ σ 2 x + μ 2 σ 2 ) ) p(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{1}{2}(\frac{x-\mu}{\sigma})^2}\propto exp({-\frac{1}{2}(\frac{x-\mu}{\sigma})^2})=exp(-\frac{1}{2}(\frac{1}{\sigma^2}x^2-\frac{2\mu}{\sigma^2}x+\frac{\mu^2}{\sigma^2})) p(x)=2π σ1e21(σxμ)2exp(21(σxμ)2)=exp(21(σ21x2σ22μx+σ2μ2)),所以我们可以找出分布 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t},\mathbf{x}_0) q(xt1xt,x0)的均值和方差。由于方差 σ 2 \sigma^2 σ2 x 2 x^2 x2系数的倒数,而 x t − 1 2 \mathbf{x}_{t-1}^2 xt12的系数为 ( α t β t + 1 1 − α ˉ t − 1 ) (\frac{\alpha_{t}}{\beta_{t}}+\frac{1}{1-\bar{\alpha}_{t-1}}) (βtαt+1αˉt11),其只由人为设置的超参数 β \beta β确定,故方差是已知的。 x x x的系数为 − 2 μ σ 2 -\frac{2\mu}{\sigma^2} σ22μ,则我们可以根据方差来间接求出均值, x t − 1 \mathbf{x}_{t-1} xt1的系数为 ( 2 α t β t x t + 2 α ˉ t − 1 1 − α ˉ t − 1 x 0 ) (\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) (βt2αt xt+1αˉt12αˉt1 x0)。可以发现,系数中共有四个变量 α \alpha α β \beta β x t \mathbf{x}_t xt x 0 \mathbf{x}_0 x0,其中 α \alpha α β \beta β x t \mathbf{x}_t xt都是已知的,但是对于 x 0 \mathbf{x}_0 x0,由于我们现在是处于后向过程, x 0 \mathbf{x}_0 x0是未知的,现在我们要想办法将 x 0 \mathbf{x}_0 x0用已知量进行替换。我们先将 x t − 1 \mathbf{x}_{t-1} xt1的均值记为一个关于 x t \mathbf{x}_t xt x 0 \mathbf{x}_0 x0的函数 μ ~ t ( x t , x 0 ) \tilde{\mu}_t(\mathbf{x}_t,\mathbf{x}_0) μ~t(xt,x0)。将 1 σ 2 = ( α t β t + 1 1 − α ˉ t − 1 ) \frac{1}{\sigma^2}=(\frac{\alpha_{t}}{\beta_{t}}+\frac{1}{1-\bar{\alpha}_{t-1}}) σ21=(βtαt+1αˉt11)代入 2 μ σ 2 = ( 2 α t β t x t + 2 α ˉ t − 1 1 − α ˉ t − 1 x 0 ) \frac{2\mu}{\sigma^2}=(\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) σ22μ=(βt2αt xt+1αˉt12αˉt1 x0)求解可得 μ ~ t ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 β t 1 − α ˉ t x 0 \tilde{\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 μ~t(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtαˉt1 βtx0
现在回想一下,我们已经在前向过程中已经得到了 x 0 \mathbf{x}_0 x0 x t \mathbf{x}_t xt的关系 x t = α ˉ t x 0 + 1 − α ˉ t z ~ t \mathbf{x}_{t}=\sqrt{\bar{\alpha}_{t}}\mathbf{x_{0}}+\sqrt{1-\bar{\alpha}_{t}}\tilde{\mathbf{z}}_{t} xt=αˉt x0+1αˉt z~t
现在我们用 x t \mathbf{x}_t xt来表示 x 0 \mathbf{x}_0 x0 x 0 = 1 α ˉ t ( x t − 1 − α ˉ t z ~ t ) \mathbf{x}_0=\frac{1}{\sqrt{\bar{\alpha}_t}}(\mathbf{x}_t-\sqrt{1-\bar{\alpha}_t}\tilde{\mathbf{z}}_t) x0=αˉt 1(xt1αˉt z~t)然后将其代入 μ ~ t ( x t ) = 1 α t ( x t − 1 − α t 1 − α ˉ t z ~ t ) \tilde{\mu}_t(\mathbf{x}_t)=\frac{1}{\sqrt{\alpha_t}}(\mathbf{x}_t-\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}}\tilde{\mathbf{z}}_t) μ~t(xt)=αt 1(xt1αˉt 1αtz~t)
这样我们就把 x 0 \mathbf{x}_0 x0消掉了,现在我们只要知道了 z ~ t \tilde{\mathbf{z}}_t z~t,就能将 μ ~ t \tilde{\mu}_t μ~t表示出来,进而得到 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t},\mathbf{x}_0) q(xt1xt,x0)的分布,将 x t − 1 \mathbf{x}_{t-1} xt1采样出来,完成一次去噪过程。那么 z ~ t \tilde{\mathbf{z}}_t z~t怎么求呢?
这就要请出深度学习了,我们可以设计一个网络去预测在 x t \mathbf{x}_t xt时刻的噪音 z ~ t \tilde{\mathbf{z}}_t z~t。网络的输入是 x t \mathbf{x}_t xt,网络的输出是 z ~ t \tilde{\mathbf{z}}_t z~t,这是一个预测值,那么真实值在哪呢?我们只有得到真实值,我们才能计算预测值和真值之间的损失,从而训练网络。这时我们考虑前向过程,前向过程中,后一时刻等于前一时刻加上一个噪音 z \mathbf{z} z z \mathbf{z} z是我们采样得来的,是已知的,也就是之前我们所谓的标签。假设我们前向过程由 x t − 1 \mathbf{x}_{t-1} xt1 x t \mathbf{x}_t xt加的噪音为 z \mathbf{z} z,那么 z ~ t \tilde{\mathbf{z}}_t z~t的真值就是 z \mathbf{z} z,所以我们这个网络训练的 z ~ t \tilde{\mathbf{z}}_t z~t就去不断拟合噪声 z \mathbf{z} z
至此前向过程和后向过程已经介绍结束了,如果读者想了解论文中交叉熵loss的推导,可以看公式推导这篇文章的解释(由于篇幅限制,我只好把它放到另一篇文章),这部分公式比较复杂,如果不感兴趣,直接跳过即可,不影响最后算法理解。


DDPM算法代码

算法流程

训练部分
  • 首先在真实图像分布 q ( x 0 ) q(\mathbf{x}_0) q(x0)中采样出 x 0 \mathbf{x}_0 x0,也即我们的训练图像
  • 在区间 1 , . . . , T {1,...,T} 1,...,T中随机生成生成一个 t t t,代表扩散(加噪)次数
  • 从标准正态分布中采样一个随机噪声 ϵ \epsilon ϵ
  • 计算损失函数,其中的真值是我们刚刚采样得到的噪声 ϵ \epsilon ϵ,网络预测值是 ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) \epsilon_{\theta}(\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_t}\epsilon,t) ϵθ(αˉt x0+1αˉt ϵ,t),而 α ˉ t x 0 + 1 − α ˉ t ϵ \sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_t}\epsilon αˉt x0+1αˉt ϵ是我们在前向过程中求得的 x t \mathbf{x}_t xt,这其实可以改写为 ϵ θ ( x t , t ) \epsilon_{\theta}(\mathbf{x}_t,t) ϵθ(xt,t),这里的 t t t做一个时间编码喂入网络中,因为在后向过程中,每一次迭代的网络都是相同的,即参数共享,那怎么让网络知道现在迭代到哪一步呢,那么我们就将 t t t一同传进去参与训练,用 t t t来告诉网络我现在进行到第几次迭代了。时间编码和transformer中的位置编码类似。

总结一下,训练过程就是给定 x 0 \mathbf{x}_0 x0和随机噪声 ϵ \epsilon ϵ,然后生成一个扩散(加噪)次数 t t t,进行 t t t次扩散过程得到 x t \mathbf{x}_t xt,然后通过一个网络 ϵ θ \epsilon_{\theta} ϵθ来预测一个合适的噪声,也就是 z ~ t \tilde{\mathbf{z}}_t z~t

采样部分
  • 首先从标准正态分布中采样一个随机噪声 x T \mathbf{x}_T xT。因为我们在前向过程中认为在原图扩散 T T T次之后,原图服从于一个各相同性的高斯分布。
  • 然后进行 T T T次迭代,对于每一次迭代,首先采样一个标准高斯噪声,但是最后一步就不采样了。然后通过公式计算去噪一次的结果,公式中的 ϵ θ \epsilon_{\theta} ϵθ就是我们在训练过程得到的结果。

总结

DDPM对Deep Unsupervised Learning using Nonequilibrium Thermodynamics文中提出的模型(下文称扩散模型)改进了两点

  • 第一点,扩散模型在后向过程中,是由 x t \mathbf{x}_t xt预测 x t − 1 \mathbf{x}_{t-1} xt1,也即直接预测图像,而DDPM是预测在前向过程中,我们从 x t − 1 \mathbf{x}_{t-1} xt1扩散到 x t \mathbf{x}_t xt所加的噪声,有点类似Resnet,即如何将噪声从噪声-图像混合物中分离出来,从而将问题简化。
  • 第二点,如果我们要预测一个正态分布,我们只需要学它的均值和方差即可,而DDPM将方差视作常数,只需学习均值就能得到分布,最后的效果也不错,并且降低了模型优化的难度

之后有关DDPM的改进,比如IDDPM,DM beats gan等等,读者可自行了解。

参考

Denoising Diffusion Probabilistic Models
What are Diffusion Models?
入门理解Denoising Diffusion Probabilistic Model
Probabilistic Diffusion Model概率扩散模型理论

  • 72
    点赞
  • 244
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值