引言
扩散模型最早是在2015年的Deep Unsupervised Learning using Nonequilibrium Thermodynamics文章中提出的,但当时扩散模型并不work,所以并没有被广泛应用。在2020年,Denoising Diffusion Probabilistic Models(简称为DDPM)的出现,将扩散模型带到了一个新高度。并且在其之前主流的生成网络GAN,还存在一些缺点,因为其要训练两个网络,难度较大,容易不收敛,多样性较差,并且模型在训练过程中不稳定,只要骗过判别器即可。而生成模型用一种更简单的方法诠释了生成模型应该如何学习和生成,感觉更简单,之后扩散模型可能会替代GAN成为主流的生成模型。
以上是扩散模型的图示,可以看到扩散模型分为两个阶段,分为前向过程和逆向过程。
- 前向过程即上图中x0\mathbf{x}_0x0到xT\mathbf{x}_TxT的过程,我们向原始图像中逐步添加高斯噪声,并且后一时刻都是由前一时刻添加噪声得到的,这样我们就得到x1\mathbf{x}_1x1,x2\mathbf{x}_2x2,…,xT\mathbf{x}_TxT,xT\mathbf{x}_TxT是完全的高斯噪声。前向过程存在的意义就是帮助神经网络去训练逆向过程,也即前向过程中得到的噪声就是一系列标签,根据这些标签,逆向过程在去噪的时候就知道噪音是怎么加进去的,进而进行训练。正向过程对应网络的训练过程
- 逆向过程即上图中xT\mathbf{x}_TxT到x0\mathbf{x}_0x0的过程。我们从标准正态分布采样的高斯噪声xT\mathbf{x}_TxT,逐步对其去噪,得到xT−1\mathbf{x}_{T-1}xT−1,xT−2\mathbf{x}_{T-2}xT−2,…,x0\mathbf{x}_0x0,x0\mathbf{x}_0x0是没有噪声的的图像。逆向过程对应网络的推理过程。
前向过程Forward Process
前向过程又称扩散过程,其是一个马尔科夫过程(即当前状态只和前一个状态有关)。我们向原始图像x0\mathbf{x}_0x0中逐步添加高斯噪声,噪声的标准差是固定值βt\beta_tβt来确定的,均值是固定值βt\beta_tβt和和t−1t-1t−1时刻的数据xt−1\mathbf{x}_{t-1}xt−1确定的。随着ttt不断增大,最终分布xT\mathbf{x}_TxT服从于各向同性的高斯分布了。那么我们要加多少次噪声呢,也即TTT取多大好呢?论文中将TTT看做成一个超参数,T=1000T=1000T=1000,即加1000次噪声后,xT\mathbf{x}_TxT会变成各向同性的高斯分布。下方是论文中给出的扩散过程xt\mathbf{x}_txt的分布。
q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)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)
我们可以利用重参数化技巧,将其改写成下面的式子
xt=1−βtxt−1+βtzt−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×Image+b×Noisea ×Image + b ×Noisea×Image+b×Noise,ImageImageImage是前一时刻生成的图像,即上式中的xt−1\mathbf{x}_{t-1}xt−1;NoiseNoiseNoise是标准正态分布,即上式中zt−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。举个例子,上面我们已经得到了xt\mathbf{x}_txt是从高斯分布N(1−βtxt−1,βtI)\mathcal{N}(\sqrt{1-\beta_{t}}\mathbf{x}_{t-1},\beta_{t}\mathbf{I})N(1−βtxt−1,βtI)采样出来的噪声,该高斯分布的均值为1−βtxt−1\sqrt{1-\beta_{t}}\mathbf{x}_{t-1}1−βtxt−1,标准差为βt\sqrt{\beta_{t}}βt,所以xt=1−βtxt−1+βtz\mathbf{x}_t=\sqrt{1-\beta_{t}}\mathbf{x}_{t-1}+\sqrt{\beta_{t}}\mathbf{z}xt=1−βtxt−1+βtz。
解释结束
现在我们可以根据xt−1\mathbf{x}_{t-1}xt−1得到xt\mathbf{x}_txt,那么如果我们给出了原始图像x0\mathbf{x}_0x0。能不能通过一次计算就得到加噪任意ttt次之后的xt\mathbf{x}_txt?答案是可以的。
首先令α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),则
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\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(xt∣x0)=N(xt;αˉtx0,(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,σ12)\mathbf{x}\sim\mathcal{N}(\mu_1,\sigma_1^2)x∼N(μ1,σ12)和y∼N(μ2,σ22)\mathbf{y}\sim\mathcal{N}(\mu_2,\sigma_2^2)y∼N(μ2,σ22),其和的分布x+y∼N(μ1+μ2,σ12+σ22)\mathbf{x}+\mathbf{y}\sim\mathcal{N}(\mu_1+\mu_2,\sigma_1^2+\sigma_2^2)x+y∼N(μ1+μ2,σ12+σ22)
因此对于两个标准正态分布zt−2\mathbf{z}_{t-2}zt−2和zt−1\mathbf{z}_{t-1}zt−1,将其前面乘上一个系数,αt−αtαt−1zt−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−αtzt−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−1zt−2+1−αtzt−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−1zˉt−2\sqrt{1-\alpha_{t}\alpha_{t-1}}\bar{\mathbf{z}}_{t-2}1−αtαt−1zˉt−2。这里不同形式$\mathbf{z} 单纯起区分作用,本质上都属于标准正态分布单纯起区分作用,本质上都属于标准正态分布单纯起区分作用,本质上都属于标准正态分布\mathcal{N}(0,\mathbf{I})$的不同采样。
解释结束
以上就是前向过程大概内容,我们从前向过程得到的xt\mathbf{x}_txt将会作为标签,帮助网络学习如何从xT\mathbf{x}_TxT中一步步去噪,最终得到x0\mathbf{x}_0x0。
后向过程Reverse Process
后向过程又称逆扩散过程。我们希望能够从一个噪声分布xT\mathbf{x}_TxT中逐步去预测出来目标分布x0\mathbf{x}_0x0。后向过程仍然是一个马尔科夫链过程。根据我们输入的xt\mathbf{x}_{t}xt去求xt−1\mathbf{x}_{t-1}xt−1的分布,即求q(xt−1∣xt)q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t})q(xt−1∣xt),直接对该公式求解比较困难,可以使用贝叶斯公式将其转化为我们已知的量q(xt−1∣xt)=q(xt∣xt−1)q(xt−1)q(xt)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(xt∣xt−1)q(\mathbf{x}_{t}\mid\mathbf{x}_{t-1})q(xt∣xt−1)已知,但是q(xt−1)q(\mathbf{x}_{t-1})q(xt−1)和q(xt)q(\mathbf{x}_{t})q(xt)未知,但是如果我们给其加上一个先决条件q(x0)q(\mathbf{x}_0)q(x0),也即q(xt−1∣x0)q(\mathbf{x}_{t-1}\mid\mathbf{x}_0)q(xt−1∣x0)和q(xt∣x0)q(\mathbf{x}_{t}\mid\mathbf{x}_0)q(xt∣x0),这两个分布由前向过程我们是已知的,所以对q(xt−1∣xt)q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t})q(xt−1∣xt)加上一个条件x0\mathbf{x}_0x0,得到一个多元条件分布
q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt−1∣x0)q(xt∣x0)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(xt∣xt−1,x0)=q(xt∣xt−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)=12πσe−12(x−μσ)2∝exp(−12(x−μσ)2)=exp(−12(1σ2×2−2μσ2x+μ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(xt∣xt−1)=N(xt;αtxt−1,(1−αt)I)∝exp(−12(xt−αtxt−1)21−α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;αtxt−1,(1−αt)I)∝exp(−211−αt(xt−αtxt−1)2)
- xt−1=αˉt−1×0+1−αˉt−1z~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−1x0+1−αˉt−1z~t−1,利用重参数技巧,则q(xt−1∣x0)=N(xt−1;αˉt−1×0,(1−αˉt−1)I)∝exp(−12(xt−1−αˉt−1×0)21−αˉ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−1x0,(1−αˉt−1)I)∝exp(−211−αˉt−1(xt−1−αˉt−1x0)2)
- xt=αˉtx0+1−αˉtz~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,同样利用重参数技巧,则q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)∝exp(−12(xt−αˉtx0)21−αˉ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;αˉtx0,(1−αˉt)I)∝exp(−211−αˉt(xt−αˉtx0)2)
这样一来我们对概率分布的运算就可以转化为指数运算。由于对指数进行乘除运算相当于对其系数的加减运算,故
q(xt−1∣xt,x0)=q(xt∣xt−1)q(xt−1∣x0)q(xt∣x0)∝exp(−12[(xt−αtxt−1)21−αt+(xt−1−αˉt−1×0)21−αˉt−1−(xt−αˉtx0)21−αˉ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])
由于我们目标是求与xt−1\mathbf{x}_{t-1}xt−1有关的条件分布,所以将平方项进一步展开化简为关于xt−1\mathbf{x}_{t-1}xt−1的二次函数
q(xt−1∣xt,x0)∝exp(−12[(αtβt+11−αˉt−1)xt−12−(2αtβtxt+2αˉt−11−αˉt−1×0)xt−1−C(xt,x0)])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(xt,x0)C(\mathbf{x}_t,\mathbf{x}_0)C(xt,x0)为(xt−αˉtx0)21−αˉt\frac{(\mathbf{x}_{t}-\sqrt{\bar{\alpha}_{t}}\mathbf{x}_0)^2}{1-\bar{\alpha}_{t}}1−αˉt(xt−αˉtx0)2,也即q(xt∣x0)q(\mathbf{x}_t\mid\mathbf{x}_0)q(xt∣x0)。由于上式是关于xt−1\mathbf{x}_{t-1}xt−1的函数,由于q(xt∣x0)q(\mathbf{x}_t\mid\mathbf{x}_0)q(xt∣x0)不含xt−1\mathbf{x}_{t-1}xt−1,故将其视为常数CCC。由于q(xt−1∣xt,x0)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)=12πσe−12(x−μσ)2∝exp(−12(x−μσ)2)=exp(−12(1σ2×2−2μσ2x+μ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(xt−1∣xt,x0)q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t},\mathbf{x}_0)q(xt−1∣xt,x0)的均值和方差。由于方差σ2\sigma^2σ2是x2x^2x2系数的倒数,而xt−12\mathbf{x}_{t-1}^2xt−12的系数为(αtβt+11−αˉt−1)(\frac{\alpha_{t}}{\beta_{t}}+\frac{1}{1-\bar{\alpha}_{t-1}})(βtαt+1−αˉt−11),其只由人为设置的超参数β\betaβ确定,故方差是已知的。xxx的系数为−2μσ2-\frac{2\mu}{\sigma^2}−σ22μ,则我们可以根据方差来间接求出均值,xt−1\mathbf{x}_{t-1}xt−1的系数为(2αtβtxt+2αˉt−11−αˉt−1×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β,xt\mathbf{x}_txt和x0\mathbf{x}_0x0,其中α\alphaα,β\betaβ,xt\mathbf{x}_txt都是已知的,但是对于x0\mathbf{x}_0x0,由于我们现在是处于后向过程,x0\mathbf{x}_0x0是未知的,现在我们要想办法将x0\mathbf{x}_0x0用已知量进行替换。我们先将xt−1\mathbf{x}_{t-1}xt−1的均值记为一个关于xt\mathbf{x}_txt和x0\mathbf{x}_0x0的函数μ~t(xt,x0)\tilde{\mu}_t(\mathbf{x}_t,\mathbf{x}_0)μ~t(xt,x0)。将1σ2=(αtβt+11−αˉ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βtxt+2αˉt−11−αˉt−1×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(xt,x0)=αt(1−αˉt−1)1−αˉtxt+αˉt−1βt1−αˉtx0\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
现在回想一下,我们已经在前向过程中已经得到了x0\mathbf{x}_0x0和xt\mathbf{x}_txt的关系xt=αˉtx0+1−αˉtz~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
现在我们用xt\mathbf{x}_txt来表示x0\mathbf{x}_0x0 x0=1αˉt(xt−1−αˉtz~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(xt)=1αt(xt−1−αt1−αˉtz~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)
这样我们就把x0\mathbf{x}_0x0消掉了,现在我们只要知道了z~t\tilde{\mathbf{z}}_tz~t,就能将μ~t\tilde{\mu}_tμ~t表示出来,进而得到q(xt−1∣xt,x0)q(\mathbf{x}_{t-1}\mid\mathbf{x}_{t},\mathbf{x}_0)q(xt−1∣xt,x0)的分布,将xt−1\mathbf{x}_{t-1}xt−1采样出来,完成一次去噪过程。那么z~t\tilde{\mathbf{z}}_tz~t怎么求呢?
这就要请出深度学习了,我们可以设计一个网络去预测在xt\mathbf{x}_txt时刻的噪音z~t\tilde{\mathbf{z}}_tz~t。网络的输入是xt\mathbf{x}_txt,网络的输出是z~t\tilde{\mathbf{z}}_tz~t,这是一个预测值,那么真实值在哪呢?我们只有得到真实值,我们才能计算预测值和真值之间的损失,从而训练网络。这时我们考虑前向过程,前向过程中,后一时刻等于前一时刻加上一个噪音z\mathbf{z}z,z\mathbf{z}z是我们采样得来的,是已知的,也就是之前我们所谓的标签。假设我们前向过程由xt−1\mathbf{x}_{t-1}xt−1到xt\mathbf{x}_txt加的噪音为z\mathbf{z}z,那么z~t\tilde{\mathbf{z}}_tz~t的真值就是z\mathbf{z}z,所以我们这个网络训练的z~t\tilde{\mathbf{z}}_tz~t就去不断拟合噪声z\mathbf{z}z。
至此前向过程和后向过程已经介绍结束了,如果读者想了解论文中交叉熵loss的推导,可以看公式推导这篇文章的解释(由于篇幅限制,我只好把它放到另一篇文章),这部分公式比较复杂,如果不感兴趣,直接跳过即可,不影响最后算法理解。
DDPM算法代码
训练部分
- 首先在真实图像分布q(x0)q(\mathbf{x}_0)q(x0)中采样出x0\mathbf{x}_0x0,也即我们的训练图像
- 在区间1,…,T{1,…,T}1,...,T中随机生成生成一个ttt,代表扩散(加噪)次数
- 从标准正态分布中采样一个随机噪声ϵ\epsilonϵ
- 计算损失函数,其中的真值是我们刚刚采样得到的噪声ϵ\epsilonϵ,网络预测值是ϵθ(αˉtx0+1−αˉtϵ,t)\epsilon_{\theta}(\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_t}\epsilon,t)ϵθ(αˉtx0+1−αˉtϵ,t),而αˉtx0+1−αˉtϵ\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_t}\epsilonαˉtx0+1−αˉtϵ是我们在前向过程中求得的xt\mathbf{x}_txt,这其可以改写为ϵθ(xt,t)\epsilon_{\theta}(\mathbf{x}_t,t)ϵθ(xt,t),这里的ttt做一个时间编码喂入网络中,因为在后向过程中,每一次迭代的网络都是相同的,即参数共享,那怎么让网络知道现在迭代到哪一步呢,那么我们就将ttt一同传进去参与训练,用ttt来告诉网络我现在进行到第几次迭代了。时间编码和transformer中的位置编码类似。
总结一下,训练过程就是给定x0\mathbf{x}_0x0和随机噪声ϵ\epsilonϵ,然后生成一个扩散(加噪)次数ttt,进行ttt次扩散过程得到xt\mathbf{x}_txt,然后通过一个网络ϵθ\epsilon_{\theta}ϵθ来预测一个合适的噪声,也就是z~t\tilde{\mathbf{z}}_tz~t
采样部分
- 首先从标准正态分布中采样一个随机噪声xT\mathbf{x}_TxT。因为我们在前向过程中认为在原图扩散TTT次之后,原图服从于一个各相同性的高斯分布。
- 然后进行TTT次迭代,对于每一次迭代,首先采样一个标准高斯噪声,但是最后一步就不采样了。然后通过公式计算去噪一次的结果,公式中的ϵθ\epsilon_{\theta}ϵθ就是我们在训练过程得到的结果。
总结
DDPM对Deep Unsupervised Learning using Nonequilibrium Thermodynamics文中提出的模型(下文称扩散模型)改进了两点
- 第一点,扩散模型在后向过程中,是由xt\mathbf{x}_txt预测xt−1\mathbf{x}_{t-1}xt−1,也即直接预测图像,而DDPM是预测在前向过程中,我们从xt−1\mathbf{x}_{t-1}xt−1扩散到xt\mathbf{x}_txt所加的噪声,有点类似Resnet,即如何将噪声从噪声-图像混合物中分离出来,从而将问题简化。
- 第二点,如果我们要预测一个正态分布,我们只需要学它的均值和方差即可,而DDPM将方差视作常数,只需学习均值就能得到分布,最后的效果也不错,并且降低了模型优化的难度
之后有关DDPM的改进,比如IDDPM,DM beats gan等等,读者可自行了解。
参考
Denoising Diffusion Probabilistic Models
What are Diffusion Models?
入门理解Denoising Diffusion Probabilistic Model
Probabilistic Diffusion Model概率扩散模型理论
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/245492.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
DDPM(Denoising Diffusion Probabilistic Models)扩散模型简述
引言
扩散模型最早是在2015年的Deep Unsupervised Learning using Nonequilibrium Thermodynamics文章中提出的,但当时扩散模型并不work,所以并没有被广泛应用。在2020年,Denoising Diffusion Probabilistic Models(简称为DDPM)的出现&#……
盘点 | 云原生峰会重磅发布
11 月 5 日,2022 杭州云栖大会上,阿里巴巴研究员、阿里云智能云原生应用平台总经理丁宇在云原生峰会上发表主题演讲,提出云原生激活应用构建新范式。在分享中发布阿里云在云原生领域多款新产品与全新升级,持续引领行业云原生技术趋……
基于Multisim的LC正弦波振荡器的设计与仿真
目 录 1、绪论 1 1.1选题背景及意义 1 1.2国内外研究现状 1 1.3研究主要内容 2 2、系统整体设计 3 2.1开发环境Multisim的介绍 3 2.2方案比较与论证 4 2.2.1振荡电路方案选择 4 2.2.2 控制电路设计方案 4 2.3系统整体设计 5 3、工作原理、硬件电路的设计和参数的计算 6 3.1 反馈……
外汇天眼:FCA 已向交易应用程序运营商发出警告,要求其停止交易游戏化
英国市场监管机构希望交易应用程序开发商重新考虑关键设计元素。 根据新的研究,游戏化可能会导致类似赌博的行为。
负责监管英国金融市场的金融行为监管局 ( FCA )周一发布了有关交易应用程序设计的市场警告。金融业监管机构担心零售交易越来越像一场游戏ÿ……
latex 模板使用技巧——参考文献篇
参考文献说明:
一、 常用参考文献类型
1、会议 (INPROCEEDINGS) 示例:
INPROCEEDINGS{rcnn,title{Rich feature hierarchies for accurate object detection and semantic segmentation},author{Girshick, Ross and Donahue, J……
基于物联网的汽车爆胎预警系统
本设计是基于物联网的汽车爆胎预警系统的设计与实现设计,主要实现以下功能:
1,主机用LCD1602显示温度、气压和距离; 2,主从机间通过ZigBee进行数据的传输; 3,从机检测轮胎气压,温度……
锐捷BGP基础配置
目录
编辑
配置IBGP邻居
配置EBGP邻居
BGP其它配置 配置IBGP邻居 R2、R3、R4底层IGP互通,此处IGP互通配置不做介绍 R2与R4通过Loop0建立IBGP邻居,R3与R4通过Loop0建立IBGP邻居 R4充当反射器,R2和R3作为客户端(通过反射可以将……
MAC苹果电脑关闭系统完整性保护SIP
苹果电脑从 macOS 10.11 开始引入了系统完整性保护机制SIP(System Integrity Protection),目的是帮助普通用户避免恶意 app 通过用户授权的方式获得所有系统权限。通过 System Integrity Protection,苹果实现了对第三方软件的限制……
现代密码学导论-3-现代密码学原理
目录
1.4 现代密码学原理
1.4.1 原则一:正式定义
1.4.2 原则二:精确假设
1.4.3 原则三:安全性证明 1.4 现代密码学原理
Principles of Modern Cryptography
从上一节中可以清楚地看到,密码学在历史上更多地是一门艺术&#……
Mac | 使用 Wineskin 在 Mac 上运行 exe 程序
1 Wineskin 简介
Wineskin is a user-friendly tool used to make ports of Microsoft Windows software to macOS.
很多实用工具只有 Windows 版本,而 Mac 机器本身不支持运行 exe 程序,除了安装双系统、虚拟机等方法外,Wineskin 可以将……
cocos-lua中添加lfs的库
方案一:
1、转载:https://blog.csdn.net/sc1987910/article/details/79622014
2、上述转载的博客会编译不通过,需要在lfs.h中添加: #ifdef __cplusplus extern "C" { #endif #include <lua.h> #include <lau……
转载各种编码格式的讲解
https://blog.csdn.net/Deft_MKJing/article/details/79460485…
cocos-lua游戏中横屏,竖屏动态切换
1、转载自 https://blog.csdn.net/oJianYue12/article/details/80927700
2、注意点: AndroidManifest.xml文件中的配置 android:configChanges"orientation|screenSize";android:screenOrientation"sensorLandscape"
这两个配置需要根据自……
lua require机制
https://www.cnblogs.com/softidea/p/5242941.html…
lua程序设计(一)
一、lua的概述 1.简单易学 2.比较灵活,数据结构只有表一种
二、 1、变量命名规范:建议遵循驼峰规则;区分大小写(注意变量命名);避免下划线开头并紧接着一个大写字母(可能与lua中对 应的全局变量……
cocos2d-3.10 整合版本连接
官方给出的是在:http://www.cocos2d-x.org/filedown/CocosForWin-v3.10.exe 如果下载不了,可以在这里下http://cdn.cocos2d-x.org/CocosForWin-v3.10.exe…
code=45, title=禁止登录, message=登录失败,建议升级最新版本后重试,或通过问题反馈与我们联系。
如果你是采用 java 开发的,你可以参考本文章,java 和 kotlin 都是可以相互转换的。 在解决之前,先说明环境: JDK版本:java version "17.0.3.1" 【Oracle JDK】 Kotlin版本:1.8.20 采取simbot核心包开发&am……
cocos2d屏幕适配方案以及winsize,framesize,VisibleSize,contentSize的区别和联系
一、首先要吐槽小cocos官方把这个问题描述的很模糊,讲解的不清不楚,很多人工作两三年的人也不明白。
二、言归正传:阐述下winsize,framesize,VisibleSize,contentSize的概念。frameSize表示的是屏幕的分辨率, 这里多说……
lua协程详解
https://www.cnblogs.com/zrtqsk/p/4374360.html…
lua协程实例
一、lua协程的和c中协程的区分 1. lua 程序设计中的关于lua多线程以及协程的概述 上述说的意思我认为就是 lua的协程类似于但是不等同于真正意义的多线程(同时执行一些操作);我做过测试,同时创建1000个协程并执行(代码……
编程日记2023/4/16 15:00:49