扩散模型

简介

从概念上来看扩散模型就是

每一步向图片中加正态分布的噪声。一直加到最后,一共加了T次。如果这个噪声特别的大,最终会变成一个真正的噪声。(就是各项同性的正态分布)。整个过程被叫做前向扩散过程。扩散这个名词是来自于热力学。高密度会向低密度扩散。

加入输入是一个随机噪声。(类似gan中的Z)如果能找到一种方式将噪声恢复为图片,它就可以做图像生成了。把xt恢复成xt-1最后恢复到x0。所有这样的模型都是共享参数的。

因此扩散模型的训练和推理都是比较昂贵的。gan给噪声直接输出图片就可以了。但是对于扩散模型,尤其是最原始的扩散模型来说T的选择一般是1000步。也就是要做1000次forward。

其中大部分的扩散模型使用的网络是U-net。

发展

  • ddpm

扩散模型在15年之前就被提出。但当时只是一个想法。在2020年6月一篇论文Denoising diffusion probalilistic model(DDPM)。优化了扩散模型。

再此之前大家都觉得要用Xt预测Xt-1,做图像到图像的转化。这里改为预测它加了多少的噪声。

其实Unet中还用了一个额外的编码叫做time embedding(类似Transformer里面的时间编码)有些是直接加,有些是拼接起来加上去。用来告诉模型现在是反向扩散的第几步。(提升相当明显)因为我们希望U-net在刚开始的反向过程中生成大概的轮廓,随着扩散模型快生成具体图片的时候,生成细小特征,这样就能让图片更加逼真。而事实上所有的U-net都是共享参数的,所以需要这个time embedding去提醒模型现在的步骤。

我们要算的loss就是我们已知的噪声和我预测出来的噪声的差值。 因为加噪用的是正态分布,所以我们只需要预测均值和方差,但是研究发现其实中需要预测均值就可以了(方差为常数)。因此DDMP就工作的很好。

  • improved ddpm

open ai改进了ddpm,学习了方差,得到了更好的表现。

同时也改进了噪声生成方式。将线性的schedule改成了余弦的schedule。(类似学习率)

还尝试了扩散模型在大模型上的结果。出现了论文

  • diffusion beat gan

加大加宽了模型,增加了自注意力头的数量attention head。使用多头注意力。

并提出了新的归一化方式adaptive group normalization

使用了classifier guidance diffusion的方法做采样和生成。让生成的图片更加逼真并加速了采样的速度(只需要做25次采样)

classifier guidance diffusion

在训练模型的同时再训练一个基于ImageNet的图像分类器。只不过把ImageNet的图片加了噪声。因为对于扩散模型来说,它的输入始终是加了噪声的。

这个分类器的作用是当有图片xt之后,看他分类的对不对。算交叉熵得到对应的梯度。用这个梯度帮助这个模型进行采样和图像生成。这里的梯度其实暗含了这个图像有没有物体或者生成的物体是不是更加真实。

使用了这个技术的扩散模型第一次在分数上超越了之前比较好的一个gan模型(big GAN)。作者说是用多样性换去到了写实性。(其实多样性还是比gan要好)

然后大家就想到能不能把这个判别器换成clip。这样甚至可以用文本去控制采样生成。

在这个方向上也有很多引导工作,除了用图像重建做像素级别的引导,还可以做特征层面的引导,还可以做风格层面的引导。(gram matrix)文本中可以用已经训练好的语言模去做引导。效果也很好。但是这些方法都有个问题,就是训练另一个模型去做引导。要么拿预训练好的模型,要么要重新训练这个模型。成本有点高,训练过程也不可控。因此引出了

classifier free guidance

为了找出一种指导信号让模型生成变得更好。

它在训练模型的时候生成了俩个输出,一个是在有条件的时候生成了一个输出,一个是在没有条件生成的输出。

比如在训练时用的是图像文本对,这时候想用文本做guidance信号。在训练的时候用文本y去生成图像,然后去掉这个文本,用空序列再去生成另外一个输出。假设有一个空间存放这俩个结果,那么我们就知道存在一个方向 xy,能从这种无条件中最后得到输出,成为有条件得到的输出。我们就会知道他们之间的差距是多少。到之后进行反向扩散去做图像生成的时候,有了一个没有用条件生成的图像输出的时候,我们也能做出比较合理的推测。从一个没有条件生成的x,到有条件生成的x。

但是这样仍是比较昂贵的,因为扩散模型本来训练就很贵了。因为这里训练的时候要生成俩个输出。

GLIDE论文中用到了,之后的DALL E2也用到了还有Imagen也用到了。

Last modification:November 14, 2024
如果觉得我的文章对你有用,请随意赞赏