扩散模型_Diffusion Model
目录
扩散模型与图像生成
扩散模型的具体算法
前向过程Diffusion
反向过程Reverse
训练算法与采样算法
训练:
采样:
总结:
扩散模型与图像生成
在认识扩散模型之前,我们先退一步,看看一般的神经网络模型是怎么生成图像的。显然,为了生成丰富的图像,一个图像生成程序要根据随机数来生成图像。通常,这种随机数是一个满足标准正态分布的随机向量。这样,每次要生成新图像时,只需要从标准正态分布里随机生成一个向量并输入给程序就行了。
而在AI绘画程序中,负责生成图像的是一个神经网络模型。神经网络需要从数据中学习。对于图像生成任务,神经网络的训练数据一般是一些同类型的图片。比如一个绘制人脸的神经网络会用人脸照片来训练。也就是说,神经网络会学习如何把一个向量映射成一张图片,并确保这个图片和训练集的图片是一类图片。
为了解决这一问题,人们专门设计了一些用于生成图像的神经网络架构。这些架构中比较出名的有生成对抗模型(GAN)和变分自编码器(VAE)。
GAN的想法是,既然不知道一幅图片好不好,就干脆再训练一个神经网络,用于辨别某图片是不是和训练集里的图片长得一样。生成图像的神经网络叫做生成器,鉴定图像的神经网络叫做判别器。两个网络互相对抗,共同进步。
VAE(Variational Auto Encoder 变分自编码器)则使用了逆向思维:用向量生成图像很困难,那就同时学习怎么用图像生成向量。这样,把某图像变成向量,再用该向量生成图像,就应该得到一幅和原图像一模一样的图像。每一个向量的绘画结果有了一个标准答案,可以用一般的优化方法来指导网络的训练了。VAE中,把图像变成向量的网络叫做编码器,把向量转换回图像的网络叫做解码器。其中,解码器就是负责生成图像的模型。
一直以来,GAN的生成效果较好,但训练起来比VAE麻烦很多。有没有和GAN一样强大,训练起来又方便的生成网络架构呢?扩散模型正是满足这些要求的生成网络架构。
扩散模型:和其他生成模型一样,实现从噪声(采样自简单的分布)生成目标数据样本。
扩散模型是一种特殊的VAE,其灵感来自于热力学:一个分布可以通过不断地添加噪声变成另一个分布。放到图像生成任务里,就是来自训练集的图像可以通过不断添加噪声变成符合标准正态分布的图像。从这个角度出发,我们可以对VAE做以下修改:1)不再训练一个可学习的编码器,而是把编码过程固定成不断添加噪声的过程;2)不再把图像压缩成更短的向量,而是自始至终都对一个等大的图像做操作。解码器依然是一个可学习的神经网络,它的目的也同样是实现编码的逆操作。不过,既然现在编码过程变成了加噪,那么解码器就应该负责去噪。而对于神经网络来说,去噪任务学习起来会更加有效。因此,扩散模型既不会涉及GAN中复杂的对抗训练,又比VAE更强大一点。
具体来说,扩散模型由正向过程和反向过程这两部分组成,对应VAE中的编码和解码。在正向过程中,输入x0会不断混入高斯噪声。经过T次加噪声操作后,图像xT会变成一幅符合标准正态分布的纯噪声图像。而在反向过程中,我们希望训练出一个神经网络,该网络能够学会TT个去噪声操作,把xT还原回x0x0。网络的学习目标是让T个去噪声操作正好能抵消掉对应的加噪声操作。训练完毕后,只需要从标准正态分布里随机采样出一个噪声,再利用反向过程里的神经网络把该噪声恢复成一幅图像,就能够生成一幅图片了。
从图像处理的角度来说,高斯噪声可以被看作是一种图像噪声,其中每个像素的颜色值(或灰度值)会受到一个高斯分布的随机值的扰动。更具体地说:
高斯噪声定义:
在每个像素位置上,添加一个随机值,这个随机值服从正态分布(即高斯分布)。正态分布的参数通常包括均值 (μ) 和标准差 (σ)。
- μ\muμ:控制噪声的偏移(通常为 0,表示没有系统性误差)。
- σ\sigmaσ:控制噪声的强度(噪声值的变化范围)。
图像中的表现:
添加高斯噪声后,图像会在整体上看起来更“模糊”或者“有颗粒感”,而这些颗粒的强度和分布遵循高斯分布。颜色值会随机上下波动,形成噪点。
总结: 图像生成网络会学习如何把一个向量映射成一幅图像。设计网络架构时,最重要的是设计学习目标,让网络生成的图像和给定数据集里的图像相似。VAE的做法是使用两个网络,一个学习把图像编码成向量,另一个学习把向量解码回图像,它们的目标是让复原图像和原图像尽可能相似。学习完毕后,解码器就是图像生成网络。扩散模型是一种更具体的VAE。它把编码过程固定为加噪声,并让解码器学习怎么样消除之前添加的每一步噪声。
扩散模型的具体算法
前向过程Diffusion
在前向过程中,来自训练集的图像x0会被添加T次噪声,使得xT为符合标准正态分布。
反向过程Reverse
在正向过程中,我们人为设置了T步加噪声过程。而在反向过程中,我们希望能够倒过来取消每一步加噪声操作,让一幅纯噪声图像变回数据集里的图像。这样,利用这个去噪声过程,我们就可以把任意一个从标准正态分布里采样出来的噪声图像变成一幅和训练数据长得差不多的图像,从而起到图像生成的目的。
训练算法与采样算法
理解了前向过程和反向过程后,训练神经网络的算法和采样图片(生成图片)的算法就呼之欲出了。
训练:
官方的训练算法如上,下图说明了一个训练步骤是如何工作的:
采样:
训练好了网络后,我们可以执行反向过程,对任意一幅噪声图像去噪,以实现图像生成。这个算法如下:
采样意味着从高斯噪声绘制图像。下图显示了我们如何使用经过训练的 U-Net 生成图像:
总结:
- 在DDPM(Denoising Diffusion Probabilistic Models) 中,理论上我们可以用任意一种神经网络架构。但由于DDPM任务十分接近图像去噪任务,而U-Net又是去噪任务中最常见的网络架构,因此绝大多数DDPM都会使用基于U-Net的神经网络。
- 图像生成任务就是把随机生成的向量(噪声)映射成和训练图像类似的图像。为此,扩散模型把这个过程看成是对纯噪声图像的去噪过程。通过学习把图像逐步变成纯噪声的逆操作,扩散模型可以把任何一个纯噪声图像变成有意义的图像,也就是完成图像生成。
- VAE通过把图像编码再解码来训练一个解码器
- 扩散模型是一类特殊的VAE,它的编码固定为加噪声,解码固定为去噪声
- 扩散模型的优化目标:让反向过程尽可能成为正向过程的逆操作