扩散模型在图像生成领域大火,风头超过GAN?

90e98d2398f4b5a09a4a8c907917c21f.png

文 | Zhifeng
源 | 知乎

首先说说我的背景。我从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, 主要优点质量好,学术上容易出论文。

接下来我们从几个方面比较这两个模型。

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的坑都差不多了。

1c156d4d0a56d697b313917b79c9ef15.png后台回复关键词【入群

加入卖萌屋NLP、CV、搜推广与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

2b68139e81c75d2f0e6c36b37419c1aa.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑指Offer - 面试题50. 第一个只出现一次的字符(unordered_map)

1. 题目 在字符串 s 中找出第一个只出现一次的字符。如果没有&#xff0c;返回一个单空格。 示例: s "abaccdeff" 返回 "b"s "" 返回 " "限制&#xff1a; 0 < s 的长度 < 50000来源&#xff1a;力扣&#xff08;LeetCode&…

618大促将至,用AI挖掘差评,零代码实现亿级评论观点情感分析

文 | 卖萌酱马上就要到一年一度的618大促&#xff0c;卖萌酱在添加购物车时&#xff0c;选择困难症又犯了。如今的电商评论区&#xff0c;大量刷单行为淹没了重要的产品评价&#xff0c;有的被淹没在了追评区&#xff0c;有的甚至已经不分好评/中评/差评区了&#xff0c;而是“…

Spring Boot 2.0 新特性和发展方向

以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上&#xff0c; Java 6 和 7 不再支持。 内嵌容器包结构调整 为了支持reactive使用场景&#xff0c;内嵌的容器包结构被重构了的幅度有点大。EmbeddedServletContainer被重命名为WebServer&#xff0c;并且org.springf…

剑指Offer - 面试题40. 最小的k个数(排序/大顶堆)

1. 题目 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。 示例 1&#xff1a; 输入&#xff1a;arr [3,2,1], k 2 输出&#xff1a;[1,2] 或者 [2,1]示例 2&#xff…

Nature:大批学者正在涌向工业界,与国内趋势相反?

文 | 杨净 明敏 发自 凹非寺源 | 量子位Nature最新发文&#xff1a;学术界正刮起一阵离职潮。这当中&#xff0c;处于职业中期的科学家尤甚。而他们的集体归宿&#xff0c;是转向工业界。事实上&#xff0c;这种趋势由来已久。早在2018年一项研究预测显示&#xff0c;高等教育将…

剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)

1. 题目 给定一棵二叉搜索树&#xff0c;请找出其中第k大的节点。 示例 1: 输入: root [3,1,4,null,2], k 13/ \1 4\2 输出: 4示例 2: 输入: root [5,3,6,2,4,null,null,1], k 35/ \3 6/ \2 4/1 输出: 4限制&#xff1a; 1 ≤ k ≤ 二叉搜索树元素个数来源&#xf…

Spring Boot中使用LDAP来统一管理用户信息

很多时候&#xff0c;我们在构建系统的时候都会自己创建用户管理体系&#xff0c;这对于开发人员来说并不是什么难事&#xff0c;但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下&#xff0c;如果每个系统维护自己的用户信息&#xff0c;那么此时用户信息的同步…

剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)

文章目录1. 题目2. 解题2.1 充分利用题目信息2.2 位运算2.3 二分查找1. 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的&#xff0c;并且每个数字都在范围0&#xff5e;n-1之内。在范围0&#xff5e;n-1内的n个数字中有且只有一个数字不在该数组中&#xff0c;请找出…

大厂如何决定裁掉谁?

文 | 祝乐源 | 曲速纪元说明&#xff1a;本文并非以具体某一家大厂为具体描述对象&#xff0c;每家公司有其特殊的流程&#xff0c;因此所描述的流程不一定适合所有公司。只是提供一个大厂裁员的逻辑框架&#xff0c;具体操作上可能存在流程和操作上的节点增加以及前后顺序变化…

Spring Boot中使用Flyway来管理数据库版本

久违了的Spring Boot系列&#xff0c;今天抽空更新一篇。去年写过很多篇关于数据访问的文章了&#xff0c;比如下面这些&#xff1a; 使用JdbcTemplate使用Spring-data-jpa简化数据访问层&#xff08;推荐&#xff09;多数据源配置&#xff08;一&#xff09;&#xff1a;JdbcT…

剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)

1. 题目 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输出: 2示例 2: 输入: nums [5,7,7,8,8,10], target 6 输出: 0限制&#xff1a; 0 < 数组长度 < 50000类似题目&#xff1a;LeetCode 34. 在排序数组中查找元素的第一个…

码农创造了AI,但开发AI不再需要码农了??

马上就要到一年一度的618大促&#xff0c;卖萌酱在添加购物车时&#xff0c;选择困难症又犯了。如今的电商评论区&#xff0c;大量刷单行为淹没了重要的产品评价&#xff0c;有的被淹没在了追评区&#xff0c;有的平台甚至已经不分好评/中评/差评区了&#xff0c;而是“一眼望去…

LeetCode 1351. 统计有序矩阵中的负数

1. 题目 给你一个 m * n 的矩阵 grid&#xff0c;矩阵中的元素无论是按行还是按列&#xff0c;都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。 示例 1&#xff1a; 输入&#xff1a;grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 输出&#xff1a;…

码农创造了AI,但开发AI不再需要码农了

马上就要到一年一度的618大促&#xff0c;卖萌酱在添加购物车时&#xff0c;选择困难症又犯了。 如今的电商评论区&#xff0c;大量刷单行为淹没了重要的产品评价&#xff0c;有的被淹没在了追评区&#xff0c;有的平台甚至已经不分好评/中评/差评区了&#xff0c;而是“一眼望…

JPA的多表复杂查询

最近工作中由于要求只能用hibernatejpa 与数据库进行交互&#xff0c;在简单查询中&#xff0c;jpa继承CrudRepository<T, ID>接口 &#xff0c;然后利用jpa的方法命名规范进行jpql查询&#xff0c;然而在进行复杂查询时&#xff0c;需要继承JpaSpecificationExecutor接口…

LeetCode 1352. 最后 K 个数的乘积

1. 题目 请你实现一个「数字乘积类」ProductOfNumbers&#xff0c;要求支持下述两种方法&#xff1a; add(int num) – 将数字 num 添加到当前数字列表的最后面。getProduct(int k) – 返回当前数字列表中&#xff0c;最后 k 个数字的乘积。 – 你可以假设当前列表中始终 至少…

颠覆认知!数据增强、正则化可导致不易察觉的灾难?

文 | 子龙编 | 智商掉了一地作为常用的炼丹技巧&#xff0c;正则化 (Regularization) 和数据增强 (Data Augmentation, DA) 常常被简单粗暴地引入模型中来防止数据过拟合&#xff0c;进而提升最后的 performance。如果说&#xff0c;更高的performance就意味着更好的泛化能力&a…

spring-boot-starter-swagger 1.3.0.RELEASE:新增对JSR-303的支持和host的配置

简介 该项目主要利用Spring Boot的自动化配置特性来实现快速的将swagger2引入spring boot应用来生成API文档&#xff0c;简化原生使用swagger2的整合代码。 源码地址 GitHub&#xff1a;https://github.com/dyc87112/spring-boot-starter-swagger码云&#xff1a;https://git…

LeetCode 1353. 最多可以参加的会议数目(排序+贪心,优先队列,难)

文章目录1. 题目2. 解题2.1 错误解2.2 超时解2.3 通过解2.4 大佬解1. 题目 给你一个数组 events&#xff0c;其中 events[i] [startDayi, endDayi] &#xff0c;表示会议 i 开始于 startDayi &#xff0c;结束于 endDayi 。 你可以在满足 startDayi < d < endDayi 中的…

深圳率先立法:支持L3自动驾驶上路,凡公开道路皆可行

文 | 万博 发自 副驾寺源 | 智能车参考全国第一个开放L3级自动驾驶的城市&#xff0c;就要来了。不是自动驾驶第一城的广州&#xff0c;也不是拥有全球首个高级别自动驾驶示范区的北京&#xff0c;最先吃螃蟹的&#xff0c;是深圳。根据深圳人大常委会发布的2022年立法计划&…