引言

扩散模型最早是在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} xT−1​, x T − 2 \mathbf{x}_{T-2} xT−2​,…, 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 t−1时刻的数据 x t − 1 \mathbf{x}_{t-1} xt−1​确定的。随着 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(xt​∣xt−1​)=N(xt​;1−βt​ ​xt−1​,βt​I)
我们可以利用重参数化技巧,将其改写成下面的式子
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​ ​xt−1​+βt​ ​zt−1​
通过这个式子,我们就可以很直观的看到这个噪声是怎么加的,即 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} xt−1​; N o i s e Noise Noise是标准正态分布,即上式中 z t − 1 ∼ N ( 0 , I ) \mathbf{z}_{t-1}\sim\mathcal{N}(0,\mathbf{I}) zt−1​∼N(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​ ​xt−1​,βt​I)采样出来的噪声,该高斯分布的均值为 1 − β t x t − 1 \sqrt{1-\beta_{t}}\mathbf{x}_{t-1} 1−βt​ ​xt−1​,标准差为 β 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​ ​xt−1​+βt​ ​z。

解释结束

现在我们可以根据 x t − 1 \mathbf{x}_{t-1} xt−1​得到 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~t​∼N(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​ ​xt−1​+1−αt​ ​zt−1​=αt​ ​∗(αt−1​ ​xt−2​+1−αt−1​ ​zt−2​)+1−αt​ ​zt−1​=αt​αt−1​ ​xt−2​+αt​−αt​αt−1​ ​zt−2​+1−αt​ ​zt−1​∗=αt​αt−1​ ​xt−2​+1−αt​αt−1​ ​zˉt−2​=…=αˉ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(xt​∣x0​)=N(xt​;αˉt​ ​x0​,(1−αˉt​)I)

对于 ∗ * ∗处运算的解释

对于任意两个正态分布 x ∼ N ( μ 1 , σ 1 2 ) \mathbf{x}\sim\mathcal{N}(\mu_1,\sigma_1^2) x∼N(μ1​,σ12​)和 y ∼ N ( μ 2 , σ 2 2 ) \mathbf{y}\sim\mathcal{N}(\mu_2,\sigma_2^2) y∼N(μ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+y∼N(μ1​+μ2​,σ12​+σ22​)

因此对于两个标准正态分布 z t − 2 \mathbf{z}_{t-2} zt−2​和 z t − 1 \mathbf{z}_{t-1} zt−1​,将其前面乘上一个系数, α 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​αt−1​ ​zt−2​∼N(0,αt​−αt​αt−1​), 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​ ​zt−1​∼N(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​αt−1​ ​zt−2​+1−αt​ ​zt−1​∼N(0,1−αt​αt−1​),也即 1 − α t α t − 1 z ˉ t − 2 \sqrt{1-\alpha_{t}\alpha_{t-1}}\bar{\mathbf{z}}_{t-2} 1−αt​αt−1​ ​zˉt−2​。这里不同形式 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} xt−1​的分布,即求 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t}) q(xt−1​∣xt​),直接对该公式求解比较困难,可以使用贝叶斯公式将其转化为我们已知的量 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(xt−1​∣xt​)=q(xt​∣xt−1​)q(xt​)q(xt−1​)​
由前向过程, q ( x t ∣ x t − 1 ) q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1}) q(xt​∣xt−1​)已知,但是 q ( x t − 1 ) q(\mathbf{x}_{t-1}) q(xt−1​)和 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(xt−1​∣x0​)和 q ( x t ∣ x 0 ) q(\mathbf{x}_{t}\mid\mathbf{x}_0) q(xt​∣x0​),这两个分布由前向过程我们是已知的,所以对 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t}) q(xt−1​∣xt​)加上一个条件 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(xt−1​∣xt​,x0​)=q(xt​∣xt−1​,x0​)q(xt​∣x0​)q(xt−1​∣x0​)​
由于扩散过程是马尔科夫过程,所以 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(xt​∣xt−1​,x0​)=q(xt​∣xt−1​)
至此,所有分布我们都已知了,由于正态分布 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π ​σ1​e−21​(σx−μ​)2∝exp(−21​(σx−μ​)2)=exp(−21​(σ21​x2−σ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(xt​∣xt−1​)=N(xt​;αt​ ​xt−1​,(1−αt​)I)∝exp(−21​1−αt​(xt​−αt​ ​xt−1​)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} xt−1​=αˉt−1​ ​x0​+1−αˉt−1​ ​z~t−1​,利用重参数技巧,则 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(xt−1​∣x0​)=N(xt−1​;αˉt−1​ ​x0​,(1−αˉt−1​)I)∝exp(−21​1−αˉt−1​(xt−1​−αˉt−1​ ​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(xt​∣x0​)=N(xt​;αˉt​ ​x0​,(1−αˉt​)I)∝exp(−21​1−αˉ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(xt−1​∣xt​,x0​)=q(xt​∣xt−1​)q(xt​∣x0​)q(xt−1​∣x0​)​∝exp(−21​[1−αt​(xt​−αt​ ​xt−1​)2​+1−αˉt−1​(xt−1​−αˉt−1​ ​x0​)2​−1−αˉt​(xt​−αˉt​ ​x0​)2​])
由于我们目标是求与 x t − 1 \mathbf{x}_{t-1} xt−1​有关的条件分布,所以将平方项进一步展开化简为关于 x t − 1 \mathbf{x}_{t-1} xt−1​的二次函数
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(xt−1​∣xt​,x0​)∝exp(−21​[(βt​αt​​+1−αˉt−1​1​)xt−12​−(βt​2αt​ ​​xt​+1−αˉt−1​2αˉt−1​ ​​x0​)xt−1​−C(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(xt​∣x0​)。由于上式是关于 x t − 1 \mathbf{x}_{t-1} xt−1​的函数,由于 q ( x t ∣ x 0 ) q(\mathbf{x}_t\mid\mathbf{x}_0) q(xt​∣x0​)不含 x t − 1 \mathbf{x}_{t-1} xt−1​,故将其视为常数 C C C。由于 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t},\mathbf{x}_0) q(xt−1​∣xt​,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π ​σ1​e−21​(σx−μ​)2∝exp(−21​(σx−μ​)2)=exp(−21​(σ21​x2−σ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(xt−1​∣xt​,x0​)的均值和方差。由于方差 σ 2 \sigma^2 σ2是 x 2 x^2 x2系数的倒数,而 x t − 1 2 \mathbf{x}_{t-1}^2 xt−12​的系数为 ( α t β t + 1 1 − α ˉ t − 1 ) (\frac{\alpha_{t}}{\beta_{t}}+\frac{1}{1-\bar{\alpha}_{t-1}}) (βt​αt​​+1−αˉt−1​1​),其只由人为设置的超参数 β \beta β确定,故方差是已知的。 x x x的系数为 − 2 μ σ 2 -\frac{2\mu}{\sigma^2} −σ22μ​,则我们可以根据方差来间接求出均值, x t − 1 \mathbf{x}_{t-1} xt−1​的系数为 ( 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) (βt​2αt​ ​​xt​+1−αˉt−1​2αˉt−1​ ​​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} xt−1​的均值记为一个关于 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−αˉt−1​1​)代入 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μ​=(βt​2αt​ ​​xt​+1−αˉt−1​2αˉt−1​ ​​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−αˉt−1​)​xt​+1−αˉt​αˉt−1​ ​βt​​x0​
现在回想一下,我们已经在前向过程中已经得到了 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​(xt​−1−αˉ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​(xt​−1−αˉt​ ​1−αt​​z~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(xt−1​∣xt​,x0​)的分布,将 x t − 1 \mathbf{x}_{t-1} xt−1​采样出来,完成一次去噪过程。那么 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} xt−1​到 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} xt−1​,也即直接预测图像,而DDPM是预测在前向过程中,我们从 x t − 1 \mathbf{x}_{t-1} xt−1​扩散到 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概率扩散模型理论

DDPM(Denoising Diffusion Probabilistic Models)扩散模型简述相关推荐

  1. Diffusion Model (扩散生成模型)的基本原理详解(一)Denoising Diffusion Probabilistic Models(DDPM)

    本章开始笔者来陆续的介绍最近爆火的Diffusion Model的近期发展. 本篇的学习内容与图片均来自于对文章Diffusion Models: A Comprehensive Survey of ...

  2. 2022图像翻译/扩散模型:UNIT-DDPM: UNpaired Image Translation with Denoising Diffusion Probabilistic Models

    2022图像翻译/扩散模型:UNIT-DDPM: UNpaired Image Translation with Denoising Diffusion Probabilistic Models. U ...

  3. 论文阅读 (65):RePaint: Inpainting using Denoising Diffusion Probabilistic Models

    文章目录 1 概述 1.1 题目 1.2 代码 1.3 摘要 1.4 Bib 2 去噪扩散修复模型 3 方法 3.1 调整已知区域 3.2 重采样 1 概述 1.1 题目   2022CVPR:用于图 ...

  4. Medical Diffusion - Denoising Diffusion Probabilistic Models for 3D Medical Image Generation

    Medical Diffusion - Denoising Diffusion Probabilistic Models for 3D Medical Image Generation 论文链接:ht ...

  5. 1、Denoising Diffusion Probabilistic Models(扩散模型)

    简介 主页:https://hojonathanho.github.io/diffusion/ 扩散模型 (diffusion models)是深度生成模型中新的SOTA. 扩散模型在图片生成任务中超 ...

  6. 生成网络论文阅读:DDPM(一):Denoising Diffusion Probabilistic Models论文概述

    结构速览 1.论文的整体逻辑是什么 2.具体怎么加入噪声和去掉噪声的 2.1加入参数的大致指导思想 2.2具体怎么加入噪声 2.3怎么去掉噪声(问题最后转化为怎么估算噪声) 2.4怎么估计噪声(实际上 ...

  7. Diffusion Models - 扩散模型(一)

    常见的生成模型(Generative Models)如 GAN.VAE 和基于流( Flow-based )的模型.他们在生成高质量样本方面取得了巨大成功,但每个都有其自身的局限性. GAN 因其对抗 ...

  8. 2022年11月100篇 diffusion models 扩散模型 汇总!

    在生成图像方面,自从NIPS 2014的一篇开山之作: Generative Adversarial Nets 论文:https://proceedings.neurips.cc/paper/2014 ...

  9. 井喷式爆发!2022年11月100篇 diffusion models 扩散模型 汇总!

    点击上方"摸鱼吧算法工程师"卡片,关注星标 获取有趣.好玩的前沿干货! 001  (2022-11-30) Maximum Likelihood Estimation for a ...

最新文章

  1. iPhone开源系列:iDev Recipes
  2. HTML-参考手册: HTTP 方法:GET 对比 POST
  3. AI领域最最最稀缺的人才——AI架构师
  4. wxWidgets:wxTaskBarButton 示例
  5. cacls文件服务器备份与恢复,实战安全设置WEB专用服务器技巧
  6. Koa2 静态服务及代理配置
  7. python 无头模式_Python + Selenium(二十五)无头模式 headless
  8. nginx+php5-fpm安装
  9. TS文件合并,这里提供了一点小思路。
  10. Xshell使用教程(不断总结...)
  11. 图解通信原理与案例分析-18:低功耗、远距离物联网无线通信技术LoRa概述与扩频通信的基本原理
  12. 用极限定义证明微积分基本定理
  13. jar文件打不开,用什么打开
  14. 计算机应用专业毕业感言,大学毕业感言语句
  15. 一套MES系统需要多少钱?如何使生产管理系统标准化?
  16. 今日头条(App和MainActivity类)
  17. Java @Data注解
  18. 暨大 c语言复试 2015,暨南大学历年复试真题合集.pdf
  19. 小写数字转大写 一二三...
  20. 简单实现大学选修课抢课脚本(Python)

热门文章

  1. 根据经纬度坐标计算距离sql语句
  2. Spring中如何使用责任链模式
  3. ios 倒数器_年倒计时器2020iOS版
  4. python最大团问题
  5. 2016级数据结构课程期末总结
  6. 锤子使用手册 android,Smartisan OS 操作系统官方介绍
  7. 数码相机自动检测与自动曝光
  8. 13.学习Camera之——Android Treble架构解析
  9. 仿iphone快速导航悬浮球
  10. 塔设备设计手册_石油化工设备设计选用手册-塔器(搜索无重复) - 化工设备 - 小木虫 - 学术 科研 互动社区...