视频链接:DALL·E 2(内含扩散模型介绍)【论文精读】_哔哩哔哩_bilibili(up主讲的非常好,通俗易懂,值得推荐)
1、GAN模型
GAN部分约在视频的第28分钟位置处开始。
GAN就是左右手互搏。GAN需要训练两个网络,一个是生成器Generator,一个是判别器Discriminator。生成器:给定一个随机噪声z,生成器会生成一些东西。在这里希望生成器能生成一个比较真实的图片x‘,再将生成的图片x’给判别器,同时也给一些真实的图片x给判别器。让判别器判断哪个是真图片,哪个是假图片。判别器其实是一个0/1的二分类问题。
通过Generator和Discriminator这两个网络之间的互相较量,判别器和生成器不断的提高自己,最后生成比较真实的图片。事实上,因为GAN的目标函数就是用来以假乱真的,所以截止到目前, GAN生成的图片保真度也是非常高,人眼难以区分生成的图片是真是假,所以这才有了Deepfakes的火爆。不光是真实,经过这么多年对GAN模型的改造,GAN现在依然比较好用,需要的数据不是那么多,能在各个场景下使用,优点还是蛮多的。
GAN有一个最致命的缺点就是训练不够稳定。最主要的原因在于它要同时训练Generator和Discriminator这两个网络,存在一个平衡的问题。如果训练的不好,模型就训练坍塌了。此外,由于GAN的主要优化目标就是让图片尽可能真实,因此,它生成图片的多样性就不太好。它的多样性主要来自于刚开始的随机噪声,简单来说就是GAN的创造性不太好。最后,GAN不是一个概率模型,它的生成都是隐式的,它就是通过一个网络去完成的,研究人员也不知道它做了什么,也不知道它遵循什么分布,所以说GAN在数学上就不如后续的VAE或者扩散模型优美。
2、VAE模型
2.1、AE(Auto-Encoder)
AE部分约在视频的第30分30秒位置处开始。
AE比较简单,是很早之前的技术了。大概意思是给定一个输入x,经过一个编码器E,就能得到一个特征Z,这个特征的维度一般都会小很多,所以也管它叫bottleneck。再从bottleneck开始,经过一个解码器D,最终得到一个图像x'。
训练的目标函数是希望重构图像x'能尽可能的重建之前的x(x'尽可能接近原始输入数据x)。由于是自己重建自己,因此叫Auto-Encoder,就是自编码器。在自编码器AE出来之后,紧接着就出来了去噪自编码器(Denoising Auto-Encoder,DAE)。
DAE就是先把原图进行一定程度的打乱(输入数据中通常包含噪声),比如说变成xc(corrupted x),再将经过扰乱后的输入传给编码器E,后续操作和AE一样。此时,得到一个 bottleneck的特征,再通过解码器D得到了一个输出x'。同样,希望输出x'能够重建原始的x,而不是重建经过扰动之后的xc。后续证明这个改进非常的有用,尤其是对视觉领域更加有用,会让训练出来的模型非常的稳健,也不容易过拟合。部分原因是因为图像像素冗余性较高,即使对原来的图片做一些污染,模型还能抓住它的本质,然后把它重建出来。这和何凯明的掩码自编码器(Masked Auto-Encoder,MAE)比较相似。在训练的时候能够mask掉75%的图像区域,还能把这个图像很好的重建出来,说明了图像的冗余性确实高,从侧面证明了DAE和MAE的有效性。
不论是AE、DAE还是MAE,他们的主要目的都是为了学习中间的bottleneck特征,并通过这个特征去做一些分类、检测、分割等任务,它并不是用来做生成的,原因是因为bottleneck特征中学到的不是一个概率分布,没法对它进行采样。这个Z并不像GAN里那样是一个随机噪声,它是一个专门用来重建的特征。这种encoder-decoder的形式确实是一个很好的结构,怎么使用这种结构去做图像生成呢?所以就有了变分自编码器(Variational Auto-Encoder,VAE)。
2.2、VAE(Variational Auto-Encoder)
VAE部分约在视频的第33分钟位置处开始。
VAE跟AE有很大的差别,虽然它的整体框架看起来还是一个输入x进了一个编码器E,得到了一些东西,然后出解码器D,最后得到一个输出x'。VAE的目标函数还是让输出x'尽可能的去重建原来的x。
看起来好像一样,但其实有一个非常重要的区别,就是VAE的中间不再是学习一个固定的bottleneck特征,而是去学习一个分布。作者假设这个分布是高斯分布,高斯分布可以用均值和方差来描述。具体而言,当得到从编码器E输出的特征后,在后面加一些FC层,去预测均值和方差,得到对应的均值和方差之后,用公式Z=μ+σε采样一个Z,这样VAE就可以用来做图像生成了。因为在训练好模型以后,完全可以把前面的编码器E扔掉,此时的Z就是一个可以从高斯随机噪声里抽样出来的样本。将Z给解码器D,这样就能生成一张照片了。
因为VAE预测的是一个分布。从贝叶斯概率的角度来看,前面的这一过程就是给定x,得到 z 的过程(q(z|x)),其实就是一个后验概率。学出来的distribution就是一个先验分布。后面的给定z去预测一张图片x的时候(p(x|z)),它其实就是likelihood,就是说这里做的就是Maximum likelihood(最大似然估计),从数学上看就干净很多、优美很多。
VAE也有一些不错的性质,比如:由于VAE学的是一个概率分布,它从这个分布里面去抽样,所以它生成的图像多样性就比GAN要好得多。这也就是为什么研究人员后续做了很多基于VAE的工作,包括VQ-VAE,还有VQ-VAE-2,以及后来的DALL·E第1版模型也是在VQ-VAE的基础上做的。
2.3、VQ-VAE(Vector Quantized Variational Auto-Encoder)
VQ-VAE部分约在视频的第35分钟位置处开始。
向量量化变分自编码器(Vector Quantized Variational Auto-Encoder,VQ-VAE)从整体上看和VAE差不多。VQ的含义是Vector Quantized,就是把VAE做量化。那为什么要这么做?原因如下:现实生活中所有的这些信号,包括声音、图像等可能都是连续的,或者说大部分任务可能都是回归任务,但将它表示出来以及去解决这些问题时,其实都把它离散化了,图像变成像素了,语音也都抽样过了。大部分工作的比较好的模型也都是分类模型,又都从回归任务变成分类任务。同样,如果用之前的VAE方式,就不好把模型做大,图像的尺寸做大,而且那个分布也不好学习。因此,可以不去做那个分布的推测,而是用一个codebook(VQ-VAE能利用codebook机制把图像编码成离散向量)进行代替。这个codebook可以理解聚类的中心等,codebook的大小一般是K乘以D,K一般是8192,D一般可能是512或768(表示有8192个长度为D的向量在这个codebook 里,即有8192个聚类中心)。此时,如果有一个图片经过编码器E得到了一个特征图f(长宽分别是H和W),将这个特征图里的向量与codebook里的向量进行对比,看看它跟哪个聚类中心最接近,再将最接近聚类中心的那个编码存到Z矩阵里。因此,Z里面可能有一些编号,比如说1或者100之类的。
一旦完成聚类的分配,就不用之前的特征f了。取而代之的是,将index对应的特征拿出来(如Z里面编号为1,就将K×D中编号为1的向量拿出来;如果编号为10,就将K×D中编号为10的向量拿出来),生成新的特征图叫做fq(就是quantized feature经过量化后的特征)。这个量化后的特征非常可控,因为它永远都是从这个codebook里来的,而不是一个随机的东西,因此优化起来相对容易。有了特征图fq以后,跟之前的AE或者VAE就差不多了,通过一个解码器,就可以去重构一张图片。目标函数还是让x'尽量跟x保持一致。这样就完成了整个VQ-VAE的训练。
VQ-VAE非常有用,它后来不仅用在了DALL·E中,还用在视觉中做自监督学习。如BEIT这篇论文中将DALL·E训练好的codebook拿过去,将图片全都quantize成特征图fq,再通过特征图fq做ground truth(监督学习中正确的标注是ground truth)自监督训练一个视觉网络。最近BEIT又出了VL-BEIT(就是vision language的BEIT), 也是大概的思路,只不过是用一个transformer编码器去做多模态的任务。
说完VQ-VAE后会发现这里学习的是一个固定的codebook了,意味着VQ-VAE没办法像VAE那样做随机采样,然后去生成对应的图片。准确的说VQ-VAE不像是一个VAE,更像是一个AE。VQ-VAE学的codebook和特征图fq是拿去做high level任务的,也就是做分类、检测等。如果想让VQ-VAE做生成怎么办?还需要单独再训练一个prior网络。在VQ-VAE论文中,作者又训练了一个 Pixel CNN当做prior网络,从而能够利用已经训练好的codebook去做图像的生成。
在VQ-VAE之后又有VQ-VAE-2,这是一个简单的改进。VQ-VAE-2首先把模型变成层级式的,不仅做局部的建模,还做全局的建模,加上attention后,模型的表达能力变强了。同时,它还根据codebook又去学了一个prior,所以生成的效果也非常好。对于VQ-VAE来说,先训练了一个codebook,然后又训练了一个Pixel CNN去做这种生成,Pixel CNN其实是一个auto regressive自回归模型。那还有什么模型是自回归呢?那就是OpenAI的看家本领——GPT系列了。OpenAI将Pixel CNN换成GPT,得到了一个更好的图像生成。既然language那边做得这么好,为什么不想办法用文本去引导图像生成呢?因此就有了DALL·E。
2.4、DALL·E
DALL·E部分约在视频的第39分40秒位置处开始。
DALL·E从模型上来看非常简洁,如果有一个图像文本对,这个文本先通过BPE编码得到一个特征ft,这个特征有256维。还有一个256*256的图像,经过一个VQ-VAE,这个VQ-VAE中有一个训练好的codebook,在DALL·E中直接拿过来用。因此,DALL·E是一个两阶段的图像生成器,将原来的图像变成图像特征fq以后,这个维度就下降了很多,就从256*256变成了32*32,一共有1024个token,最后将文本特征和图像特征直接连接起来,变成了一个有1280个token的序列。再将这个序列扔给GPT,把该遮住的地方遮住,让GPT模型去预测就好了。
至于推理,只需要提供一个文本,将文本变成文本的特征ft,再通过文本的特征直接用自回归的方式把图像生成出来。
DALL·E论文中还有很多细节,如会生成很多很多的图片,到底选哪一张?它会用CLIP模型去做一个排位,挑选出与文本最贴切的生成的图片作为最后的生成图像。DALL·E里有将近一半的篇幅都在写怎么才能把12个billion(也就是120亿)这么大的参数训练起来,以及怎样去收集了一个特别大的数据集能够支撑训练这样一个模型,这沿袭了GPT系列工作的特点,就是大力出奇迹。
3、扩散模型
3.1、扩散模型的网络结构与工作原理
扩散模型部分约在视频的第41分30秒位置处开始。
假设你有一张正常的图片X0,每一步都往这个图片里加一个很小的正态分布的噪声,得到X1,这个X1就是在X0的基础上多点了几个杂的点。再给X1加噪声,一直加到T次,如果这个T特别大,如果无穷无尽的话,那最终X0就会变成一个真正的噪声,就变成一个正态分布了,更专业一点叫做各项同性的正态分布。整个过程就叫做forward diffusion(前向扩散过程)。为什么要叫扩散模型?这个名字是来自于热力学的启发就是thermodynamics,热力学中有一个名词叫diffusion。在热力学中,描述的过程是:如果有一些高密度的和低密度的物质,高密度的物质会慢慢的向低密度做扩散。比如说喷了香水,这个香水就会慢慢扩散到整个房间,最后达到一种平衡。所谓的平衡,就是这里提到各项同性的正态分布,这是趋近于随机噪声的。视觉这边就沿用了这个名字,还是叫它diffusion model。
那这跟图像生成有什么关系?反过来想,如果现在输入的是一个随机噪声,也就是GAN里面的那个Z,如果能找到一种方式,或者训练一个网络,能慢慢的把这个噪声一点一点的再恢复到最初的图片X0,就可以做图像生成了。事实上扩散模型就是这么简单,就是通过反向过程去做图像生成的。如果随机抽样一个噪声(如XT或者是之前的任意一步),就可以训练一个模型,将XT变到XT-1。再用同样的模型将XT-1变成XT-2,一步一步的倒推回来。反向过程中使用的所有模型都是共享参数的,就只有一个模型,只不过要采样生成很多次,这也是现在扩散模型非常大的一个不足。扩散模型训练上跟别的模型比起来,是比较贵的。在推理的时候,扩散模型是最慢的一个。对于GAN,只要训练好了这个模型,接下来给它一个噪声,它就能出来一张图片,非常的快,就做一次模型的forward就可以了。对于扩散模型,尤其是最原始的扩散模型来说,一般T选1000步。即如果你随机选择一个噪声,要往回推1000步的话,就要做1000次的forward,一点一点把这个图像恢复出来,这个开销是远远大于其他生成模型的。
撇开推理速度不谈,先来看一下reverse diffusion过程中一般使用的模型长什么样。可以看到,扩散模型的输入和输出始终是图像,其大小始终不变。因此,diffusion model就采取了一个非常常见的模型结构,就是U-Net。U-Net就是一个CNN,先通过编码器一点一点把这个图像压小,再用解码器一点一点把这个图像恢复回来。XT和XT-1这两个图像尺寸大小是一样的。为了让恢复效果更好,U-Net中还有一些skip connection操作,直接把信息从前面推过来,这样能恢复一些细节。后来对网络结构还有一些改进,如在U-Net中加上attention操作,会让图像生成变得更好。reverse diffusion中的模型不一定要用U-Net,也可以用其他的,只是大部分扩散模型中的网络都用了U-Net。
3.2、扩散模型的发展历程:DDPM
扩散模型部分约在视频的第45分40秒位置处开始。
扩散模型早在2015年甚至有可能更早的时候就已经提出来了,但当时只是一个想法,并不能做到很好的图像生成。这可能与20年前的深度学习一样,想法已经有了,只不过缺了很多必要的因素,导致它不能很好的训练。
直到2020 年6月,出来了一篇论文Denoising Diffusion Probabilistic Models(DDPM),对原始的扩散模型进行了一些改进,把优化过程变得更简单了。DDPM中最重要的两个贡献:一是之前都是用XT去预测XT-1,做这种图像到图像的转化。DDPM觉得这可能不好优化,因此,DDPM不去优化图像的转换,而是去预测从XT-1到XT,这个噪声是怎么加的?只去预测这个噪声行不行?这个思想有点像ResNet了,本来可以直接用x去预测y,但直接预测y太难,应该把这个问题理解成y等于x加上一个residual,只去predict残差residual就可以了。同样,DDPM中不去预测XT-1,而是预测forward diffusion中加了多少噪声,一下子就简化了这个问题。
用刚才讲过的U-Net网络结构。输入是XT这个图片,输出是预测T-1时刻的X。在DDPM这篇论文中,不去预测T-1时刻的X,而是去预测添加的噪声ε。U-Net模型的输入,除了当前时刻的XT,还有一个输入是timing embedding,主要用来告诉U-Net模型现在到了反向扩散的第几步。time embedding的形式和Transformer中用的位置编码一样,也是一个正弦的位置编码,或者是一个傅里叶特征。time embedding怎么加到U-Net模型中?有很多种方式:可以直接加,也可以拼接起来,还可以通过更复杂的手段把它加到网络模型中,它给模型带来的提升相当明显。
为什么要加一个time embedding呢?还有一个原因是U-Net模型全都是共享参数的。怎样让U-Net模型根据不同的输入而生成不同的输出,最后从一个完全的随机噪声变成一个有意义的图片,这是相当难的一件任务。研究人员希望U-Net模型在刚开始的反向过程中,可以生成一些物体的大概轮廓、一些很粗糙的图像,不需要很清晰,也不需要很写实,只要有那个意思就行。随着扩散模型反向过程的推进,到最后快生成逼真图像的时候,希望它学到一些高频的信息特征,如物体的边边角角、一些细小的特征等,这样会让生成的图片更加逼真。由于所有的U-Net模型都是共享参数的,因此就需要time embedding提醒U-Net模型现在走到哪一步了,现在的输出是需要粗糙一点儿的还是细致一点儿的。加time embedding对整个图像的生成和采样过程都很有帮助。
对目标函数而言,如果给定了XT,要去预测XT-1。要计算的loss就是已知的噪声ε和预测出来的噪声(fε(xt,t))的差值。对于ground truth的噪声ε来说,是已知的。因为在正向扩散过程中,每一步添加的噪声都是自己加的,是一个固定的过程。f函数对应的是U-Net网络结构,XT是输入,t 是输入的time embedding。通过计算这个目标函数,DDPM网络就可以训练起来了。
DDPM中第二个贡献是:如果要去预测一个正态分布,其实只要学习它的均值和方差即可。DDPM论文的作者发现,只要去预测均值就可以,方差不需要学习,方差设置为常数即可,这个效果就已经很好了,这再次降低了模型优化的难度。因此,DDPM工作得很好,是第一次用扩散模型生成很好图片的工作,算是扩散模型的开山之作。
总结:DDPM跟VAE模型有很多相似之处(如:可以把它想象成是一个编码器解码器结构)。不同之处在于:在扩散模型中,编码器一步一步走过来,走到中间的Z(扩散模型中的XT),这是一个固定的过程,而VAE中的编码器是学习的过程。第二个不同是对于扩散模型来说,中间过程的每一步跟刚开始的输入X0都是同样维度的大小,但对于一般的AE、VAE这种编码器解码器结构来说,中间的bottleneck特征往往比输入小很多。第三个区别是对于扩散模型来说,它有步数的概念。扩散模型从随机噪声开始,要经过很多步才能生成一个图片,因此它有time step,time embedding这些概念。此外,在所有time step里面,这个U-Net模型结构都是共享参数的,而在 VAE里就不存在这一点。
扩散模型发挥作用以后,大家的兴趣就上来了,因为它在数学上特别的简洁美观。此外,不论是正向过程还是逆向过程,它都是高斯分布,因此也能做很多推理证明,有很多不错的性质。OpenAI的人,也就是DALL·E 2论文的二作和三作,马上就来着手研究这个问题了。他们做了一些改进,就提出了Improved DDPM(IDDPM),大概就是在2020年底放到arXiv上的。改动部分如下:DDPM论文中认为正态分布的方差不用学,就用一个常数即可,但是IDDPM中认为方差进行学习效果会更好,实验证明在后续的取样还有生成上,效果都不错。第二个改动就是IDDPM中把添加噪声的schedule改了,从一个线性的schedule变成了一个余弦的schedule,发现工作的也不错。在理解上,可以和学习率的schedule做一个对比,也是从线性到余弦。此外,他们还尝试了用大模型后,扩散模型的表现。结果发现扩散模型scale的非常好,也就是说,如果有更大的模型,就会得到更好的图像生成结果,这对OpenAI来说无疑是个好消息。因此,DALL·E 2论文的二作和三作就去做这件事,几个月之后就出来了一篇论文,就是Diffusion Models Beat GANs on Image Synthesis(DM-beat-GANs,扩散模型比GAN强)。
在DM-beat-GANs这篇论文中,首先把模型加大加宽,然后增加自注意力头(attention head)的数量。再使用Multi-Head Attention,总之就是把模型变得又大又复杂。论文中还提出了一种新的归一化方式,叫Adaptive group normalization,就是根据步数T,做自适应的归一化,效果也不错。在这篇论文中,作者还使用Classifier Guidance的方法去引导模型做采样和生成,这不仅让生成的图片更加逼真,而且也加速了反向采样的速度。论文中指出,25次采样后就能从一个噪声XT生成一个非常好的图片X0。
这里的Classifier Guidance是什么?后续GLIDE模型和DALL·E 2中用到的Classifier-Free Guidance又是什么呢?在DM-beat-GANs这篇论文出现之前,扩散模型生成的图像看起来已经非常不错了,也很逼真,但在计算IS(Inception Score)和FID(Fréchet Inception Distance)这些分数的时候,比不过GAN。单纯让大家看生成图像的话,大家可能觉得生成的这些图像是不是挑选出来的,结果不够有信服力,还是把IS和FID的值提上来比较关键。同时扩散模型的采样和生成图片的过程又很慢,因此,是否可以使用一些额外的帮助,或者说找一些额外的指导(guidance),来帮助模型进行采样和学习。
因此,借鉴之前很常用的一个技巧,叫classifier guidance diffusion。最开始是XT(也就是更偏向于噪声的那个时刻),X0是最开始的图片,这是一个反向扩散过程。在这个反向过程中,给定XT时刻的输入,通过一个U-Net网络结构得到XT-1,不停地通过U-Net取样生成,最后得到X0。classifier guidance diffusion的意思是什么呢?在训练模型的同时,再去训练一个简单的图像分类器。这个分类器在很多论文里是在ImagNet上训练的,只不过对ImagNet图片加了很多噪声。因为对扩散模型而言,其输入始终都是加了噪声的图片,跟真实的ImagNet图片并不一样,因此必须从头再去训练一个图片分类器。
那这个分类器的作用是什么?当有一个图片XT后,将其直接输入给分类器,可以得到分类结果并计算交叉熵目标函数,对应的就会得到一些梯度,可以通过梯度帮助模型进行接下来的采样和图像生成。这个梯度里面大概暗含了当前图片中有没有物体,或者说生成的物体真不真实?通过梯度的引导,就可以告诉U-Net现在生成的图片要看起来更像某一类物体,这个物体的形状、颜色、纹理各种细节都尽量的跟真实的物体去匹配。因此,经过classifier guidance diffusion操作后,生成的图片就逼真了很多,同时IS和FID的值也提升了。在DM-beat-GANs这篇论文中,扩散模型第一次在这些分数上超越了之前比较好的GAN模型。文章中提到通过这种方式相当于牺牲了一部分的多样性,换取了生成图片的写实性,但这个取舍还是比较好的,因为扩散模型的多样性还是比GAN好。现在,生成图片的逼真程度也比GAN要好,一下子奠定了扩散模型在图像生成中的地位。
扩散模型火了之后,大家看到guided diffusion非常有效,那除了这种最简单比较原始的 classifier guidance diffusion外,还可以用什么当做指导信号呢?首当其冲大家想到的是能不能把这个简单的图像分类器换成一个CLIP模型,换成CLIP模型之后,文本和图像就可以联系起来了。这样不仅可以利用梯度去引导模型的采样和生成,甚至可以用文本去控制图像的采样和生成。因此,在这方面也有一些工作,而且确实比较有效。
在图像和文本上,分别有很多引导的工作。在图像这边,不光可以利用图像的重建去做像素级别的引导,还可以去做征层面的引导,还可以去做图像风格方面的引导,用一个格拉姆矩阵(Gram matrix)就可以了。在文本这边,可以用那些已经训练得很大很好的语言模型做引导,效果也非常好。所有的引导在目标函数里,都是后面的y。即模型的输入不光是XT和t了,同时还有一个condition。至于这个条件是什么,主要根据应用来选。加了这个条件后,图像的采样和生成就能变得又快,效果又好。
所有这一系列的方法都有一个缺陷,都用了另外一个模型去做引导。要么拿一个直接Pre-train 好的模型,要么还得去训练一个模型,不仅成本高,而且训练过程也不可控。因此,引出了后续的一篇工作Classifier-free Guidance(一个非常有效的技巧)。这项工作中,不需要classifile,通过找到一种指导信号让这个模型的生成变得更好?具体而言,在训练模型时,生成了两个输出,一个是在有条件y的时候生成了一个输出,一个是在没有条件的时候生成了一个输出。
例如:训练时用图像文本对,想用文本做guidance信号,此时y就是一个文本。训练时利用文本y生成了一个图像Xy,再随机把这个条件去掉(不用文本y),用一个空集生成另外一个输出X。假设现在有一个空间,空间里面有刚刚生成的两个图片,分别是有条件生成的Xy和无条件生成的X,存在一个方向能从无条件得到的输出X成为有条件得到的输出Xy。通过训练就会知道,Xy和X之间差距是多少。到最后反向扩散去做图像生成时,当有一个没有用条件生成的图像输出时,也能做出一个比较合理的推测,能从一个没有条件生成的X变成一个有条件生成的Xy,这样就摆脱了分类器的限制,这就叫Classifier-free Guidance。
这个方法在模型训练时是非常贵的,因为训练扩散模型本来就已经很贵了,使用Classifier-free Guidance的方法在训练时,还要生成两个输出,一个有条件的,一个没有条件的,又增加了很多的训练成本。但是,Classifier-free Guidance一经提出,研究人员还是觉得它是一个很好用的方法,因此,不仅在GLIDE这篇论文中用到了,之后的DALL·E 2中也用到了,还有Imagen中也用到了。这几篇论文中都提到这是一个非常重要的技巧,感兴趣的同学可以去看一下细节。
在融合上述这么多技巧后,GLIDE模型终于是一个用扩散模型能够很好的做根据文本生成图像的任务了。它只用了3.5billion的参数,生成的效果就直逼之前的DALL·E模型,而DALL·E模型有 12billion的参数。GLIDE模型不论是从分数上,还是从感官上,得到的图片效果都比DALL·E好。OpenAI感觉这个方向很靠谱,就不顺着DALL·E的那套系统(用VQ-VAE)去做了,接下来就用扩散模型来做了。因此,它在GLIDE的基础上又加了很多东西,比如在前面加了一个prior、使用了层级式的生成(从64到256,再从256到1024),使用了很多最新的技巧,最终就成为了DALL·E 2。
参考链接:DALL·E 2(内含扩散模型介绍)【论文精读】Hierarchical Text-ConditionalImage Generation with CLIP Latents_dalle2-CSDN博客