多模态论文串讲·上【论文精读·46】只用 Transformer encoder 的一些方法viLT、clip、ALBEF、VLMO

目录

简单回顾一下 viLT

简单回顾CLIP

总结后提出改进

1 ALBEF

1.1 主体方法

1.1.1 模型结构

1.1.2 目标函数

1 ITCloss:align before fuse的align

2 ITM loss

3 MLM loss

1.1.3 动量蒸馏

1.2 预训练数据集

1.3 下游任务描述

1.4 实验结果

1 消融实验

2 图文检索任务

3 vqa, vr,ve任务

1.5 总结

2 VLMo

2.1 研究动机

贡献1:模型结构的改进,更灵活

贡献2:分阶段的训练策略

2.2 实验结果

2.3 总结


       大家好,今天我们就来过一下多模态的串讲,其实之前我们也讲了很多工作了,比如说clip,还有 ViLT 以及 clip 的那么多后续工作。多模态学习在最近几年真的是异常的火爆,那除了普通的这种多模态学习,比如说视觉问答,图文检索这些。那其实之前讲的所有这种 language guided 的 detection 或者 language guided segmentation 这些任务,它都是多模态,而且包括最近大火的这种文本图像生成或者文本视频生成,我们耳熟能详的DALLE2、 stable diffusion、Phenaki video、imagen video。那所有的这些通通都属于多模态学习,那我们这期多模态串讲可能更多的还是讲传统的这种多模态学习。也就是说当下游任务是这种图文检索,就是 image text retrieval 或者VQA这个视觉问答,或者 visual reasoning 就是视觉推理,还有就是 visual entitlement 视觉蕴含,就是这些传统的多模态任务。但即使如此,相关的工作也是多得数不胜数。

        我们这个串讲的第一部分应该就是讲一下只用 Transformer encoder 的一些方法,比如说之前的这个 viLT、clip,还有我们今天要讲的ALBEF和VLMO。

        然后在第二部分。我们会讲到用 Transformer encoder 和 decoder 一起的一些方法,比如说blip,Coca, BEIT V 3 以及Pali。

简单回顾一下 viLT

        那在我们开始讲ALBEF之前,那我们先简单回顾一下 viLT和CLIP。鉴于 viLT论文里这个图 2 真的是总结的比较好。我们就先从这张图开始。

        那 vilt那篇论文的研究动机其实就是为了把这个目标检测从这个视觉端给拿掉。原因很简单,因为你用一个预训练的这个目标检测器去抽这个视觉特征的时候,它就会面临很多很多的这个局限性,我们之前也都讲过了。但是直到21 年之前,也就是在 vision Transformer 出现之前,很难有什么很好的办法能把这个预训练的目标检测器给移除掉。

        所以说最早期的工作,比如说这个分类 a 具有一些 VSE 或者 VSE ++的工作,他们的文本端就是直接抽一个文本特征,但是他们的视觉端就非常的大,也就是说他需要的这个计算量非常的多,因为它是一个目标检测器,然后当得到了这个文本特征和视觉特征之后,它最后只能做一个很简单的这个就是模态之间的交互,从而去做这种多模态的任务。

        那后续这些工作也就是这个分类 c 里的工作,就像我们耳熟能详的这个 Oscar 或者 Vilbert Uniter,他们发现对于这种多模态的任务来说,最后的这个模态之间的交互是非常重要,只有了这个模态之间更深层的这个交互,对于这种 VQA、VR、VE 这些任务来说效果才会非常的好。所以他们就把最初的这种简单的点成的这种模态之间的交互就变成了一个 Transformer 的encoder,或者变成别的更复杂的模型结构去做这种模态之间的交互,所以这些方法的这个性能都非常非常的好。但是随之而来的缺点也很明显,就是说所有的这一系列的工作,它统统都用了这个预训练的这个目标检测器。而且再加上这么一个更大的模态融合的部分,这个模型不论是训练还是部署都非常的困难。

        所以说当 vision consumer 出来之后,vilt这篇论文也就应运而生了,因为他们发现在 vision Transformer 里,这种基于 patch 的视觉特征其实跟之前这种基于 bonding box 的视觉特征也没什么太大的区别,它也能很好的拿来做这种图片分类或者目标检测的任务。那这样呢,我们就可以把这么大的一个预训练好的这个目标检测器直接就换成一层 patch embedding,就能去抽取这个视觉的特征了,所以大大的降低了这个运算复杂度,尤其是在做推理的时候。但是如果你的文本特征只是简单的 tokenize 一下,视觉特征也只是简单的 patch embedding 一下,那肯定是远远不够的。那所以对于多模态任务来说,这个后面的模态融合非常关键,所以 vilt就把之前 c 类里的这些方法的这个模态融合的方法直接借鉴了过来,用一个很大的 Transformer encoder 去做这种模态融合,从而达到了还不错的这个效果。那因为移除掉了这个预训练的目标检测器,而换成了这个可以学习的这个 patch embedding layer,所以说 vilt模型极其的简单。它虽然作为一个多模态学习的框架,但其实就跟 NLP 那边的框架没什么区别,无非就是先都 tokenize 了一下,然后直接扔给一个 transformer 去学习了,所以非常的简单易学。但是vilt也有它自己的缺点,那首先第一个缺点就是它的这个性能不够高。 vilt在很多任务上是比不过 c 类里的这些方法的,原因之前其实我们也讲过很多遍了,对于现有的这些多模态任务而言,有可能是这个数据集的BIAS,也有可能是这个任务就需要更多的这个视觉能力,但总之我们是需要更强的这个视觉部分。简单来说。就是我们视觉的那个模型应该要比文本的那个模型要大,最后的这个效果才能好。但是在 vilt 里,文本端用的 tokenizer 其实是很好的,但是 visual embedding 是random initialize。所以它的效果自然就很差。其次vilt虽然说它的这个推理时间很快,但其实它的训练时间非常非常的慢。我们后面也会提到,在非常标准的一个 4 million 的 set 上。vilt需要64张GPU,而且是 32 G的GPU训练三天。所以它在训练上的这个复杂度和训练上的这个时间丝毫不亚于这个 c 列的方法,而是有过之而无不及。所以它只是结构上简化了这个多模态学习,但没有真的让这个多模态学习让所有人都玩得起。

简单回顾CLIP

        所以基于这两个局限性,其实今天我们要讲的第一篇论文ALBEF就已经呼之欲出了。不过在讲ALBEF之前,我们还是要快速地回顾一下这个 CLIP 模型,也是非常简单的一个结构,它是一个典型的双塔模型,就是它有两个model,一个对应文本,一个对应视觉。然后在训练的时候就是通过对比学习,让这个已有的这个图像文本对那这个在空间上拉得更近,然而让不是一个对的那个图片文本就拉得尽量更远,从而最后学到了非常好的这个图像文本特征。然后一旦学到很好的这个图像文本特征之后, CLIP 只需要做这种很简单的点成就能去做这种多模态任务,尤其是对那种图像文本匹配或者图像文本检索的这种任务来说, CLIP 简直就是神一样的存在。因为它不光效果好,而且很高效。因为往往你去做。这种图像文本匹配或者图像文本检索任务的时候,你是有一个很大的已有的数据库的。这个时候如果你新来一张图片或者新来一个文本,你要去跟已有的数据库去做匹配。那其他所有的方法,比如说这里的a、c、 d 都会非常的慢,因为它所有的数据都要过一遍这个编码器,但是 CLIP 模型就不用,它可以提前把那个数据库里所有的这个图像文本的特征提前都抽好。而且是想什么时候抽就什么时候抽,抽好放在那就行了,等你真正想用的时候直接就做一个点乘就好了,那矩阵乘法还是相当快。所以说 clip 的这个实际应用非常的广泛,但是 clip 模型也有它自己的缺陷,它虽然对这种图文匹配的任务非常在行,但是对别的任务,比如说VQ、 v VR、 VE 这些任务来说,它的性能就不够好了,因为毕竟光靠一个简单的点成还是不能够分析特别复杂的情况。

总结后提出改进

        那回顾到这儿,我们现在就来捋一捋,总结一下之前的这些方法,哪些是好的,哪些是不好的,那我们接下来该提出怎样的改进?

        首先我们就来看这个模型的结构。那因为我们有图像的输入和文本的输入。那刚开始的模型肯定是有两分支的,因为他要去抽这个图像文本特征,但是我们一直都在强调在这个多模态学习里,这个视觉特征远远要大于这个文本特征。

  1. 所以我们知道使用这个更大更强的这个视觉模型,比如说一个更大的这个VIT是好的。这我们需要坚持使用的。
  2. 同时作为这个多模态学习,这个模态之间的融合也是非常关键的,我们也要保证这个模态融合的这个模型也要尽可能的大。

        那所谓总结完了之后,我们就大概知道最后如果想做一个很好的这个多模态学习,它的这个网络结构就应该很像这个c。也就是说它这个文本编码器应该比这个图像编码器要小,然而这个多模态融合的这个部分要尽可能的大。当然这里的这个视觉模型肯定不想要再用一个这个目标检测模型了。所以更多的是我们会采取一个比较大的这个 vision Transformer,而不是简单的一个 patch embedding 去做。总之模型结构大概就是长这个样子,

        那模型有了,接下来该怎么去训练?

  1. 那之前我们知道这个 clip 模型,就用了一个这个对比学习的loss,也就是这个 image text contrasted,这个 ITC loss 训练效果就已经很好了,所以我们知道这个 ITC loss 应该是不错的,而且训练也很高效,我们应该采纳。
  2. 那对于之前 c 类的这种方法,他们往往因为有这个目标检测,所以他们提出了一个 loss 叫做 word patch alignment,就是这个文本的一个单词和这个图像上的一个patch它应该有一个这个对应关系。但是因为现在这个目标检测模型已经没有了,而且在 VILT里头我们发现这个 WPA loss 算起来是非常的慢的,所以才导致这个VILT模型训练起来这么费劲。所以我们就不太想要这个 WPA loss 了。
  3. 然后剩下常用的还有两个loss,一个就是这个我们耳熟能详的 mask language modeling,也就是 Bert 的训练方式,遮住一个词,然后再去预判这个词完形填空。那这个 loss 肯定是非常有用,因为到现在为止,不光是 NLP 还是vision,基本都大一统的全都用mask modeling。
  4. 那另外还有一个image text matching loss 在之前 c 和 d 的这种方法之中都取得了很好的结果,所以我们也想继续采纳

        那我们这轮总结完之后,我们就会发现,可能对于一个好的这个多模态学习的模型结构来说,我们的目标函数应该也就是这个 ITC 加 ITM 和 MLM 这三个的这个合体,最后的效果应该就不错。

        那现在如果我们直接跳过来看ALBEF的这个论文的模型结构,其实就会发现我们通过总结做出来的这些预测基本都是正确的。

        比如从模型结构来说,在图像这边的这个编码器其实就是一个 12 层的这个 Transformer base model

        但是在文本这边他把一个 12 层的一个 Bert model 劈成了两个部分,前半部分就是前六层拿来做这个文本的编码器,后面的这六层用来去做那个多模态融合的编码器。所以这就满足了我们刚才做的两个假设。第一个假设就是这个图像编码器会比文本编码器要大,因为这边是 12 层 transfer block,这边只有 6 层 transmer block,那另外一个就是模态之间的融合也必须要大,所以这里面并不是一个简单的点乘,而是使用了 6 层的这个Transformer block。所以这就跟我们之前做出来的假设这个模型结构是一模一样。

        那另外,从这个目标函数上来说,ALBEF就是用了这个 image text contrastive  loss(ITC loss)和这个 image text matching 和 mask language modeling 这三个loss 的合体去训练了这个模型。

        那之所以我们能通过之前的一些对比和总结。得到接下来研究方向的一些假设,而且真的被一些后续的工作所验证。这个其实完全不是巧合,因为大部分工作的这个出发点或者它的研究动机其实就是在总结前任工作这个优缺点之中得到的。所以如果大家没有一些研究的idea,或者说不知道接下来这个研究方向该怎么走的时候,还是需要去阅读更多更相关的文献。而且不光是读这些文献,更重要的是要做一个总结,每一篇论文你都得到了什么样的insight,有什么东西是可取的,可以继续发扬光大的?有什么东西是不好的?最好我能把它移除掉。通过这种不停的阅读总结、对比。不说100%,但绝大多数时候都是应该能够给你一个很明确的研究方向。

1 ALBEF

        那接下来我们就开始精读今天的第一篇论文ALBEF。ALBEF叫做Align before Fuse: Vision and Language Representation Learning with Momentum Distillation那其实方法的名字就来自于 ALIGN before fuse——ALBEF。作者团队全自来自于Salesforce research。那这个团队在做出 ALBEF这个论文之后,又相继做了BLIP,还有must。还有 video 那边的ALPro,一系列多模态的工作,质量都很高,所以大家如果有时间都可以去读一读。

        然后摘要上来就说最近这个就是图像文本的这种大规模的特征学习已经变得非常火爆。因为这个时候clip 还有 align 这些工作都已经出来了。那些基于clip 的后续工作都已经出来很多了。所以说这个方向在 21 年的时候真的是非常非常的火。但是到现在还是很火。作者说大部分已有的方法都是用一个 transform 模型去当做这个多模态的一个编码器,去同时编码这个视觉的 token 和这个文本的token。而这里作者还专门强调这里的这个视觉token,也就这个视觉特征,其实就是 region base 的这个图像特征,因为在那个时候大部分之前的这个工作都还是用这个目标检测器的。但虽然ALBEF 跟 vilt 它的这个出发动机都是说我不想要这个目标检测的模型,但是细节上还是有差异的。 vilt只是说用了这个目标检测模型以后速度太慢了,我想让它这个推理时间变得更快一些。但是 ALBEF的出发的动机就不一样。它是说你用了这个预训练的目标检测器之后,你这边的这个视觉特征和那边的文本特征其实不是aligned。因为你的目标检测器是提前训练好的,然后就只用抽特征,它没有再进行这种 end to end 的这个训练,所以这就导致你的这个视觉特征和那边的文本特征可能相隔得很远。那这个时候把这两个特征同时扔给这么一个多模态的这个编码器之后,有可能这个编码器就不好学,也就作者这里说的,对于这个多模态的编码器来说,可能去学这种图像文本之间的这种交互信息就会变得很challenging。那怎么去解决这个问题?三个贡献

  1. 也就是说如何在这种 Multi model encoder 之前,你就去把这个图像和文本的特征 align 起来?作者这里就说我们提出了一个这个对比学习的loss,就能把这个图像和文本在 fusing 之前就把他们align 上了。所以顾名思义也就是他们论文的题目,也就是align before fuse。那这个contrast loss 是什么呢?其实就是 clip 的那个训练loss,就是图像文本的 contrast loss——ITC。具体之后我们会讲,所以这个就是论文的第一个贡献,也就是作者认为最重要的贡献,那甚至拿这个贡献了来命名他们的方法。
  2. 那接下来还有什么贡献?因为已经有了 CLIP 和 view 特这一系列的工作,所以大家都知道了,你就用 patch embedding,就用 vision Transformer 就可以了,那所以说 ALBEF也是这么做的,那自然而然这样 ALBEF也就不需要这种 bounding box annotation,也就不需要预训练的这个目标检测器,自然输入图像也就不需要是那种目标检测需要的高分辨率的图像。但这个因为 clip 和 vilt 已经有了,所以作者就不过多复述了,那更多的是作者要讲下一个它的contribution。
  3. 作者这里说为了能够从这种特别 noisy 的这种网上爬下来的数据去有效地学习这种文本图像特征,所以作者提出了一个方法叫做 momentum desolation。也就是一种自训练的方式去学习。那自训练你一听大概率其实就是用 Pseudo label,也就用伪标签。那伪标签从哪儿来?肯定得是有额外的一个模型去提供这个伪标签,那在这篇论文里,就是除了已有的模型之外,作者还采用了 MOCO 那篇论文里提出的这个 momentum encoder 的形式,从而使用这个 MOMENTUM model 去生成这种 Seudo target,从而达到一个这个自训练的结果。那这个Noisy Web data 到底有多Noisy?它为什么是 Noisy 的?是因为所有这个图像文本对儿就是从网上直接爬下的这些图像文本对儿,在很多情况下,它那个文本并没有很好的去描述这个图像。能从网上大规模爬下来的那些文本,其实它有名字叫做Alt text。也就是alternative text,就是另外一种形式的文本。它并不是说。如果你有一幅青山绿水的画儿,上面有几个人在玩儿,他就会说有几个人在一个山下面玩儿,旁边有一个小溪,他是不会这样去写的,因为这样的文本不具备关键词,也就是说对于那些搜索引擎来说它具不具备价值?对于搜索引擎来说最具备价值的东西都是关键词,就他需要的:比如说你喝的饮料,你不能说我在喝饮料,你得说我在喝可口可乐,或者你自己在说我在喝冰红茶,或者是哪个牌子的冰红茶,这样子当大家去搜的时候,他就会搜到这张图片。同样的道理你去哪个著名的旅游景点打卡的时候,你也不能说我看到了一座山,也不是搜索引擎想看到的,他想看到的是你去了哪座山,你去了哪个旅游景点。所以这个时候。其实从搜索引擎下来的这些图片文本对,它里面的文本都是这种具备搜索属性的,但是不是那种特别好的描述性的一个句子,他们有时候甚至真的没有去描述这张图片里是什么内容。它可能就是一些关键词,一些hashtag。所以说这里作者为什么啊?想要去解决这个问题,因为你的数据如果大多数都是这种很 noisy 的数据对的话,那可能不太能学到一个很好的这个文本特征表示。而事实上,作者不光在ALBEF里这么做,它在后续的blip里头。它也针对这个问题还去设计了一个模块叫做 caption filtering。这个我们下一期会讲到去解决这个 Noisy Web data 的问题。同样还有很多其他的论文也针对这个 noise data 的问题提出了很多不同的解决方式。但总之我就是解释一下这里为什么会有这个 noise Web data 的问题。其实之前我记得有一篇论文做了这个数据清洗的工作,他们当时就是把那个 YFC c 100 million 那个数据集给清洗了一下,只通过很简单的一些方式直接就把 100 million 给筛选到15M。就是把 5/ 6的数据都筛掉了,都是 Noisy 的。只有1/ 6 可能质量还比较高,可以用来训练。所以可见这个Noisy 的程度是非常高的。

        好,那说完了文章的两个contribution,第一个 contribution 就是 align before fuse,其实就是用了 clip 里的这个 contrast loss。然后第二个 contribution 就是为了克服这个 noisy data,提出了一个用 momentum model 去生成 Pseudo target,从而做这种自训练的方式。然后作者就是通过这个互信息最大化的这个角度去做了一些理论分析。结论就是说文章里的这些训练的目标函数,包括 LIM ITM,还有就是 momentum decilation,其实它们最终的作用都是为同一个这个图像文本盾去生成不同的这个视角,其实也就是变相的在做一种这个 data augmentation,从而让最后训练出来的模型具备 semantic preserving 的功能。就是说只要是语义匹配的这个图像文本对,它就应该被当成是一对。那 contribution 也说完了,理论分析也做了,最后就是秀一下结果。作者这里说在这个图文检索的任务上, ALBEF的效果是最厉害的,它比之前的方法,尤其是有一些模型,在这种特别大的数据史上训练过的模型其实说的就是 clip 和line, ALBEF的性能还反超他们。然后在 VQA 和 VR 这些任务上, ALBEF也比之前的这个 state of fart 要绝对的提升了 2. 37%,还有 3. 84% 的这个准确度,而且这个推理时间也更快了。最后代码其实也开源了在这个 Salesforce 下面, ALBEF他们的这个模型在正规的那个 4 million 的训练数据集下,能做到一个8卡机,可能是训练三四天的时间。已经是多模态学习里头比较亲民的或者说最亲民的一个方法了。所以其实我这边很多后续的工作也全都是基于ALBEF 做的。

1.1 主体方法

        那因为是论文串讲,所以说这个引言部分和相关工作部分我就直接跳过了,我们直接来看文章的这个主体方法部分。第三章那 3. 1 和 3. 2 分别讲了这个模型的结构,以及模型在预训练的时候用的三个loss函数。这些内容其实我们通通可以通过看图一都能了解到,那我们先来看模型结构。

1.1.1 模型结构

        那其实刚才也大概说过了,那现在我们就讲的更细致一些,

        那首先我们来看一下图像这边。那图像就是给定任何一张图片,那按照 vision Transformer 的做法,我们就打把它打成patch,然后通过 patch Embedding layer,然后送给一个 vision Transformer:其实这就是一个非常标准的 12 层的 vision Transformer 的base 模型。那如果这里的图片是 224 * 224 的话,那我们之前也说过,那它这里的这个 sequence lens 就是196,然后加上额外的一个这个 CLS token,那就是197,然后它的这个特征维度就是768,所以说这里面这个绿黄色的这个特征就是 197 乘以768。但是在这篇论文里,作者也说了,在预训练阶段他们用的这个图片是 256 * 256,所以说这里这个绿色的这个 sequence lens 就会相应的再长一些。那总之这个vit的模型是没有什么可讲的,就是非常标准的。而且它的这个预训练参数其实也就是用的DEIT,也就是 data efficient vision Transformer 那篇论文里在 imagenet one k 数据集上训练出来的一个初始化参数

        那文本这边儿其实就有点儿意思。那按道理来说,如果你先把 ALBEF这个模型看成是一个 clip 模型的话,其实就是左边儿一个VIT,右边儿一个 Bert model,那如果你在这上直接去做对比学习的话就变成 CLIP 了。但是我们刚开始在介绍的时候也说过,这个多模态的任务它就必须得有一个多模态的这个融合的一个过程。如果你只是单纯的有一个图像模型,然后还有一个文本模型的话,没有这个多模态特征的融合,他做这些 VQA、VR 任务的时候效果就不会很好。那有人可能就会说,那我就在这个一个 vision consumer 和一个 bert model 上面,我再加一个这个 Multi model 编码器不就行了吗?当然也是可以这么做的。但这样你的计算量就进一步加大了。而且我们之前也提到过说这个视觉模型是应该比这个文本模型要大一些的,这样子它在多模态的这些任务上效果才会好,那所以综合这两方面考虑,最简单直白的一种方式——那就是说我把文本这边的这一个大模型给 p 开, p 成两个部分,我只用前六层去做这个文本编码,因为本来我就希望这个文本编码器的比这个图像编码器要弱一些,然后把剩下的那 6 层 Transformer encoder 就直接当成这个模态融合的过程,这样一举两得,跟之前的方法保持同样的计算复杂度。但是我满足了之前总结出来的这个最优配比。那至于文本模型这边,其实它就是用一个 Bert 模型去做的这个初始化,然后它中间的这个特征维度也是768,然后它也有这么一个 CLS token,代表了整个句子的这个文本信息,那到这儿就把 ALBEF的基本的模型结构讲完了。

        当然了, ALBEF这边为了去做后面的这个momentum distillation。而且为了给这里的 ITC loss 提供更多这个negative,所以说它还有一个MOMENTUM的model。也就是说除了这个 VIT 和这个 Bert 这份模型参数之外,它还有这边对应的有一个 VIT 和 Bert 另外的一份模型参数。而这边的这个模型参数是由这边在训练的模型参数通过 moving average 得到,也就是这个 MOMENTUM model,这个就跟 MOCO 是一模一样。这里通过把 moving average 的那个参数设得非常高,在论文里是 0. 995,从而来保证这边的这个 MOMENTUM model 不会那么快的更新,所以说它产生的特征就更加的稳定,不仅可以拿来做更稳定的这个 negative sample,而且还可以去做这种momentum distillation。这个具体我们会在回头在momentum distillation里提到。总之整个模型结构就是长这个样子了。那接下来我们就来说一下这个目标函数。

1.1.2 目标函数

1 ITCloss:align before fuse的align

        首先我们就来说一下最开始遇到的这个itc loss。那说到对比学习,我们之前就知道只要你能定义一个正样本对,然后定义很多负样本对,然后我们就可以去对比了,我们希望这个正样本对之间的距离越来越近,希望正负样本对之间的距离越来越远。那首先我们要做的就是去抽取这种全局特征,然后在这个特征之间去做这种 embedding space 上的这种拉近和拉远。

        那在 ALBEF里,首先一个图像 i 它通过这个 vision Transformer 之后就会得到这些得到特征,那这里我们把这个黄色这个 CLS token 也就当做它的这个全局特征,也就是一个 768 * 1 的一个向量。那文本这边也一样,先是tokenize,之后就把这个文本 text 变成一个 tokenization 的序列,然后我们把它扔给一个 Bert 的前六层,得到了一系列的特征,那这边的是 CLS talk,也就当做了这个文本的全局特征是一个 768 * 1 的向量。

        那接下来的操作跟 MOCO 是一模一样的。首先我们先做一下下采样和 normalization 就把这个 768 * 1 变成了 256 * 1 的一个向量,同样的,这个文本这边也是 768 变成 256 * 1。那一旦你有了这个正样本的两个特征,就是这两个特征,你就希望它尽可能的近,那它的负样本全都存在一个 q 里,这个 q 里有 65536 个负样本,就很大很大的一个q。但因为它没有gradient,因为它是由这个momenta model 产生的,所以说它并不占很多内存。那这样,因为你有很多很多的这个负样本,然后你通过这种正负样本之间的这个对比你就可以去对这个模型进行第一阶段的学习了。这其实也就是作者在这篇文章中说的 align before fuse的align。也就是说在我们把这个图像特征和这个文本特征扔到这个 Multi model Fusion 的 encoder 之前,我就已经通过这个 ITC loss——这个对比学习的loss,让这个图像特征和文本特征尽可能的拉近了,尽可能的在同一个 embedding space 里了。那因为这里的 ITC loss 的这个实现是完全按照 MOCO 来的,就是算了一个 cross entry loss,所以这里我就不过多复述了。那有了这个ITC loss 之后,其实这个 vision transform 的 12 层和这个 Bert 的前六层其实都可以训练了。但是Bert的这个后六层也就这个多模态的这个融合部分该怎么训练?

2 ITM loss

        那我们就先来说一下这个 ITM loss,也就是 image text matching其实很简单,就是说你给定一个图片,给定一个文本,而这个图像文本通过这个 ALBEF的模型之后,就会出来一个特征,那在这个特征之后加一个分类头,也就是一个 FC 层。然后我去判断到底这个 i 和 t 是不是一个对,那说白了这个 ITM 就是一个二分类任务。那这个 loss 虽然听起来很合理,我们确实应该用它,但是实际操作的时候你会发现这个 loss 太简单了因为判断正样本可能还有点难度,但是判断谁和谁是负样本,这个就太简单了。因为如果你不对这个负样本做什么要求,那基本上很多很多的这个图片/文本,它都可以当成是现在图像/文本内的负样本,所以这个分类任务很快它的准确度就提升了很高很高。那在预训练的时候,训练再久其实也没有任何意义了。那这个时候一个常见的做法,就是说我在选这个负样本的时候,我给它一些constrain。那在 ALBEF这篇论文里,它就是采取了最常用的一个方法,就是通过某种方式去选择最难的那个负样本,也就是最接近于正样本的那个负样本。具体来说。那在 ALBEF这篇论文里,它的这个 batch size 是512,那对于 ITM 这个 loss 来说,它的这个正样本对就是 512 个。那对于这个 Mini batch 里的每一张图像,我去哪儿找它的这个 hard negative 的文本,这个时候 ITM 还依赖于之前的这个ITC,他就把这张图片和同一个 batch 里所有的这个文本都算一遍这个 cosine similarity,然后他在这里选择一个除了他自己之外相似度最高的那个文本当做这个negative。也就是说其实这个文本和这个图像已经非常相似了,它基本都可以拿来当正样本用,但是我非说它是一个负样本,也就是 hard negative 的定义。那这个时候 ITM loss 就变得非常 challenging 了,然后让这个模型更好的去判断谁到底是一个图像文本对,也就是他这里说的 image text matching。

3 MLM loss

        那最后一个目标函数就是我们耳熟能详的 mask language modeling Bert 里用的完形填空,那其实就是把原来完整的句子这个 text t 变成一个 t',也就是说有些单词被musk 掉然后他把这个缺失的句子和这个图片一起,通过这个 ALBEF的模型,然后最后去把之前的这个完整的句子给预测出来。那在这里其实它不是像 NLP 那边单纯的一个 MLM 了,它其实也借助了图像这边的信息去帮助它更好的恢复这个哪个单词被 mask 掉。

        但这里有一个小细节很值得关注,就是说在我们算这个 i t c loss 和这个 i t m loss 的时候,其实我们的输入都是原始的 i 和t,但是当我们算这个 m l m loss 的时候,它的输入是原始的i,但是mask过 的t。这意味着什么呢?这说明 ALBEF这个模型每一个训练的iteration,其实它做了两次模型的forward。一次模型的forward 是用了这个原始的 i 和t,另一次模型的 forward 是用了原始的 i 和mask过 的t。当然了,不光是 ALBEF这篇论文会有这种多次前向的这个过程,其实 vilt 包括之前的很多模型,它都会做好几次前向,甚至做三次前向过程。这也是其中一个原因。就是为什么多模态学习普遍的方法,它的训练时间都比较长,因为它为了算好几个不同的loss,它还得做好几次不同的 forward 去满足各种各样的条件。那到这儿三点儿一和三点儿 2 节就讲完了,最后我们可以看到在文章的这个公式5,这个 ALBEF的所有在训练时候用的这个目标函数就都在这里了,就是 ITC MLM 和 ITM 的这个合体。

1.1.3 动量蒸馏

        那说完了模型结构和所有的这个目标函数,接下来我们就来说一下这篇文章的另一个贡献,也就是这个 momentum distillation 啊,动量蒸馏。那作者上来。就先说他为什么要做这个动量蒸馏,它的这个动机是什么?主要就是这个Noisy的 Web data。这个其实我们在讲摘要的时候也说过了,就是从网上爬下来的这些正的这个图像文本对,其实它经常都是这个weekly correlated。就它们之间的关联不是那么强,有的时候甚至都不匹配,经常的情况就是说它里面的那个文本有的时候会包含很多单词,就是说其实跟这个图像没什么关系,或者说这个图像里也包含很多的物体,但是在这个文本里并没有得到体现。那这个时候这种 noise 的 data 会造成什么影响?那主要就是在算这个目标函数的时候,这个有时候就会有偏差。比如说我们在算这个ITC,就是对比学习的 loss 的时候。对于一张图片来说,它的这个所谓的负样本文本其实很有可能也描述了这个图像里的很多内容,它可能不是爬下来的那个 ground truth 的 one hot 的那个 image text pair,但是其实这个文本可能已经很好的描述了这个图像。甚至可能比ground truth 描述的还好,但是我们非要把它当成是一个负样本,那这个时候就会对 ITC 的学习造成很大的影响。另外对于这个 MLM loss 来说,完形填空,那其实我们做过那么多年的完形填空,也知道有很多时候这个空里是可以填很多单词的,有的时候是会存在这种 比ground truth,还要描述这个图片更好,或者说差不多好的这个文字出现。所以综合这些考量,作者最后的结论就是说,你用这种 one hot label 就是你从网上爬下来的,就是这个图片和这个文本就是一对,其他跟它都不是一对的。这种 one hot label 对于 ITC 和 MLM 这两个 loss 来说是不好的,因为有的负样本也包含了很多很多的信息,一味的在算 loss 的时候去惩罚这些负样本,其实会让模型的学习非常的困难。

        那既然这个问题是由这个 Noisy data 里的 one hot label 带来的,那很直接的一个想法就是说我如果能找到额外的这个监督信号,最好它不是 one hot,它是 Multi hot,或者说它就是另外一个模型的这个输出不就好了吗?那这个时候这两年比较火的一种方式叫做 self training,就是自训练,就很自然的能够应用到这个场景里来解决这个问题。从最开始Google 的 Noisy student 在 Imagenet 上把分刷的那么高,还有到最近自监督的这个DINO,它其实也算是一种自训练模式所以说作者这里也就采取了这种方式,就是先构建一个 MOMENTUM model,然后用这个动量模型去生成这种 Pseudo targets。那这个Pseudo targets 其实就是一个Softmax score。它就不再是一个 one hot label 了。

        那具体这个动量模型是怎么构建的?那其实就是在已有的模型之上去做这种 exponential moving average EMA。那这个技术其实是很成熟的,大部分的这个代码库里都是支持这个 EMA 的,包括这个 DEIT、swing Transformer 都是自带EMA 的。它的目的就是说在这个模型训练的时候,我们希望在训练原始的这个 model 的时候,我们不光是让它的这个预测跟这个 ground truth 的 one hot label 去尽可能的接近,我们还想让它这个预测跟这个动量模型出来的这个 Pseudo targets 去尽可能的match,那这样就能达到一个比较好的折中点。就是说很多的信息我们从 one hot label 里去学,但是当这个 one hot 的 label 是错误的或者是 noisy 的时候,我们希望这个稳定的 momentum model 能够提供一些改进。

        那具体我们现在拿 ITC loss 做个例子来说的话,

        原来我们的 ITC loss 就是这个LITC。但是因为它是基于这个 one hot label,所以这个时候我们想希望再算一个 Pseudo target loss 去弥补它的一些缺陷和不足。那后面的这个 loss 跟前面这个loss,也就是 equation1里的这个 ITC loss 的不同,就把这个 ground truth 了换成这个 q 就是这个Pseudo targets。那因为现在q 不再是一个 one hot label,而是一个 Softmax score,所以这里面我们算这个 KL divergence,而不是cross centropping。那最后因为我们有两个loss,一个是原来的这个ITC,一个是现在的基于seudo target 的ITC,所以说我们分别给他一减阿尔法和阿尔法的这个 loss weight,最终就得到我们这个 momentum 版本的这个 ITC loss。

        同样的道理,对于这个 MIM loss 来说,

        它也是用这个新生成的这个 Pseudo targets 去代替了原来的 ground truth。所以在原始的这个 MLM loss 之外,我们现在又有一个新的基于这个自训练的这个 MIM loss。

        所以最终ALBEF的这个训练 loss 其实有 5 个,就是有两个ITC,两个MLM,一个ITM。那这个时候大家可能会想为什么 ITM loss 我们不也给它一个自训练,给它一个这个动量模型的版本。是因为 ITM 这个 loss 本身它就是基于 ground truth 的,它必须要知道你是不是一个pair,它就是一个二分类任务。而且在 ITM 里我们又做了 hard negative这跟 momentum model其实又有conflict。所以说ITM并没有动量的这个版本。

        那讲完了这两个新的loss,作者还在这个图 2 里给了一些这个lease,其实就是为了证明给你看,就是这些 Pseudo target 其实是比 ground truth 那个 image text pair 要更好的,能起到更好的这个监督训练作用。那我们现在来看图2。

        首先上面这一行主要是来讲这个 MIM loss,下面是讲ITC loss。我们可以看到对于这个图片来说,如果我们把文本里的就 Polar pair in the 什么地方,这个给 Musk 掉,它的那个 ground truth 是说 in the wild 就是在野外的一个北极熊。但其实由这个动量模型产生的这个 top five 的这个 Pseudo targets 来说,其实有的时候更准确,比如说在动物园或者在这个游泳池里,在水里、在池塘里,这些应该是比这个 ground truth 的 wild更具备描述性的。尤其是你拿这个图像文本对来学习模型的话,其实后面的这些这个pool, water pound 这些应该是比这个 white 要好很多的,因为它确实描述了这个图片里的这个水。那后面的这两个例子也差不多的情况,那比如说最后一个例子,他说在这个森林里有一个瀑布, ground truth 是说有一个很远的瀑布。但是你从描述这个图片本身出发,其实后面的这些pseudo targets 应该是更好的。比如说一个小瀑布或者一个美丽的瀑布,或者这种隐约的瀑布,其实都远比这个 remote 这个单词要描述的更形象。那这个是对于完形填空,就说这个空里其实有很多别的单词是比这个 ground truth 要表现更好的。

        那对于ITC loss 来说,当你有一个图片的时候,你有一个这个对应的 ground truth 的这个文本,而下面那些就是从整个这个数据集里去挑出来的别的这种pseudo targets。然后我们会发现其实这个 ground truth 说这个有一辆车在路上抛锚了,并不能很好地描述这张图片,因为这张图片里的主体还有另外一个人,但是所有的这些 pseudo targets都很好的描述出来了,有一个这个年轻的女人,有一个女人,所以她都把这个主体人给描述出来了,而且这里面也都有车,而且甚至还把这个树也描述出来了。所以这就再次验证了我们之前说的那个问题就说从网上爬下来的这些图像文本对,很多时候这个文本是并不能描述这个图片了。那作者这里的这个图 2 的这些例子就举的是非常好,一下就让你看到了使用这个pseudo targets的好处。到这儿其实文章的这个主体方法部分就讲完了,两个contribution,一个是 align before fuse,另外一个是 momentum distillation。

        接下来我们就来快速过一下文章预训练时候用的数据集和这个下游任务的一些任务描述和数据集,以及最后的一些实验结果。

1.2 预训练数据集

        那接下来我们就看这个3.4,在预训练的时候使用的数据集,这个还是比较标准,作者上来就说我们是 follow 这个之前的这个uniter,他们一共用了四个数据集来预训练,分别是 conceptual captions, SBU captions、这个 Coco 和 visual genome。前面两个数据集都比较大,这个 CC conceptual captions其实有两个版本,一个是 CC 3 million,一个是CC12 million。那在这里他说的是 3 million,所以就已经 300 万了。这个 SBU caption 其实就是1million,然后 Coco 和 Visualinum 分别都只有 10 万,所以加起来是有 400 多万张图片

        那但这里面有两个点值得说一下。第一个点就是,虽然 Coco 和 visual genome 是原来的作者,就已经提供了这个数据,所以你永远都可以下到原始版本的数据,谁都不会缺少。但是对于前面这两个,这个 CC 3 million 和 SBO caption 这两个数据集来说,原来的那个论文作者只是提供了一个 URL 的list,你如果想用这个数据集,你得自己去下,那这就会导致一个数据缺失的问题。随着这么多年过去了,其实我们自己在下的时候,像这个 CC3 million,我们就只能下到 2. 3 million 的图片了,就是少了 70 万个图片,那像这个 SBO caption,大家能下到的也就只有 80 多万,就是也不到一million了。所以说这里面也比较tricky,就是你预训练的时候用的数据,应该和别人都不一样,每个人和每个人都不一样,但因为这个数据集本身也 比较noisy,所以你有的时候差个几万个这个图像文本,对对最后的这个训练影响也不是很大,但如果你差个几十万,那其实一般还是会有一些影响的所以以后大家如果想做什么任务,看到一个什么新的数据集,不管你做不做,如果感兴趣的话你可以先把这个数据集下着,免得以后真想做这个数据集的时候,因为缺失数据,所以总比不过别人的分

        那第二个想强调的点就是说对于前面这两个数据集来说,它都是一个图片对应一个文本,但是对于后面这两个数据集来说,它其实是一个图片对应好几个文本。那比如说像 Coco 这里,一张图片就对应了五个文本。所以也就是作者这句话说的意思,就说这个不一样的图片一共有 400 多万,这个是对的,但是是其实这个图像文本对有 500 多,那多出来的这 100 多万的这个图像文本对,其实就是因为这个 Coco 和 visual genome 每个图片它都有额外的这个文本所导致。

        然后最后作者还做了一个实验,因为 ALBEF的一个非常大的contribution,就是说这个 momentum decision,也就是说处理这个数据集里的这个 noisy 的问题。如果你扩大这个数据集,就是用更 noise 、更大的一个数据集去训练的时候,是不是就能获得更大的成效?那在这篇论文里确实如此,当他们使用了这个 CC 12 million 的时候,就是第五个数据集的时候,他们把这个数据集总共就扩大到 14 million, 1400 万这么大,就跟 image net 21K 那么大,这个时候他们在各个下游任务上的性能又猛涨了一波。

        总之,在 Albuff 这篇论文里,它的这个预训练数据集就有两个setting,非常标准,一个就是这个4million的setting,就是有四个数据集一个就是这个 14 million 的setting,就是把这个 CC 12 million 也加进去了。这两个 setting 是最常被用的,包括之前 19 年、 20 年,一直到现在 22 年都是比较常用了。现在这个预训练数据集规模也越来越大,大家很多人已经不满足于使用,就是只有 14 million 这么多图像文本对了,这个开源的这个 Lion 已经有了 400 million,而且已经有了 two billion, five billion 这么大的数据集,所以以后这个多模态的预训练方面可能不是一般人能玩得动的了。那说完了预训练时候用的数据集,接下来我们就看一下这个下游的这个vision language 的任务。

1.3 下游任务描述

        ALBEF这篇论文做的还是比较全面的,前后做了 5 个任务

        第一个就是这个图文检索,当然这个里面包含了这个图像到文本的检索,还有这个文本到图像的检索。那其实在现实应用中还有文本到文本的,其实也就是搜索,还有图像到图像的,以图搜图。总之这个问题是非常关键的,商用价值也非常的高。但具体问题很好理解,就是说给定一个数据库,我们怎么去搜到这个 ground truth 的这个图像文本对,因为是检索,所以我们衡量的这个指标就是这个recall召回。一般用的是R1,R5,R10。也就是说在你检索回来这1个5个或者10个 sample 里面有没有这个 ground truth sample,如果有,就算你找到了。

        那接下来几个任务分别是这个 visual entailment,也就是视觉蕴含。它其实就是说给定一个假设一个前提,我能不能去推理出这个前提,如果能推理出来,我就说是一个蕴含的关系,也就是这个interment。如果说前后矛盾推不出来,就是这个contradictory。如果没什么关系,你也不知道推得出来还是推不出来,那就是中立就是neutral。所以其实一般情况下大部分工作都把这个 visual entailment 变成了一个这个三分类的问题。那因为你是分类问题,所以很自然你的这个衡量的指标就是分类准确度

        那至于 VQ a 任务来说,大家应该也是耳熟能详了,就是视觉问答,顾名思义就是给定一个问题,然后给定一个图片,你看你能不能回答这个问题提供一个这个answer。VQA 其实很有意思,它一般有两个setting,一个就是也看作是一个分类问题,它的这些答案都是固定的,就是就那么一个set,我从里面去选,那这样就变成了一个 Multi answer classification 的问题。比如说对于 VQ V2. 0 这个数据集来说,它就有一个提前设定好的 3192 个answer,那这个一般就被称作叫做闭集VQA,就因为你这个 answer 的 set 是个闭合的集合。然后另外一边相应的肯定就是开集VQA意思就是说反正你要去生成一个答案,也就是说你要生成一个文本,所以你是一个这个文本生成的任务,也就是说你是需要一个 transformer decoder 去生成这个answer,那这个开集 VQA 它的这个任务难度就大了很多,因为你有可能生成了正确的答案,或者说很相似的答案,但是它跟 ground truth 不一致,而这个时候还是会被判错。ALBEF这篇论文,虽然说他们是做了这个 answer generation的问题,但是他们在做推理的时候还是把这个生成的答案限制到了那 3192 个答案里,所以严格意义上来说它也不算那么的开集,问题还是稍微简化了一些。而且也还是一个分类问题,所以说衡量指标也还是准确度

        那第四个任务就是这个 visual reasoning 视觉推理,这个任务就是去预测一个文本能不能同时描述一对儿图片。所以它是一个二分类任务问题,当然这个衡量指标也是准确度

        然后最后一个任务是这个 visual grunding视觉定位就是确定图像或视频中与给定语言描述相对应的区域,但其实 visual grounding 属于它自己的一个领域。很多这个多模态表征学习的论文里都不会去涉及这个 visual grounding 的任务,都是专门做 grounding 的论文,会去刷这些 visual grounding的数据集,所以这里我们就不过多复述了。

1.4 实验结果

1 消融实验

        最后。终于到了这个看结果的时候,作者首先是做了一个这个消融实验来验证他们文章里提出来的这么多东西,到底哪个有用,哪个没用。消重实验一般也是我最爱看的部分,因为可以得到很多有用的insight。

        那首先作者把这个用了 MLM 和 ITM training loss 的这个当作了baseline,因为基本上所有的之前的工作和现在的工作里面都会有这两个loss,所以这就像一个出发点一样,既然所有人都有,我就可以把它当做一个基线模型去对比了。

        那首先作者就给上面加了这个ITC,也就是 align before fuse 里的align。然后我们就会发现这个提升是非常巨大的,基本这里是两个多点,三个点,然后三个点,两个点的提升。而且是在这么多任务上,这个检索 v e、VR、 VQA 四个任务上都有明显的提升,所以这个 ITC loss 真的是YYDS。也就是说CLIP、Moco 这种对比学习的方式还是很厉害,即使是 mask modeling 当前非常火爆的情况下,我觉得这个对比学习还是有值得挖掘的点,或者值得有继续做下去的潜力的。

        那接下来的一个小贡献就是作者在这 ITM 里提出的这个 heart negative,这个我们可以看到大概都有0.5 左右的这个提升,虽然看起来不是那么显著,但是毕竟所有任务上都有提升,所以也是相当不错的一个技巧。这个也是意料之中,毕竟在对比学习出来之后,有很多篇论文大家都去研究这个 hard negative 对比学习的影响,而且 hard Navity 这个概念在很早之前就有,而且应用到了各个方方面面的领域,甚至是目标检测或者物体分割里面也都有 hard negative的应用。

        那最后我们就来看一些这个 momentum distillation,也就这里这个简写mod。但其实我们可以看到,如果给这个 ITC 上加这个MOD,大概就是 0. 3 左右的这个提升,然后给这个 MIM 上加了MOD,就只有再有额外的可能 0. 1 左右的提升,然后最后是在 Downstream 的就是下游任务上再去做MOD,然大概会有 0. 3、0. 1、0. 2 左右的这个提升。总之如果是在预训练阶段的这个 MOD 来看的话,它总共的提升可能也只有 0. 3、0. 4 个点,甚至还比不过这个hard negative。所以相对于使用 ITC loss 或者 hard negative,或者使用更大的数据集所有的这些因素来讲,这个 momentum distillation带来的提升不是那么大。但是这个研究方向还是很好的。怎么从Noisy data 里去学习有效的表征,我觉得也是一个非常有趣的研究方向。

2 图文检索任务

        那接下来我们可以再快速看一下在每个具体任务上 ALBEF的表现。首先这个表2、表 3 都是做的这个图文检索,我们先从表 3 开始说,就是这个 Zero shot 的图文检索。

      Zero shot 其实就是跟 CLIP 模型一样,就我先预训练好一个模型,那我接下来就直接抽特征,然后去算 cosine similarity,我就可以直接检索走起。我是不需要在下游任务上去做 fine tuning。但因为Coco 这个数据集已经在预训练的时候被使用过了,不论他有没有用 Coco 里的这个标签,严格意义上来讲我都不能再在 COCO上去做 Zero shot 了。所以说作者这里只是在这个 flake 30K 上去做了这个Zero shot。然后作者这里说,你看我们这个 ALBEF多么的强,我们只在 4 million 的这个数据集上去训练,然后这个 Zero shot 的结果就比之前这个 clip 和 align 在 400 million 或者1. 2 billing 上训练的模型的结果还要好。但其实这里面有一个小点需要注意的就是,其实 lbuff 这里说的 zoshot 只是针对于 Flicker 的 Zero shot,它其实在预训练完之后还在 Coco 那个数据集上又做了一遍,有标签就是有监督的 fine tuning,但是 clip、align 其实都是直接做zero shot的,所以这也算是方法各显神通,毕竟这个 CLIP和 align 这个预训练的数据集太大了。

        那反过头来。我们看这个 fine tuning 的setting,也就是说在Flickr 上去做 fine TUNING 或者 Coco 上去做 fine TUNING。 lbuff 也是比之前的这个align,还有之前的这些United, Oscar 这些 SOTA 的模型都要好不少。尤其是我们可以发现,当用了这个更大的数据集,就更多的这个 noise data 之后,可能 momentum desolation 还是起到了应有的作用,所以这个的性能提升非常的显著。

        那另外一个小点。其实要说的就是 Flaker 30K 这个数据集其实也已经被刷爆了,我们可以看到这都已经到 100 了,而且 Coco 也已经非常的高了。所以说图文检索领域其实是需要新的数据集了,有可能是一个更大的数据集,也有可能是一个 annotate 的更好的数据集,或者是一个视频文本的这个检索数据集。总之这也算是一个可以填的坑。

3 vqa, vr,ve任务

        那接下来。我们一起看表4,作者其实就把vqa, vr,ve 这三个任务全都放到一个表格里了,因为它们都变成了一个分类问题,它们都用准确度来衡量,所以说很容易就放在一个表格里显示就好了。那同样我们可以看到,跟之前最强的这个 Oscar 比,那这个 ALBEF4 million 其实就已经比它都要好了。或者跟我们之前讲过最新的这个vilt比,那就更不用说了。 vilt的性能其实是比较差的。它只是说它的推理时间比较快而已,尤其当 r buff 上了 14 million 这个训练数据集之后,这个性能在三个数据集上都是非常之强的。

1.5 总结

        ALBEF这篇论文还有很多别的消融实验,还有很多别的细节,还有一些非常不错的这个可视化,但这里我们就不一一复述,感兴趣的同学可以自己去看。总之, ALBEF不论是在训练速度上,还是在推理速度上,还是在这个通用性,或者在这个性能表现上都是非常的亮眼。而且它还及时开源了它的代码,所以真的算是去年阿多模态学习领域里一个承上启下的工作了。虽然说是论文串讲,但因为有太多需要介绍的这个 setting 数据集,下游任务,还有一些常见的这个预训练目标函数,所以说 lbuff 还是跟精读一样读了40 分钟。

2 VLMo

        那接下来我们来看 21 年另外一篇比较火的论文,叫做VLMo。作者团队全部来自于这个微软,这个团队近几年真的是出了很多大名鼎鼎的工作,比如说 BEIT V1V2V3,还有layout m V1V2V3,还要做语音的,做视频的,真的是多模态领域里非常 solid 的一个组。所以大家如果想做多模态学习,任何一个领域的多模态学习,都可以去看一下他们组发的论文,应该或多或少都会有一些联系的。那这篇论文的贡献其实有两点,那一个就是模型结构上的改进,也就他这里说的这个 mixture of modelity expert。另外一个就是训练方式上的改进,他们做的这种分阶段的这个模型预训练,这两个改进其实都师出有名,都有非常强的这个研究动机。接下来我们就直接去引言看一下这两个研究动机。

2.1 研究动机

        那在引言的第二段作者上来就说了,第一个研究动机就是他们为什么要介绍这个 mixture of expert?作者说现在在这个多模态学习领域,大概有两个这个主流的模型结构,

  1. 一个就是像clip、align 这种的——就是他们采取了一个 dual encoder,就是双塔结构:图形有一个模型,文本有一个模型,双塔完全分开了。然后模态之间的交互就是被一个非常简单的 cosine similarity 去做的,它的好处我们上次也说过,非常明显,就是尤其是对这种这个检索任务来说极其有效,因为它可以提前把那些特征都抽好,然后接下来直接算 similarity 就好了,矩阵乘法还不是飞快。所以说极其适合这种大规模的这个图像文本的检索,非常具有这个商业价值但是它的缺点也由此而体现,就是说如此 shallow 的这个交互,也就是说只算了一个 cosine similarity,是无法做这种多模态之间非常难的这个各种情形的。比如说在 VILT这篇论文里, VILT的作者就发现,即使 clip 那么的强,但是 clip 其实在一系列的这个下游任务上,比如说VR,它其实就比不过之前的 set of art 的方式,
  2. 那自然肯定就有另外一系列的工作。那你之前是双塔,那现在肯定就是单塔,那单塔就是这个 Fusion encoder 的方式,就是我先把这个图像和文本分开处理一下,但是当做这个模态交互的时候,我用一个这个 transformer encoder 去好好的做一下模态之间的这个交互。这样就弥补了你之前这个双塔模式的缺陷。所以说在这个 visual language classification 的 task 上,也就我们刚才说的 VR v e v q a。取得了这个 superior 的performance,就是效果特别好。但是它也有问题,就是当你去做检索任务的时候又出麻烦了,因为你只有一个模型,你必须同时做这个推理,所以当你这个图像文本对特别多,数据集特别大的时候,你就要把所有 all possible 这个图像文本对全都要同时的去编码,然后去算这个 similarity score,而你才能去做这个检索。所以说它的这个推理时间就会非常非常的慢,所以对于大规模数据集来说,去做检索的话基本就不太现实了。

        那鉴于这种情况,一个很直接的想法就是说既然你各有各的优缺点,那我能不能把你放到同一个框架里去?然后在做推理的时候,我想把你当做这个 dual encoder 来用,我就把你当 dual encoder 来用,我想把你当 Fusion encoder 来用,我就把你当 Fusion encoder 来用,那如果能达到这个灵活性,那岂不是特别美好?所以说作者这里就引出了他们这篇文章提出的而这个 mixture of modelity expert。具体的细节我们会接下来照着图讲,但简单来说就是这个自注意力所有的模态都是共享的。但是在这个feed forward FC层。每个模态就会对应自己不同的expert,就是视觉具有视觉的 vision expert, language 就有language的expert。Multi model 就有 Multi model 对应的expert。这样在训练的时候,哪个模态的数据来了,我就训练哪个模态的expert。然后在推理的时候,我也能根据现在输入的数据去决定我到底该使用什么样的模型结构,这样就非常优雅的解决了第一个这个研究难题。

        那另外一个研究动机就是在引言的第四段,然后作者上来说VLMO其实在他训练的时候,他的这个目标函数也是ITC, ITM 和MLM,所以跟 ALBEF是一样,所以在这篇论文里我都不需要再过多复述。但这样就会有一个让大家很感兴趣的问题,就是这个训练数据的问题,因为我们都看到了 NLP 那边用了Transformer,随着这个数据的增加,而这个结果就会不停的变好再变好。在视觉这边虽然暂时没有看到就是这么好的这个 scaling 的性能,但是对于多模态来讲,因为它里面也有文本,所以说做多模态学习的人,他也希望说看到当你这个训练数据集越多的时候,你的这个模型的性能就越好。 CLIP 其实已经在某种程度上验证了这一点了,所以大家自然是会想在更多的数据集上去做预训练的。但可惜在当时就是 ALBEF和 VLMO的时候, Lion 团队还没有推出 Lion 400 million 或者 Lion 5 billion 这样开源的数据集。clip 用的那个w i t 数据集也并没有开源。所以说对于研究者来说,他们自己如果想去构造这么大规模的一个数据集来说,这个 effort 是非常大的,那这个时候一条曲线救国的道路很自然的就摆在面前。那就是说虽然多模态的训练数据集不够,比如说只有 4 million 的 setting 或者 14 million 的setting。但是在单个的modelity 里,就是视觉或者NLP 里有大把大把的数据可以去用。即使你是想有监督的训练,视觉里也有 image net 22K 有 14 million 的数据,那就已经比多模态这边最大的 14 million 的 setting 还要大。那如果你是说我想要无监督的预训练,那可用的数据更是多得数不胜数,那文本那边儿也是多得数不胜数。

        所以说基于这个研究动机,本文 VLMO 作者就提出了一个 stages 的 Pre training 的strategy,就是说我分阶段去训练。既然你这个视觉和 NLP 领域都有自己各自的这么大的数据集。那我就先把这个 vision expert 在视觉数据集这边训好,然后我再去把 language expert 在 language 那边的数据集上 text only data 上训练好。那这个时候这个模型本身这个参数已经是非常好的被初始化过了,那这个时候你再在这个多模态的数据上去做一下 Pre training,效果应该就会好很多。而事实也确实如此,这个 stage wise 的 Pre training strategy 给VLMO带来了很大的提升。

贡献1:模型结构的改进,更灵活

那接下来我们就先看一下 VLMO模型结构长什么样,然后快速看一下它的结果。那我们直接来看文章的图一

        首先我们来看一下图一的左边,也就是 VLMO这篇论文的核心,它也是一个 Transformer encoder 的结构。但是他在每个 Transformer block 里面做了一些改动。也就是他们提出的这个 MOME Transformer——mixture of modelity expert。那具体来说,其实我们都知道一个标准的 Transformer block 里面就是先有一个 layer norm,然后有一个 MSA multihead self attention,然后再layer norm,然后再跟一个 FFN feed forward network,然后最后有一个residual。然后这个就是一个标准的Transformer block 了。然后这里我们可以看到这个layer norm, MSA ,layer norm还有这个 residual connection,这些全都是一样,唯一一个不一样就是在这个 feed forward network这块。不是一个feed forward network,而是针对不同的这个输入不同的modality。它有这个 vision FN、language FFN 和这个 vision languageFFN,也就是他这里说的这个 switching modelity expert,从而构建出了它的这一个 MOME transformer block,然后最后构建出了 VLMO整个的这个模型结构。

        那这里面其实一个比较有意思的点,就是说虽然后面这个 FFN层,但没有 share 权重,它是各自 modelity 有各自的这个FFN层,但是之前这个 self attention 层是完全 share weights 的。也就是说不论你是图像信号还是这个文本信号,还是图像文本信号,你任何的这个 token sequence 进来,我的这个 self attention,这个 model weights全都是一样的,通通都是share weights的。所以这也就是我为什么觉得 transfer 这个结构很好,或者说多模态学习接下来会是一个趋势。因为这个多模态学习搭配上这个transformer,真的是一个绝佳的组合。 Transformer 这个自注意力的操作,它真的是用了最少的这个inductive Bias(模型在数据学习过程中对某些假设或模式的偏好),所以它不挑输入。基本上我们现在已经看到了很多的这个证据,就是说同样的这个 self attention weights,它可以用来做不同的这个图像、文本、音频、视频,很多这样的任务。你是不需要重新去训练这个自助力参数的。接下来在 VLMO这篇论文这个分阶段训练里面,我们还可以看到更强的这个evidence,更加的有意思。那这里其实在介绍完 MOME 这个 transform block 之后,就没有什么可讲的了。

        VLMO论文像我刚才说的一样,它也是用了 image text contrast ITC,还有 image text matching ITM 和这个 mask language model mlm 这三个 loss 去训练的模型。而且他还从 ALBEF里借鉴了这个 hard negative mining 的思想,所以说他也是用 ITC 去做了更好的这个ITM,所以说训练 loss 是完全一致的那至于它是怎么去算这个loss,它的这个 Fusion encoder 到底长什么样,其实跟 ALBEF也差不多,只不过更灵活了一些。

        比如说当我们去算这个 ITC contrast loss 的时候, VLMO直接就化身为了这个 CLIP 模型,就是图像这边就单独只有图像的输入,然后进去了一个VIT,它里面的 FFN 都用的是 vision FFN ,这个L如果你用的是指 vision Transformer base,那就是 12 层的一个Transformer。那文本这边。就是文本的token,单独进去这个 language model 后面用的是 language expert,这个就是一个 12 层的bert base。所以说如果你只看这个 ITC 这块儿,它就是一个 clip 模型。

        然后当我们去看这个 ITM 或者说这个 must language modeling 的时候,它又化身成了 Fusion encoder 的形式,就是说这个图像和文本的这个输入一起进去,一起进这个 Multi head self attention但这里的这个 self attention 跟之前的 self attention、 subattention 和后面的 self attention 之间通通都是 share with 的,都是一样的,不管你是什么modelity,自助力的参数都是不变的,都是share。然后在前面的 l-f 层,就在l-f 个 transform block 里,它是对这个视觉和 language 信号分别去做模型的,所以这就是分别去用这个 vision expert 和这个language expert。只有在最后的这 f 层,他才去用了这个 vision language expert。在论文的最后的时间细节里,作者说如果你用的是一个transform base模型,这块其实前十层,后面这个 f 就是2,也就是说后面只有两层 transfer block 去做这个模态之间的融合。然后ITM,对吧?就是一个二分类任务,

        然后 Mask language modeling 就是去预测这些被 mask 掉的单词。

        那我们看完整套的这个模型结构和训练方式之后,我们就会发现 VLMO 这篇论文的好处,它就是灵活。训练的时候,你可以通过这个各种modelity,你可以去选择我到底训练这支,这中间哪个modelit expert。然后在做推理的时候你也可以去做选择,因为所有的模型参数都在那里,如果你想做这个检索任务,你就像 CLIP 一样,就用这个两个模型就可以了。如果你想做这些 vision language 的这些分类任务, VR VE,VQA,那你就用下面的这个 Fusion encoder 的模式就可以了,但是它的灵活也不是白来了,那就像我们在 ALBEF里说的一样,因为它有的时候用这个 mask 的输入,有的时候不用这个 mask 输入,所以 ALBEF里就要做两次forward。而在 view moe 里面,它应该也是至少做了两次甚至三次的这个前向过程。作者在后面说VLMO这个 base 模型在 4 million 的 setting 下训练,用 64 张 V100 的卡也要训练两天,所以说又回到VILT那个级别的,训练量比ALBEF 要慢。

        但总之这个模型结构真的是很灵活也很有趣。所以作者团队在接下来的时间中还在继续打磨,而且使用它。比如说今年最新的这个 B E I T V 3 里,它还是使用了这个 MOME Transformer 结构去做Bi t V 3。

贡献2:分阶段的训练策略

        那讲完了模型结构上的改进,我们就来说一下第二个文章的contribution,就是这个分阶段的训练策略。作者想利用 unimodality 里拿些大量的这些图片文本去做这种很好的预训练,提供一个更好的模型初始化。所以说作者就先去做了这个 vision Pre training,然后去做 language Pre training,然后最后才去做这个 vision language Pre training。

        然后在做vision Pre training 的时候肯定是unsupervised,他们就用了他们自己团队提出的这个BeIT,就是 mask 的 image modeling,

        然后在做 language modeling 的时候就是 mask language modeling,

        那最后 vision language Pre training 就是我们刚才说的那三个 目标函数。

        但是这里面特别有趣的一个点就是作者在训练的过程中,到底哪些层是冻住的,哪些层是不冻住的?

        我们接下来来仔细看一下。作者这里说蓝色的这个虚线就代表是 frozen FFN,然后这个橘黄色的虚线代表 frozen 的self attention。

        那我们看到在做第一阶段的这个 vision Pre training 的时候,因为你是刚开始训练,你肯定没有什么需要 freeze 的,因为所有的东西都是随机初始化的。那所以说这 12 层的这个 consumer block,也就是包括前面的这个自助力,然后和后面的这个 vision expert 都是打开训练,

        但是当你到第二阶段去做这个文本的预训练的时候,我们会看到这个 vision expert 被冻住了,因为你现是文本数据,你不需要去训练那个 vision expert,所以 vision expert 的那个 FI 分层参数就固定下来了。我是要去训练这个language expert 的。但是非常有意思的事是他把这个 self attention 给冻住了,意思就是说我完全拿一个在视觉数据上训练好了这么一个模型,在视觉 token sequence 上训练好的一个自助力模型,我可以直接拿来对这个文本数据进行建模,我都不需要 微调,他这个 self attention 就工作的很好,我就能让这个模型一样能把这个完形填空做得很好。当作者好像也是,之前也有一些工作也是的,就是如果我反过来行不行,就是我先在 language 这张去训练,然后再在 vision 上冻住去做,好像结果不太好。但是如果是先用 vision 训练,然后再在 text 上直接去用这个 self attention 已经在很多工作里证明是有效的。这个对我而言很奇怪,也很有趣。如果对这个现象感兴趣的同学也可以继续深挖一下。看看是不是真的所有的 modelity 都能用同样的这个 self attention,而且是为什么?

        那到了第三阶段,因为这时候做的就是我们想要的这个多模态了,所以说该打开的就全打开了。不光是这个 self attention,还是后面的这 3 个 expert 就都打开去做 fine tuning 了,那这个就是本文所讲的第二个 contribution 分阶段的预训练策略。

2.2 实验结果

        那讲完了方法部分,我们快速的看一下VLMO 这个实验结果,那在表一里作者就对比了这个 VQA 和 VR 这两个数据集上的表现。这里因为 VLMO 主要做的是模型结构上的改进,所以VLMO 这里是既做了这个base,也做了large,但是它的预训练数据集都是 4 million,但是 ALBEF就不一样,那 ALBEF因为是想克服这个训练数据集的noisness,所以说 ALBEF只做了base,但是它做了 4 million 和 14 million。所以也就是说根据你这个论文不同的这个contribution,根据你的这个关注点在哪里,其实你也不是说所有的这个 setting 都要去比,或者所有的 setting 都要去做的,你要选择那些对你有利,或者说能更好的把你的故事讲出来的这个 setting 去做,反而会让整个文章读起来更顺,而且更有说服力。其实我记得第一版的时候,这个 VLMO 是没有这个部分的,他没有去做这个 VLMO-large ++,也就是说在这个1billion 数据集上去训练的结果,可能是最近反正也做了 B ei t V 3,这个VLMO也又训练了一波,所以就把更好的结果更新到 arxiv上了。

2.3 总结

        总之VLMO还是非常有效的,它在 4 million上这个数据集上的表现就已经非常亮眼了,它跟 ALBEF去做这种公平对比的时候,是比 ALBEF全线都要高的要 2 到 3 个点,所以算是 significant improvement。然后如果用了更大的模型,或者甚至在更大的数据集上去做预训练完之后,这个性能的提升就更不用说了。鉴于 BEIT V 3 也使用了 MOME 这种模型结构,而且它又这么灵活。所以大家可以好好感受一下如何用很小的改动,就是把一个 FFN 做成多个expert。但是就带来了这么巨大的提升,这肯定也是很多经验积累出来的。VLMO这篇论文其实实验做的也是非常的详尽,也有很多的消融实验,比如说去证明它这个分阶段的预训练策略很有效,还有它这个模型很灵活,所以它在这个单独的视觉数据集上也取得了很好的效果,还要去做这种图文检索的时候,也取得了很好的效果和这个推理时间,这里我们就不一一复述了。

        我更想说一下的是VLMO这篇论文的这个结语部分,作者说了很多,就是说在未来我们会做很多继续去提升这个 view more 的方式,然后作者团队是真的做到了,而且一一都deliver。

  1. 那比如说第一个最直白的就是直接去scale,就是把这个模型变大,那这个在作者接下来的 B eI T V 3 里就实现了,他就用了 VIT giant,有 1. 9B列的参数。
  2. 第二个就是做更多的这个下游的这个 vision language task,比如说其中有一个更著名的这个 image captioning,就是图像字幕,那做 captioning 一般是需要一个这个Transformer decoder。所以我们这一期讲了这个VILT clip ALBEF和VLMO都不太适合能去做,那在接下来作者在这个 V L B I T 哈 B I T V 3 里都去做了这个尝试。
  3. 那第三点作者想说的就是说这个 uni-mordelity 能够帮助这个multimodality,那同样的 multimodality 也有可能帮助这个uni-mordelity。同样的在这个 B I T V 3 的工作里,作者刷的不光是这个多模态的数据集,他把这个文本和这个图像的各个数据集也全刷了一遍,效果都非常的好。
  4. 那最后一个更宏观的目标就是说我不光是想做这个 vision language,我肯定有更多的模态和更多的这个应用场景,比如说 speech video 或者structure knowledge那其实作者团队也做了很多这方面的工作,比如说在 speech 这边就有 wavl m,在这个 structure knowledge 这边就有 layout m V1,V2。V3。还有就是去支持这种 general purpose 的这个多模态学习。这个最近也是比较火,就是统一用这个文本当作一个interface,这样所有的任务都可以通过一个prompt,然后去生成文本这种结构去实现。那作者团队这边也出了一个 Meta mm 的工作,所以算是一步一步把他们之前提出的这个 future work 全都实现了,这个还是非常难能可贵的。

        那这里我更想说的其实就是做研究是一点一点积累上来的,作者团队做了这么多有影响力的工作。其实也是一步一步迭代出来的。比如说我们来看一下 BEIT 这一系列的工作,它的这个发展历程。那这个Beit v1在 21 年 6 月份就出来了,然后接下来在 21 年 11 月份的时候就出了 VLMO 这篇论文,然后因为这个时候图像也可以用 mask modeling 去做,文本也可以用 mask modeling 去做,所以很自然的到 22 年 6 月份的时候,作者团队就推出了VLBeIT,就是同时用 mask modeling 去做vision language。然后接下来又过了两个月,这个 BeIT V2就出来了。那 Be I T V2 其实是 Be I T V 1 的一个升级版,它还做的是这个视觉这边的 data set,而不是做的 Multi modelity。那同样的月份二 22 年 8 月份又出了 Be I T V 3,那 Be I T V 3 其实就是之前所有这些工作的一个集大成版本,就一个多模态的网络,但是同时它也做了unimodality。所以就是在这一步一步的积累过程之中,才能做出来这么多 solid 的工作。

        那在多模态的下期串讲之中,我主要就会讲一些最近的基于这个 transfer encoder decoder 的工作。来看一下多模态学习到今年为止,它的发展又到了哪个阶段。

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值