图像生成模型简介
因为DALL·E 2是基于CLIP和GLIDE模型写的,作者在写论文的时候弄得十分简略,所以直接看那篇论文可能并不会获得很多信息。今天先帮大家区分一下几个生成模型的区别。
GAN
图片来源:What are Diffusion Models? | Lil'Log (lilianweng.github.io)
GAN的话是有两部分的,需要训练两个网络:
-
一个 生成器(generator)
给定随机噪声,生成图片。
-
一个鉴别器(discriminator)
获取生成的图片,和真实图片进行对比,让判别器判断二者哪个是真的哪个是假的,其实是做一个二分类问题。
在GAN的原文中是这样来描述模型的: 就是说现在有两组人,一组人是警察,另一组人是造假币的。
造假币那个人要干什么呢?就是要做出假的钱呀,让假的钱和真的钱更为相似。但警察的作用就是不断的去识别出假钱来。这样造假币的人不断精进技术造假币,警察的识别技术也不断增进。但是在论文原中,作者是希望最后造假币的人能够胜利,造出以假乱真 让警察无法识别的假币。
警察就是discriminator,而造假币的就是generator。
现在我们有一个生成一个x'x′。然后把生成的这个x'x′和原来的那个xx一起放入discriminator里,进行一个二分类。来判断哪一个是真的。
因为GAN的设计的目的就是以假乱真,所以它生成出来图片非常真实。因为它生成的图片保真度非常的高,所以为此特意美国颁布了两条法令。
-
第一个是不许拿GAN修改人脸去做涩图。
-
第二个是不能使用政治人物的脸去说一些他没有说过的话,和做一些他没做过的事情。
GAN不光是生成的图片真实,而且经过这么多年对GAN的这个模型改造之后,现在也比较好用。训练GAN需要的数据也不是那么多,还能在各个场景底下使用,所以优点还是很多的。但GAN也有它的致命缺点:
-
GAN还是训练不够稳定,最主要的原因是要同时去训练两个网络,这存在一个平衡性的问题,经常如果训练的不好会导致模型坍塌。
-
因为GAN的主要优化目标就是让这个图片尽可能的真实,但是它生成图片的这个多样性就不太好,它的多样性主要就来自于开始的随机噪声。
-
GAN不是概率模型,它的这个生成过程都是隐式的,是黑盒模型,它就是通过一个网络去完成的。所以你也无法知道网络内部到底做了什么,你也不知道它学出来的东西遵循了什么分布,所以说这样的在数学上就不如VAE和扩散模型这些数学模型优美。
AE
图片来源:自己造的
AE模型就是auto-encoder,给定一个输入xx,通过一个编码器,我们可以获得一个小很多的特征表示,称之为bottle neck(直译为瓶颈);之后我们通过一个解码器生成图像x'x′,这个x'x′的目的是重建xx,也就是说让x'x′和xx越相似越好,这里优化目标用的就是一个重建损失。
VAE
图片来源:What are Diffusion Models? | Lil'Log (lilianweng.github.io)
VAE和AE看起来差不多,但是其实区别很大,但是中间特征不再是bottle neck了,而是变成了一个分布。这样就让模型有了泛化能力,模型就可以拿去做生成了。在这里优化目标就变成了去做一个极大似然估计,从数学角度来看就变得优美了。
AE模型和VAE模型具体可以看这里:进来学VAE,VAE都不懂还想懂扩散模型? | Variational Auto-Encoder
VQ-VAE
图片来源:自己造的
VQ-VAE就是把VAE做量化,将其离散化。如果用VAE没办法把模型做的很大,并且中间那个分布可能比较难学,所以这里就将中间换为一个CodeBook,我们可以把它理解为一个聚类中心,大小为K \times D,一般K=8192,D=512K×D,一般K=8192,D=512。
这时候一个图片通过编码器获得对应的特征图ff,我们把特征图的向量去和CodeBook向量做对比,看看和哪个聚类中心更接近,然后将接近的聚类中心放到矩阵zz中,昨晚聚类分配之后我们就使用zz中组合起来的结果作为新的特征图f'f′,然后用量化之后的特征图去经过解码器重建图片。
因为f'f′都是从CodeBook中出来的,所以可控性更高,所以VQ-VAE更好训练。
但是这样的话好像VQ-VAE又回到了AE模型,怎么才能去做生成呢?作者为此又添加了一个pixel CNN当作prior网络,使其做生成。
Diffusion model
扩散模型是一种概率分布模型。扩散模型生成图片是从一个分布里去采样,因此扩散模型的多样性非常的好。但是它的保证度比不过GAN,因为GAN本身就是为了这个以假乱真去优化,所以说GAN生成的图像就特别的逼真,但是扩散模型就做不到这一点。至少是在评价指标的数值比较上,比如说FID score之类的这些指标上面。所以在生成的图片效果上GAN一直都是压制diffusion model的。
我们已经知道扩散模型它存在的问题就是我虽然生成的图片多样性比较好,但是我生成的图片度保真度不好。你人眼比较的话,对比GAN生图片来说可能会有一眼假的这种感觉。比如你看一下下图,最右边考拉的手还是有问题的。
图片来源:Imagen论文
但是从20年开始就有一系列的工作致力于提高扩散模型的保真度,比如说刚开始的DDPM、improved ddpm,到后来的diffusion model beat GAN,再到现在的GLIDE,DALL·E 2等。这一系列的工作采用了很多很多小tricks,其中有一个比较著名的是一个叫引导(gudiance)的技巧,就是牺牲一部分多样性,从而能达到更好的保真度。
通过上边的一些改进,扩散模型才能在数值比较上跟GAN不相上下,从此扩散模型也火了起来,取得了很多SOTA。
简单了解扩散模型可以看这里: