扩散模型最早是在2015年的Deep Unsupervised Learning using Nonequilibrium Thermodynamics文章中提出的,但当时扩散模型并不work,所以并没有被广泛应用。在2020年,Denoising Diffusion Probabilistic Models(简称为DDPM)的出现,将扩散模型带到了一个新高度。并且在其之前主流的生成网络GAN,还存在一些缺点,因为其要训练两个网络,难度较大,容易不收敛,多样性较差,并且模型在训练过程中不稳定,只要骗过判别器即可。而生成模型用一种更简单的方法诠释了生成模型应该如何学习和生成,感觉更简单,之后扩散模型可能会替代GAN成为主流的生成模型。
以上是扩散模型的图示,可以看到扩散模型分为两个阶段,分为前向过程和逆向过程。
前向过程又称扩散过程,其是一个马尔科夫过程(即当前状态只和前一个状态有关)。我们向原始图像 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−βtxt−1,β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−βtxt−1+βtzt−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.002。为什么扩散率是逐渐增大的呢,也即为什么噪音所占的比例越来越大呢?可以反过来理解,在加噪声的过程中,扩散率逐渐增大,对应着在去噪声的过程中,扩散率逐渐减小,也就是说,去噪的过程是先把"明显"的噪声给去除,对应着较大的扩散率;当去到一定程度,逐渐逼近真实真实图像的时候,去噪速率逐渐减慢,开始微调,也就是对应着较小的扩散率。
如果我们要对高斯分布 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−βtxt−1,βtI)采样出来的噪声,该高斯分布的均值为 1 − β t x t − 1 \sqrt{1-\beta_{t}}\mathbf{x}_{t-1} 1−βtxt−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−βtxt−1+βtz。
现在我们可以根据 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=αtxt−1+1−αtzt−1=αt∗(αt−1xt−2+1−αt−1zt−2)+1−αtzt−1=αtαt−1xt−2+αt−αtαt−1zt−2+1−αtzt−1∗=αtαt−1xt−2+1−αtαt−1zˉt−2=…=αˉtx0+1−αˉtz~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;αˉtx0,(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−1zt−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−αtzt−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−1zt−2+1−αtzt−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−1zˉ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。
后向过程又称逆扩散过程。我们希望能够从一个噪声分布 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πσ1e−21(σx−μ)2∝exp(−21(σx−μ)2)=exp(−21(σ21x2−σ22μx+σ2μ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−αtxt−1)2+1−αˉt−1(xt−1−αˉt−1x0)2−1−αˉt(xt−αˉtx0)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−11)xt−12−(βt2αtxt+1−αˉt−12αˉt−1x0)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−αˉtx0)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πσ1e−21(σx−μ)2∝exp(−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(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−11),其只由人为设置的超参数 β \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) (βt2αtxt+1−αˉt−12αˉt−1x0)。可以发现,系数中共有四个变量 α \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−11)代入 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αtxt+1−αˉt−12αˉt−1x0)求解可得 μ ~ 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β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=αˉtx0+1−αˉtz~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=αˉt1(xt−1−αˉtz~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)=αt1(xt−1−αˉt1−α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(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的推导,可以看公式推导这篇文章的解释(由于篇幅限制,我只好把它放到另一篇文章),这部分公式比较复杂,如果不感兴趣,直接跳过即可,不影响最后算法理解。
总结一下,训练过程就是给定 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
DDPM对Deep Unsupervised Learning using Nonequilibrium Thermodynamics文中提出的模型(下文称扩散模型)改进了两点
之后有关DDPM的改进,比如IDDPM,DM beats gan等等,读者可自行了解。
Denoising Diffusion Probabilistic Models
What are Diffusion Models?
入门理解Denoising Diffusion Probabilistic Model
Probabilistic Diffusion Model概率扩散模型理论