作者 | 杨浩 单位 | 阿里达摩院 研究方向 | 自然语言处理
在传统的NLP单模态领域,表示学习的发展已经较为完善,而在多模态领域,由于高质量有标注多模态数据较少,因此人们希望能使用少样本学习甚至零样本学习。最近两年出现了基于Transformer结构的多模态预训练模型,通过海量无标注数据进行预训练,然后使用少量有标注数据进行微调即可。
多模态预训练模型能够通过大规模数据上的预训练学到不同模态之间的语义对应关系。在图像-文本中,我们期望模型能够学会将文本中的“狗”和图片中“狗”的样子联系起来。在视频-文本中,我们期望模型能够将文本中的物体/动作与视频中的物体/动作对应起来。为实现这个目标,需要巧妙地设计预训练模型来让模型挖掘不同模态之间的关联。
分为单流和双流模型两大阵营
Pretraining Task-Agnostic Visiolinguistic Representations for Vision-and-Language Tasks
NeurIPS 2019 --开山之作 --双流
自然语言处理(NLP)领域在2018年提出的BERT模型(双向Transformer结构,利用了self-attention来增加上下文的相关性)逐渐成为了语言任务中首选的预训练模型。但在视觉与语言交叉的领域还没有出现一个通用的预训练模型,提出视觉与语言统一建模。
图片和文本分别经过两条不同的stream进入co-attentional transformer层中(普通的Transformer中,query、key、value来自上一层Transformer。而这里提出的全新的co-transformer则同时利用了上一层中视觉和语言的信息,视觉和语言两条stream分别使用了自己的query和来自另一边的key和value向量),图片采用Faster R-CNN模型从图像中提取多个目标区域的特征,由于图片特征不像文字特征一样含有位置信息,因此用5维数据给图片位置编码,它们分别是归一化之后左上角坐标,右下角坐标,以及面积。然后将其投影到匹配视觉特征的维度,并对其求和。
A Simple and Performant Baseline for Vision and Language
2019 --单流
文字和图片统一进行语义学习,提出单流的方法(更简单)
不像vilbert一样图文和文字分别进入transformer进行学习,将文本和图片一起输入transformer。因为单流,需要增加段编码。
A Universal Encoder for Vision and Language by Cross-modal Pre-training
AAAI 2020
和visualbert一样属于单流模型,增加到三个预训练任务
Learning Cross-Modality Encoder Representations from Transformers
EMNLP 2019
和vilbert不同的是cross-attention在cross操作后加入一个全连接层,同时融合了图片和文字的信息。增加了一些预训练任务目标,比如Masked Cross-Modality LM。增加图像问答任务到预训练任务中(引入vqa等数据集的训练集)。
【ICLR 2020】Pre-training of Generic Visual-Linguistic Representations
1) 之前论文(例如,ViLBERT(Lu et al.,2019)和LXMERT(Tan&Bansal,2019))所使用的句子-图像关系预测任务对视觉语言表征的预训练毫无帮助。因此,这样的任务不包含在VL-BERT中。
2) 在视觉语言和纯文本数据集上预先训练VL-BERT。发现这种联合预训练提高了对长句子和复杂句子的泛化能力。
3) 改进了视觉表示的调整。在VL-BERT中,快速R-CNN的参数也得到了更新,从而得到了视觉特征。为了避免语言线索掩盖的RoI分类预训练任务中的视觉线索泄漏,对输入的原始像素进行掩蔽操作,而不是对卷积层生成的特征图进行掩蔽操作。
Token embedding层:对于文本内容使用原始BERT的设定,但是添加了一个特殊符[IMG]作为图像的token。
Visual feature embedding层:这层是为了嵌入视觉信息新添加的层。该层由视觉外部特征以及视觉几何特征拼接而成,具体而言,对于非视觉部分的输入是整个图像的提取到的特征,对应于视觉部分的输入即为图像经过预训练之后的Faster R-CNN提取到的ROI区域图像的相应视觉特征。
Segment embedding层:模型定义了A、B、C三种类型的标记,为了指示输入来自于不同的来源,A、B指示来自于文本,分别指示输入的第一个句子和第二个句子,更进一步的,可以用于指示QA任务中的问题和答案;C指示来自于图像。
Position embedding层:与BERT类似,对于文本添加一个可学习的序列位置特征来表示输入文本的顺序和相对位置。对于图像,由于图像没有相对的位置概念,所以图像的ROI特征的位置特征都是相同的。
作者在视觉-语言数据集以及纯语言数据集上都进行了大规模的预训练,使用概念标题数据库(Conceptual Captions)数据集作为视觉-语言语料库,该数据集包含了大约330万张带有标题注释的图片,图片来自于互联网。但是这个数据集存在一个问题就是图像对应的标题是简短的句子,这些句子很短并且很简单,为了避免模型只关注于简单子句,还使用了BooksCorpus和英语维基百科数据集进行纯文本的训练。
「掩蔽文本预测(Masked Language Model with visual Clues)」 此任务与BERT中使用的Masked Language Modeling(MLM)任务非常相似。关键区别在于,在VL-BERT中包含了视觉线索,以捕获视觉和语言内容之间的依存关系。
「掩蔽图像类别预测(Masked RoI Classification with Linguistic Clues)」 类似于掩蔽文本预测,每个RoI图像以15%的概率被随机掩蔽,训练的任务是根据其他线索预测被掩藏的RoI的类别标签。值得一提的是为了避免由于其他元素的视觉特征的嵌入导致视觉线索的泄漏,在使用Faster R-CNN之前,需要先将被Mask的目标区域的像素置零。
【ECCV 2020】UNiversal Image-TExt Representation Learning
Cross-modal Pre-training with Large-scale Weak-supervised Image-Text Data 2020
主要扩展数据,1千万网上爬取处理好的图文pair数据,之前UNITER 组合了四个数据集(Conceptual Captions,SBU Captions,Visual Genome, MSCOCO),形成了一个960万的训练语料库,并在多个图像-文本跨模态任务上实现了最佳结果。LXMERT将一些VQA训练数据增添到预训练中,并且在VQA任务上也获得了最佳结果。 证明数据越大越好
在模型预训练过程中,设计了四个任务来对语言信息和视觉内容以及它们之间的交互进行建模。四个任务分别为:掩码语言建模(Masked Language Modeling)、掩码对象分类(Masked Object Classification)、掩码区域特征回归(Masked Region Feature Regression)、图文匹配(Image-Text Matching)。
掩码语言建模简称MLM,在这个任务中的训练过程与BERT类似。并引入了负对数似然率来进行预测,另外预测还基于文本标记和视觉特征之间的交叉注意。
掩码对象分类简称MOC,是掩码语言建模的扩展。与语言模型类似,其对视觉对象标记进行了掩码建模。并以15%的概率对物体对象进行掩码,在标记清零和保留的概率选择上分别为90%和10%。另外,在此任务中,还增加了一个完全的连通层,采用了交叉熵最小化的优化目标,结合语言特征的上下文,引入负对数似然率来进行预测正确的标签。
掩码区域特征回归简称MRFR,与掩码对象分类类似,其也对视觉内容建模,但它在对象特征预测方面做得更精确。顾名思义,该任务目的在于对每个掩码对象的嵌入特征进行回归。在输出特征向量上添加一个完全连通的图层,并将其投影到与汇集的输入RoI对象特征相同的维度,然后应用L2损失函数来进行回归。
值得注意的是,上述三个任务都使用条件掩码,这意味着当输入图像和文本相关时,只计算所有掩码损失。
在图文匹配任务中,其主要目标是学习图文对齐(image-text alignment)。具体而言对于每个训练样本对每个图像随机抽取负句(negative sentences),对每个句子随机抽取负图像(negative images),生成负训练数据。在这个任务中,其用二元分类损失进行优化。
Aligning Image Pixels with Text by Deep Multi-Modal Transformers 2020
多模态任务的一大难点是:不同模态之间存在语义鸿沟(semantic gap),在之前的工作中,例如VQA,Image Captioning中,使用在图片分类任务中预训练的CNN来获取图片特征。后来,随着attention机制的提出,大多数视觉-语言方法使用了利用目标检测模型获取到的region-based视觉特征。
然而,region-based特征抽取器为特定视觉任务设计,这会导致与语言理解的鸿沟。一些重要的视觉信息缺失,例如图中物体的形状,空间关系,以及重合等。此外,这种语义表示能力仅仅被局限在任务所使用的模型包含的语义类别中,对于不在范围内的对象,则不能获取到语义信息。部分视觉信息丢失:物体形状、空间关系(overlap)、情感表征能力被objectlabel的种类限制。
a)句子编码:采用跟bert一样的编码方式。 b)图片编码:对图片进行卷积,池化,最后得到一个特征矩阵(元素为特征向量),对其进行采样后,每个元素与一个semantic embedding相加,相当于一种偏置。最后展平,得到最终的像素特征编码。 c)多模态编码:将两种表示拼接在一起,过TRM,得到最终的表示。 d)任务:MLM任务和图片-文本匹配任务
【ECCV 2020】Object-Semantics Aligned Pre-training for Vision-Language Tasks
提出了一种新的学习方法Oscar,它用图像中检测到的对象标签作为锚点,在一个共享的语义空间中对齐图像和语言模态。在一个有650万个图像-文本对的公共语料库上对Oscar模型进行了预训练,验证了Oscar的有效性。
将词符、对象标签、区域特征作为输入,增加mask token loss和contrastive loss。
【KDD 2020】Vision-and-Language Interaction for Multi-modal Pretraining
提出跨度更大的mask和高阶交互特征后保持模态独立性方法
【NeurIPS 2020 】Large-Scale Adversarial Training for Vision-and-Language Representation Learning
预训练和微调在本质上是紧密联系的。模型的训练需要掌握本质的推理技巧,从而促使模态融合,进行跨模态的联合理解。 通过在 pre-training stage,执行对抗训练, 改善的泛化能力对微调阶段也是有益的; 在微调阶段,任务相关的微调信号变得可用,对抗微调可以用于进一步的改善性能。 由于 pre-training 和 finetuning 共享同一个数学表达式,同样的对抗算法可以在两个阶段都采用。
freelb(对抗训练)+多模态预训练目标
【AAAI 2021】Knowledge Enhanced Vision-Language Representations Through Scene Graph
当人们看一张图的时候,首先会关注图中的物体(Objects)以及特点属性(Attributes)和期间的关系(Relationships)。如:“车”、 “人”、“猫”、“房屋” 等物体构成了图片场景中的基本元素;而物体的属性,如:“猫是白的”,“汽车是棕色的” 则对物体做了更精细的刻画;物体间的位置和语义关系,如:“猫在车上”,“车在房屋前” 等,建立了场景中的物体的关联。因此,物体、属性和关系共同构成了描述视觉场景的细粒度语义(Detailed Semantics)。
图片信息代表着视觉上最基础,最直观的信息。而更深层的语义信息,比如图像的内涵,历史背景,人物动作,因果关系推理等。
基于此观察,将包含场景先验知识的场景图(Scene Graph)融入到多模态预训练过程中,建模了视觉-语言模态之间的细粒度语义关联,学习到包含细粒度语义对齐信息的联合表示。
提出了三个多模态预训练的场景图预测(Scene Graph Prediction)任务:物体预测(Object Prediction)、属性预测(Attribute Prediction)、关系预测(Relationship Prediction)。
除了场景图预测,增加掩码语言模型(Masked Language Modelling)、掩码图像区域预测(Masked Region Prediction)、图文对齐(Image-Text Matching)等任务
【ICML 2021】Vision-and-Language Transformer Without Convolution or Region Supervision
基于patch projection的多模态方法,提升了速度,但是整体上性能还是略低于region feature的方法
文本特征输入部分,将文本看成一个词序列,通过word embedding matrix转化成word embedding,然后和position embedding进行相加,最后和modal-type embedding进行concate。
图像特征输入部分,将图像切块看成一个图像块序列,通过linear projection转化成visual embedding,然后和postion embedding进行相加,最后和modal-type embedding进行concate。
其中word embedding和visual embedding通过可学习的modal-type embedding标志位来区分,其中0标志位表示word embedding部分,1标志位表示visual embedding部分。
word embedding和visual embedding分别都嵌入了一个额外的可学习[class] embedding,方便和下游任务对接。
ViLT预训练的优化目标有两个:一个是image text matching(ITM),另一个是masked language modeling(MLM)。
【openai 2021】Learning Transferable Visual Models From Natural Language Supervision
将分类模型转换成图文匹配任务,用文本来弱监督图片分类。PET在视觉分类上的应用,用「4亿对」来自网络的图文数据集,将文本作为图像标签,进行训练。进行下游任务时,只需要提供和图上的concepts对应的文本描述,就可以进行zero-shot transfer。用linear prob进行评估,在27个数据集的平均分数甩了其他模型好几条街。同时有20个都比ImageNet训练出来的开源SOTA表现好,并且在256个GPU上训练两周就好了。
从CLIP的流程中可以看出,CLIP和PET的prompt使用方式非常相似,A photo of a就是一个人为设计的prompt。
「后续的CoOp感觉就是对应p-tuning,完成PET->P-tuning的发展」
【ACL 2021 】Towards Unified-Modal Understanding and Generation via Cross-Modal Contrastive Learning
已有的预训练模型主要是单独地针对单模态或者多模态任务,但是无法很好地同时适应两类任务。同时,对于多模态任务,目前的预训练模型只能在非常有限的多模态数据(图像-文本对)上进行训练。本文提出了一个统一模态预训练框架UNIMO,能够有效地同时进行单模态和多模态的内容理解和生成任务。UNIMO的优点在于可以利用大量的开放域文本语料和图片集来提高视觉和文本理解能力,同时采用了跨模态的对比学习(CMCL)在数据增强后的图片-文本对数据集上进行学习获得将更多的文本和视觉信息映射到一个统一的语义空间。得益于使用了丰富的非对齐单模态数据,UNIMO能够学习到更广义的特征表示。
论文融入单模的文本、图片和图文pair,采用双流的模型,提出跨模态对比学习。文本侧通过回译、tf-idf检索出正样本,通过场景图解析和改写生成强负例。视觉侧通过目标检测和tf-idf检测出正样本。对于CMCL,每一个图像-文本对正样本会和几个通过句子改写的难分负样本、以及几个通过检索的图片正样本和文本正样本拼接起来;其他图像-文本对的所有样本也会视为负样本。
UNIMO 很大的优势是能同时使用单模数据和多模数据进行预训练,从而利用大规模数据学习更强大的统一模态语义表示。为了验证单模数据的有效性,论文还进行了分离实验。实验结果表明,当不使用文本单模数据进行预训练的时候,UNIMO 在多模任务上效果有所下降。而当不使用多模图文对数据和图像数据的时候,UNIMO 在文本理解和生成任务上同样会下降。这充分说明了单模数据在统一模态学习中的有效性,也说明了 UNIMO 模型可以有效利用不同模态数据进行跨模态联合学习。
【openai 2021】Zero-Shot Text-to-Image Generation
传统的文本到图像生成方法是侧重于找到更好的建模假设,方便在固定数据集上进行训练。但这些假设可能涉及到复杂结构、auxiliary losses(辅助损失)或者在训练过程中提供的目标部分标签或分割掩码等侧面信息。在本文中,作者使用一个简单的方法来处理该任务,该方法基于 transformer,将文本和图像 token autoregressively models(自动回归)建模为单一数据流。在有足够数据和规模的情况下,所提出方法在以零样本评估时,与之前的特定领域模型相比具有竞争力。gpt做图片生成的难点在于,图片patch信息都是连续的,不是很好像nlp一样做成离散的token。DALLE生成的是256×256的图片。具体的做法是把图片分成32×32个patch,每个patch通过discrete VAE映射到8192大小的词表里。从而图片构成了1024个token。和256的句子拼接一下,最后是1280的token序列。这个discrete VAE是参考VQVAE做的,不明觉厉。这种离散的token,可能会演变成visual transformer自监督预训练的通用做法。
从以上流程可知,dVAE、Transformer和CLIP三个模型都是不同阶段独立训练的。 DALL·E中的Transformer结构由64层attention层组成,每层的注意力头数为62,每个注意力头的维度为64,因此,每个token的向量表示维度为3968。attention层使用了行注意力mask、列注意力mask和卷积注意力mask三种稀疏注意力。文本不满256个token时,使用pad embed填充,文本token需要加上pos embed,图片token需要加上行列的embed,这些embed都是可学习的。
如今,AI在一些细分领域逐渐向人类发起挑战,如围棋(AlphaZero)、蛋白质结构预测(AlphaFold)等等,DALL·E则是对绘画、设计领域向人类发起挑战。
通过对多模态预训练任务的梳理,我们可以发现,现有预训练任务主要有两大类,
目前的多模态预训练模型相关工作已经取得了一定的进展,在多个下游任务上有了不俗的表现。未来的工作可能从以下几个方向取得进一步的进展,
Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer.
现在的模型越来越大,训练样本越来越多,每个样本都需要经过模型的全部计算,这就导致了训练成本的平方级增长。为了解决这个问题,即将大模型拆分成多个小模型,对于一个样本来说,无需经过所有的小模型去计算,而只是激活一部分小模型进行计算,这样就节省了计算资源。那么如何决定一个样本去经过哪些小模型呢?这就引入了一个稀疏门机制,即样本输入给这个门,得到要激活的小模型索引,这个门需要确保稀疏性,从而保证计算能力的优化。
首先MoE是一个层,而不是一整个模型。其次,正如我们刚才所说,这个模型结构包含一个门网络来决定激活哪个expert,同时包含n个expert网络,这n个expert网络一般是同结构的。
保证稀疏性和均衡性,对这个softmax做了处理,第一个变动就是KeepTopK,这是个离散函数,将top-k之外的值强制设为负无穷大,从而softmax后的值为0。第二个变动是加了noise,这个的目的是为了做均衡,这里引入了一个Wnoise的参数,后面还会在损失函数层面进行改动。
如果不做改进,那么这么多的expert,只有几个expert会被集中使用。为了改进这一问题,采用软性约束方法。我们定义对于一个批次训练样本的专家重要度(the importance of an expert),即该专家在一个批次上的门控输出值的和。并且定义损失项加入到模型的总损失上。该损失项等于所有专家重要度的方差的平方,再加上一个手工调节的比例因子。这个损失项会鼓励所有专家有相同的重要度。
Training Multi-Billion Parameter Language Models Using Model Parallelism 2019
利用模型并行方法解决大模型训练的问题,侧重张量Tensor并行提升训练速度。实现了简单而高效的模型并行方法,成功突破了传统单个GPU训练的限制。
矩阵分解
Memory Optimizations Toward Training Trillion Parameter Models 2019
解决每个gpu都存整个模型的参数,导致显存超出的问题,减少显存,增加计算开销。当前分布式训练主要的三种并行模式:数据并行、模型并行和流水线并行。在三种并行方式中,数据并行因其易用性,得到了最为广泛的应用。然而,数据并行会产生大量冗余 Model States 的空间占用。
ZeRO 有三个不同级别,分别对应对 Model States 不同程度的分割 (Paritition):
最后我们总结zero优化后的训练步骤流程,我们以Pos+g+p这个模式为例: 初始状态: 假设有Nd个gpu,则每个gpu(gpu_n)保存总参数的1/Nd;并且保存这些参数对应的梯度、优化器状态(P_n,G_n,O_n);参数可以按层划分;每个gpu_n同时还负责分配到自己身上的数据data_n(数据并行); a.正向计算第一层时,gpu_n将自己负责的参数(P_n)广播给其它所有的gpu;后面的模型层以此类推;最后每个gpu_n获得自己对应数据data_n的loss_n; b.进行反向计算,此时需要gpu_n将自己负责的参数(P_n)广播给其它所有的gpu,最后计算得到对应于数据data_n的梯度; c.将第二步的梯度聚合到对应的gpu_n上,每个gpu负责更新自己的P_n,G_n,O_n; 进行下一次迭代 从这个训练流程,可以看出,传递参数过程中它使用了广播的方式,而梯度聚合过程则使用了类似Allreduce中reduce-scatter的模式,但不再需要进行all-gather,因为每个gpu只需要更新自己负责的部分参数。
Scaling Giant Models with Conditional Computation and Automatic Sharding ICLR 2021
第一个把MoE结构引入Transformer结构的工作,GShard将Transformer中的Feedforward Network(FFN)层替换成了MoE层,并且将MoE层和数据并行巧妙地结合起来。在数据并行训练时,模型在训练集群中已经被复制了若干份。GShard通过将每路数据并行的FFN看成MoE中的一个专家来实现MoE层,这样的设计通过在多路数据并行中引入All-to-All通信来实现MoE的功能。
其实就是把原来的FFN(两层全连接)替换成了MoE结构
Scaling to Trillion Parameter Models with Simple and Efficient Sparsity 2021
将语言模型的参数量扩展至 1.6 万亿,简化了MoE路由算法,只将 token 表征发送给单个专家。研究表明,这种简化策略保持了模型质量,降低了路由计算,并且性能更好。将这种 k=1 的策略称为 Switch 层。如果将太多 token 发送给一个专家(下文称为「丢弃的 token」),则会跳过计算,token 表征通过残差连接直接传递到下层。但增加专家容量也不是没有缺点,数值太高将导致计算和内存浪费,最后应用到t5模型上。