大家好,今天我们就来过一下多模态的串讲,其实之前我们也讲了很多工作了,比如说clip,还有 ViLT 以及 clip 的那么多后续工作。多模态学习在最近几年真的是异常的火爆,那除了普通的这种多模态学习,比如说视觉问答,图文检索这些。那其实之前讲的所有这种 language guided 的 detection 或者 language guided segmentation 这些任务,它都是多模态,而且包括最近大火的这种文本图像生成或者文本视频生成,我们耳熟能详的DALLE2、 stable diffusion Phoenix video imagen video。那所有的这些通通都属于多模态学习,那我们这期多模态串讲可能更多的还是讲传统的这种多模态学习。也就是说当下游任务是这种图文检索,就是 image text retrieval 或者VQA这个视觉问答,或者 visual reasoning 就是视觉推理,还有就是 visual entitlement 视觉蕴含就是这些传统的多模态任务。但即使如此,相关的工作也是多得数不胜数。
我们这个串讲的第一部分应该就是讲一下只用 Transformer encoder 的一些方法,比如说之前的这个 viLT clip,还有我们今天要讲的ALBEF和VLMO。然后在第二部分。我们会讲到用 Transformer encoder 和 decoder 一起的一些方法,比如说blip,Coca, B EIT V 3 以及Pali。
简单回顾一下 viLT和CLIP
那在我们开始讲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 一下,那肯定是远远不够的。那所以对于多模态任务来说,这个后面的模态融合非常关键,所以 views 就把之前 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 列的方法,而是有过之而无不及。所以它只是结构上简化了这个多模态学习,但没有真的让这个多模态学习让所有人都玩得起。
所以基于这两个局限性,其实今天我们要讲的第一篇论文ALBEF就已经呼之欲出了。不过在讲ALBEF之前,我们还是要快速地回顾一下这个 CLIP 模型,也是非常简单的一个结构,它是一个典型的双塔模型,就是它有两个model,一个对应文本,一个对应视觉。然后在训练的时候就是通过对比学习,让这个已有的这个图像文本对那这个在空间上拉得更近,然而让不是一个对的那个图片文本就拉得尽量更远,从而最后学到了非常好的这个图像文本特征。然后一旦学到很好的这个图像文本特征之后, CLIP 只需要做这种很简单的点成就能去做这种多模态任务,尤其是对那种图像文本匹配或者图像文本检索的这种任务来说, CLIP 简直就是神一样的存在。因为它不光效果好,而且很高效。因为往往你去做。这种图像文本匹配或者图像文本检索任务的时候,你是有一个很大的已有的数据库的。这个时候如果你新来一张图片或者新来一个文本,你要去跟已有的数据库去做匹配。那其他所有的方法,比如说这里的a、c、 d 都会非常的慢,因为它所有的数据都要过一遍这个编码器,但是 CLIP 模型就不用,它可以提前把那个数据库里所有的这个图像文本的特征提前都抽好。而且是想什么时候抽就什么时候抽,抽好放在那就行了,等你真正想用的时候直接就做一个点乘就好了,那矩阵乘法还是相当快。所以说 clip 的这个实际应用非常的广泛,但是 clip 模型也有它自己的缺陷,它虽然对这种图文匹配的任务非常在行,但是对别的任务,比如说VQ、 v VR、 VE 这些任务来说,它的性能就不够好了,因为毕竟光靠一个简单的点成还是不能够分析特别复杂的情况。
那回顾到这儿,我们现在就来捋一捋,总结一下之前的这些方法,哪些是好的,哪些是不好的,那我们接下来该提出怎样的改进?首先我们就来看这个模型的结构。那因为我们有。图像的输入和文本的输入。那刚开始的模型肯定是有两分支的,因为他要去。抽这个图像文本特征,但是我们一直都在强调在这个多模态学习里,这个视觉特征远远要大于这个文本特征。所以我们知道使用这个更大更强的这个视觉模型,比如说一个更大的这个VIT是好的。这我们需要坚持使用的。同时作为这个多模态学习,这个模态之间的融合也是非常关键的,我们也要保证这个模态融合的这个模型也要尽可能的大。那所谓总结完了之后,我们就大概知道最后如果想做一个很好的这个多模态学习,它的这个网络结构就应该很像这个c。也就是说它这个文本编码器应该比这个图像编码器要小,然而这个多模态融合的这个部分要尽可能的大。当然这里的这个。视觉模型肯定不想要再用一个这个目标检测模型了。所以更多的是我们会采取一个比较大的这个 vision Transformer,而不是简单的一个 patch embedding 去做。总之模型结构大概就是长这个样子,那模型有了,接下来该怎么去训练?那之前我们知道这个 clip 模型,就用了一个这个对比学习的loss,也就是这个 image text contrasted,这个 ITC loss 训练效果就已经很好了,所以我们知道这个 ITC loss 应该是不错的,而且训练也很高效,我们应该采纳。那对于之前 c 类的这种方法,他们往往因为有这个目标检测,所以他们提出了一个 loss 叫做 word patch alignment,就是这个文本的一个单词和这个图像上的一个patch。它应该有一个这个对应关系。但是因为现在这个目标检测模型已经没有了,而且在 VILT里头我们发现这个 WPA loss 算起来是非常的慢的,所以才导致这个VILT模型训练起来这么费劲。所以我们就不太想要这个 WPA loss 了。然后剩下常用的还有两个loss,一个就是这个我们耳熟能详的 mask language modeling,也就是 Bert 的训练方式,遮住一个词,然后再去预判这个词完形填空。那这个 loss 肯定是非常有用,因为到现在为止,不光是 NLP 还是vision,基本都大一统的全都用mask modeling。那另外还有一个image text matching the 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%,但绝大多数。时候都是应该能够给你一个很明确的研究方向。
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。那怎么去解决这个问题?也就是说如何在这种 Multi model encoder 之前,你就去把这个图像和文本的特征 align 起来?作者这里就说我们提出了一个这个对比学习的loss,就能把这个图像和文本在 fusing 之前就把他们align 上了。所以顾名思义也就是他们论文的题目,也就是align。before feels。那这个contrast。loss 是什么呢?其实就是 clip 的那个训练loss,就是图像文本的 contrast loss。ITC。具体之后我们会讲,所以这个就是论文的第一个贡献,也就是作者认为最重要的贡献,那甚至拿这个贡献了来命名他们的方法。那接下来还有。什么贡献?因为已经有了 CLIP 和 view 特这一系列的工作,所以大家都知道了,你就用 patch embedding,就用 vision Transformer 就可以了,那所以说 ALBEF也是这么做的,那自然而然这样 ALBEF也就不需要这种 morning box annotation,也就不需要预训练的这个目标检测器,自然输入图像也就不需要是那种目标检测需要的高分辨率的图像。但这个因为 clip 和 vilt 已经有了,所以作者就不过多复述了,那更多的是作者要讲下一个它的contribution。作者这里说为了能够从这种特别 noisy 的这种网上爬下来的数据去有效地学习这种文本图像特征,所以作者提出了一个方法叫做 momentum desolation。也就是一种自。训练的方式去学习。那自训练你一听大概率其实就是用 Pseudo label,也就用伪标签。那伪标签从哪儿。来?肯定得是有额外。的一个模型去提供这个伪标签,那在这篇论文里,就是除了已有的模型之外,作者还采用了 MOCO 那篇论文里提出的这个 momentum encoder 的形式,从而使用这个 MOMENTUM model 去生成这种 Seudo target,从而达到一个这个自训练的结果。那这个Noisy。Web data 到底有多Noisy?它为什么是 Noisy 的?是因为所有这个图像文本对儿就是从网上直接爬下的,这些图像文本。对儿,在很多情况。下,它那个文本并没有很好的去描述这个图像。能从网上大规模爬下来的那些文本,其实它有名字叫做。out text。也就是alternative。text,就是另外一种形式的文本。它并不是说。如果你有一幅