讲到图像生成,必然绕不来Diffusion和GAN。这里先简单介绍一下Diffusion,后期也会专门出一个GAN系列的介绍。在进入Diffusion原理学习之前(Diffusion原理(一), Diffusion原理(二)),我们要先知道什么是Diffusion(diffusion怎么来的)。
GAN生成图像的不足:
在Diffusion火之前,GAN几乎是图像生成的主流研究方向,GAN在大多数生成任务中都能取得很不错的效果。第一篇GAN理论的论文,早在2014年就提出来了,后面和深度神经网络的结合,大大促进了其发展。然而GAN的应用会存在一个问题:训练时,对数据分布的学习没有一个明确的导向,从而导致GAN的网络训练会比较难。尽管后面很多研究者想了很多方法让GAN的训练变得更好,更稳定等。
训练时,对数据分布的学习没有一个明确的导向。这句话怎么理解呢?简单的打个比方,比如,把训练目标当成是过河,训练过程好比是过河的方式。过河的方式有很多种,比如坐船,比如直接游过去,找一座桥走过去,还有可能绕一个大弯绕过这条河。。。总之会有很多种方式存在。现在这些过河方式对你来说都是有可能的,而且你也不知道该选择哪种方式,选的对不对?比如你选择绕个大弯过河也是有这种可能的。这样你要过河是不是会比较痛苦?这就叫做没有没有明确的导向。
那么是什么原因导致GAN训练没有明确的导向呢?GAN学习的是一种数据分布,而训练样本的差异性有时会比较大,这样就会导致很难找到哪种参数更新的方向是能稳定拟合整个数据分布的。
那么有什么办法能改进呢?如果我们能够缩小训练样本之间的差异性,甚至让所有训练样本直接符合一个已知的分布,是不是会比较有利于训练。那么怎么才能做到这样呢?就是我们要将的diffusion了。
扩散过程(Diffusion Procedure):
第一篇描述diffusion的文章[Deep Unsupervised Learning using Nonequilibrium Thermodynamics]
扩散过程描述的是一种我们初中物理学的物理现象,叫做分子无规则运动,官方一点叫做布朗运动。由于非平衡的热力学,导致分子进行无规则的运动。就如图中描述的,不同方式的挡板都会使得分子处于不同的状态,但是当拿掉挡板后,由于布朗运动,最终都会趋向于中间的状态。而对于图像而言,也就可以通过模拟这个扩撒过程来把样本之间的差异变得更小。
图像中的扩散过程:
如图所示,我们对一张图像进行不断的加入高斯噪声,当次数足够多后,最终的图像就无限趋近于纯高斯噪声了,这个过程称做前向过程(forward process)。这样就模拟了扩撒过程,所有样本将经过扩撒过程变成服从统一分布的高斯噪声了。而真正的训练过程就是逆向过程(reverse process), 通过学习不断的减噪声,最终得到新的生成图像。
那么问题来了,对于前向过程,怎么在前向过程中不断加入噪声,按照怎样的一个规则来加入噪声,加入怎样的噪声,是随机噪声还是特定的噪声?对于逆向过程,怎么在逆过程减少噪声,减少的是怎样的噪声, 减少噪声的过程如何实现?之后以DDPM为例,进一步介绍diffusion的原理,见