2020年的Denoising Diffusion Probabilistic Models论文
阅读本篇文章你可以学习到
文章目录
- 阅读本篇文章你可以学习到
- 1 图像生成到扩散模型的思维转变
- 1.1 VAE和GAN
- 1.2 扩散模型
- 2 扩散模型的两个过程
- 2.1 前向加噪过程
- 2.2 反向去噪过程
- 2 DDPM训练算法和采样算法
- 2.1 训练算法流程
- 2.2 去噪采样过程
- 3 总结
- 参考资料
1 图像生成到扩散模型的思维转变
1.1 VAE和GAN
在认识扩散模型之前,我们先退一步,看看一般的神经网络模型是怎么生成图像的。显然,为了生成丰富的图像,一个图像生成程序要根据随机数来生成图像。通常,这种随机数是一个满足标准正态分布的随机向量。这样,每次要生成新图像时,只需要从标准正态分布里随机生成一个向量并输入给程序就行了。
而在AI绘画程序中,负责生成图像的是一个神经网络模型。神经网络需要从数据中学习。对于图像生成任务,神经网络的训练数据一般是一些同类型的图片。比如一个绘制人脸的神经网络会用人脸照片来训练。也就是说,神经网络会学习如何把一个向量映射成一张图片,并确保这个图片和训练集的图片是一类图片。
可是,相比其他AI任务,图像生成任务对神经网络来说更加困难一点——图像生成任务缺乏有效的指导。在其他AI任务中,训练集本身会给出一个「标准答案」,指导AI的输出向标准答案靠拢。比如对于图像分类任务,训练集会给出每一幅图像的类别;对于人脸验证任务,训练集会给出两张人脸照片是不是同一个人;对于目标检测任务,训练集会给出目标的具体位置。然而,图像生成任务是没有标准答案的。图像生成数据集里只有一些同类型图片,却没有指导AI如何画得更好的信息。
为了解决这一问题,人们专门设计了一些用于生成图像的神经网络架构。这些架构中比较出名的有生成对抗模型(GAN
)和变分自编码器(VAE
)。
GAN的想法是,既然不知道一幅图片好不好,就干脆再训练一个神经网络,用于辨别某图片是不是和训练集里的图片长得一样。生成图像的神经网络叫做生成器,鉴定图像的神经网络叫做判别器。两个网络互相对抗,共同进步。
VAE则使用了逆向思维:学习向量生成图像很困难,那就再同时学习怎么用图像生成向量。这样,把某图像变成向量,再用该向量生成图像,就应该得到一幅和原图像一模一样的图像。每一个向量的绘画结果有了一个标准答案,可以用一般的优化方法来指导网络的训练了。VAE中,把图像变成向量的网络叫做编码器,把向量转换回图像的网络叫做解码器。其中,解码器就是负责生成图像的模型。对VAE的更深入理解感兴趣可以阅读:《VQ-VAE》:Stable Diffusion设计的架构源泉
一直以来,GAN的生成效果较好,但训练起来比VAE麻烦很多。有没有和GAN一样强大,训练起来又方便的生成网络架构呢?扩散模型正是满足这些要求的生成网络架构。
1.2 扩散模型
扩散模型是一种特殊的VAE,其灵感来自于热力学:一个分布可以通过不断地添加噪声变成另一个分布。放到图像生成任务里,就是来自训练集的图像可以通过不断添加噪声变成符合标准正态分布的图像。 从这个角度出发,我们可以对VAE做以下修改:
- 1)不再训练一个可学习的编码器,而是把编码过程固定成不断添加噪声的过程;
- 2)不再把图像压缩成更短的向量,而是自始至终都对一个等大的图像做操作。解码器依然是一个可学习的神经网络,它的目的也同样是实现编码的逆操作。不过,既然现在编码过程变成了加噪,那么解码器就应该负责去噪。而对于神经网络来说,去噪任务学习起来会更加有效。
因此,扩散模型既不会涉及GAN中复杂的对抗训练,又比VAE更强大一点。
具体来说,扩散模型由正向过程和反向过程这两部分组成,对应VAE中的编码和解码。
- 1)在正向过程中,输入会不断混入高斯噪声。经过次加噪声操作后,图像会变成一幅符合标准正态分布的纯噪声图像。
- 2)而在反向过程中,我们希望训练出一个神经网络,该网络能够学会个去噪声操作,把还原回。网络的学习目标是让个去噪声操作正好能抵消掉对应的加噪声操作。
- 3)训练完毕后,只需要从标准正态分布里随机采样出一个噪声,再利用反向过程里的神经网络把该噪声恢复成一幅图像,就能够生成一幅图片了。
高斯噪声,就是每个像素值是从高斯分布中取样得来的。如果高斯分布的均值 μ 设为 128,标准差 σ 设为 25,那么大部分像素值会集中在 128 附近(可能在 100 到 156 之间),而远离 128 的像素值则会较少出现。即高斯噪声的像素值的分布呈现高斯分布钟形曲线。
2 扩散模型的两个过程
2.1 前向加噪过程
在前向过程中,来自训练集的图像会被添加次噪声,使得为符合标准正态分布。准确来说,「加噪声」并不是给上一时刻的图像加上噪声值,而是从一个均值与上一时刻图像相关的正态分布里采样出一幅新图像。如下面的公式所示,是上一时刻的图像,是这一时刻生成的图像,该图像是从一个均值与有关的正态分布里采样出来的。
前向过程也是一个马尔可夫过程。马尔可夫过程的意思就是当前时刻的状态只由上一时刻的状态决定,而不由更早的状态决定。上面的公式表明,计算,只需要用到,而不需要用到,这符合马尔可夫过程的定义。
绝大多数扩散模型会把这个正态分布设置成这个形式:
这个正态分布公式乍看起来很奇怪:是哪里冒出来的?为什么会有这种奇怪的系数?别急,我们先来看另一个问题:假如给定,也就是从训练集里采样出一幅图片,该怎么计算任意一个时刻的噪声图像呢?
我们不妨按照公式,从开始倒推。其实可以通过一个标准正态分布的样本算出来
再往前推几步:
由正态分布的性质可知,均值相同的正态分布「加」在一起后,方差也会加到一起。也就是与合起来会得到。根据这一性质,上面的公式可以化简为:
再往前推一步的话,结果是:
我们已经能够猜出规律来了,可以一直把公式推到。令
则:
有了这个公式,我们就可以讨论加噪声公式为什么是了。这个公式里的是一个小于1的常数。在DDPM论文中,从到线性增长。这样,变大,就越小,趋于0的速度越来越快。最后,几乎为0,代入,就满足标准正态分布了,符合我们对扩散模型的要求。
上述推断可以简单描述为:加噪声公式能够从慢到快地改变原图像,让图像最终均值为0,方差为。
2.2 反向去噪过程
在正向过程中,我们人为设置了步加噪声过程。而在反向过程中,我们希望能够倒过来取消每一步加噪声操作,让一幅纯噪声图像变回数据集里的图像。这样,利用这个去噪声过程,我们就可以把任意一个从标准正态分布里采样出来的噪声图像变成一幅和训练数据长得差不多的图像,从而起到图像生成的目的。
现在问题来了:去噪声操作的数学形式是怎么样的?怎么让神经网络来学习它呢?数学原理表明,当足够小时,每一步加噪声的逆操作也满足正态分布。
其中,当前时刻加噪声逆操作的均值和方差由当前的时刻、当前的图像决定。因此,为了描述所有去噪声操作,神经网络应该输入、,拟合当前的均值和方差。
现在问题来了:加噪声逆操作的均值和方差是什么?论文作者经过一系列严谨的数学原理推导得知,均值等于:
其中,是用公式算时从标准正态分布采样出的样本,它来自公式
而分布的方差为:
注意,是加噪声的方差,是一个常量。那么,加噪声逆操作的方差也是一个常量,不与输入相关。这下就省事了,训练去噪网络时,神经网络只用拟合个均值就行,不用再拟合方差了。
知道了均值和方差的真值,训练神经网络只差最后的问题了:该怎么设置训练的损失函数?加噪声逆操作和去噪声操作都是正态分布,网络的训练目标应该是让每对正态分布更加接近。那怎么用损失函数描述两个分布尽可能接近呢?最直观的想法,肯定是让两个正态分布的均值尽可能接近,方差尽可能接近。根据上文的分析,方差是常量,只用让均值尽可能接近就可以了。
那怎么用数学公式表达让均值更接近呢?再观察一下目标均值的公式:
神经网络拟合均值时,是已知的(别忘了,图像是一步一步倒着去噪的)。式子里唯一不确定的只有。既然如此,神经网络干脆也别预测均值了,直接预测一个噪声(其中为可学习参数),让它和生成的噪声的均方误差最小就行了。 对于一轮训练,最终的误差函数可以写成
这样,我们就认识了反向过程的所有内容。总结一下,反向过程中,神经网络应该让个去噪声操作拟合对应的个加噪声逆操作。每步加噪声逆操作符合正态分布,且在给定某个输入时,该正态分布的均值和方差是可以用解析式表达出来的。因此,神经网络的学习目标就是让其输出的去噪声分布和理论计算的加噪声逆操作分布一致。经过数学计算上的一些化简,问题被转换成了拟合生成时用到的随机噪声。
2 DDPM训练算法和采样算法
2.1 训练算法流程
理解了前向过程和反向过程后,训练神经网络的算法和采样图片(生成图片)的算法就呼之欲出了。以下是DDPM论文中的训练算法:
让我们来逐行理解一下这个算法。第二行是指从训练集里取一个数据。第三行是指随机从里取一个时刻用来训练。我们虽然要求神经网络拟合个正态分布,但实际训练时,不用一轮预测个结果,只需要随机预测个时刻中某一个时刻的结果就行。第四行指随机生成一个噪声,该噪声是用于执行前向过程生成的。之后,我们把和传给神经网络,让神经网络预测随机噪声。训练的损失函数是预测噪声和实际噪声之间的均方误差,对此损失函数采用梯度下降即可优化网络。
DDPM并没有规定神经网络的结构。根据任务的难易程度,我们可以自己定义简单或复杂的网络结构。这里只需要把当成一个普通的映射即可。
2.2 去噪采样过程
训练好了网络后,我们可以执行反向过程,对任意一幅噪声图像去噪,以实现图像生成。这个算法如下:
第一行的就是从标准正态分布里随机采样的输入噪声。要生成不同的图像,只需要更换这个噪声。后面的过程就是扩散模型的反向过程。令时刻从到,计算这一时刻去噪声操作的均值和方差,并采样出。均值是用之前提到的公式计算的:
而方差的公式有两种选择,两个公式都能产生差不多的结果。实验表明,当是特定的某个数据时,用上一节推导出来的方差最好。
而当时,只需要令方差和加噪声时的方差一样即可。
循环执行去噪声操作。最后生成的就是生成出来的图像。
3 总结
-1)从实际DDPM的公式推导中不难发现,Comfyui中常见的scheduler就是为了生成的
- 2)采样器的类型除了DDPM之外,还有其它的采样器,如图所示
参考资料
https://mp.weixin.qq.com/s/_OqE5N3sQaOp8V2SKRpfKw https://lilianweng.github.io/posts/2021-07-11-diffusion-models/ https://arxiv.org/abs/2208.11970