文章目录
- 一,GAN(对抗式生成网络)
- 二,Auto-Encoder(AE) 和 Denoising Auto-Encoder (DAE)
- 三,VAE
- 四,VQ-VAE (Vector Quantized Variational Autoencoder)
- VQ-VAE 2
- 小总结:
- 五,DALL-E (OpenAI) (2021.02)
一,GAN(对抗式生成网络)
- 生成器: 给定一个随机噪声,生成比较真实的图像
- 判别器:给一个生成的图像和真实的图像,让判别器去判断,哪个是真图片,哪个是假图片
- 判别器和生成器会不断提升自身的能力,互相较量。 DEEP FAKE 火爆 大家可以试一试这个基于GAN的应用。
- 缺点:
- GAN的 训练不够稳定,因为他要同时训练两个网络,所以就有一个平衡的问题。训练不好的话,模型就坍塌 了
- GAN 主要的目标就是“真实”, 所以他的 创造性不好。他的多样性来自于刚开始的随机噪声。他 不是一个概率模型,他的生成是隐式的,是通过一个网络去完成的,所以你不知道他做了什么,遵循什么分布,在数学上不优雅。
二,Auto-Encoder(AE) 和 Denoising Auto-Encoder (DAE)
-
自己重建自己:给定一个图片, 输入到一个Encoder 里面, 然后得到一个维度小很多的 特征,然后过一个 Decoder 解码器,最后得到一个图像。我们的目标函数呢,就是重建这个图像,所以是自己重建自己,自回归模型
-
中间那个特征维度很小,所以也叫bottleneck
-
主要目的是学习bottleneck特征的,把这个特征去做分类,分割,检测这些任务。并不是用来做生成的,他这里学到的不是一个概率分布。我们没法对他进行采样。
-
Denoising Auto-Encoder: 把输入的原始图片进行打乱 ,重建原始的图片。会让训练的模型更加的稳健。
AE 和 DAE 主要的目的是去学bottlenck的特征,用这个特征去做 下游任务,并不是用来做生成的。
Encoder- Decoder这个结构很好,如何用这个结构做图像生成呢? VAE来了。 |
三,VAE
VAE 学习的不是 特征了,而是一个分布, 作者假设这个 分布是一个高斯分布,这个分布就可以用 (均值,方差) 来表示。
具体来说:当我们从编码器得到特征之后,我们在后面加 FC 层,用它去预测 均值 和 方差 , 然后就可以用下面的公式,采样一个 z 出来,这样VAE就可以做生成了,这个 z 就是一个可以从高斯分布中随机抽样出的一个样本。
从贝叶斯概率的角度来看, VAE 学的是一个概率分布,他从分布里去抽样,所以他生成图片的多样性 比GAN好很多
缺点: VAE 不好把图片的尺寸做大,而且 z 的分布也不是很好学
四,VQ-VAE (Vector Quantized Variational Autoencoder)
DALL-E的第一版模型就是 在VQ-VAE的基础上做的.
把VAE量化 离散 了。
- 为什么离散VAE呢? VAE 不好把图片的尺寸做大,而且 z 的分布也不是很好学
- 取而代之的是,不去做分布的推测,而是 用一个codebook去代替了。
- codebook可以理解为聚类的中心,codebook的大小一般为KXD(8192x512), 也就是8192个聚类中心
- codebook可以理解为聚类的中心,codebook的大小一般为KXD(8192x512), 也就是8192个聚类中心
- 输入一个图片进入编码器得到一个特征图,把特征图里面的向量 和 codebook 里面的向量做对比,看他和哪个聚类中心最接近,然后就把聚类中心这个编码 存到 Z 这个矩阵里, 一旦做好了聚类的分配,我们就不需要之前的特征图了,取而代之的是,把Z 中index 对应的codebook的特征拿出来,变成一个新的特征图 ,也就是一个量化后的特征 (quantized feature), 这个量化后的特征就非常可控了,他是从codebook里面来的,而不是一个随机的东西。所以优化起来相对容易。
- 然后通过解码器重构一张图片。
这里的codebook有点像 AE 里面的 bottlenet那块的特征,是拿去做high level 的任务的,也就是做分类,检测。 如果想让他做生成,我们还需要单独 再 训练一个prior 网络。 |
在视觉这边 BEIT 把 DALL-E训练好的 codebook 拿过去,然后把图片全都量化成这样子的特征图,拿这个去做Ground Truth,自监督的训练一个视觉网络。
- 缺点:VQ-VAE 学习的是一个固定的codebook,就意味着他没有办法像 VAE 这样随机采样,生成对应的图片
VQ-VAE 2
- 把模型变成层级式的,不仅做局部的建模,也做了全局的建模,还加上了attention,模型表达能力变强了
- 同时,他还根据codebook 又去学了一个prior,
- 作者这里训练了一个 pixelCNN 当作这个 prior 网络, 从而能够利用这个训练好的codebook来做图像的生成。 pixcelCNN 是一个自回归模型
小总结:
对于VQ-VAE来说,先训练了一个codebook, 然后又训练一个pixcelCNN去做生成。
pixcelCNN 是一个自回归模型,还有什么模型是自回归模型吗? GPT
五,DALL-E (OpenAI) (2021.02)
- OpenAI 把pixcelCNN 换成了GPT。既然 language 那边做的又那么好,为什么不想个办法,用文本来引导图像生成呢?所以就有了DALL-E
- 把文本特征和图像特征直接连接起来,就变成了一个有1280token的序列
- 然后把序列给到GPT,随机把token做一下mask,然后GPT去自回归的还原这个mask token
- 推理的时候,提供text,变成text embedding, 然后GPT 把文本特征 用自回归的方式 把图片生成出来