为了表述简单,我们将'图文多模态'表述为'多模态'。本文假设读者已经对视觉表征和多模态融合有一定入门背景,希望通过一篇文章回顾将过去几年的经典工作。
一、总览
由于是讲'图文多模态',还是要从'图'和'文'的表征方法讲起,然后讲清楚图文表征的融合方法。对于文本模态的表征发展,我们在相关文献中有过一轮的梳理,因此本文主要关注两件事情:
视觉表征:分为两个部分问题,一是如何合理建模视觉输入特征,二是如何通过预训练手段进行充分学习表征,这两点是基于视觉完成具体算法任务的基础;
视觉与自然语言的对齐(Visual Language Alignment)或融合:目的是将视觉和自然语言建模到同一表征空间并进行融合,实现自然语言和视觉语义的互通,这点同样离不开预训练这一过程。模态对齐是处理多模态问题的基础,也是现在流行的多模态大模型技术前提。
对于视觉表征,从发展上可以分为卷积神经网络(CNN)和 Vision Transformer(ViT)两大脉络,二者分别都有各自的表征、预训练以及多模态对齐的发展过程。而对于 ViT 线,另有多模态大模型如火如荼的发展,可谓日新月异。
因此,本文的行文思路也就非常简单。第一部分介绍以 CNN 为基础的视觉表征和预训练手段,以及在此基础上的多模态对齐的方法。由于预训练已经成为 AI 技术取得效果的标配,多模态对齐部分的内容也是以多模态预训练技术承载;第二部分从 ViT 技术出发,分别介绍 ViT 视觉表征的预训练探索工作、多模态对齐的预训练工作以及近两年火热的研究方向多模态大模型。

图 1
由于多年间的优秀工作太多,不胜枚举,本文仅挑选笔者从业过程中印象较深,且有标志性特点的工作为代表。优秀的工作不止于本文,不过还是期望通过有限的工作,将近几年的图文多模态相关技术串连起来,方便读者按图索骥进行更深入的学习。下面开始正式的内容。
二、CNN:视觉理解的一代先驱
2.1 卷积视觉表征模型和预训练
对视觉信息的表征,简单来说是将图像信息转化成深度学习输入所需的特征向量或向量序列,如图 2。深度学习时代,卷积神经网络(CNN)凭借其局部区域连接、权重共享以及位移不变性等特点,天然的符合了图像信息的建模归纳假设,成为早期最适合视觉表征的模型。具体的,卷积神经网络应用视觉表征的模型很多,我们简单从 LeNet-5、AlexNet、VGG 和 ResNet 等模型的演进一窥其在关键要素。

图 2
2.1.1 卷积视觉表征:从 LeNet 到 ResNet
LeNet-5 早期在数字识别中取得了成功的应用,网络结构是 [CONV-POOL-CONV-POOL-FC-FC]。卷积层使用 55 的卷积核,步长为 1;池化层使用 22 的区域,步长为 2;后面是全连接层;AlexNet 相比 LeNet-5 做了更多层数的堆叠,网络参数进行了相应的调整,并在 ImageNet 大赛 2012 夺得冠军;相应 VGG 网络使用更小的卷积核,同时相比 AlexNet 进一步提升了网络层数。
随着研究的深入,神经网络的层数也出现了爆发式地增长,由此也不可避免的带来梯度消失和梯度爆炸的问题,使得模型训练的困难度也随之提升。一种解决方法是将神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 Residual Network(ResNet) 残差网络,网络结构的原理是将卷积层的堆叠,替换成跨层连接的模块,如图 3 所示。

图 3
有了合理的建模模型,可以使用具体任务的训练数据学习视觉表征,进而完成不同的任务(如分类、分割、目标检测等)。而更加有效的方式通常是先用'海量'的数据让模型学到通用的视觉表征,再进行下游具体任务数据的学习,也就是预训练 + 微调的范式。
2.1.2 卷积视觉预训练
在 CNN 视觉表征体系下,早期的视觉预训练有另一个叫法是迁移学习,在 BERT 的预训练 + 微调范式流行之前就已经被广泛应用。迁移学习中,传统 CNN 视觉模型在做具体任务训练之前,先在大量的图像任务数据集上进行预先训练(如 ImageNet 分类任务数据集等)。然后使用预训练的 CNN 权重初始化 Backbone,并增加一些任务定制网络模块,完成在下游任务上的微调(如 Backbone+ 全连接层做分类任务)。
卷积神经网络视觉表征和预训练的优化升级工作还有很多,介绍相关内容的资料也很多,篇幅原因我们对此不进行详细展开和概述,而是把更多的笔墨放在近几年更热门的研究方向上。
2.2 早期多模态融合与预训练
接着是 CNN 体系下的多模态融合和预训练,视觉和自然语言的跨模态对齐和融合有两种表现形式:一种是双塔结构,多模态分别表征,通过对比学习机制实现视觉和文本在同一空间中的距离度量;另一种是视觉表征和文本表征通过交互型网络结构融合成多模态表征,进而完成下游任务应用。由于前者可以看作后者的特例,我们用后一种表现形式为例,将二者统一,进而讲述以 CNN 为基础的早期多模态融合与预训练技术。
如图 4,展示了上述的多模态融合框架,包括视觉特征提取模块、文本特征提取模块和模态融合模块。文本模块是常见的 Token Embedding 方式;视觉表征方面,由于 CNN 已经验证了有效性,因此大多数的工作在都考虑使用 CNN 做视觉特征抽取,得到高级语义特征,然后将高级语义表征作为输入,和文本 Token Embedding 序列一起输入到下游融合模块。不同工作的差异主要集中在视觉特征提取 CNN Backbone 以及 Modality Interaction 两个模块。

图 4
我们以 2019 年作为粗略分界点,在此之后 BERT 的训练范式开始流行,多模态方向上的研究热点则是借鉴 BERT 的成功,使用 Transformer 网络(特指 Transformer Encoder)作为 Modality Interaction 模块把视觉和自然语言进行特征融合,并通过大规模预训练来学习得到多模态表征;而在此之前的方案通常是简单的多层全连接网络实现,我们不多赘述。
顺着这个思路,确定了使用 Transformer 作为模型融合模块这个大方向后,第二个问题是**如何对视觉特征进行有效编码,得到和文本一样的 Token Embedding 序列作为模型输入?**这一问题的解法在 CNN 为主的时期有两种主要方式,如图 5:
Region Feature Base:先通过基于 CNN 的目标检测模型(Fast R-CNN 等),识别图像中的关键物体区域集合(ROI,Region Of Interest),并提取区域的表征向量,作为 Transformer 模型的视觉输入 Embedding 序列。这么做的动机是,每个 ROI 区域,都有明确的语义表达(人、建筑、物品等),方便后续和文本特征的对齐。比较有代表性的工作如 LXMERT、VL-BERT 和 UNITER 等;
Grid Feature Base:区域特征方法虽然看上去合理,但是依赖前置的目标检测模型,整体链路较重。因此也有工作探索,不经过区域检测,直接使用 CNN 网络提取深层的像素特征作为交互模型输入,同样取得了一些成果。比较有代表性的工作如 Pixel-Bert 等。

图 5
下面我们分别介绍这一时期的经典工作,了解其中基本思路和方法。
2.2.1 LXMERT
LXMERT 是早期进行多模态特征融合的工作之一,如图 6,模型采用经典的两路深层表征输入结构。在视觉侧关注单图,图像经过目标检测模型得到区域块的特征序列,又经过 Transformer 做进一步编码区域块之间的关系(Object-Relationship Encoder);文本侧通过 BERT 结构得到文本的特征序列(Language Encoder),最后两者使用深层 Transformer 结构做交叉 Attention,最后进行多任务的预训练。LXMERT 的预训练任务相比 BERT 较多,包括 Masked 图像特征的预测、图像 Label 的预测(猫、狗等)、VQA、图文是否匹配以及纯文本侧的 Masked 语言模型(MLM)。

图 6
预训练模型经过特定任务微调后,LXMERT 在两个视觉问答数据集(VQA 和 GQA)上达到了当时最先进的结果。作者还展示了 LXMERT 可以很好地泛化到一个具有挑战性的视觉推理任务(NLVR2),并将之前的最佳结果提高了 22%(从 54% 到 76%),是一个比较优秀的工作。
2.2.2 VL-BERT
另一个 Region Feature Base 的经典工作是 VL-BERT。如图 7,与 LXMERT 不同的是,VL-BERT 属于单路输入模式,视觉特征在经过目标检测模型进行 Region 特征提取后,直接和文本 Embedding 一起拼接输入到 Transformer 网络中进行多模态的交叉 Attention。

图 7
VL-BERT 设计了两个预训练任务:带视觉特征的掩码语言模型学习(Masked Language Modeling with Visual Clues)、带文本特征的视觉 Region 分类(Masked RoI Classification with Linguistic Clues)。经过预训练和微调流程,模型可以适用于多种视觉和语言任务,并在视觉问答、图像 - 文本检索、视觉常识推理等任务上都取得了非常不错的性能。VL-BERT 印证了,多模态语义特征不需要各自的单独深度编码,直接做交互也可以取得有效结果。
2.2.3 UNITER
如图 8,UNITER 使用和 VL-BERT 类似的架构,同样的单路架构,同样是目标检测模型做视觉的语义特征抽取,并进一步使用更多的训练数据、更多的预训练任务,希望得到一个更加通用的图文多模态表征模型。UNITER 通过在四个图像和文本数据集(COCO, Visual Genome, Conceptual Captions, and SBU Captions)上进行大规模的预训练,可以支持多种视觉和语言任务的联合多模态表征。同时设计了四种预训练任务:遮蔽语言建模(MLM),遮蔽区域建模(MRM,有三种变体),图像 - 文本匹配(ITM),和词 - 区域对齐(WRA)。

图 8
相比于之前方案,UNITER 提出了通过最优传输(OT,Optimal Transport)的方法来进行 WRA,在预训练过程中显式地加强词和图像区域之间的细粒度对齐。相比其他工作仅使用图像 - 文本匹配(ITM)的全局对齐方式,WRA 更加精准。经过大量的消融实验,UNITER 还探索了预训练任务的最佳组合方式,并最终在视觉问答,图像 - 文本检索,指代表达理解,视觉常识推理,视觉蕴含,和 NLVR2 等任务上都达到了新的最先进的水平。
UNITER 称得上是 Region Feature Based 多模态预训练的集大成者,同时期的大多数工作也多是类似结构上的修补或增强。但也不乏另辟蹊径的工作,其中以 Grid Feature Based 相关工作最具影响力。
2.2.4 Pixel-BERT
Pixel-BERT 是 Grid Feature Based 多模态融合代表工作之一。如图 9,与 Region Feature Based 方法不同的是,Pixel-BERT 不需要使用目标检测模型进行 ROI 区域的特征抽取,而是直接通过卷积网络提取图片的像素级别特征,直觉和文本特征一起输入到下游的 Transformer 网络进行特征融合。这种方式减少了目标检测区域框标注的成本,同时缓解了视觉语义 label 与文本语义的不均衡问题(区域框的物体类别往往上千规模,而文本可以表达的语义远不止于此)。

图 9
详细来说,当时主流的 Region Feature Based 方法提取视觉特是使用如 Fast R-CNN 的目标检测模型,通常在 Visual Genome 数据集上训练得到。这种目标检测模型,通常先提取可能存在物体的区域,然后根据区域特征进行物体类别的分类。相应的,这些区域的特征往往局限在固定的类目集合范围内,语义范围较为有限,这是也使用区域语义特征的固有缺陷。
Pixel-BERT 的思路是直接学习像素级别的表征来代替物体框为主的区域特征,具体的,像素特征通过 ResNet 之类的卷积神经网络提取得到。对于给定的图片 I,先使用 CNN backbone 提取特征 (如从 HxWxC 经过多层卷积网络到 channel_dim)。然后按空间顺序,铺平网格特征序列,计作 N,N 为像素的数量。最终的视觉语义 embedding 特征记作 E_v,其中 s_v 是可学习的语义表征向量,用于区分文本表征向量。由于所有的像素共用 s_v,索引 s_v 也可以看作是 CNN backbone 的一个 bias 项。
此外,Pixel-BERT 使用随机像素采样机制来增强视觉表示的鲁棒性,并使用 MLM 和 ITM 作为预训练任务进行预训练。最后通过对下游任务进行广泛的实验,在包括视觉问答 (VQA)、图像文本检索和视觉推理等下游任务中取得了 SOTA 效果。
三、ViT:拥抱 Transformer
Pixel-BERT 之类的网络,减少了对与目标检测模型的依赖,仅使用深层卷积神经网络提取像素级别的特征作为下游多模态融合模块,极大简化了图文多模态表征模型的网络结构。那么,我们能不能进一步简化视觉表征模块,直接把图像特征简单加工后就直接输入到 Transformer 网络和文本特征一起做模态的融合?要做到这一点,我们需要先回答另一个问题,Transformer 网络能不能替换 CNN 作为视觉表征的 Backnone?虽然现在来看,答案是肯定的,但在开始阶段,这个过程并不是那么顺利。
我们知道,CNN 应用于视觉表征有着很强的归纳偏置或者说先验,在 CNN 中,局部性、二维邻域结构和平移不变性是在整个模型的每一层中都有体现,和视觉图像的特点极其类似:
局部感知性:卷积层通过卷积操作和参数共享,能够高效地提取输入图像的局部特征。这种局部感知性使得 CNN 能够捕捉图像中的局部结构,例如边缘、纹理等,从而更好地表征图像。
层级结构:CNN 的层级结构包括卷积层、激活函数、池化层和全连接层。这种层级结构使得 CNN 能够逐层提取和组合特征,从低级到高级,形成更复杂的视觉表征。
参数共享:卷积层中的参数共享使得 CNN 的训练更加高效。相同的卷积核在不同位置对图像进行卷积操作,共享参数减少了模型的复杂度,同时也增强了模型的泛化能力。
空间不变性:卷积操作具有平移不变性,即无论图像中的物体在图像中的位置如何变化,卷积核都能检测到相应的特征,这对于图像分类、目标检测和图像分割等计算机视觉任务非常重要。
而在 Transformer 中的 Self-Attention 层则是全局的,对于视觉输入的局部关系建模、图像的 2D 位置关系的建模,以及图像元素的平移不变性的把握上,都需要从头学习。然而,即便是困难重重,因为有 BERT 的巨大成功,仍然有许多的研究者前赴后继投入到这个方向,并最终取得成功,其中 Vision Transformer (ViT) 是最为经典的案例之一。
3.1 ViT 范式视觉表征和预训练
3.1.1 ViT:Transformer 视觉表征
如图 10,ViT 将输入图片平铺成 2D 的 Patch 序列(16x16),并通过线性投影层将 Patch 转化成固定长度的特征向量序列,对应自然语言处理中的词向量输入。同时,每个 Patch 可以有自己的位置序号,同样通过一个 Embedding 层对应到位置向量。最终 Patch 向量序列和视觉位置向量相加作为 Transfomer Encoder 的模型输入,这点与 BERT 模型类似。

图 10
同样,ViT 通过一个可训练的 CLS token 得到整个图片的表征,并接入全链接层服务于下游的分类任务。当经过大量的数据上预训练,迁移到多个中等或小规模的图像识别基准(ImageNet, CIFAR-100, VTAB 等)时,ViT 取得了比 CNN 系的模型更好的结果,同时在训练时需要的计算资源大大减少。按说,ViT 的思路并不复杂,甚至一般人也不难想到,但是为什么真正有效的工作确没有很快出现?不卖关子,ViT 成功的秘诀在于大量的数据做预训练,如果没有这个过程,在开源任务上直接训练,ViT 网络仍会逊色于具有更强归纳偏置的 CNN 网络。
因此,在此之后的一大研究方向就是如何更加有效的对 ViT 结构的网络进行预训练。下面我们通过 MAE 和 BEIT 两个优秀的工作,来讨论这个方向上的两类主流方案。
3.1.2 MAE:激进的 Mask 自监督预训练
与自然语言理解类似,ViT 模型能取得成功得益于预训练 + 微调的训练范式。前文提到,传统 CNN 视觉模型的预训练,仅仅是在大量的图像任务数据集上进行预先训练(如 ImageNet 分类任务等),然后使用训练后的权重进行初始化 Backbone,在下游任务上继续微调完成相应任务。
早期的 ViT 的预训练和 CNN 预训练一样,都是通过大规模的有监督分类任务数据集进行训练,和 BERT 的自监督预训练仍有区别。而自监督预训练有着数据获取成本低、不需要标注、任务难度大模型学习充分等诸多好处,因此很多研究工作探索自监督视觉预训练,比较有代表性的实践工作如 Masked AutoEncoder(MAE)。

图 11
如图 11,所示,MAE 以 ViT 为基础模型,先对完整图片进行 Patch 掩码,接着使用一个 Transformer Encoder 对未 Mask 的 Patch 进行编码,然后通过相对小的 Transformer Decoder 模型还原被 Masked Patch,从而实现模型的自监督预训练。
MAE 取得成功的另一个核心原因是通过 75% 的高掩码率来对图像添加噪音,这样图像便很难通过周围的像素来对被掩码的像素进行重建,从而使编码器去学习图像中的语义信息。预训练之后,解码器被丢弃,编码器可以应用于未掩码的图像来进行识别任务。
相对于自然语言的自监督训练,MAE 使用了更大的掩码比例。后人进一步分析,这么做动机是考虑自然语言和视觉特征的信息密度不同,简单来说:文本数据是经过人类高度抽象之后的一种信号,信息是密集的,可以仅仅预测文本中的少量被掩码掉的单词就能很好的捕捉文本的语义特征。而图像数据是一个信息密度非常小的矩阵,包含着大量的冗余信息,像素和它周围的像素存在较大的相似性,恢复被掩码的像素并不需要太多的语义信息。
3.1.3 BEIT:视觉'分词'表征预训练
另一类 Transformer 视觉模型预训练的代表范式是 BEIT(BERT Pre-Training of Image Transformers)模型。为了与 BERT 的预训练框架对齐,BEIT 通过辅助网络模块先对视觉 Patch 进行 Tokenizer,得到整张图各部分的视觉 Token ID。然后将视觉 Patch 视为自然语言中的单词进行掩码预测,完成预训练流程。

图 12
具体的如图 12,在预训练之前,BEIT 先通过一个离散自回归编码器(discrete Variational AutoEncoder,dVAE)学习了一个'图像分词'器,最终可以将图像编码成离散的视觉 Token 集合。而在预训练阶段,输入的图片存在两个视角,一是图像 Patch,另一个是视觉 Token。BEIT 随机对 Patch 进行掩码,并将掩码部分替换为特殊的 Mask Embedding([M],图中的灰色部分),随后将掩码后的 Patch 序列输入到 ViT 结构的模型中。预训练的目标则是基于被掩码的图像输入向量序列,预测源图像对应的视觉 Token ID。
BEIT 需要单独的 dVAE 网络辅助,相对 MAE 更为复杂,效果也相对不足,但为视觉预训练提供了一个不错的范式,同样是一次十分有价值的探索。
3.2 ViT 为基础的多模态对齐与预训练
以 ViT 为基础的视觉预训练可以通过 Transformers 对视觉进行有效表征,这种方法也逐渐成为目前视觉信息编码的主流手段。以此为延伸,基于此的多模态预训练工作也层出不穷,也为如今的多模态大模型的顺理成章打下了坚实基础。
如图 13,梳理了以 ViT 为延伸的多模态对齐和预训练工作,各工作之间都或多或少的有所关联,可谓是一脉相承。下面我们分别介绍这个技术方向的经典工作,读完本小结下面的内容再来看图中的模型关系,可能会更有感觉。

图 13
3.2.2 CLIP
CLIP 模型是 OpenAI 2021 发布的多模态对齐方法。与 OpenAI 的许多工作类似,CLIP 强调强大的通用性和 Zero-Shot 能力,也因此至今仍有很强的生命力,相关技术被广泛应用。
CLIP 的核心思路是通过对比学习的方法进行视觉和自然语言表征的对齐。如图 xx(1),CLIP 首先分别对文本和图像进行特征抽取,文本的 Encoder 为预训练 BERT,视觉侧的 Encoder 可以使用传统的 CNN 模型,也可是 ViT 系列模型。得到图文表征向量后,在对特征进行标准化(Normalize)后计算 Batch 内图文 Pair 对之间的余弦距离,通过 Triple Loss 或 InfoNCELoss 等目标函数拉近正样本对之间的距离,同时使负样本对的距离拉远。

图 14
经过大量的图文 Pair 对进行预训练后,我们可以得到在同一表征空间下的文本 Encoder 和图像 Encoder。下游应用通常也是两种方式,一是在下游任务上对模型进行微调,适应定制的图文匹配任务,或者仅使用文本或图像 Encoder 做单模态任务;另一种使用方式是直接使用预训练的图文表征 Zero-Shot 方式完成下游任务。
CLIP 进行 Zero-Shot 的一种使用方式如图 14(2)和(3),对于一个图像分类任务,可以首先将所有的候选类别分别填充'A photo of a {object}'的模板,其中 object 为候选类别,对于一张待预测类别的图像,通过图像 Encoder 的到视觉表征后,与所有类别的模板文本 Encoder 表征进行相似度计算,最后选择相似度最高的类别即可作为预测结果。
CLIP 凭借其简洁的架构和出众的效果,被后来很多工作引用,并使用 CLIP 预训练的 Backbone 作为视觉表征模块的初始化参数。
3.2.3 VILT
CLIP 方法简单有效,双塔的网络结构对于下游应用也十分友好。但是如同表示型语义匹配类似,双塔结构同样也有交互不足的问题,内积或余弦距离的模态融合方式匹配能力上限较低,对于一些需要细粒度跨模态匹配的任务(VQA 等)有时力不从心。因此,交互式的多模态对齐和融合仍然极具价值,典型的如 VILT 模型。
VILT 是 ViT 在图文多模态方向上的工作延续。我们了解了基于 Transformer 的自然语言模型和视觉模型的预训练范式后,进阶到多模态融合十分容易理解。如图 15 所示,与 BERT 文本对的输入方式类似,VILT 将文本和视觉 Patch 的 Embedding 直接拼接作为 Transformer 编码器的输入,两种模态有各自可学习的位置编码和模态类型编码。
图 15
通过深层的 Transformer 编码,文本与视觉的模态得到了充分的融合。ViLT 使用常用的 ITM(Image Text Matching)和 MLM(Masked Language Modeling) 作为预训练目标。
ITM(Image Text Matching):图文是否匹配的二分类目标,正样本为常用数据集中提供的语义一致的图文 Pair 对,负样本对以 0.5 的概率随机地用替换正图文对中的图片为其他图片;此外借鉴前人工作,匹配目标还增加了图文子区域的匹配目标 Word Patch Alignment (WPA),该目标并不常用,我们也不作过多展开。
MLM(Masked Language Modeling):以 0.15 的概率对文本的 Token 进行掩码,并通过图文的整体上下文信息对预测被掩码的 Token。
如图 16,可以对比以 CNN 为基础的多模态预训练和以 ViT 为基础的预训练,在模型架构上的区别。

图 16
而在 ViLT 之后,多模态预训练的一个较为明显的趋势,是进一步提升模态对齐与融合的效果以及模型结构的通用性,使用统一模型视角进行跨模态对齐和融合。在这个过程中,ALBEF(Align before Fuse)、BLIP(Bootstrapping Language-Image Pre-training)与 BEIT-3 系列等工作极具参考价值,下面我们简单对比其设计思路。
3.2.5 ALBEF 与 BLIP
ALBEF 通过多任务联合训练将类似 CLIP 的对比学习和类 ViLT 的交互融合范式统一到一个训练框架中。如图 17 所示,模型结构包括一个图像 Encoder(12 层)、一个文本 Encoder(6 层)和一个多模态融合的 Encoder(6 层),各 Encoder 均沿用 Transformer 网络。ALBEF 的训练任务包括图文对比 ITC(Image-Text Contrastive Learning)、ITM(Image-Text Matching)、MLM(Masked Language Modeling)。

图 17
ITC:在图文模态深层融合之前,在对图文的表征序列 Pooling 后,通过对比学习 Loss 对图文单模态表征进行对齐。这部分和 CLIP 模型的训练设置类似,不同的是文本的 Encoder 相对视觉 Encoder 层数更浅。
ITM:图文 Encoder 输出的表征序列深层交互后,判断输入图文对是否匹配,与 ViLT 一样是二分类任务。不同的是负样本对的构造,使用对比学习模块进行了 Batch 内的难负样本挖掘。主要思路是,对比学习模块中一个 Batch 中,模型认为最为相似的负样本对可以作为难负样本。
MLM:与 ViLT 类似,随机对输入文本 token 进行掩码,通过图文上下文的输入信息预测被掩码的 Token。
最后,由于 ALBEF 的预训练数据多数为互联网中挖掘的图文对,天然存在较大的噪声数据。为了缓解这个问题,ALBEF 在训练过程中通过一个动量自蒸馏的模块(一个移动平均版本的 ALBEF 模型),生成训练数据集的伪标签,用来辅助模型的训练。
ALBEF 通过多任务训练机制将模态对比匹配和深度模态融合结合在一起,下游任务可以根据具体需求使用不同的模块进行微调。与之遥相呼应的的是 BLIP 模型,在 ALBEF 基础上,将 MLM 替换为 LM(Language Modeling)Loss,的使得训练得到的模型同时可以支持图像描述文本的生成能力,如图 18 所示。使得多模态融合预训练有了多模态大模型即视感。

图 18
经过大规模多模态数据的预训练,ALBEF 和 BLIP 在下游任务微调中均取得了十分亮眼的效果,在工业界也被广泛应用。
3.2.8 VL-BEIT、VLMO 与 BEIT-3
ALBEF 和 BLIP 之类的工作虽然能够同时兼顾对比和深度融合两种训练模式,但视觉和自然语言仍然需要单独的 Encoder 分别编码,这显然还不是我们所期望的真正的多模态统一模型框架。我们可以从 Microsoft Research 的 VL-BEIT、VLMO 与 BEIT-3 这一系列工作一窥这个方向的探索过程。
VL-BEIT 可以看作是前文提到的 BEIT 在多模态对齐预训练工作的延续,同时借鉴了 ViLT 的网络结构。如图 19,与 ViLT 的区别在于,VL-BEIT 期望将单模态和多模态统一到一个模型中,在预训练任务设计上,同时考虑了纯文本、纯视觉以及图文多模态任务。纯文本任务为 MLM(a);纯视觉特征的 MIM,其中 MIM 的目标是 BEIT 工作中的 Visual Token ID(b);图文多模态任务包括考虑文本特征的视觉 Token 预测,以及考虑视觉特征的文本 Token 预测(c)。

图 19
VLMO 是 VL-BEIT 的同期工作,如图 20。VLMO 相较于 VL-BEIT 的不同之处在于:1、舍弃了视觉侧的 Visual Token ID 预测,简化了整体的网络结构;2、增加了类似 CLIP 的图文对比学习任务,以及交互型的图文匹配任务;3、使用 MoME Transformer 结构,对不同的模态使用不同的 Expert 头。虽然 VLMO 相对于 VL-BEIT 在效果上并不出彩,但为后续 BEIT-3 的工作奠定了基础。

图 20
与 VLMO 网络结构类似,BEIT-3 将图像、文本和图文多模态输入统一到一个单独的 Multiway Transformer 网络。不同于经典的 Transformer,BEIT-3 使用一个多类型输入共享的多头自注意力模块(Multi-Head Self-Attention),不同类型的模态输入各有一个全连接专家模块单独学习。如图 21,视觉模态使用 V-FFN、文本模态对应 L-FFN,图文多模态输入对应 VL-FFN,模型会根据不同类型的模态输入选择不同的模块生效。

图 21
在预训练任务上,如图 22,BEIT-3 相比之下也更加全面,不仅包括常用的图文对比学习、MLM 和图像文本描述生成任务,还引进了文本和图像的单模态任务。这样的训练方式,使得 BEIT-3 真正统一了多模态的不同输入类型,同时更加全面和灵活的支持不同模态的下游任务。为了能够实现这样的能力,BEIT-3 使用了更多的预训练数据,模型容量相对于之前的工作也有了显著的提高(达到 1.9B),相应地最终也取得了在当时更好的效果。

如图 22
BEIT-3 将多模态对齐和预训练的研究推到了一个新的高度,验证了更多的数据 + 更大的模型取得更好的效果,在这个研究方向仍不失准。虽然开始饱受争议,但随着 ChatGPT 的问世,这个发展思路的正确性被进一步加深,也催生了后面多模态大模型的一众研究工作。
四、多模态与大模型
写到这里,经过大规模篇幅的铺垫,终于到了大家都关心的多模态大模型章节。打开前两天的笔记,原来的计划是这部分内容参考综述论文的梳理,选择一些有代表性的工作进行问题的串连。当我重新下载这篇综述论文,想截一张示意图时,却是目瞪狗呆。对比一下,图 23 是年前的截图,图 24 是年后的。

图 23

图 24
这个速度,属实有点跟不上了。调整情绪后,我告诉自己很多工作万变不离其宗,可以延续原来的思路继续写,不增加加新的内容。这样,应该也挺合理的吧。下面我们通过各时期的优秀工作,来系统看一下类似 GPT-4 的多模态大模型的主流思路。
4.1 Flamingo
如今 GPT-4 代表着多模态大模型的顶尖水平,但在此之前,甚至在 ChatGPT 之前就已有相关探索工作,其中谷歌的 Flamingo 最具当前主流技术雏形。事实上,Flamingo 更像是图文多模态领域的 GPT-3,不同的是它支持图文上下文的输入,通过 In-Context Few-Shot 方式完成任务。Flamingo 同样支持视频帧序列作为输入,通过 Prompt 指令完成 Video 理解任务。

图 25
做到这种功能,在模型侧和 GPT-3 类似,不同的是 Flamingo 在文本 Transfomer 网络中增加视觉输入特征,模型结构如图 26,包括三个部分。
视觉侧特征抽取使用预训练的 ResNet 和采样模块(Perceiver Resampler,将变长的视觉特征输入转成少量的视觉特征)模型;
文本侧模型使用 LLM(基座使用 Chinchilla,同样是谷歌发布的对标 GPT-3 的大语言模型,并提供了 1.4B、7B、和 70B 等版本,分别对应 Flamingo-3B、Flamingo-9B 和 Flamingo-80B);
GATED XATTN-DENSE 层,用于连接 LLM 层与视觉特征,允许 LM 在处理文本时考虑视觉信息。通过交叉注意力,LM 可以关注与视觉特征相关的部分。预训练 LLM 和视觉 ResNet 参数训练过程中是冻结状态。

图 26
相应的,在数据层面 Flamingo 也是使用了多样形式的训练语聊,包括:
图文穿插形式:MultiModal MassiveWeb (M3W),43 Million;
图文 Pair 对形式:LTIP(Long Text & Image Pairs),312 Million;
带文本描述的短视频:VTP (Video & Text Pairs) ,27 Million 。
最后 Flamingo 在各种多模态任务上的效果也非常优秀,甚至在有些数据集上通过 few-shot 方式可以超过经典模型的 SOTA。

图 27
Flamingo 凭借其出色的效果,吸引了许多研究者对于多模态大模型的注意,但当时这种规模的模型训练不是谁都能玩的起,因此并没有引起特别火热的跟风潮。直到 ChatGPT 的出现,让人逐渐接受了大模型这条道路的正确性,以前觉得自己玩不起的机构,砸锅卖铁拉投资也愿意投入,自此相关的开源研究开始如火如荼。
在众多开源工作中,BLIP-2 以及与之一脉相承的 InstructBLIP 算是早期的探路者之一,我们可以从这两个工作开始讲起。
4.2 BLIP-2 和 InstructBLIP
BLIP-2 的论文标题是 Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models,核心思路是通过利用预训练好的视觉模型和语言模型来提升多模态效果和降低训练成本。
BLIP-2 的网络结构如图 28 所示,从架构上来说,和 Flamingo 十分类似。包括视觉编码层、视觉与文本的 Adapter(Q-Former)以及大语言模型层。
视觉编码层:使用 ViT 模型,权重初始化通过 CLIP 预训练完成,并剔除最后一次提升输出特征的丰富性;训练过程中冻结权重,不更新;
文本侧的大语言模型层:早期的 BLIP-2 使用 OPT/FlanT5 来实验 Decoder based 和 Encoder-Decoder based LLM 的效果;这部分同样在训练过程中冻结权重,不更新;
图文 Adapter 层:Q-Former 结构,类似 BLIP 网络(同样先进行了图文多模态预训练模块),通过 Queries 向量,提取视觉侧的关键信息输入到 LLM;这部分是多模态大模型训练过程中的主要参数。

图 28
和 Flamingo 相比,BLIP-2 简化了视觉特征和大模型的交互,直接仅仅将视觉特征和文本特征一起作为大模型的输入,没有深层的交互模块(如 GATED XATTN-DENSE 层);另一方面在视觉和 LLM 的 Adapter 层做了更多的设计,即 Q-Former 结构,如图 29。从 Q-Former 结构图,我们可以看到 BLIP 的影子,最大的不同在于一个 Learned Queries 模块,用于对 ViT 输出的视觉特征进行采样(Pooling),得到固定长度的视觉特征序列。

图 29
上面提到,为了避免灾难遗忘,BLIP-2 冻结了 ViT 和 LLM 的参数,只训练 Q-Former 模块。为了训练更加稳定,Q-Former 模块的训练包括两个阶段。
Stage1: 将 Q-Former 与冻结的 ViT 拼接,借鉴 BLIP,使用 ITC(图文对比学习)、ITG(图生成文本)和 ITM(图文匹配)任务进行学习,对参数进行初始化,学习图文相关性特征。
Stage2:如图 30,将 Stage1 得到的模型再拼接 LLM,即 Q-Former 的输出可通过线性投影输入到 LLM(冻结参数),进行视觉到自然语言的生成学习,目标是训练 Q-Former 使其输出的视觉特征和 LLM 的输入分布对齐。

图 30
BLIP-2 通过视觉和 LLM 的特征对齐,使得 LLM 具备了多模态理解能力,但其训练数据主要沿用 BLIP(图文 Pair 对形式),和当下的多模态模型的主流技术方案仍存在一定 GAP,是早期代表性探索之一。不过,随着指令微调成为大模型必备流程,后续 BLIP-2 也自然升级为 InstructBLIP。
如图 31,InstructBLIP 的网络结构与 BLIP-2 几乎一致,同样也是 2 阶段训练,不同的是采样了指令微调范式,将文本模态的 Instruction 也作为输入同时给到 Q-former 和 LLM 进行学习。

图 31
对应的,InstructBLIP 的另一个不同是训练数据也使用指令形式,将各种类型任务的开源学术数据,使用模板构造成指令多模态数据。数据模板如图 31。

图 31
通过指令数据和指令微调,是的 InstructBLIP 可以像 GPT-4 一样通过指令提示词的方式完成任务,虽然效果上仍有差距。即使不是 InstructBLIP 的训练范式并不是开创性的,但是我们依然可以用 InstructBLIP 作为参考,来看对比后面要介绍的其他工作。
4.3 Qwen-VL
阿里巴巴的 Qwen-VL 是另一个比较经典的模型,十分值得作为案例介绍多模态大模型的训练要点。Qwen-VL 使用 Qwen-7B LLM 作为语言模型基座,Openclip 预训练的 ViT-bigG 作为视觉特征 Encoder,随机初始化的单层 Cross-Attention 模块作为视觉和自然语言的的 Adapter,总参数大小约 9.6B。

图 33
如图 33,Qwen-VL 的训练过程分为三个阶段:
Stage1 为预训练,目标是使用大量的图文 Pair 对数据对齐视觉模块和 LLM 的特征,这个阶段冻结 LLM 模块的参数;
Stage2 为多任务预训练,使用更高质量的图文多任务数据(主要来源自开源 VL 任务,部分自建数据集),更高的图片像素输入,全参数训练;
Stage3 为指令微调阶段,这个阶段冻结视觉 Encoder 模块,使用的数据主要来自大模型 Self-Instruction 方式自动生成,目标是提升模型的指令遵循和多轮对话能力。

图 34
Qwen-VL 的另一个启发是在 Stage2 和 Stage3 的训练过程中,不止使用 VL 数据,还使用了纯文本的训练数据,避免遗忘 LLM 的能力,这个策略的效果在其他的工作中也有所印证。此外,相比 InstructBLIP,Qwen-VL 模型视觉和 LLM 的 Adapter 模块简化很多,仅仅是一个浅层的 Attention Pooling 模块,通过更加细节的训练流程和更加丰富的训练数据,仍取得了比 InstructBLIP 更优的效果。
4.4 LLaVA1.5
同样,微软的 LLaVA 也是一个持续更新的系列工作,这里主要总结 LLaVA 和 LLaVA1.5 的核心思路。图 34 为 LLaVA1.5 的数据和模型概况。可以看到,和 Qwen-VL 相比,LLaVA1.5 在预训练和指令微调数据上使用了更少的数据(将 Qwen-VL 的 Stage2 和 Stage3 都视作指令微调);在模型结构上,除了视觉 Encoder 和 LLM 均使用了不同的基座模型,视觉和自然语言的 Adapter 使用更简单的 MLP 层。

图 35
LLaVA1.5 模型的效果在一些评测数据集上相比 Qwen-VL 有更好的效果,说明通过一些优化工作,使用更少的数据,更简单的 Adapter 结构,也能使 LLM 具备不错的多模态理解能力。在数据层面,如图 35,对比 LLaVA1.5 和 LLaVA 工作,通过增加高质量细粒度的 VL 数据、丰富指令、纯文本指令微调数据、提升图片输入像素、提升 LLM 参数规模等手段,可以有效提升模型效果。

图 36
4.5 VILA
另一个与 LLaVA 比较类似,但有所补充的工作是英伟达的 VILA(不是显卡)。VILA 模型的网络结构和 LLaVA 十分类似,我们不做过多赘述。不同的是 VILA 通过实验,总结了多模态预训练的一些经验,其中有些经验在相关工作中也有所体现,主要为以下三点:
LLM 参与训练更好:在预训练阶段冻结 LLM 参数,能做到不错的 zero-shot 的能力,但会损失 in-context 学习的能力,而 LLM 参数参与训练的话可以有效缓解;
预训练数据使用图文交替数据更好:图文 Pair 对并不是最优的选择,图文交错的数据效果更好;

图 37
- SFT 时纯文本数据图文数据混合更好:在图文指令微调训练数据中混入纯文本的指令数据,不仅可以缓解纯文本能力的遗忘,还能提升 VL 任务的能力。
具体的,如图 37,VILA 的训练分为 3 个阶段,视觉编码模块 ViT 参数均是冻结状态。Step 0 使用图文 Pair 数据对初始化 Projector(图文 Adapter)参数,LLM 模块参数冻结;Step 1 使用图文交替数据全参数预训练;Step 2 使用指令微调数据进行全参数微调,其中微调数据混合了图文指令和纯文本指令;

图 38
VILA 是较新的工作,因此有更丰富的模型效果对比,如图 38,相对各时期的 SoTA,VILA 在公开评测指标上有不错的效果。

图 39
4.6 Gemini 1.0 和 Gemini 1.5
目光来到闭源世界,与 VILA 同阶段,谷歌公司发布了 Gemini 系列,又在近期发布了性能更强的 Gemini 1.5,可惜被另一个热爱闭源的 OpenAI 的 Sora 抢了风头,属实悲催。由于 Gemini 系列并没有开源,我们只能通过技术报告中的简单介绍来了解其方法。
Gemini 1.0 是一个多模态模型,这里模态除了图图像和文还包括音频、视频,符合谷歌多模态大模型一贯的 ALL IN ONE 的风格,这也是依赖积累丰富的数据资源和算力资源。Gemini 1.0 提供 Ultra、Pro 和 Nano 版本,分别适应不同能力、参数大小和推理速度要求,最小的 Nano 甚至可以端上运行。
方法上,Gemini 1.0 的网络结构同样是 Transformer Decoders,支持 32K 上下文长度,使用了 Multi-Query Attention 等优化机制。如图 39,模型输入可以是文本、音频、视觉输入,输入视觉可以是图片、图表、截图、PDFs 或视频等,输出可以是图片和文本(没错,可以生成图片)。视觉的 Encoder 模块借鉴了谷歌自己的 Flamingo、CoCa 和 PaLI,结合这些模型,可以输入多模态的同时,也可以通过离散的视觉 Tokens 生成图片或视频等视觉模态。

图 40
对于音频模态,Gemini 可以直接输入 Universal Speech Model (USM) 的 16kHz 特征,具体可以参考 USM 工作。对于视频理解,Gemini 通过将视频编码为长上下文窗口中的一系列帧来实现。视频帧或图像可以与文本或音频自然交织在一起,作为模型输入的一部分。Gemini 同时支持不同像素输入的视觉以满足不同粒度的理解任务。
在具体训练数据方面,技术报告同样并没有提过多细节,只是简单说了数据包括什么模态、经过了什么清洗步骤等,我们也不再深究。至于最近的 Gemini 1.5,同样是技术报告的形式发布,没有特别多技术细节,主要介绍了模型是如何的强。区别要点包括:模型在 Gemini 1.0 基础上引入了 sparse mixture-of-expert (MoE),同时强化了上下文长度(32K->10M)同时几乎没有损失上下文感知能力。在训练过程中,Gemini 1.5 强化了指令微调过程,使用了用户偏好数据。
总体来说,虽然 Gemini 没有提供技术细节,但也体现了谷歌对于多模态大模型技术方向的判断,比如我们可以 get 到网络结构的 MoE、一个模型更多模态、超长上下文、文本生成 + 多模态生成结合等。
4.7 LWM
最后,我们再介绍一篇和 Gemini 类似的开源工作《World Model on Million-Length Video And Language With RingAttention》,模型名 LWM(Large World Model)。至于为什么叫 World Model,意思可以通过视觉和视频的理解物理世界,,LWM 是 UC Berkeley 最近发布的一篇工作,个人认为在开源方向上是一个优秀的工作,但好像也是由于 Sora 和 Gemini 1.5 的热度,没有引起太多关注。
LWM 希望完成的任务和 Gemini 十分相似,核心是超长上下文理解的多模态大模型。凭借支持 1M 的 token 输入,LWM 可以对超过一小时的视频进行理解,在 Gemini 1.5 之前几乎是多模态大模型中最长的上下文输入(之一)。LWM 的主要工作要点包括:
支持超长上下文,可处理超长的文本、图片序列或视频等;
一些技术难点方案:Masked Sequence Packing 方法混合的输入长度;通过 loss weighting 平衡视觉和文本模态;模型自动生成长序列问答数据集用于模型训练;
实现了高性能的 RingAttention,Masked Sequence Packing 等优化项,完成了百万级别长度的多模态序列的训练;
开源 7B 参数规模的大模型,包括长上下文的文本模态模型(LWM-Text,LWM-Text-Chat),和多模态模型(LWM,LWM-Chat)。
具体方案上,LWM 使用 Transformer 架构,在 LLama2 7B 基础上扩充上下文理解的长度上限,模型结构如图 40:

图 41
与之前大多数方法不同的是,视觉的编码器使用 VQGAN,可以将 256 × 256 输入图片编码成 16 × 16 离散 Token。这使得 LWM 不仅可以生成文本,也可以基于文本生成 Image Token 还原成视频。对于多图或视频帧,可以分别做视觉特征抽取,和文本模态一起输入到 LLM 中。
在模型训练流程上,主要分为两个阶段的训练:
阶段一,使用 Books 数据集,先扩充文本 LLM 上下文长度到 1M;
阶段二,长上下文的多模态训练,即混合图 - 文数据、视频 - 文本数据、以及纯文本的 Books 数据进行训练。
上面两个过程有两个核心问题需要解决:1、长文档的可扩展训练;2、如何稳定地扩展 LLM 的上下文。前者关注训练的效率和开销,后者则关注长上下文拓展的有效性。针对问题 1,LWM 主要实现了高效的 RingAttention,同时结合了 FlashAttention;针对问题 2,一方面,两个训练阶段都是多轮训练方式,逐步提升上下文长度的方式,如图 41。另一方面通过简单的调整了 RoPE 的 \theta\theta 参数,提升模型长文本的位置编码能力。

图 42
总的来说,LWM 是一篇不错的文章,最重要的是开源,技术方案基本没有保留,值得拉出来单独讨论。在效果上 LWM 和 Gemini 1.0 Pro 以及 GPT4 有一定的竞争力,更多的细节可以阅读原论文。
五、总结
写到这里,吐一口老血,但还是要总结一下。本文梳理了 2019 年之后视觉表征和多模态表征的一些变化,主要涉及视觉表征和视觉预训练、多模态表征对齐(或融合)和多模态预训练、多模态大模型技术的相关工作。各工作之间的简化关系如图 42,脉络主要是结合笔者自己各阶段的实践经历和认识,会出现一些地方不严谨的地方,欢迎指正。

图 43
关于未来畅想,从最近的工作上来看,多模态的呈现出以大模型为主线,逐步开始朝长上下文、混合模态、世界模型、多模态生成等方向发展。开始在自己工作的实践中得到的一个个人观点,是多模态大模型的惊艳能力主要来自于文本大模型中所蕴含的知识,以及超强的上下文理解能力,视觉特征只是从属的信息输入或感知源。但近期 Gemini 1.5、LWM、甚至 Sora 等工作又开始尝试大模型理解物理世界(引出世界模型的概念),大模型好像开始从文本之外的模态强化输入信息的影响力。不管怎么说,持续的更新迭代让人耳目一新,相信也会不断刷新人们对人工智能边界的认知。

图 44