51-11 多模态论文串讲—VLMo 论文精读

VLMo: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts (NeurIPS 2022)

VLMo 是一种多模态 Transformer 模型,从名字可以看得出来它是一种 Mixture-of-Modality-Experts (MoME),即混合多模态专家。怎么理解呢?主流 VLP 模型分为两种,一种是双塔结构 (Dual Encoder),主要用来做多模态检索任务;一种是单塔结构 (Fusion Encoder),主要用来做多模态分类任务。VLMo 相当于是一个混合专家 Transformer 模型,预训练完成后,使用时既可以是双塔结构实现高效的图像文本检索,又可以是单塔结构成为分类任务的多模态编码器。

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

引言的第二段,作者上来就说了第一个研究动机,就是他们为什么要介绍这个mixture of expert。作者说,在多模态学习领域,大概有两个这个主流的模型结。一个就是像CLIP,ALIGN这种的,采取了双塔结构,图像有一个模型,文本有一个模型,双塔完全分开了,谁跟谁都不染。然后模态之间的交互,就是被一个非常简单的cosine similarity去做的。它的好处,我们上次也说过,非常明显,就是尤其是对这种,这个检索任务来说,极其有效。因为他可以提前把那些特征都抽好,然后接下来直接算similarity就好了,矩阵乘法,还不是飞快,所以说,极其适合这种大规模的这个图像文本的检索,非常具有这个商业价值。但是,它的缺点也由此而体现,就是说如此shallow的这个交互,也就是说只算了一个similarity,是无法做这种多模态之间,非常难的这个各种情形的。比如说,在ViLT这篇论文里的作者就发现,即使CLIP那么的强,CLIP其实在一系列的这个下游任务上,比如说VR,他其实就比不过之前方式。那自然,肯定就有另外一系列的工作,那你之前是双塔,那现在肯定就是单塔,单塔就是这个fusion encoder的方式。就是我先把这个图像文本分开处理一下,但是当做这个模态交互的时候,我用这个transformer encoder,去好好的做一下模态之间的这个交互。这样,就弥补了你之前这个双塔模式的缺陷,所以说在这个VL visual classification task上,也就我们刚才说的VE,VR,VQQ,取得了这个,就是效果特别好,但是,它也有问题,就是当你去做检索任务的时候,又出麻烦了,因为你只有一个模型,你必须同时做这个推理,所以当你这个图像文本对特别多数据集特别大的时候,你就要把所有all possible这个图像文本段全都要同时的去编码。然后去算这个similarity,而你才能去做这个检索。所以说,它的这个推理时间,就会非常非常的慢,所以对于大规模数据集来说,去做检索的话,基本就不太现实了。那鉴于这种情况,一个很直接的想法就是说,既然你各有各的优缺点,那我能不能把你放到同一个框架里去?然后在做推理的时候,我想把你当做dual-encoder这个来用,我就把你当dual-encoder来用。我想把你当fusion encoder来用,我就把你当fusion encoder来用,那如果能达到这个灵活性,那岂不是特别美好。所以说,作者这里就引出了他们这篇文章提出的,,这个mixture of modality expert。具体的细节,我们会接下来照着图讲。

但简单来说,就是这个自注意力,所有的模态都是共享的。但是在Feed Forward FF层,每个模态就会对应自己不同的Expert。Multi就multi model对应的expert。这样在训练的时候,哪个模态的数据来了,我就训练哪个模态的,然后在推理的时候,我也能根据现在输入的数据,去决定我到底该使用什么样的模型结构,这样就非常优雅的解决了第一个这个研究难题。

那另外一个研究动机,就是在引言的四段。作者上说,其实的时候的这个目标函数,也是ITC,ITM和MLM。所以跟ALBEF是一样,所以在这篇论文里,我都不需要再过多复述。但这样,就会有一个让大家很感兴趣的问题,就是这个训练数据的问题。因为我们都看到了NLP那边用了Transformer,随着这个数据的增加,这个结果就会不停的变好变好变好。在视觉这边,虽然暂时没有看到就是这么好的这个scaling的性能,但是对于多模态来讲,因为他里面也有文本,所以说做多模态学习的任务,他也希望说看到当你这个训练数据集越多的时候,你的这个模型的性能就越好,CLIP,其实已经在某种程度上验证了这一点了。所以大家自然是会想在更多的数据集上去做预训练的。但可惜,在当时做ALBEF,VLMo的时候,LION团队还没有推出400m或者这样可开源的数据集。CLIP用的那个WIT数据集,也并没有开源。所以说对于研究者来说,他们自己如果想去构造这么大规模的一个数据集来说,这个effort是非常大的,那这个时候,一条曲线救国的道路,很自然的就摆在面前。那就是说虽然多模态的训练数据集不够,比如说只有4m setting,或者14m setting。但是,在单个的modality里,就是视觉,或者NLP里有大把大把的数据可以去用,即使你是想有监督的训练,视觉里也有达ImageNet 22K,有14M的数据,那就已经比多这边最大的14m的setting还要大。那如果你是说我想要无监督的预训练,那可用的数据更是多的数不胜数,那文本那边,也是多的数不胜数。所以说,基于这个研究动机,本文作者,就提出了一个stage strategy,就是说我分阶段去训练。既然你这个视觉和NLP领域,都有自己各自的这么大的数据集,那我就先把这个vision expert在视觉数据集这边好。然后我再去把language expert,在language那边的数据集上text only Data上训练好 。那这个时候,这个模型本身这个参数,已经是非常好的被初始化过了,那这个时候,你再在这个多模态的数据上,去做一下被确定效果,应该就会好很多。而事实也确实如此,这个stage策略给带来了很大的提升。那接下,我们就先看一下的模型结构什么样,然后快速看一下它的结果。

那我们直接来看文章的图一,首先,我们来看一下图一的左边,也就是VLMo这篇论文的一个核心。

它也是一个transformer encoder的结构,但是,它在每个block里面,做了一些改动,也就是他们提出的这个MoME Transformer。具体来说,其实我都知道。一本标注的transformer blcok里面,就是先有一个layer norm,然后MSA multi-head self-attention,然后再有一个layer norm,再有FFN feed-forward network,最后有一个residual。

这个不是一个network,而是针对不同的这个输入,不同的modality,它有这个vision FFN,language FFN,还有这个vision language FFN。也就是他这里说的这个switching modality expert,从而构建出了的MoME transformer block这个模型结构。

那这里面其实一个比较有意思的点,就是说虽然后面这个FFN层,它没有share 权重,它是各自modality有各自的这个FFN层,但是之前,这个self attention层,是完全share weights的。也就是说,不论你是图像信号,还是这个文本信号,还是图像文本信号,你任何的这个token sequence进来,我的这个self attention的model weight全都是一样的,都是shares的。所以这也就是我为什么觉得,Transform这个结构很好,或者说多模态学习接下来会是一个趋势,因为这个多模态学习,搭配上这个transformer,真的是一个绝佳的组合,Transformer这个自注意操作,它真的是用了最少的这个inductive bais,它不挑输入。基本上我们现在已经看到了很多的这个证据,就是说同样的这个self attention weights它可以用来做不同的,这个图像,文本,音频,视频,很多这样的任务,你是不需要重新去训练这个自注意力参数的。

那接下来,这篇论文在分阶段训练里面,我们还可以看到更强的这个evidence,更加的有意思。

VLMo也是用ITC、ITM、MLM 3个loss去训练的。所以说训练loss,是完全一致的。那至于他是怎么去算这个loss,它的fusion encoder这个到底长什么样,其实跟ALBEF也差不多,只不过更比灵活一些。如说我们这个ITC,就是图像这边,VLMo就化身CLIP模型,就单独只有图像的输入,然后进去了一个ViT,它里面的FFN,都用的是vision FFN。这个L,如果你用的vision transformer base,那就是12层的transformer。那文本这边,就是文本的token,单独进去这个language model,后面用的是这个language expert,就是一个12层的BERT base。所以说如果你只看这个ITC这块,它就是一个CLIP模型。然后当我们去看这个ITM,或者说这个MLM的时候。它又化身成了fusion encoder的形式,就是说这个图像和文本的这个输入,一起进去,一起进这个MSA。

但这里的这个self attention跟之前的self attention,和后面的self attention这些,都是share weights的,都是一样的,不管你是什么modality,自注意力参数,都是不变的,都是share。然后,在前面的L-F层,就在transform block里,它是对这个视觉和文本信号,分别去做模型FFN,就是分别去用这个vision expert和这个language expert。只有在最后的这Fx层,他才去用了这个vision language expert。

在论文的最后的时间细节里,作者说如果你用的是一个transformer base模型,L-F就是前10层,后面这个F,就是2,也就是说后面,只有2层transformer block,去做这个模态之间的融合。然后ITM对吧,就是一个分类任务。然后,Mask language model,就是去预测这些被mask掉的单词。

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

但总之,这个模型结构,真的是很灵活,也很有趣,所以作者团队,在接下来时间中还在继续打磨。

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

但是这里面特别有趣的一个点,就是作者在训练的过程中,到底哪些层是冻住的,哪些层是不冻住的,需要仔细看一下。

那我们看到在做第一阶段的,这个vision的时候,因为你是刚开始训练嘛,你肯定没有什么需要冻住的,因为所有的东西都是随机初始化的。那所以说,这12层的这个transformer block,也就是包括前面这个自注意力,和和后面的这个vision expert,都是打开训练的。但是,当你到第二阶段,去做这个文本的预训练的时候,我们会看到,这个vision,被冻住了,因为你现在是文本数据嘛,你不需要去训练那个vision,所以vision的那个FFN层,参数就固定下来了。我是要去训练这个language expert的。但是非常有意思的事儿,是他把这个self attention给冻住了,意思就是说,我完全拿一个,在视觉数据上,训练好的这么一个模型,在视觉token sequence上,训练好的一个自助力模型,我可以直接拿来,对这个文本数据进行建模。我都不需要fine tune,他这个self attention,就工作的很好,我就能让这个模型,一样能把这个完形填空做得很好。之前也有一些工作也证明可以这样,就是我现在language这上去训练,然后再在vision上冻住去做,好像结果不太好,但是,如果是先用vison训练,然后再在text上直接去用这个self attention,已经在很多工作里证明是有效的。

这个对我而言,很奇怪,也很有趣,如果对这个现象感兴趣的同学,也可以继续去深挖一下,看看是不是真的所有的modality,都能用同样的这个,而且是为什么。

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

那讲完了方法部分,我们快速的看一下VLMo的这个实验结果。

总之,还是非常有效的,他在4m上这个数据的表,就已经非常亮眼了,他跟ALBEF去做这种公对比的时候,是比ALBEF都要高的,要两到三个点,所以算是很大进步。然后,如果用了更大的模型,或者甚至在更大的数据集上去做预训练完之后,这个性能的提升,就更不用说了。

鉴于BEiT v3,也使用了VLMo这种模型结构,而且它又这么灵活。所以大家可以好好感受一下,如何用很小的改动,就是把一个FFN做成多个,但是就带来了这么巨大的提升,这肯定也是很多经验积累出来的。VLMo这篇论文,其实实验做的也是非常的详尽,他这个分阶段的预训练策略很有效,还有它这个模型,很灵活,所以它在这个单独的视觉数据集上,也取得了很好的效果。

还有去做这种图文检索的时候,也取得了很好的效果,和这个推理时间都很好。

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

那比如说,第一个最直白的,就是直接去scaling,就是把这个模型变大。这个,作者接下来的BEiT v3里就实现了,他就用了ViT Giant有1.9billion的参数。第二个,就是做更多的这个下游的这个vision language task,比如说其中,有一个更著名的这个image captioning,就是图像字幕。那做captioning,一般是需要一个这个transformer decoder,所以,我们这一期讲了这些和都不太适合去做,那在接下来,作者在这个VL-BEiT,BEiT v3里,都去做了这个尝试。那第三点,作者想说的就是说这个unimodality,能够帮助这个multi-modality,那同样的,Multi-modaality,也有可能能帮助这个unimodality。同样的,在这个BEiT v3的工作里,他把这个文本和这个图像的各个数据集,也全刷了一遍,效果都非常好。那最后,一个更宏观的目标,就是说我不光是想做这个vision language,我肯定有更多的模态,更多的这个应用场景,比如说speech,viedo或者structured knowledge。那其实者团队,也做了很多这方面的工作,比如说speech在这边,有WAVLM。在这个structured konwledge这边,就有Layout LM v1,v2,v3。还有,就是去支持general purpose这种多模态学习,也也是最近比较火,就是统一用这当文本当作一个interface。这样所有的任务,都可以通过一个prompt,然后去生成文本这种结构去实现,那作者团队这边,也出了一个MetaLM的工作。所以算是一步一步把他们之前提出的这个future work全都实现了,这个还是非常难能可贵的。

那这里我更想说的,其实就是做研究,是一点一点积累上来的.作者团队,做了这么多有影响力的工作,其实,也是一步一步迭代出来的,咱们来看看,在22年,这一系列的工作的发展历程。

那这个BEiT,在21年六份就出来了,然后接下来,在21年11份的时候,就出了VLMo这篇论文。

然后因为这个时候,图像也可以用mask modeling去做,文本也可以用mask modeling去做,所以很自然的到22年6月份的时候,作者团队就推出了VL-BEiT,就是同时用mask modeling去做vison language,然后接下来,又过了2个月,这个BEiT v2就出来了。那BEiT v2,其实是BEiT一个升级,还做的是这个视频dataset是不做multi-modality。那同样的月份22年8份,又出了BEiT v3,那BEiT v3,其实就是之前所有这些的一个集大成者,就是一个多模态网络,但是同时也做unimodality。

所以就是在这一步一步的积累过程之中,才能做出来这么多solid的工作。

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

摘录

多模态论文串讲·上【论文精读·46】_哔哩哔哩_bilibili

VLMo: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts

https://arxiv.org/abs/2111.02358

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolov5无人机视频检测与计数系统(创新点和代码)

标题:基于YOLOv5的无人机视频检测与计数系统 摘要: 无人机技术的快速发展和广泛应用给社会带来了巨大的便利,但也带来了一系列的安全隐患。为了实现对无人机的有效管理和监控,本文提出了一种基于YOLOv5的无人机视频检测与计数系…

[软件工具]通用OCR识别文字识别中文识别服务程序可局域网访问

【软件界面】 【算法介绍】 采用业界最先进算法之一paddlocr,PaddleOCR,全称PaddlePaddle OCR,是一种基于深度学习的光学字符识别(OCR)技术。相较于传统的OCR技术,PaddleOCR具有许多优点。 首先&#xff0…

Activity 启动流程log分析

为了方便跟踪启动过程相关流程,打开debug开关,并添加Log打印 1.Log打点 1)打开debug开关 打开 WindowManagerDebugConfig开关,会打开InputMonitor InputManagerCallback PhoneWindowManager中的input向相关日志打印 public st…

南京观海微电子----时序分析基本概念(一)——建立时间

1. 概念的理解 以上升沿锁存为例,建立时间(Tsu)是指在时钟翻转之前输入的数据D必须保持稳定的时间。如下图所示,一个数据要在上升沿被锁存,那么这个数据就要在时钟上升沿的建立时间内保持稳定。 建立时间是对触发器而…

RibbonGroup 添加QLineEdit

RibbonGroup添加QLineEdit: QLineEdit* controlEdit new QLineEdit(); controlEdit->setToolTip(tr("Edit")); controlEdit->setText(tr("Edit")); controlEdit->setMinimumWidth(150); …

C //练习 5-20 扩展dcl程序的功能,使它能够处理包含其他成分的声明,例如带有函数参数类型的声明、带有类似于const限定符的声明等。

C程序设计语言 (第二版) 练习 5-20 练习 5-20 扩展dcl程序的功能,使它能够处理包含其他成分的声明,例如带有函数参数类型的声明、带有类似于const限定符的声明等。 注意:代码在win32控制台运行,在不同的I…

Codeforces Round 919 (Div. 2)补题

Satisfying Constraints&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;有三种限定方式&#xff1a; 1.k>x; 2.k<x; 3.k!x; 根据若干限定&#xff0c;找出合法的k的个数。 思路&#xff1a;通过1&#xff0c;2定出区间&#xff0c;同时记录…

基于FFmpeg的简单Android视频播放器

1. 模块分割 首先对这个视频播放器所采用的一些部件要清楚。这个播放器主要可以拆分为4个部分&#xff1a; 1.解码&#xff1a;FFmpeg 2.音频输出&#xff1a;OpenSLES 3.视频渲染&#xff1a;OpenGLES 这些框架都是基于C的api&#xff0c;因此这次我们的主要工作将会集中…

ubuntu20.04安装cuda11.4以及cudnn

系统&#xff1a;ubuntu20.04硬件配置&#xff1a;GPU3080、CPU未知通过《软件和更新》在附加驱动选项中添加了驱动&#xff1a; 1.检查自己电脑支持的cuda nvidia-smi4. 下载cuda11.4.2 wget https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/c…

TypeScript 从入门到进阶之基础篇(十) 抽象类篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇TypeScript 从入门到进阶…

AI-图片转换绚丽动漫人物-UGATIT

​​​​​​ &#x1f3e1; 个人主页&#xff1a;IT贫道-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;私聊博主加WX好友&#xff0c;获取更多资料哦~ &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 ​​​​…

P1125 [NOIP2008 提高组] 笨小猴——C++

[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小&#xff0c;所以每次做英语选择题的时候都很头疼。但是他找到了一种方法&#xff0c;经试验证明&#xff0c;用这种方法去选择选项的时候选对的几率非常大&#xff01; 这种方法的具体描述如下&#xff1a;假设 maxn…

【Databend】多表联结,你不会还没有掌握吧!

文章目录 概述和数据准备内连接交叉连接左连接右连接左反和右反连接全连接总结 概述和数据准备 多表联结是两个或多个表的列合并到一个结果集中。Databend 中支持的连接类型有 inner join 、cross join 、natural join 、left join 、right join 、left anti join 、right ant…

SqlAlchemy使用教程(二) 入门示例及通过CoreAPI访问与操作数据库

二、入门示例与基本编程步骤 在第一章中提到&#xff0c;Sqlalchemy提供了两套方法来访问数据库&#xff0c;由于Sqlalchemy 文档杂乱&#xff0c;对于ORM的使用步骤讲解杂乱&#xff0c;SqlAlchemy2.x 与j1.x版本差异也较大&#xff0c;很多介绍SqlAlchemy的文章上来就讲ORM&…

Apache Camel Jbang的dep和classpath 及-O 简单记录

在Apache Camel Jbang 官网主要提到的deps的用法&#xff0c;classpath的较少。 deps 适用于环境上有maven repository或者git 的场景&#xff0c;对于传统发布jar/war的模式下&#xff0c;classpath更适用。 DEPS和CP都支持文件内或者命令行指定&#xff0c;文件内写法为 /…

TS2307: Cannot find module ‘./App.vue‘ or its corresponding type declarations.

目录 1. 问题描述2. 解决方案一&#xff1a;VSCode Volar&#xff08;官方推荐&#xff09;3. 解决方案二&#xff1a;WebStorm 2023.2 &#xff08;官方推荐&#xff09;4. 解决方案三&#xff1a;禁用严格类型检查选项&#xff08;不推荐&#xff09;5. 解决方案四&#xff…

大模型实战营Day5 LMDeploy大模型量化部署实践

模型部署 定义 产品形态 计算设备 大模型特点 内存开销大 动态shape 结构简单 部署挑战 设备存储 推理速度 服务质量 部署方案&#xff1a;技术点 &#xff08;模型并行 transformer计算和访存优化 低比特量化 Continuous Batch Page Attention&#xff09;方案&#xff08;…

rpc的正确打开方式|读懂Go原生net/rpc包

前言 大家好&#xff0c;这里是白泽&#xff0c;之前最近在阅读字节跳动开源RPC框架Kitex的源码&#xff0c;分析了如何借助命令行&#xff0c;由一个IDL文件&#xff0c;生成client和server的脚手架代码&#xff0c;也分析了Kitex的日志组件klog。当然Kitex还有许多其他组件&…

RXJS中Subject, BehaviorSubject, ReplaySubject, AsyncSubject的区别?

在RxJS&#xff08;Reactive Extensions for JavaScript&#xff09;中&#xff0c;Subject、BehaviorSubject、ReplaySubject和AsyncSubject都是Observable的变体&#xff0c;它们用于处理观察者模式中的不同场景。以下是它们之间的主要区别&#xff1a; 1、Subject: 是一种特…

在ubuntu平台上安装minecraft

一、获取minecraft启动器安装包 登陆minecraft官网Welcome to the Minecraft Official Site | Minecraft&#xff0c;使用已经购买minecraft的microsoft或者mojang账号登陆。 点击Download Launcher 对于ubuntu系统&#xff0c;使用点击debian版本 此后便会自动下载Minecraft.…