AIGC实战——多模态模型DALL.E 2
- 0. 前言
- 1. 模型架构
- 2. 文本编码器
- 3. CLIP
- 4. 先验模型
- 4.1 自回归先验模型
- 4.2 扩散先验模型
- 5. 解码器
- 5.1 GLIDE
- 5.2 上采样器
- 6. DALL.E 2 应用
- 6.1 图像变体
- 6.2 先验模型的重要性
- 6.3 DALL.E 2 限制
- 小结
- 系列链接
0. 前言
DALL.E 2
是 OpenAI
设计用于文本生成图像的生成模型。该模型的第一个版本 DALL.E
于 2021
年发布,引起了对生成多模态模型的广泛关注。在本节中,我们将介绍该模型的第二个版本 DALL.E 2
,该模型于 2022
年发布,DALL.E 2
进一步促使我们了解人工智能 (Artificial Intelligence
, AI
) 解决多模态问题的能力。它不仅在学术上具有重要意义,同时迫使我们思考 AI
创造性过程中的角色问题,这种制造性问题一直以来被认为是人类独有的能力。
1. 模型架构
为了了解 DALL.E 2
的工作原理,我们首先必须了解其整体架构,如下图所示。
我们需要了解以下三个关键组件:文本编码器 (Text encoder
)、先验模型 (Prior
) 和解码器 (Decoder
)。首先,文本通过文本编码器生成文本嵌入向量。然后,这个向量经过先验模型转换成图像嵌入向量。最后,图像嵌入向量连同原始文本一起传递给解码器生成图像。我们将逐个介绍每个组件,以完整地了解 DALL.E 2
的工作原理。
2. 文本编码器
文本编码器 (Text encoder
) 的目标是将文本提示 (prompt
) 转换为表示文本提示概念意义的嵌入向量,在潜空间中表达。将离散的文本转换为连续的嵌入向量对于所有下游任务来说都是至关重要的,因为我们可以根据特定下游任务进一步操纵该向量。
在 DALL.E 2
中,并未从头开始训练文本编码器,而是使用了一个名为 CLIP
(Contrastive Language-Image Pre-training
) 的模型。因此,要理解文本编码器,我们需要首先了解 CLIP
的工作原理。
3. CLIP
CLIP
是 OpenAI
于 2021
年提出的,是一个能够有效地从自然语言中学习视觉概念的神经网络。它使用对比学习技术,将图像与文本描述进行匹配。该模型利用从互联网上获取的 4
亿个文本-图像对数据集进行训练。给定一张图片和一系列可能的文本描述, CLIP
的任务是找到与图片相匹配的描述。
对比学习背后的核心思想很简单,训练两个神经网络:一个将文本转换为文本嵌入向量的文本编码器,以及一个将图像转换为图像嵌入向量的图像编码器。然后,给定一批文本-图像对,使用余弦相似度比较所有文本和图像嵌入向量的组合,并训练网络最大化匹配的文本-图像对的得分,同时最小化错误的文本-图像对的得分,过程如下所示。
CLIP
本身不是生成模型,它无法生成图像或文本。它更像是一个判别模型,因为最终输出的是关于给定集合中哪个文本描述与给定图像最匹配(或者反过来,哪个图像最能匹配给定的文本描述)的预测。
文本编码器和图像编码器都是 Transformer
模型,其中图像编码器是 Vision Transformer
(ViT
) 模型,将注意力机制应用于图像中。
CLIP
有趣的地方在于它可以用于从未接触过的任务上进行零样本预测。例如,假设我们想要使用 CLIP
来预测 ImageNet
数据集中给定图像的标签。我们可以通过使用一个模板(例如“一张<标签>的照片
”)将 ImageNet
标签转换为句子,如下图所示。
要预测给定图像的标签,我们可以将其通过 CLIP
图像编码器,并计算图像嵌入向量与所有可能的文本嵌入向量之间的余弦相似度,以找到得分最高的标签,如下图所示。
无需重新训练 CLIP
神经网络,就可以将它轻松应用新任务。它使用语言作为共同域,通过该域可以表达任何标签集合。
使用这种方法,CLIP
在各种图像数据集标注挑战中都具有良好的性能表现,如下图所示。而其他在特定数据集上训练以预测给定标签集的模型,往往在应用于具有相同标签的不同数据集时性能交叉,因为它们倾向于高度优化在其训练集上训练的个别(异常)数据集。相比之下,CLIP
更加稳定,因为它学到了对完整文本描述和图像的深入概念理解,而不仅仅擅长类似“将单个标签分配给给定数据集中的图像”这类狭义的任务。
CLIP
是根据其判别能力进行评估的,那么它如何帮助我们构建诸如 DALL.E 2
这样的生成模型呢?我们可以将经过训练的文本编码器作为 DALL.E 2
等较大模型的一部分使用,其权重被冻结。经过训练的编码器只是一个用于将文本转换为文本嵌入向量的通用模型,对于生成图像等下游任务非常有用。经过训练的文本编码器能够捕捉到丰富的文本概念理解,尽可能地与其匹配的图像嵌入向量具有相似性,而后者根据相匹配的图像生成。因此,它是我们从文本域过渡到图像域所需的第一部分。
4. 先验模型
先验模型将文本嵌入向量转换为 CLIP
图像嵌入向量,DALL.E 2
尝试了两种不同的方法来训练先验模型:
- 自回归模型
- 扩散模型
并证明了扩散模型优于自回归模型,且计算效率更高。在本节中,我们将同时介绍这两种方法并了解它们的区别。
4.1 自回归先验模型
自回归模型按顺序生成输出,通过对输出符号(例如单词、像素)进行排序,并根据先前的符号生成下一个符号,在递归神经网络、Transformer 和 PixelCNN 中我们已经学习了如何应用自回归模型。
DALL.E 2
的自回归先验 (Autoregressive prior
) 模型是一个编码器-解码器 Transformer
。它的训练目标是在给定 CLIP
文本嵌入向量的情况下重新生成 CLIP
图像嵌入,如下图所示。
该模型是在 CLIP
文本-图像对数据集上进行训练的。可以将其视为从文本域跳转到图像域所需的第二个部分,即将一个向量从文本嵌入潜空间转换为图像嵌入潜空间。
输入文本嵌入通过 Transformer
的编码器进行处理,以产生另一个表示,该表示与当前生成的输出图像嵌入一起馈送到解码器中。输出是逐元素生成的,强制将预测的下一个元素与实际的 CLIP
图像嵌入进行比较。
生成的顺序性意味着自回归模型的计算效率低于扩散先验模型。
4.2 扩散先验模型
[扩散模型]逐渐为生成建模的首选,在 DALL.E 2
中,使用了一个仅有解码器的 Transformer
作为先验模型,并使用扩散过程进行训练,训练和生成过程如下图所示。
在训练过程中,每个CLIP文本和图像嵌入对首先被连接成一个单一的向量。然后,图像嵌入在1000个时间步长内加入噪声,直到与随机噪声无法区分。然后,训练扩散先验 (Diffusion prior
) 模型以预测上一个时间步的去噪图像嵌入。先验模型始终可以访问文本嵌入,因此可以根据这些信息对其预测进行调整,逐渐将随机噪声转变为预测的CLIP图像嵌入。损失函数是去噪步骤的平均均方误差。
为了生成新的图像嵌入,对随机向量进行采样,预处理相关的文本嵌入,并多次将其通过训练的扩散先验模型。
5. 解码器
DALL.E 2
的最后部分是解码器,根据文本提示和先验模型输出的预测图像嵌入生成最终图像。
解码器的架构和训练过程借鉴了生成模型 GLIDE
(Guided Language to Image Diffusion for Generation and Editing
)。GLIDE
能够根据文本提示生成逼真的图像,与 DALL.E 2
的工作方式非常相似。不同之处在于,GLIDE
并不使用 CLIP
嵌入,而是直接使用原始文本提示进行训练,如下图所示。
5.1 GLIDE
GLIDE
是一种扩散模型,其使用 U-Net
架构作为去噪器,使用 Transformer
架构作为文本编码器。它通过文本提示来消除添加到图像上的噪音。最后,训练一个上采样器,将生成的图像尺寸缩放为 1,024×1,024
像素。
GLIDE
模型中把包括 35
亿个可训练参数,其中包括 23
亿个用于视觉部分模型( U-Net
和上采样器)的参数和 12
亿个用于 Transformer
模型的参数,并在 2.5
亿个文本-图像对上进行训练。
扩散过程如下图所示。首先使用 Transformer
创建输入文本提示的嵌入,然后使用该嵌入指导 U-Net
进行去噪过程。当图像的输入、输出尺寸相同时(例如风格迁移、去噪等),U-Net
模型是完美的选择。
DALL.E 2
解码器同样使用 U-Net
去噪器和 Transformer
文本编码器架构,但还额外使用预测的 CLIP
图像嵌入进行条件控制。这是 GLIDE
和 DALL.E 2
之间的关键差异,如下图所示。
与所有扩散模型一样,为了生成新的图像,我们只需对一些随机噪声进行采样,以 Transformer
文本编码和图像嵌入为条件,多次通过 U-Net
去噪器进行处理,输出尺寸为 64 × 64
像素的图像。
5.2 上采样器
解码器的最后一部分是上采样器(两个独立的扩散模型)。第一个扩散模型将图像从 64 × 64
像素转换为 256 × 256
像素。第二个扩散模型再次将其转换为 1,024 × 1,024
像素,如下图所示。
使用上采样,可以令我们不必构建大型上游模型来处理高维图像。我们可以在整个过程中使用小尺寸图像,直到最后阶段再应用上采样器。这样可以节省模型参数,并确保上游训练过程更加高效。
总之,DALL.E 2
利用预训练的 CLIP
模型生成输入提示的文本嵌入。然后,使用先验扩散模型将其转换为图像嵌入。最后,使用类似 GLIDE
的扩散模型,以生成输出图像,其条件是预测的图像嵌入和 Transformer
编码的输入提示。
6. DALL.E 2 应用
DALL.E2
能够以可信的方式将复杂、不同的概念结合起来,展示了人工智能和生成建模的重大飞跃。DALL.E 2
模型具有多种应用,其中之一是创建给定图像的变体。
6.1 图像变体
使用 DALL.E 2
解码器生成图像时,我们首先对由纯随机噪声组成的图像进行采样,然后在提供的图像嵌入的条件下,使用去噪扩散模型逐渐减少噪声量。选择不同的初始随机噪声样本将产生不同的图像。
为了生成给定图像的变体,我们只需要确定其图像嵌入,并将其馈送到解码器。我们可以使用原始的 CLIP
图像编码器来获得这个图像嵌入,该编码器明确设计为将图像转换为其 CLIP
图像嵌入。
6.2 先验模型的重要性
先验模型的目的是利用预训练的 CLIP
模型向解码器提供有用的图像表示。但是,如果将文本嵌入(而非图像嵌入)直接传递给解码器,或者忽略 CLIP
嵌入,仅基于文本提示进行条件控制,这样是否会影响生成的质量?为了进行测试,可以尝试使用三种不同的方法:
- 只使用文本提示作为解码器的输入(图像嵌入使用零向量)
- 将文本提示和文本嵌入(将其视为图像嵌入)一起用作解码器的输入
- 将文本提示和图像嵌入一起用作解码器的输入,即完整
DALL.E 2
模型
示例结果如下图所示。我们可以看到,当解码器缺乏图像嵌入信息时,它只能生成与文本提示大致近似的图像,无法捕获与刺猬和计算器之间的关系等关键信息。将文本嵌入视为图像嵌入进行处理的表现略好,但仍无法捕捉刺猬和计算器之间的关系。只有带有先验模型的完整模型才能生成准确反映提示中包含的所有信息的图像。
6.3 DALL.E 2 限制
DALL.E 2
仍存在一些限制,包括属性绑定和文本生成,如下图所示。
属性绑定是模型理解给定文本提示中单词之间关系的能力,尤其是属性与对象之间的关系。例如,根据“一个红色的立方体放在一个蓝色的立方体上方”生成的图像必须与“一个蓝色的立方体放在一个红色的立方体上方”有明显的区别。相比于 GLIDE
等早期模型,尽管生成的整体质量更好且更多样化,但 DALL.E 2
在这方面仍有所欠缺。
此外,DALL.E 2
无法准确地重现文本内容,这可能是因为 CLIP
嵌入并不捕捉拼写特征,而只包含文本的较高级表示。这些表示可以部分地成功解码为文本(例如,个别字母基本正确),但缺乏足够的组合理解以形成完整的单词。
小结
DALL.E 2
是 OpenAI
提出的一个大规模文本生成图像模型,可以根据文本提示生成各种风格的逼真图像。它通过将预训练模型 CLIP
与 GLIDE
中的扩散模型架构相结合完成任务。它还具有其他应用,例如通过文本提示编辑图像和提供给定图像的变体。虽然它也有一些局限性,例如不一致的文本渲染和属性绑定,但 DALL.E 2
是仍然一个非常强大的AI模型,推动了生成模型的发展。
系列链接
AIGC实战——生成模型简介
AIGC实战——深度学习 (Deep Learning, DL)
AIGC实战——卷积神经网络(Convolutional Neural Network, CNN)
AIGC实战——自编码器(Autoencoder)
AIGC实战——变分自编码器(Variational Autoencoder, VAE)
AIGC实战——使用变分自编码器生成面部图像
AIGC实战——生成对抗网络(Generative Adversarial Network, GAN)
AIGC实战——WGAN(Wasserstein GAN)
AIGC实战——条件生成对抗网络(Conditional Generative Adversarial Net, CGAN)
AIGC实战——自回归模型(Autoregressive Model)
AIGC实战——改进循环神经网络
AIGC实战——像素卷积神经网络(PixelCNN)
AIGC实战——归一化流模型(Normalizing Flow Model)
AIGC实战——能量模型(Energy-Based Model)
AIGC实战——扩散模型(Diffusion Model)
AIGC实战——GPT(Generative Pre-trained Transformer)
AIGC实战——Transformer模型
AIGC实战——ProGAN(Progressive Growing Generative Adversarial Network)
AIGC实战——StyleGAN(Style-Based Generative Adversarial Network)
AIGC实战——VQ-GAN(Vector Quantized Generative Adversarial Network)
AIGC实战——基于Transformer实现音乐生成
AIGC实战——MuseGAN详解与实现