Diffusion Model(扩散模型 )对标的是生成对抗网络(GAN),只要GAN能干的事它基本都能干。之前用GAN网络来实现一些图片生成任务其实效果并不是很理想,而且往往训练很不稳定。但是换成Diffusion Model后生成的图片则非常逼真,也明显感觉到每一轮训练的结果相比之前都更加优异,也即训练更加稳定。
本文将用通俗的语言和公式为大家介绍Diffusion Model,并且结合公式为大家梳理Diffusion Model的代码,探究其是如何通过代码实现的。
整体思路
Diffusion Model的整体思路如下图所示:

其主要分为正向过程和逆向过程,正向过程类似于编码,逆向过程类似于解码。
- 正向过程
首先,对于一张原始图片,我们给
加一个高斯噪声,图片由变成
。【注意:这里必须要加高斯噪声喔,因为高斯噪声服从高斯分布,后面的一些运算需要用到高斯分布的一些特性】」接着我们会在
的基础上再添加高斯噪声得到
。重复上述添加高斯噪声步骤,直到图片变成
,由于添加了足够多的高斯噪声,现在的
近似服从高斯分布(又称正态分布)。
现在有一个问题需要大家思考一下,我们每一步添加高斯噪声的量一直是不变的吗? 滴,开始解答。答案是每步添加高斯噪声的量是变化的,且后一步比前一步添加的高斯噪声更多。我想这一点你通过上图也非常容易理解,一开始原图比较干净,我们添加少量高斯噪声就能对原图产生干扰;但越往后高斯噪声量越多,如果还添加一开始少量的高斯噪声,那么这时对上一步结果基本不会产生任何影响。【注:后文所述的每个时刻图像和这里的每一步图像都是一个意思,如时刻图像表示的就是
这个图像】
- 逆向过程
首先,我们会随机生成一个服从高斯分布的噪声图片,然后一步一步的减少噪声直到生成预期图片。逆向过程大家先有这样的一个认识就好,具体细节稍后介绍。
实施细节
这一部分为大家介绍一下Diffusion Model正向过程和逆向过程的细节,主要通过推导一些公式来表示加噪前后图像间的关系。
正向过程
在整体思路部分我们已经知道了正向过程其实就是一个不断加噪的过程,于是我们考虑能不能用一些公式表示出加噪前后图像的关系呢。我想让大家先思考一下后一时刻的图像受哪些因素影响呢,更具体的说,比如由哪些量所决定呢?我想这个问题很简单,即
是由
和所加的噪声共同决定的,也就是说后一时刻的图像主要由两个量决定,其一是上一时刻图像,其二是所加噪声量。明白了这点,我们就可以用一个公式来表示
时刻和
时刻两个图像的关系,如下:
——公式1
其中,表示
时刻的图像,
表示
时刻图像,
表示添加的高斯噪声,其服从N(0,1)分布。【注:N(0,1)表示标准高斯分布,其方差为1,均值为0】目前你可以看出
和
、
都有关系,这和我们前文所述
后一时刻的图像由前一时刻图像和噪声决定相符合。这个公式前面的和
表示这两个量的权重大小,它们的平方和为1。
我想你已经明白了公式1,但是你可能对和
的理解还存在一些疑惑,如为什么要设置这样的权重?这个权重的设置是我们预先设定的吗? 其实,
还和另外一个量
有关,关系式如下:
——公式2
其中,是预先给定的值,它是一个随时刻不断增大的值,论文中它的范围为[0.0001,0.02]。既然
越来越大,则
越来越小,
越来越小,1−
越来越大。现在我们在来考虑公式1,
的权重
随着时刻增加越来越大,表明我们所加的高斯噪声越来越多,这和我们整体思路部分所述是一致的,即越往后所加的噪声越多。
现在,我们已经得到了时刻和
时刻两个图像的关系,但是
时刻的图像是未知的。【注:只有
阶段图像是已知的,即原图】我们需要再由
时刻推导出
时刻图像,然后再由
时刻推导出
时刻图像,依此类推,直到由
时刻推导出
时刻图像即可。既然这样我们不妨先试试
时刻图像和
1825




被折叠的 条评论
为什么被折叠?



