今天周二,有点小忙,估计下周会好一些。2023 年每周/一篇博文分享,欢迎关注~
这是一篇视觉语言预训练的文章,用的对比学习思路。
视觉语言预训练的目的、作用。指出目前在预训练阶段存在语言混淆问题,同时需要大量的计算资源在下游任务上微调。本文提出简单、有效的学习对比视觉语言的自适应表示方法 Contrastive and Adaptive representations of Vision and Language,即 CAVL。具体来说,在预训练过程中引入一组成对的对比损失来对齐整个句子和图像,在微调阶段引入两个轻量化的自适应网络来减少模型的参数及节约计算资源,加快训练速度。在 6 个数据集 VQA、VCR、NLVR、RPG、TIR、零样本 ZS-TIR 上性能很好,且减小预训练时间 76.17%。
视觉语言预训练近期很火,关键在于如何聚合视觉语言多模态信息,但目前的预训练阶段,视觉语言间存在语义混淆,即误匹配问题,于是当迁移到下游任务时,预训练模型会花费较长的时间和资源来微调。
本文提出 CAVL,涉及对比预训练和自适应微调。具体来说,应用一个成对的对比损失 Pair-wise Contrastive Loss (PwCL) 来学习整个句子和图像间的对齐:最大化正确对的视觉语言 embedding 余弦相似度,最小化错误对 embedding 的余弦相似度。为了减少微调阶段的训练时间,在 CAVL 中引入两个轻量化的自适应网络来学习自适应表示。其中一个自适应器采用一个捷径 block 来获得特征任务的特征,并从预训练模型的输出 block 中得到融合后的通用特征。另外一个自适应器在 BERT 的每一层注意力和前项传播模块结尾处应用一个瓶颈结构。
实验在 6 个数据集 VQA、VCR、NLVR、RPG、TIR、零样本 ZS-TIR 上进行,效果很好。本文贡献总结如下:
自监督对比学习在视觉表示预训练中很火。之前的方法采用无监督、自监督、弱监督和有监督的方法从图文对中学习视觉表示。最近的 CLIP 有着类似于 GPT 系列的零样本预测能力。此外,介绍了 BriV、MoCo。本文提出在训练阶段采用一个成对的对比损失来减缓视觉语言 embedding 间的误对齐问题。
主要有两种框架:BERT、GPT,本文引入基于 BERT 的框架。
UNITER、ERNIE-ViL、LXMERT、VisualBERT、VL-BERT、CVLP、DocFormer。CVAL 不同于最近的 ConVIRT 在于:在自然语言监督下,ConVIRT 应用对比损失来训练医疗图像分类的模型,而本文关注于解决视觉语言之间的误对齐问题;ConVIRT 分别通过图像编码器和文本编码器来产生视觉和语言 embedding,然而本文在单个 BERT 中联合两个编码器,提出的成对对比损失能够使模型学到更好的图像文本对齐表示。
本文提出的 PwCL 损失不同于 Unicoder-VL 提出的 VLM 在于:Unicoder-VL 引入的是全连接层来预测整个图像和句子间的得分,而 PwCL 则是无需参数的通过点乘来计算视觉语言的余弦相似度;VLM 损失仅仅采样单个负样本,并利用 cross-entropy loss 作为双线性分类层来学习对齐,然而,本文提出在 batch_size 为 B B B 的批量中采样 B 2 − B B^2-B B2−B 个负样本以最大程度解决误匹配问题。
自适应是微调 BERT 模型的一种重要方式,通过更新少量参数节省时间和计算资源。本文提出两个轻量化的自适应器来实现特定任务上的性能,并减少微调参数和成本。
关于 BERT 的介绍,这里略过。BERT 的预训练:Masked Language Modeling (MLM) 和 Next Sentence Prediction (NSP)。
CAVL 由对比预训练和自适应微调组成,前者用于缓解预训练阶段的视觉语言混淆,后者用于减少微调时的训练时间和 GPU 内存使用量。
主要由 3 部分组成:语言预训练,视觉预训练、视觉语言对比融合的预训练
对于预训练语言 embedding,输入包含三种类型:句子中的每个词的 embedding e t e^t et;表示词源于句子的哪个部分的分割 embedding e s e^s es;位置 embedding e p e^p ep。三者求和得到上下文表示 e n e_n en, n ∈ { 1 , 2 , ⋯ , N } n\in\{1,2,\cdots,N\} n∈{1,2,⋯,N},其中 N N N 为句子中词的数量。之后将 e n e_n en 送入 Transformer 中得到 e i ′ e_i^{\prime} ei′,MLM 和 NSP 作为预训练方法。
利用目标检测框架,如 Faster R-CNN 来提取图像的 ROI 区域作为输入 f k f_k fk, k ∈ { 1 , 2 , ⋯ , K } k\in\{1,2,\cdots,K\} k∈{1,2,⋯,K},其中 K K K 为 ROIs 的数量。 f k f_k fk 同样由三种类型的视觉 embedding 组成:表示每个图像的 ROI 特征 embedding f i f^i fi;表示图像的 embedding 属于哪个部分的分割 embedding f s f^s fs ;位置 embedding f p f^p fp。接下来采用 Visual-BERT 中的预训练方式,从文本中分割出两条字幕,其中一条作为 GT 来描述图像,模型有 50% 的概率来区分出所选字幕是否对应 GT。
在尺寸为 B B B 的 batch 块中计算每个视觉 embedding F b ′ F_b^{\prime} Fb′ 和 语言 embedding E b ′ E_b^{\prime} Eb′ 的余弦相似度,其中 b ∈ { 1 , 2 , ⋯ , B } b\in\{1,2,\cdots,B\} b∈{1,2,⋯,B}。之后,在相同的 batch 中学习整个句子和图像的相似度:最大化正确 B B B 对视觉语言 embedding 的相似度,最小化错误 B 2 − B B^2-B B2−B 对视觉语言 embedding 的相似度。模型将根据相似度的得分应用成对对比损失来优化。
具体来说,定义成对对比损失 Pair-wise Contrastive Loss (PwCL) 如下:
L PwCL = − log ∑ i = 1 B ( E i ′ ⋅ F i ′ ) ∑ i = 1 B ∑ j = 1 B 1 i ≠ j ( E i ′ ⋅ F j ′ ) \mathcal{L}_{\text{PwCL}}=-\log\dfrac{\sum_{i=1}^B(\mathbf{E}_i'\cdot\mathbf{F}_i')}{\sum_{i=1}^B\sum_{j=1}^B\mathcal{1}_{i\neq j}(\mathbf{E}'_i\cdot\mathbf{F}_j')} LPwCL=−log∑i=1B∑j=1B1i=j(Ei′⋅Fj′)∑i=1B(Ei′⋅Fi′)其中 E i ′ \mathbf{E}_i^\prime Ei′ 和 F i ′ \mathbf{F}_i^\prime Fi′ 分别为语言 embedding 和视觉 embedding, 1 i ≠ j \mathcal{1}_{i\neq j} 1i=j 为索引函数, E i ′ \mathbf{E}_i^\prime Ei′ 和 F i ′ \mathbf{F}_i^\prime Fi′ 如果对齐则为 1,反之为 0。
注意:这一对比预训练方法不同于 CLIP,首先本文主要解决的是视觉语言误对齐问题,其次本文将两个编码器联合送入一个 BERT 模型,而 CLIP 采用的是一个图像编码器和文本编码器来产生视觉语言 embedding。
在微调阶段设计一种自适应方法,核心 idea 来源:冻结模型中提供基础信息的部分,更新产生特定任务特征的部分。于是提出一种在预训练模型中使用捷径 block 来融合预训练模型的输出,即自适应器 Ⅰ。预训练模型得到图像和文本的泛化特征,捷径 block 作为选择神经元来捕捉每个特定任务的特征。之后应用一个输出 block 来联合泛化的特征以及特定任务的特征得到最终的结果。与预训练模型相比,仅有少量的一些层在捷径上,于是能够减少训练时间。
在每个 BERT 层上增加一个瓶颈结构,记为自适应器 Ⅱ。具体来说,在注意力模块和前项传播层的结尾添加一个自适应器。自适应器的输入和输出直接输入到 LayerNorm 层。在微调过程中,冻结注意力模块和前项传播层。因此自适应本质是一个投影模块,将泛化的特征映射到特定任务特征上。自适应器 Ⅱ 包含一个线性层,GELU 激活函数和另一个线性层。
预训练在 MS COCO 和 Visual Genome 数据集上,应用预训练的 Faster R-CNN 来提取 ROIs(每张图像 100 个目标,NMS 阈值 0.5),SGD 优化器,batch size 512,10 epochs,在前 15% 的迭代步上使用 warm-up。在 4 块 V100-32G 上预训练 88 个小时,微调 40 个小时(估计1千多,有点费钱哇)。
上表 1。
上表 4。
本文提出 CAVL,包含的成对对比损失能够减小视觉语言在预训练时的语义混淆,包含的两个轻量化自适应器能够节约微调阶段的时间,在 6 个数据集上表现很好。
写在后面
这篇文章思路比较简单,但显然创新点没达到顶会要求,另外论文写作水平不太敢恭维,写了太多重复的废话。投稿一般的会议估计没啥问题,工作量足够。