链接:https://www.zhihu.com/question/536012286
编辑:深度学习与计算机视觉
声明:仅做学术分享,侵删
作者:知乎用户 https://www.zhihu.com/question/536012286/answer/2516244624
首先说说我的背景。我从20年diffusion model刚出来就开始(花部分精力)做这个问题,到目前已经有了3篇相关paper (DiffWave, FastDPM, PDR), 之后也会将其作为我的主要方向之一。我算是这一领域比较早期的研究者,不过不太做methodology, 主要做应用,DiffWave 是语音领域 TTS 的应用, PDR是3d 领域点云补全的应用,FastDPM则是关于快速采样的算法。
我首先简短给出我所理解的diffusion model 和 GAN 的比较:GAN 能更灵活处理不同任务,应用层面部署比较容易,需要的资源小,不过学术上竞争激烈,有时生成的样本质量比较一般。Diffusion model 相对不太灵活,缺少良好的 latent space 性质,资源消耗极大,但生成效率略高于auto-regressive model, 主要优点质量好,学术上容易出论文。
接下来我们从几个方面比较这两个模型。
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.
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 具有类似的形式,因此能直接使用这一套方法。
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.
不同模型潜力都很大。其实不同的模型本身就擅长不同领域不同任务,没有必要一定说一个好于另一个。比如说,speech synthesis 天生更适合用auto regressive, data compression 天生适合用 (variational) auto encoder, 图像编辑就很适合用 GAN. 我们或许也能说 大数据集,高分辨率图像生成可能更适合用 Diffusion model. 至于学术潜力,diffusion model 完胜,毕竟GAN的坑都差不多了。
作者:Baof https://www.zhihu.com/question/536012286/answer/2520595220
关于我自己:从21年6月份开始做diffusion model,在很多角度对diffusion model做过探索,包括理论和应用。目前有五篇paper(1 ICLR, 2 ICML, 2 Neurips在投)。其中一篇一作的Analytic-DPM揭示了diffusion model一个很漂亮的性质,然后拿了个ICLR 2022的outstanding paper award(似乎是目前唯一一篇大陆单位独立完成的获奖论文)。
先说一下diffusion model这个领域给我的感觉。目前正在变得非常卷,今年的NeurIPS应该会迎来一轮爆发,在bidding的时候数了一下,保守超过100篇。在许多领域都有非常有趣的文章,甚至有拿diffusion model做组合优化和因数分解的(没看到论文内容,不知道咋做的)。传统的方向就更多数不胜数,图像补全、视频生成、分子构象生成。在实际应用方面,随着diffusion model的加速做的越来越好,估计也能慢慢在更多场景落地(我们组做了很多diffusion model加速的工作,Analytic-DPM和它的扩展版本将生成步数降到25-50,再后面的DPM-Solver将步数降到10左右)。
再说说diffusion model这个模型本身给我的感觉。它的训练真的太简单了,就是一个回归的loss,代码写起来三四行搞定。diffusion model稳定背后的直觉应该就是这种简单的训练。因此也很少有关于diffusion model训练的工作,它的工作基本上集中在提速和应用上。另外它的训练收敛速度也挺快,在cifar10上10w轮fid就能降到5以下(2张RTX 2080大概需要半天到一天)。
然后说说我认为diffusion model的美妙之处。它把困难的数据生成,拆分成了若干个相对简单的任务,每个任务即对应一次去噪。这种拆分有坏处(即推断慢,但我们的工作一定程度上解决了这个问题),也有好处(更加可控的生成)。Diffusion model上的可控生成能将模型和约束解耦开来,有相当多的工作都是基于这种解耦完成的(比如beats GAN用分类器作为约束,我们Neurips的一篇投稿则设计了更为巧妙的约束,使得diffusion model在一些图像翻译任务上达到了SoTA)。
如果想要入坑diffusion model的,可以参考下我做的一个ppt,比较全面的介绍了diffusion model的核心理论和应用。
作者:知乎用户
https://www.zhihu.com/question/536012286/answer/2517508852
一直在做GAN,最近看了一下Diffusion模型。第一个感受就是,相对于GAN,它对数学的要求还挺高。不像GAN,应用时很多改进可以凭“直觉”加,感觉有道理就可以试试,尤其是做类似于图片翻译的任务的时候,GAN更多是一个辅助型的损失函数,可以和其它损失函数纳入同一个框架,一起凭“直觉”调参,比如L1损失让图片更接近,GAN损失让图片更真实...,但是Diffusion模型每一步似乎都是有对应的数学基础的。调整其细节时,必须仔细思考背后的数学基础。如果它火起来,成为生成模型的主流,对我这种数学基础很差的人肯定是巨大打击 。
另外,目前现存的相关论文和博客感觉都是数学很扎实的人写的,上来就推公式,没有细讲为什么要推这步。我假期专门写了一个博客文章,尽力去详细介绍DDPM里面主要的步骤背后的数学推导,主要考虑如何让没什么“数学直觉”的人也能看得懂,知道每一步怎么推出来,以及为什么要推这一步。有兴趣可以看一下:
什么是Diffusion模型?https://wrong.wang/blog/20220605-%25E4%25BB%2580%25E4%25B9%2588%25E6%2598%25AFdiffusion%25E6%25A8%25A1%25E5%259E%258B
至于前面回答提到的训练慢,推理慢这些问题,我觉得如果Diffusion真的在生成质量上能超过GAN,这些问题很快都有人能解决。比如NeRF,最开始大家也都是嫌弃很慢,最近已经被优化的很快了。关键还是在于能不能解决GAN解决不了的问题。至少现在Diffusion模型还是不能和GAN一样,很简单地同其它约束结合在一起。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓