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

news2025/1/23 22:33:53

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.coloradmin.cn/o/1383780.html

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

相关文章

[学习笔记]刘知远团队大模型技术与交叉应用L1-NLPBig Model Basics

本节主要介绍NLP和大模型的基础知识。提及了词表示如何从one-hot发展到Word Embedding。语言模型如何从N-gram发展成预训练语言模型PLMs。然后介绍了大模型在NLP任务上的表现,以及它遵循的基本范式。最后介绍了本课程需要用到的编程环境和GPU服务器。 一篇NLP方向的…

【java】创建打印数组的方法并调用

java的数组和Python不一样,不能直接用print打印,而如果每次都用循环的方法,比较麻烦,就直接创建一个类&方法,每次用的时候直接调用。 public class list_deal {public static void printArray(int[] arr){for (in…

Asp .Net Core 系列:基于 Swashbuckle.AspNetCore 包 集成 Swagger

什么是 Swagger? Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。它提供了一种规范的方式来定义、构建和文档化 RESTful Web 服务,使客户端能够发现和理解各种服务的功能。Swagger 的目标是使部署管理和使用功…

JVM实战(15)——Full GC调优

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

智能寻迹避障清障机器人设计(电路图附件+代码)

附 录 智能小车原理图 智能小车拓展板原理图 智能小车拓展板PCB 智能小车底板PCB Arduino UNO原理图 Arduino UNO PCB 程序部分 void Robot_Traction() //机器人循迹子程序{//有信号为LOW 没有信号为HIGHSR digitalRead(SensorRight);//有信号表明在白…

外部ADC之AD7949——14bit、8通道、250k

前言 在实际项目中,仅靠单片机内部的ADC采样,很有可能达不到实际采样精度,这个时候就需要外接外部ADC芯片进行采样,这些外部ADC一般都是SPI接口或者是并口。 单片机通过SPI接口或并口读写芯片内部寄存器,配置参考极性…

2023 年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷 B部分解析

2022 年全国职业院校技能大赛高职组云计算赛项试卷部分解析 【赛程名称】第一场:模块一 私有云、模块二 容器云【任务 1】私有云服务搭建[5 分]【题目 1】1.1.1 基础环境配置[0.2 分]【题目 2】1.1.2 Yum 源配置[0.2 分]【题目 3】1.1.3 配置无秘钥 ssh[0.2 分]【题…

javacv和opencv对图文视频编辑-裸眼3D图片制作

通过斗鸡眼,将左右两张相似的图片叠加到一起看,就会有3D效果。 3D图片,3D眼镜,3D视频等原理类似,都是通过两眼视觉差引起脑补产生3D效果。 图片: 图片来源: 一些我拍摄的真*裸眼3D照片 - 哔哩…

[Docker] 基本名词

镜像(iamge): Docker 镜像就好比是一个模板,可以通过这个模板来创建容器服务, 容器(container): Docker利用容器技术,独立运行一个或则多个应用,通过镜像来创建的。 启动,停止&a…

LeetCode-1672/1572/54/73

1.最富有客户的资产总量(1672) 题目描述: 给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i​​​​​​​​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。 客户的 资产总…

鸿蒙Harmony-线性布局(Row/Column)详解

人生的下半场,做个简单的人,少与人纠缠,多看大自然,在路上见世界,在途中寻自己。往后余生唯愿开心健康,至于其他,随缘就好! 目录 一,定义 二,基本概念 三&am…

Linux实操学习

Linux常用操作 一、帮助命令1. man1.1 基本语法1.2 快捷键1.3 注意事项 2. help2.1 基本语法2.2 注意事项 3. 常用快捷键 二、文件目录类1. 常规操作1.1 pwd1.2 cd1.3 ls 2. 文件夹操作2.1 mkdir2.2 rmdir 3. 文件操作3.1 touch3.2 cp3.3 rm3.4 mv 4. 文件查看4.1 cat4.2 more4…

浏览器进程模型和JS的事件循环

一、浏览器的进程模型 1、什么是进程? 程序运行所需要的专属内存空间 2、什么是线程? ​​​​​运行​代码的称为线程(同一个进程中的线程共享进程的资源) ⼀个进程⾄少有⼀个线程,所以在进程开启后会⾃动创建⼀个线…

软件测试|Pydantic BaseModel使用详解

简介 当我们在Python中编写应用程序时,通常需要处理和验证数据。Pydantic 是一个流行的库,它可以帮助我们定义数据模型并自动进行数据验证。在Pydantic中,BaseModel是一个核心概念,它用于定义数据模型和验证输入数据。在这篇文章…

Uibot (RPA设计软件)网页表单填写————课前材料四

微信群发助手机器人的小项目友友们可以参考小北的课前材料二博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~) 紧接着小北的前两篇博客,友友们我们即将开展新课的学习~RPA 培训前期准备指南——安装Uibot(RPA设计软件&#x…

第 5 课 编写简单的发布器 Publisher

文章目录 第 5 课 编写简单的发布器 Publisher 第 5 课 编写简单的发布器 Publisher 本节以创建一个velocity_publisher.py的(发布者)节点为例进行讲解。 输入指令“roscd beginner_hiwonder”,回车。进入beginner_hiwonder软件包。 roscd…

电脑重置网络后连不上网了怎么办

一般电脑重置网络后都会自动重新下载好网络配置,但是不免会出现一些意外,接下来就我遇到的重置后无法联网的解决方案 做一个分享: 1、按下“winR”打开运行输入 services.msc 。 2、找到 WLAN AutoConfig 和 Wired AutoConfig 服务&#xff…

蓝桥杯AcWing学习笔记 8-2数论的学习(下)

蓝桥杯 我的AcWing 题目及图片来自蓝桥杯C AB组辅导课 数论(下) 蓝桥杯省赛中考的数论不是很多,这里讲几个蓝桥杯常考的知识点。 约数个数定理 我们如何去求一个数的约数个数呢? N N N分解质因数的结果: N P 1 α…

【嘿,“怪”回来了】半年未见,好久不见。新年伊始,共赴新约。

您的阅读概要: 故事的开头总是极尽温柔,故事会一直温柔……半年未见,好久不见新年伊始,共赴新约忙碌的敲代码也不要忘了浪漫呀 故事的开头总是极尽温柔,故事会一直温柔…… ✨【自我介绍】:你好&#xff0c…

【ArcGIS Pro微课1000例】0056:度分秒与十进制度互相转换(度分秒→度、度→度分秒)

ArcGIS软件可以很方便的直接实现度分秒转度、度转度分秒(度分秒→度、度→度分秒)。 文章目录 一、转换预览二、工具介绍三、案例解析一、转换预览 借助ArcGIS快速实现度分秒与度及其他格式的坐标转换,例如:度分秒→度、度→度分秒。 1. 度→度分秒 2. 度分秒→度 转换后…