什么是扩散(diffusion)?
扩散一词来自非平衡热力学(non-equilibrium thermodynamics),在非平衡热力学中扩散过程指的是:“在浓度梯度的驱动下,颗粒或分子从高浓度区域移动到低浓度区域。”
什么是扩散模型(diffusion models)?
扩散模型受扩散原理的启发,扩散模型的工作原理是通过添加高斯噪声(这个步骤是Forward diffusion process)来破坏训练数据,然后学习如何通过逐步反转该添加噪声的过程(这个步骤是reverse process)来恢复原始信息。经过训练,这些模型可以通过充满噪声的图片预测noise、减去 noise然后生成新图片。
Forward Diffusion Process
扩散过程是指我们从一个最初清晰的图像(X0)逐步添加噪声,再经过T步以后,最终得到了一个完全充满噪声的图像。在这个过程中,由于每一步只依赖于前一步的状态,不依赖之前所有的状态,因此可以看做一个马尔可夫链。
整个前向扩散过程如下:从原始数据分布中随机一个图像x_0,然后再逐步添加噪声,在马尔可夫链中每一步添加beta大小的噪声到x_t-1,通过正态分布q得到潜在图像x_t,具体流程如下图:
由于是一个马尔可夫链,所以从x_0到x_T的全部过程可以由下面式子表示:
如果我们想要采样得到x_t,t=500
哪有什么方法能让更简单呢,使用重参数化(reparametrization trick)可以简化这个过程。
在进行第一步时就能由以下公式得到:
之后每一步都可以用上面正态分布类似表示,但是很难计算每次从x_0到x_t添加的所有噪声,于是用到重参数化(Z=μ+σ×ϵ),ϵ取均值为零,标准差为1的正态分布,于是在每一步进行替换时得到以下公式:
由于β是已知的,所以可以直接计算出从X_0到X_t的所有噪声
Schedulers
噪声添加遵循着一定的规律,Schedulers控制着每一步添加噪声的量。也就是上面公式中的β。
如下图所示,在最初DDPM论文用的是线性的shedulers,后来有学者提出改善的余弦的Schedulers。
在改善的论文里,作者指出线性的Schedulers在添加图像噪声的过程中容易快速的扩散,会导致快速丢失图片信息,而cosine的Schedulers在提供了更平滑的扩散。
Reverse process
从最开始的充满噪声的图中一步一步的降噪直到最后得到一个清晰的图片(这个过程叫做reverse process)。
这就如同雕刻,从一块石头逐渐挖掉不要的部分,最后得到一个想要的形状。
与之前的diffusion process相反,我们需要知道每一步x_t到x_t-1的分布
由于涉及到分布,计算比较困难,于是就可以用神经网络来解决这个问题。
那需要怎么训练神经网络呢?
我们可以经过优化训练数据的负对数似然来训练这个网络,经过一系列计算得到证据下界evidence lower bound (ELBO):
由公式可以看到前两项都是改变不了的,于是最大化似然就变成了最小化最后一项的KL散度,也就是使p的均值无限接近于q的均值。
而q(x_t-1|x_t,x_0)由贝叶斯公式可以算出其均值为:
因此x_t-1的正态分布可以看成:
然后就可以参数化表示为:
这里ϵθ就是模型要预测的输出,ϵ取均值为零,标准差为1的正态分布
因此训练算法和生成图像的算法如下:
什么是stable diffusion?
Stable Diffusion不是一个单独的模型,其由三部分组成:
ClipText:编码文字为向量。 Input: 文字. Output: 77 token 潜入向量, 每个向量768维.Diffusion models:由UNet + Scheduler组成,逐步减去噪声。
Input: 文本向量和多维数组。
Output: 处理过后的数组。
Autoencoder Decoder:编码向量数组为图像。Input: 处理过后的数组(dimensions: (4,64,64))
Output: 最终输出的图片(dimensions: (3, 512, 512) 括号中参数依次为 (red/green/blue, width, height))
参考文献
Denoising Diffusion Probabilistic Models:https://arxiv.org/abs/2006.11239
Improved Denoising Diffusion Probabilistic Models:dehttps://arxiv.org/abs/2102.09672