当前位置: 首页>后端>正文

扩散模型原理解析

扩散模型原理解析,第1张

去年写的文章,从notion的博客搬到这边来发一下(本来想搬到微信公众号的,但是那个格式真的反人类就作罢了),原文请到这里看mewimpetus.以后文章都会再这边先发。

引言

扩散模型是今年AI领域最热门的研究方向。由其引发的AI绘画的产业变革正在如火如荼的进行,大有淘汰一大票初中级画师的势头,目前主流的(诸如OpenAI的DALL-E 2;Google的ImageGen;以及已经商业化的MidJourney;注重二次元的NovelAI;开源引爆这波热潮的stable-diffusion)图像生成模型效果已经让人惊艳,若是再发展几年,它带来的影响将不可估量,可以说整个绘画产业正在经历着一场百年未有之大变局。而这些功能强大的绘画模型,无疑都与Denoising Diffusion Probabilistic Models 摆脱不了关系,它的原始论文由Google Brain在2020年发表。 这篇博文主要带大家一起来探究一下DDPM的工作原理和实现细节。

扩散模型的基本流程

其实扩散模型的基本思路同GAN以及VAE并无二致,都是试图从一个简单分布的随机噪声出发,经过一系列的转换,转变成类似于真实数据的数据样本。

它主要包含前向加噪声和反向去噪声两个过程:

  • 从真实的数据分布中随机采样一个图片,然后通过一个固定的过程逐步往上面添加高斯随机噪声,直到图片变成一个纯粹的噪声
  • 构建一个神经网络,去学习一个去噪的过程,从一个纯粹的噪声出发,逐步还原回一个真实的图像。

接下来我们用数学形式来表达上面的两个过程。

前向扩散

我们将真实数据的分布定义为扩散模型原理解析,q(x),第2张,然后可以从这个分布中随机采样一个”真图“ 扩散模型原理解析,x_0 \sim q(x),第3张,于是我们就可以定义一个前向扩散的递推过程扩散模型原理解析,q(x_t|x_{t-1}),第4张为每个时间步扩散模型原理解析,t,第5张添加少量高斯噪声并执行扩散模型原理解析,T,第6张步。DDPM作者将扩散模型原理解析,q(x_t|x_{t-1}),第4张定义为这样一个条件高斯分布(其中的扩散模型原理解析,\{\beta_t \in (0, 1)\}_{t=1}^T,第8张是一个既定的递增表):

扩散模型原理解析,q(\mathbf{x}*t|\mathbf{x}*{t-1})=\mathcal{N}(\mathbf{x}*t;\sqrt{1-\beta_t}\mathbf{x}*{t-1},\beta_tI),第9张

显然,当扩散模型原理解析,t-1,第10张时刻的图像为扩散模型原理解析,x_{t-1},第11张的条件下,扩散模型原理解析,t,第5张时刻的图像扩散模型原理解析,X_t,第13张服从一个均值扩散模型原理解析,\mu_t=\sqrt{1-\beta_t}x_{t-1},第14张,方差扩散模型原理解析,\sigma^2=\beta_tI,第15张的各项同性高斯分布。我们再观察一下这个递推式,因为扩散模型原理解析,1-\beta,第16张扩散模型原理解析,\beta,第17张都小于1,显然扩散模型原理解析,x_t,第18张的均值会比扩散模型原理解析,x_t-1,第19张更加趋向于扩散模型原理解析,0,第20张,方差也更趋向于扩散模型原理解析,I,第21张,因此如果设计合适的扩散模型原理解析,\beta_t,第22张序列,最终的扩散模型原理解析,X_T,第23张将趋近于标准的高斯分布扩散模型原理解析,\mathcal{N}(0,I),第24张。根据高斯分布的性质1:

如果扩散模型原理解析,X \sim \mathcal{N}(\mu, \sigma^2),第25张扩散模型原理解析,a,第26张扩散模型原理解析,b,第27张都是实数,那么扩散模型原理解析,aX+b \sim \mathcal{N}(a\mu+b,(a\sigma)^2),第28张

上述的条件高斯分布显然可以通过从标准高斯分布的线性变换得到,我们定义扩散模型原理解析,\epsilon_t\sim \mathcal{N}(0, I),第29张,那么只要让扩散模型原理解析,\mathbf{x}*t=\sqrt{\beta_t}\epsilon_t +\sqrt{1-\beta_t}\mathbf{x}*{t-1},第30张,那么第扩散模型原理解析,t,第5张个时间步的图像扩散模型原理解析,\mathbf{x}_t\sim \mathcal{N}(\mathbf{x}*t;\sqrt{1-\beta_t}\mathbf{x}*{t-1},\beta_tI),第32张

为了更好的计算任意时刻扩散模型原理解析,t,第5张的条件分布,我们根据上面的递推式逐步推导到扩散模型原理解析,x_0,第34张,为了方便推导,我们令扩散模型原理解析,\alpha_t=1-\beta_t,第35张扩散模型原理解析,\overline\alpha_t=\prod^t_{i=1}\alpha_i,第36张则有了推导1

扩散模型原理解析,\begin{aligned}\mathbf{x}*t &= \sqrt{1-\alpha_t}\epsilon_t + \sqrt{\alpha_t}\mathbf{x}*{t-1} \&=\sqrt{1-\alpha_t}\epsilon_t +\sqrt{\alpha_t}(\sqrt{1-\alpha_{t-1}}\epsilon_t+\sqrt{\alpha_{t-1}}\mathbf{x}*{t-2}) \&= \sqrt{1-\alpha_t}\epsilon_t+\sqrt{\alpha_t (1-\alpha*{t-1})} \epsilon_t + \sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}*{t-2} \ &= \sqrt {1-\alpha_t\alpha*{t-1}}\epsilon_t + \sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2} \&= ... \&=\sqrt{1-\overline\alpha_t}\epsilon_t +\sqrt{\overline\alpha_t}\mathbf{x}_0\end{aligned},第37张

上式中第3行到第4行的推导用到了上述的性质1,以及高斯分布的另一个性质2

如果扩散模型原理解析,X\sim\mathcal{N}(\mu_X,\sigma_X^2),第38张扩散模型原理解析,Y \sim \mathcal{N}(\mu_Y,\sigma_Y^2),第39张 是独立统计的高斯随机变量,那么,它们的和也满足高斯分布扩散模型原理解析,X + Y \sim \mathcal{N}(\mu_X +\mu_Y, \sigma^2_X+\sigma^2_Y),第40张

性质1可知,扩散模型原理解析,\sqrt{1-\alpha_t}\epsilon_t \sim\mathcal{N}(0,(1-\alpha_t)I),第41张,而扩散模型原理解析,\sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon_t \sim \mathcal{N}(0, \alpha_t(1-\alpha_{t-1})I),第42张 ,再根据性质2,就可得扩散模型原理解析,\sqrt{1-\alpha_t}\epsilon +\sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon \sim \mathcal{N}(0,(1-\alpha_t\alpha_{t-1})I),第43张, 再根据性质1写回到多项式的形式即得到推导的结果。

基于这个最终的推导结果,因为扩散模型原理解析,\alpha_t,第44张是事先已经定义好的,我们只需要给出初始真实分布采样扩散模型原理解析,x_0,第34张,即可以计算出任何第扩散模型原理解析,t,第5张步的样本扩散模型原理解析,x_t,第18张 ,而不需要每次都从扩散模型原理解析,x_1,第48张开始一步步计算。

反向去噪

有了前向的过程,我们反过来想,既然前向扩散是一个马尔可夫过程,那么它的逆过程显然也是马尔可夫过程,如果我们可以构造一个相反的条件分布扩散模型原理解析,q(x_{t-1}|x_t),第49张,那不就可以从最终的扩散模型原理解析,x_T,第50张开始一步步地去噪,从而反推回初始的扩散模型原理解析,x_0,第34张了吗? 但是我们并不知道反向条件高斯分布的均值和方差。不过,在这个深度学习的时代,我们可以从真实数据集扩散模型原理解析,X_0,第52张出发,通过前向过程生成一系列的扩散模型原理解析,x_0 \to x_T,第53张 的真实扩散序列,然后设计一个神经网络从这些序列中来近似学习一个分布扩散模型原理解析,p_\theta(x_{t-1}|x_t),第54张使其接近真实的扩散模型原理解析,q(x_{t-1}|x_t),第49张,其中的扩散模型原理解析,\theta,第56张是这个神经网络需要学习的参数,于是从扩散模型原理解析,x_T,第50张变换到扩散模型原理解析,x_0,第34张的概率可以表示成:

扩散模型原理解析,p_\theta(\mathbf{x}*{T:0}) = p(\mathbf{x}*T)\prod*{t=1}^Tp*\theta(\mathbf{x}_{t-1}|\mathbf{x}_t),第59张

当我们前向过程所定义的扩散模型原理解析,\beta_t,第22张足够小时,反向过程也满足高斯分布,因此我们可以假设神经网络要学习的这个分布是高斯分布,这意味着它需要去学习其均值扩散模型原理解析,\mu_\theta,第61张 和方差扩散模型原理解析,\Sigma_\theta,第62张 ,换成与上述前向过程相同的表示则有递推公式:

扩散模型原理解析,p_\theta(\mathbf{x}*{t-1}|\mathbf{x}*t) = \mathcal{N}(\mathbf{x}*{t-1};\mu*\theta(\mathbf{x}*t, t),\Sigma*\theta(\mathbf{x}_t, t)),第63张

借助这个公式,我们就可以完成去噪过程了,接下来的任务变成了如何训练这个神经网络。

如何训练

基本思路

不知大家又没有觉得这个加噪声和去噪声的过程和VAE的编码和解码的过程十分类似,那么是否可以从VAE的训练方式中得到一些启发呢?实际上作者就是这么想的。

扩散模型原理解析,第64张
图像前向扩散及反向去噪的过程,正向概率已知,反向的转移概率是我们希望得到的。

显然,如果直接使用扩散模型原理解析,\mathbf{x}*t,第65张扩散模型原理解析,{\mathbf{x},第66张的对比误差会导致模型过拟合成AE一样的无生成能力的模型。因此,我们使用与VAE类似的变分推断的方法,希望网络输出的扩散模型原理解析,{\mathbf{x},第67张尽量接近由真实扩散模型原理解析,\mathbf{x}*0,第68张变化而来的扩散模型原理解析,\mathbf{x}*{t-1},第69张的分布,即最小化似然扩散模型原理解析,p*\theta(\mathbf{x}*{t-1}|x*{t}),第70张与真实的扩散模型原理解析,q(\mathbf{x}*{t-1}|\mathbf{x}*{t}, \mathbf{x}*0),第71张扩散模型原理解析,D*{KL}(q(\mathbf{x}*{t-1}|\mathbf{x}*{t}, \mathbf{x}*0))||p*\theta(\mathbf{x}*{t-1}|\mathbf{x}*{t}),第72张。于是每一个时间步骤扩散模型原理解析,\{t \in [1,T]\},第73张的误差可以定义为:

扩散模型原理解析,L_t=\left\{\begin{aligned}&-log~p_\theta(\mathbf{x}*0|\mathbf{x}*1) ~~~,when~ t=1\&D*{KL}(q(\mathbf{x}*{t-1}|\mathbf{x}*{t}, \mathbf{x}*0))||p*\theta(\mathbf{x}*{t-1}|\mathbf{x}_{t}) ~ ~~,when~ t \in [2,T]\end{aligned}\right.,第74张

而当扩散模型原理解析,t=1,第75张时,因为扩散模型原理解析,q(\mathbf{x}*0),第76张是确定的,因此可以忽略这部分,故而扩散模型原理解析,L_1 = -log~p*\theta(\mathbf{x}_0|\mathbf{x}_1),第77张,因此

于是整个去噪过程的误差就是: 扩散模型原理解析,L=\sum^{T}_{t=1}L_t,第78张 。实际训练时,我们并没有使用整体的误差扩散模型原理解析,L,第79张,而是通过均匀随机选择扩散模型原理解析,t,第5张 ,来最小化 扩散模型原理解析,L_t,第81张

目标函数

要直接计算上面的KL散度是困难的,但是正如前面所说的,扩散模型原理解析,q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0),第82张 是一个高斯分布,于是根据贝叶斯公式有:

扩散模型原理解析,\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) } \ &\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}}} + \alpha_t {\color{red}{\mathbf{x}*{t-1}^2}} }{\beta_t} + \frac{ {\color{red}{\mathbf{x}*{t-1}^2}} {- 2 \sqrt{\bar{\alpha}*{t-1}} \mathbf{x}*0} \color{blue}{\mathbf{x}*{t-1}}{+ \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{green}{C(\mathbf{x}_t, \mathbf{x}_0)} }\big) \Big)} \end{aligned},第83张

其中扩散模型原理解析,\color{green}{C(\mathbf{x}_t,\mathbf{x}*0)},第84张 代表所有剩余与扩散模型原理解析,\mathbf{x}*{t-1},第69张无关的项。

根据高斯分布的基本方程:

扩散模型原理解析,第86张

与上述的推导结果位置依次对应可得其方差和均值为:

扩散模型原理解析,第87张

根据上面的推导1可得扩散模型原理解析,\mathbf{x}_0 = \frac{1}{\sqrt{\overline{\alpha}_t}}(\mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon_t}),第88张 ,带入上式可得:

扩散模型原理解析,\boldsymbol\mu(\mathbf{x}_t,\mathbf{x}_0)= \frac{1}{\sqrt{\alpha_t}}(\mathbf{x}_t - \frac{\beta_t}{\sqrt{1-\bar\alpha}}\epsilon_t),第89张

最小化上述的KL散度,可以转化为计算神经网络的预测的均值方差与上述均值方差的L2损失:

扩散模型原理解析,\begin{aligned} L_t^{\Sigma} &= ||\Sigma(\mathbf{x}_t,\mathbf{x}*0)-\Sigma*\theta(\mathbf{x}_t,t)||^2 \ L_t^{\mu} &=||\mu(\mathbf{x}_t,\mathbf{x}*0)-\mu*\theta(x_t,t))|| \ &= ||\frac{1}{\sqrt{\alpha_t}}(\mathbf{x}_t - \frac{\beta_t}{\sqrt{1-\bar\alpha}}{\color{red}\epsilon_t}) - \frac{1}{\sqrt{\alpha_t}}(\mathbf{x}*t - \frac{\beta_t}{\sqrt{1-\bar\alpha}}{\color{green}\epsilon*\theta(\mathbf{x}_t, t)})||^2 \end{aligned},第90张

DDPM的论文作者在论文中说他使用一个固定的方差取得了差不多的效果,因此他的神经网络只去学习了均值,而把方差设置成了扩散模型原理解析,\beta_t,第22张 或者是扩散模型原理解析,\frac{1-\bar a_{t-1}}{1-\bar a_t}\beta_t,第92张,因此我们接下来的推导也只考虑均值。后来Improved diffusion models 这篇论文将其改进后就让神经网络同时去学习均值和方差了,有兴趣的同学可以自行去了解。

观察上面的扩散模型原理解析,L_t^{\mu},第93张,除了扩散模型原理解析,\epsilon_\theta,第94张,其余项均为固定值与扩散模型原理解析,\theta,第56张无关,于是我们不妨将神经网络的学习目标从高斯分布的均值转变为扩散模型原理解析,\epsilon_\theta,第94张 ,即去预测每个事件步的噪声量而非高斯分布的均值,因此我们最终的目标函数就变成了:

扩散模型原理解析,\begin{aligned} L_t &= ||\epsilon - \epsilon_\theta(\mathbf{x}*t,t)||^2 \ &=||\epsilon - \epsilon*\theta(\sqrt{1-\overline\alpha_t}\epsilon +\sqrt{\overline\alpha_t}\mathbf{x}_0,t)||^2 \end{aligned},第97张

然后,整个训练算法便是这样一个过程:

  1. 从真实的复杂未知分布扩散模型原理解析,q(x),第2张随机抽取一个样本扩散模型原理解析,x_0,第34张
  2. 扩散模型原理解析,1,第100张扩散模型原理解析,T,第6张均匀采样一个时间步扩散模型原理解析,t,第5张
  3. 从均值为扩散模型原理解析,**0**,第103张方差为扩散模型原理解析,I,第21张的标准高斯分布中随机采样一个扩散模型原理解析,\epsilon,第105张
  4. 计算随机梯度扩散模型原理解析,\nabla_\theta ||\epsilon - \epsilon_\theta(\sqrt{1-\overline\alpha_t}\epsilon +\sqrt{\overline\alpha_t}\mathbf{x}_0,t)||^2,第106张 ,并通过随机梯度下降优化扩散模型原理解析,\theta,第56张
  5. 重复上述过程直到收敛

采样生成

当上述的神经网络学习好扩散模型原理解析,\epsilon_\theta,第94张 , 就可以计算出均值扩散模型原理解析,\mu_\theta = \frac{1}{\sqrt{\alpha_t}}(\mathbf{x}*t - \frac{\beta_t}{\sqrt{1-\bar\alpha}}\epsilon*\theta),第109张 ,于是我们就可以从一个随机高斯噪声扩散模型原理解析,\mathbf{x}*T \sim \mathcal{N}(0,I),第110张 ,通过条件去噪概率扩散模型原理解析,p*\theta(\mathbf{x}*{t-1}|\mathbf{x}*{t}) = \mathcal{N}(\mu_\theta(\mathbf{x}_t,t),\sigma_t^2),第111张 进行采样生成,逐步从扩散模型原理解析,\mathbf{x}_T,第112张扩散模型原理解析,\mathbf{x}_0,第113张

具体来说Sampling是这样一个过程:

  1. 随机采样一个扩散模型原理解析,\mathbf{x}_T \sim \mathcal{N}(0,I),第114张

  2. 扩散模型原理解析,t=T,…,1,第115张 ,依次执行:

    扩散模型原理解析,z \sim \mathcal{N}(0,I) \ \ \mathbf{x}*{t-1} = \mu*\theta(\mathbf{x}_t,t) + \sigma_t z,第116张

  3. 返回最终的扩散模型原理解析,\mathbf{x}_0,第113张

网络结构

虽然有了训练的方案,但是如何来设计这个神经网络扩散模型原理解析,\epsilon_\theta,第94张才能让我们这个扩散和反扩散的过程取得较好的效果呢?DDPM的作者选择了U-Net ,并且在实验中取得了很好的效果。

这个用于学习扩散模型原理解析,\epsilon_\theta,第94张的U-Net网络十分复杂,由一系列的诸如下采样、上采样、残差、位置Embedding、ResNet/ConvNeXT block、注意力模块、Group Normalization等组件组合而成,为了让大家了解整个网络各个组件的具体结构和连接方式,我绘制了一个详细的网络图:

扩散模型原理解析,第120张
DDPM 反向去噪神经U-Net网络结构

根据这个图,我们可以用tensorflow或者pytorch非常轻松的实现这个网络。不过显然这个网络很大,特别是图片很大时占用的显存会很高,而且采样步骤多推理也很慢,因此后面有很多对于DDPM的改进,篇幅关系,关于对DDPM的改进我们下篇文章再讲。

参考资料

  1. What are Diffusion Models?
  2. Understanding Diffusion Models: A Unified Perspective
  3. Denoising Diffusion Probabilistic Models
  4. Understanding Variational Autoencoders (VAEs)
  5. 正态分布- 维基百科,自由的百科全书 - Wikipedia
  6. U-Net: Convolutional Networks for Biomedical Image Segmentation

https://www.xamrdz.com/backend/3hn1940983.html

相关文章: