Diffusion扩散模型大白话讲解,看完还不懂?不可能!
Challenge&Background
图像降噪
目前较早出现的生成模型便是GAN。为此先熟悉一下GAN网络的思想,是生成器和判别器的一代代博弈。通过先训练判别器,使其能够区分图片的真伪,再继续训练生成器,使生成图像的分布逐渐逼近于真实分布。
GAN由于需要同时训练生成器和判别器,比较难平衡和收敛(生成器通过某些“捷径”骗过判别器,导致效果并不好),这使得训练不稳定。并且多样性比较差(只适用于相应的判别器)。
而变分自编码器的方式(VAE)是将真实样本通过编码器网络变换成一个理想的数据分布,然后这个数据分布再传递给一个解码器网络,得到一堆生成样本,生成样本与真实样本足够接近的话,就训练出了一个自编码器模型。但VAE的方法输出模糊,常会失真。
基于流模型的方法,是建立训练数据和生成数据之间的概率关系,然后用可逆的神经网络来训练,这种关系是一一对应的。代价就是模型设计比较麻烦,因为要保证可逆而且逆函数可以算,还要有足够的灵活度。
相比之下,Diffusion只需要训练一个模型,优化更加容易一些。最经典的关于Diffusion的文章便是DDPM模型(NeurIPS2020),OpenAI也基于Diffusion做了相关的生成模型的工作(DALLE2)。(不得不说OpenAI真的狠nb,又是DALLE又是ChatGPT。。。)
2
Design of DDPM
扩散模型的灵感来自非平衡热力学。通过定义了一个扩散步骤的马尔可夫链,以缓慢地将随机噪声添加到数据中,然后学习反转扩散过程以从噪声中构建所需的数据样本。
首先介绍噪声的扩散,在数据当中,不断地加入具有高斯分布的噪声,最开始还具有原始图片的特征,但是随着噪声的不断加入,最后会变为一个纯噪声图片。
分子扩散
噪声也模拟扩散
每一个噪声都是在前一时刻增加噪声而来的(马尔科夫过程)从最开始的时刻开始,最终得到时刻的纯噪声图像(原始论文中)。问题来了,为什么要加噪声?Diffusion的本质是去噪,为了推导出逆向的去噪方法,必须了解增加噪声的原理。同时,添加噪声的过程其实就是不断构建标签的过程如果在前一时刻可以预测出来后一时刻的噪声,很方便地可以实现还原操作。所以扩散模型整体分为两个部分:前向过程(扩散过程)和复原过程。
首先了解,如何得到前向过程中时刻的分布。
噪声的添加过程中,每一步都要保持尽量相同的噪声扩散幅度。图片前期的分布非常均匀,添加一些噪声便可以将原始分布改变,但到后期,需要添加更多的噪声,方可保证噪声扩散幅度相同(有趣的比喻,水中加糖,为了使糖的甜味增长相同,后期需要加更多的糖)。
这一点能理解的话,我们就可以开始手撕公式了。(因为上面那段的思想很重要,是扩散模型推导成立的核心)
定义一个每一时刻的作为权重项,论文中从0.0001到0.02。。(不懂物理学和信息论的就不用管为啥,当它是个权重就行),根据马尔科夫链的性质,时刻的图片与时刻最相关。所以有如下定义:
由于越来越大,所以会越来越小,上述公式符合时刻越往后,添加的噪声值越大。然而从逐渐递归计算得到的过程十分慢,所以通过推导使得通过直接得到任一时刻的。向前推导得到:
将以上两个式子联立,带入,可以得到:
带入简化:
注意和都是服从高斯分布的,前面相乘权重表示改变了分布的方差。所以服从的分布,服从
。两个独立同分布的高斯分布相加之后有以下公式:
所以最终的式子可以简化为:
由最开始的的推导一直推到现在,可以根据同构公式的方法得到向前推到的结论:
其中。综上所述,任一时刻的分布都可以通过
至此正向过程已经得到了,即通过前一时刻得到后一时刻的信息,写作
上面的式子其实会立刻想到用贝叶斯去求解。贝叶斯可以表示为:
上述公式与贝叶斯公式不同的原因(多了
根据先前的公式可以得到以下有利于贝叶斯推导的式子:
综上,上述贝叶斯公式中的各项可以写为标准正态分布的形式,而标准正态分布表示为:
所以贝叶斯公式的表示可以转化为:
平方展开,即类似于
,最终合并同类项可以得到:
其中
标准正态分布的展开为:
所以对应上面的两个指数形式的式子,可以对应列出关于
刚刚的推导可以归纳总结为,我们的目的是想在
然而,我们可以先前的公式指出,
将
至此,均值和方差就都有了,前一个分布(上一张图片)也就可求了。然而问题又来了,当下并不知道
至此数学推导部分基本上已经到了尽头,推导推不出来的活,就交给神经网络来干吧。总的来说,我们的目的,已知
训练这个模型需要的东西包括:输入图片(这里是
小小总结一下:前面一通推导,得到了向前推导的方差和均值,然而均值中存在不定的噪声,我们便通过前向的传递记录真实采样的噪声为标签,训练一个应用于反向预测噪声的模型。这里的损失函数所使用的的为MSELoss。
模型一般采用的UNet,甚至DALLE中也是传统UNet+Transformer。
前向传递和后向推理过程
Algorithm
训练中的 是从1到 中随机采样得到的,为了训练不同时间步下采样的多样性。公式中 代表的就是UNet模型, 表示根据损失函数更新梯度。损失就是利用生成的噪声 ,和在该 下正向计算得到的扩散模型图像输入UNet后得到的噪声值 。Sample的反向过程中,在最后一步不再加入噪声。
Related work & Tricks
下面是一些经典的相关论文对DDPM进行的修改,感兴趣的可以深度学习一下,这里只讲一些经典的核心操作。
1、修改
原论文中前向方差被设置为一系列线性增加的常数,对于归一化的图片像素
其中
修正后的alpha值变化
2、改变学习的像素空间(LDM)
通过在潜在空间而不是像素空间中运行扩散过程,使训练成本更低,推理速度更快。首先使用自动编码器修剪像素级冗余,然后通过潜在信息学习扩散模型。在复杂性降低和细节保留之间达到一个接近最优的点。其优点在于,通过离开高维图像空间,得到的dm计算效率更高。
映射到低维后再进行Diffusion训练推理
3、改进损失函数与网络结构
传统的loss为:
并在Unet中加入注意力模块,并发现加宽或者加深网络的深度都有助于提升发模型表现。
4、与语义的结合
经典的由文字生成图片的先例,加入了CLIP的结构。CLIP的训练数据是图像-文本对,通过图像编码和文本编码,分别得到图像特征和文本特征。两个特征之间可以计算损失函数再更新编码器。
而结合扩散模型的想法是,先训练好一个CLIP结构(上半部分),文本通过这个模型可以得到相应的文本特征,再通过自回归(也可以是扩散模型)等操作得到图像特征。这个图像特征被用来训练一个解码器,此处也是通过一个扩散模型实现。
References
1. Creswell A, White T, Dumoulin V, et al. Generative adversarial networks: An overview[J]. IEEE signal processing magazine, 2018, 35(1): 53-65.
2. http://Lexica.art
3. https://openai.com/dall-e-2/
4. Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models[J]. Advances in Neural Information Processing Systems, 2020, 33: 6840-6851.
5. Nichol A Q, Dhariwal P. Improved denoising diffusion probabilistic models[C]//International Conference on Machine Learning. PMLR, 2021: 8162-8171.
6. Rombach R, Blattmann A, Lorenz D, et al. High-resolution image synthesis with latent diffusion models[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 10684-10695.
7. Dhariwal P, Nichol A. Diffusion models beat gans on image synthesis[J]. Advances in Neural Information Processing Systems, 2021, 34: 8780-8794.
8. Ramesh A, Dhariwal P, Nichol A, et al. Hierarchical text-conditional image generation with clip latents[J]. arXiv preprint arXiv:2204.06125, 2022.
9. https://www.bilibili.com/video/BV1ne411u7J6/?spm_id_from=333.337.search-card.all.click&vd_source=cc383474e6b9ebae58e9d70b59376ae
往期推荐
案例分享 | 联邦学习在洗钱风险管理中的应用展望
中国密码学会2023年区块链密码学术会议 (CryptoBC 2023)通知
《计算机研究与发展》2022刊登安全与隐私保护相关论文整理
问题综述 | 隐私求交(Private Set Intersection)