【多模态大模型】系列2:Transformer Encoder-Decoder——BLIP、CoCa、BEITv3
目录
- 1 BLIP
- 2 CoCa
- 3 BEITv3
1 BLIP
BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
BLIP是 ALBEF 原班人马做的,基本可以看做吸收了 VLMo 思想的 ALBEF。训练的 loss 和技巧都与 ALBEF一致,属于 ALBEF 的后续工作。
BLIP 的两个关键点都包含在标题内,一是bootstrapping,是数据方面的改进,指的是用含噪声的数据训练出模型后,再用某些方法得到更干净的数据,用这些干净的数据训练出更好的模型;二是unified,指的是 BLIP 作为一种encoder-decoder架构,不只能做 understanding 类的任务(如VLMo介绍的下游任务),也能做generation 类的任务,如图像字幕 image captioning。
BLIP 的模型总览图如下图所示,图中相同的颜色表示相同的参数。BLIP 模型共包含四个网络。图中左侧是一个标准的 ViT 模型,用于处理图像数据。右侧三个网络都用于处理文本数据:
- Text Encoder,提取文本特征,用于与视觉特征计算 ITC 损失,Text Encoder 不与视觉特征计算交叉注意力。
- Image-gounded Text Encoder,与视觉特征计算交叉注意力,提取文本特征用于计算 ITM 损失。
- Image-gounded Text Decoder,与视觉特征计算交叉注意力,用于进行 LM 语言建模训练。为了进行语言建模训练,需要 mask 掉后面的单词,因此该网络的注意力层是 Causal SA,而非 Bi SA。
与 ALBEF 一样,BLIP同样采用动量模型为 ITC 生成伪标签;同样使用 ITC 为 ITM 进行难负例挖掘。BLIP 的整个模型称为MED(Mixture of Encoder and Decoder)。虽然看起来模型很多,但实际上大部分网络是共享参数的,因此实际模型参数增加并不多。和ALBEF的区别是 fusion的text是直接输入的,不是从文本的encoder获取的,因为参数共享,不用劈成两份了,第一个文本编码器和第二个文本编码器基本一样。
除了模型结构的创新之外,BLIP 的另一个贡献在数据清洗方面,其方法流程下图所示。图中 I 和 T分别表示图像数据和文本数据;红色、绿色字体分别表示噪声较大、较小的文本;下标 h , w , s 分别表示人工标注数据、网络数据和模型生成数据。
BLIP 先使用含噪声的数据训练一个 MED 模型,然后将该模型的 Image-grounded Text Encoder 和 Image-grounded Text Decoder 在人工标注的 COCO 数据集上进行微调,分别作为 Filter 和 Captioner。Captioner 为图像数据生成对应的文本,FIlter 对噪声较大的网络数据和生成数据进行过滤清洗,得到较为可靠的训练数据。再根据这些可靠的训练数据,训练更好地 MED 模型,从而实现 bootstraping 训练。
2 CoCa
CoCa: Contrastive Captioners are Image-Text Foundation Models
CoCa(Contrastive Captioning),看方法名称就能猜测出它是使用对比损失和文本生成损失进行训练,实际上也的确如此,CoCa 的模型框架如下图所示。从结构上看来,CoCa 与 ALBEF 十分接近,都是左侧网络处理图像,右侧网络劈开,前半段处理文本,后半段进行多模态交互。与 ALBEF 最大的不同在于,CoCa 左侧处理文本和进行多模态交互的网络是一个文本解码器(Text Decoder)而非文本编码器。目标函数为 ITC 对比损失和文本解码器的语言建模损失 。使用文本解码器,模型能够处理生成式多模态任务(如 image captioning)。并且,CoCa 在图像编码器的最后使用可学习的 attention pooling 进行降采样。另外,CoCa 没有使用 ITM 损失,减少了模型参数每次迭代所需前向传播的次数,大大降低了训练时间。
CoCa 的性能对比实验采用了一种十分新颖的多边形图的方式来展现,非常直观、非常震撼地展示了 CoCa 相对于现有工作的性能提升。图中各多边形的每个顶点是一个任务或一个数据集。绿色和蓝色多边形分别是 微软的 Florence 和谷歌自己的 SimVLM 模型的性能,棕色部分不是一个模型的性能,而是每个任务或数据集上现有所有方法的最佳性能。而 CoCa,在所有任务上,打败了所有的现有方法。多边形图的形式十分适合多模态表征学习预训练这种任务、数据集、指标众多的研究领域,能直观地展示出自己方法对于现有工作的全方位的提升。后续的 BEIT-3 等工作也采用了这种作图方式。
3 BEITv3
Image as a Foreign Language: BEiT Pretraining for All Vision and Vision-Language Tasks
BEiT v3的目标就是:做一个更大一统的一个框架。不论是从模型上还是训练的目标函数都要统一。用简单的一句话概括就是把图像也当成一种语言。最大的亮点:用统一的multi-way transformer (mixture of experts ) 架构和单个masked modeling loss,将任意模态看做是同一个模态来建。
BEITv3 本文并没有提出特别新的技巧,主要是将本组的 VLMo、BEITv1v2、VL-BEIT 整合并做大做强,展示了多模态领域的统一框架能够达到怎样的性能。其模型结构和目标函数如图 13 所示。模型结构就是之前介绍过的 VLMo 中的 MoME,自注意力层权重共享,根据不同的输入来选择不同的 FFN 专家。与 VLMo 不同之处在于训练的目标函数,是大一统的 masked data modeling,即遮住部分数据,要求模型还原出被遮住的数据。
如下图 所示,BEiTv3 在单模态和多模态的数据上进行掩码数据建模(masked data modeling) 对 Multiway Transformers 进行预训练。预训练完成后,模型可以迁移到视觉任务和 VL 多模态任务上。
骨干网络 multiway transformer:BEiTv3 的骨干网络为 multiway transformer,实际上就是 VLMo 的模型 MoME。该网络的 transformer block 中的自注意力层是共享的,而 FFN 层(模态专家)则有三种,分别针对文本、图像、图文,当接收不同类型的输入数据时,数据会通过对应的 FFN 层进行计算。
预训练任务 masked data modeling:BEiTv3 在单模态、多模态数据上,通过一个统一的掩码数据建模任务进行训练。在训练时,随机掩码掉一定比例的 token,然后训练模型恢复出被掩码的 token。统一的掩码数据建模不仅能够学习数据的表示,还能学习对不同模态数据进行对齐。BEiTv3 中,使用 SentencePiece 对文本数据进行 tokenize,使用 BEiTv2 中使用 VQ-KD 训练得到的 tokenizer 对图像数据进行 tokenize(得到离散的视觉 token),作为重构目标。
大一统的 BEITv3 具有极高的灵活性,可以处理视觉、文本各自单模态以及视觉文本多模态的各种任务。BEITv3 用于各种下游任务的示意图如下图所示。(a)、(b) 中,仅使用视觉编码器或文本编码器,BEITv3 可以处理视觉文本各自领域的单模态任务;(c)中,使用视觉编码器和文本编码器提取特征之后,再经过多模态交互,相当于 Fusion Encoder 多模态模型,适合于处理推理类多模态任务;(d) 中,分别使用视觉编码器和文本编码器提取特征之后计算相似度,相当于 Dual Encoder 多模态模型,适合于处理检索类多模态任务;(e) 中,将输入文本 mask 掉,可用于 image captioning 这种生成类多模态任务。就像搭积木一样,大一统的 BEITv3 模型可处理视觉、文本领域各类任务。