算法|扩散模型在图像生成领域大火,风头超过GAN()

算法|扩散模型在图像生成领域大火,风头超过GAN()
文章图片

文 | Zhifeng
源 | 知乎
首先说说我的背景。我从20年diffusion model刚出来就开始(花部分精力)做这个问题,到目前已经有了3篇相关paper (DiffWave, FastDPM, PDR), 之后也会将其作为我的主要方向之一。我算是这一领域比较早期的研究者,不过不太做methodology, 主要做应用,DiffWave 是语音领域 TTS 的应用, PDR是3d 领域点云补全的应用,FastDPM则是关于快速采样的算法。
【算法|扩散模型在图像生成领域大火,风头超过GAN()】我首先简短给出我所理解的diffusion model 和 GAN 的比较:GAN 能更灵活处理不同任务,应用层面部署比较容易,需要的资源小,不过学术上竞争激烈,有时生成的样本质量比较一般。Diffusion model 相对不太灵活,缺少良好的 latent space 性质,资源消耗极大,但生成效率略高于auto-regressive model, 主要优点质量好,学术上容易出论文。
接下来我们从几个方面比较这两个模型。
1 任务的灵活性 GAN有一个良好的latent space, 可以寻找meaningful vector (如DCGAN) 从而实现 attribute generation, 比如给人带上墨镜,甚至能像cycleGAN那样做两个domain之间的转化,而diffusion没有meaningful latent space, 因为reverse process每一步都加很多噪音,以至于同样的latent 会生成完全不同的东西,目前我认为有可能突破的是研究DDIM的fixed latent space, 但好像没有什么相关文章。
GAN能很容易处理离散数据,比如seqGAN. 但是目前diffusion model很难处理离散数据,这是因为连续模型用的Gaussian noise而离散模型只能用binomial noise, 效果差了很多。Max Welling 组写了离散的diffusion model但是效果仅限于character level generation. 当然,Flow based model 也都只有这个水平。因此,diffusion 目前好用的都是continuous domain, 如 image, audio, point cloud 目前也有人在做video. 至于离散的 language 甚至其它的数据结构比如graph, 3d mesh 都比较难做。
很多实际的 GAN 模型,在超分辨率这种广义上的 regression 任务中,都不是原始的 GAN 而是 regression model + GAN loss. 可以将generator理解为regressor, 只不过 loss 在 distance loss的基础上加了 adversarial loss. 这就使得几乎所有的regression (比如auto encoder ) 能做的任务 GAN (以及VAE) 都能做。但是 diffusion model做这一类任务的形式完全不同。因为input space = Gaussian 不能改,想做超分辨率这种 regression 问题,只能用conditional generation 的方式,额外在网络中加 conditional info. 但是我们知道,conditional info 加进去的效率很低,我们连step embedding 都要在每一层加,那更复杂的conditional info 也需要在每一层加,比如我在DiffWave 中 Mel spectrogram要加30遍,在PDR中incomplete 3d point cloud不仅每一层要加,还要extract global feature加到每一层。因此 diffusion model 做这一类任务效果会差一些。当然,现在有文章通过在input时double一下channel来做,一半输入latent另一半输入input data.
2 生成效果 Diffusion model 在它能做的任务上效果好于 GAN. 当然,效果不好于 GAN 的也发不出paper, 所以这句话堪比废话。我们可以说,目前 diffusion model 在 image, audio 等主流领域中的更接近于纯生成模型 (unconditional generation, text to image, text to speech) 而非regression模型的问题上,上限高于 GAN. 这有多方面的原因。
Diffusion model 模型更大,一方面其使用大模型如 UNet, wavenet, PointNet 的时候训练稳定,所以可以上大模型。至于为什么比 GAN和VAE稳定,这可以写很多,简单来说 GAN 和 VAE 都要训练两个网络,比较难平衡,因此有mode collapse 和 posterior collapse. 至于flow based model 因为是likelihood模型,容易被noisy training data 影响,且其invertible architecture 比较受限制。相比之下,diffusion model只有一个网络,且用ELBO 训练,因此比较容易捕捉到数据的major variation. 另一方面,我们在模型加了大量的step/conditional embedding 进一步增大了模型,并且使得对于不同step 的模型不完全一样,类似于share weight 的多个模型,而每一个模型只需要去除一点点噪音,因此更容易生成。
最近的text to image等模型都使用了 classifier guidance或者non-classifier guidance,意思是在p(x|c) 的基础上增加 p(c|x) 的信息,进一步通过label info 强化生成的效果。GAN和 VAE都不能这么操作,因为其 generator 是固定的,所以人们都通过减少 latent variance 的方式来增加质量。至于为什么 diffusion model 能加入这个信息,这是因为 score based EBM 中我们拟合likelihood gradient的时候可以加入classifier guidance, 而diffusion model又与 denoising score based model 具有类似的形式,因此能直接使用这一套方法。
3 计算资源 GAN 的话,学术界还能调一调,有4个卡的话搞个bigGAN实验还是没问题的,diffusion model就别想了,只有大公司玩得起。哪怕最小的cifar 得弄8个卡,训练两个星期。所以最近diffusion model的大模型文章都是 google/openai/nvidia搞出来的。至于学术界,热衷于without retraining的文章,比如 DDIM和我写的FastDPM 都是直接用pretrained model 研究如何快速sampling 的。
GAN 的生成只需要一个forward pass. Diffusion model 需要很多个(原始模型可能要上千个)forward pass, 因此特别慢。最近至少有10篇文章关于 fast sampling 的算法,目前最少可以加速到4~6个 forward pass. 这样效率就比较高,但还是明显慢于 GAN.
4 潜力 不同模型潜力都很大。其实不同的模型本身就擅长不同领域不同任务,没有必要一定说一个好于另一个。比如说,speech synthesis 天生更适合用auto regressive, data compression 天生适合用 (variational) auto encoder, 图像编辑就很适合用 GAN. 我们或许也能说 大数据集,高分辨率图像生成可能更适合用 Diffusion model. 至于学术潜力,diffusion model 完胜,毕竟GAN的坑都差不多了。
算法|扩散模型在图像生成领域大火,风头超过GAN()
文章图片
后台回复关键词【入群
加入卖萌屋NLP、CV、搜推广与求职讨论群
后台回复关键词【顶会
获取ACL、CIKM等各大顶会论文集!
算法|扩散模型在图像生成领域大火,风头超过GAN()
文章图片

    推荐阅读