VL系列 Exchanging-based Multimodal Fusion with Transformer 论文阅读笔记

2023-09-10 20:23:53


写在前面

  又是一个周末 & 教师节,祝老师们节日快乐呀。依惯例,论文读起来~
  这是一篇多模态融合的文章,也算是这些年新出的一种方式了,具体还不知道啥情况,代码已开源,一试便知。

一、Abstract

  最近有提出基于交换的方法用于视觉-视觉融合,旨在交换学习到的 embedding 到另一个模态,然而大多数方法将多模态输入特征投影到低维空间中且不能应用于序列数据。于是本文提出一种基于交换多模态 Transformer 模型 MuSE 用于文本-视觉融合。首先使用两个独立的编码器将多模态特征映射到低维空间上,然后应用两个解码器来归一化 embedding 并将其推入到相同的空间。基于这些 embedding,提出 CrossTransformer,使用两个共享参数的 Transformer 编码器作为 Backbone 模型来交换多模态的知识。具体来说,CrossTransformer 首先学习输入的全局上下文信息,之后选择某一模态中的 tokenss,用另一模态的平均 embedding 来代替。实验在 Multimodal Named Entity Recognition 多模态命名实体识别任务和 Multimodal Sentiment Analysis 多模态情感分析任务上进行。

二、引言

  多模态融合很火,提出了一系列方法,例如 Multimodal Named Entity
Recognition (MNER)、Multimodal Sentiment Analysis (MSA)。早期的方法可划分为基于聚合的方法:首先用子网络表示每个模态,然后用不同的操作来聚合这些表示,例如拼接、自注意力等;基于对齐的方法:应用归一化的损失来对题不同子网络的 embedding。
  最近基于交换的方法 CEN 提出解决模态内处理和模态间融合的权衡。然而此方法仅特定用于视觉-视觉融合,其通道交换不能直接应用在其他的多模态场景中,例如文本-视觉融合。主要存在两个挑战:一方面,CEN 隐式地假设两个模态均在相同的低维度 embedding 空间内,但文本和图像模态的距离太远,通常会对应到不同的空间上;另一方面,基于 CNN 通道的交换模式不能直接应用于文本,因为文本是 3 维序列,图像 4D 平面。于是有问题出现了,能够提出基于交换的模型用于融合文本和视觉?
  于是本文提出基于交换的多模态融合方法 Multimodal fuSion method based on Exchanging(MuSE)。几种融合方式的比较如下图所示:

在这里插入图片描述
由于引言部分的最后一些内容与摘要重合,且详细版本在第三节里面,遂引言部分整体精简一些。

本文贡献总结如下:

  • 将基于交换的方法从视觉-视觉融合泛化到文本-视觉融合,提出一种基于交换的方法,MuSE。
  • 应用图像字幕任务和文本-图像生成任务来捕捉文本和图像的关联,联合归一化多模态 embedding,将其推到同一空间上。进一步设计 CrossTransformer,能够交换文本和图像间的知识。
  • 在 MNER 和 MSA 任务上进行大量的实验,效果很好。

三、相关工作

3.1 深度多模态融合

   早期的方法划分为两类:基于聚合的方法、基于对齐的方法。前者单独学习每个模态的表示,并从不同模态直接聚合这些学习到的表示,于是缺失了模态内交互信息。相比之下,基于对齐的方法采用归一化来对齐不同模态的分布,然而忽略了模态内的特性。有一些工作联合聚合和对齐的方法,但是需要精炼层级的设计,于是 可能会引入额外的计算损失。不同于上面这些方法,CEN 提出用于多模态,能够解决模态内的处理及模态间的权衡,而一些其他 CEN 的拓展方法,都受限于通道交换以及视觉-视觉融合。

四、方法

在这里插入图片描述
  如上图所示,MuSE 主要由四个部分组成,①②③④。①将输入的文本和图像投影到低维度空间,其包含一个文本编码器和图像编码器。考虑到多模态数据可能会被映射到不同的空间上,于是提出两个 embedding 归一化 (两个解码器) ②③,将多模态输入的 embedding 推到同一空间上,分别执行文本-图像生成任务和图像字幕任务。在多模态输入的 embedding 生成后,将其输出到 ④,由一个基于 Transformer 的模块组成,称之为 CrossTransformer。CrossTransformer 执行多模态信息交换,最终聚合融合后的 embedding。

4.1 低维投影和 embedding 归一化

  使用两个编码器-解码器的结构将输入的文本 T T T 和视觉 I I I 模态投影到相同的 embeding 空间上。

低维投影

T e =  TextEncoder  ( T ) I e =  ImageEncoder  ( I ) \begin{aligned} \mathbf{T}_{\mathbf{e}} & =\text { TextEncoder }(T)\\ \mathbf{I}_{\mathbf{e}} & =\text { ImageEncoder }(I) \end{aligned} TeIe= TextEncoder (T)= ImageEncoder (I)其中 TextEncoder 是一个典型的文本表示模型,例如 BERT,ImageEncoder 则是一个典型的 CNN 模型,例如 ResNet。具体来说,设置 T e \mathbf{T}_{\mathbf{e}} Te I e ∈ R n × d \mathbf{I}_{\mathbf{e}}\in\mathbb{R}^{n\times d} IeRn×d,其中 n n n 为文本长度, d d d 为 embedding 维度。

Embedding 归一化

在这里插入图片描述
  如上图所示,文本可以描述图像的字幕,而图像可以根据文本生成。为了捕捉文本和图像间的联系,设计了一个图像字幕任务和一个文本-图像生成任务。这两个任务通过两个解码器实施,旨在归一化编码器的 embeddings。对于图像字幕任务,编码器以图像 embedding 为输入,生成字幕文本。对于文本-图像生成任务,则是取反操作。整体流程总结如下:首先给文本和图像 embedding 增加随机噪声来增强模型的生成能力:
T n = MLP ⁡ ( T e + N t ( 0 , 1 ) ) I n = MLP ⁡ ( I e + N i ( 0 , 1 ) ) \begin{aligned} \mathbf{T}_{\mathbf{n}} & =\operatorname{MLP}\left(\mathbf{T}_{\mathbf{e}}+\mathcal{N}_{t}(0,1)\right)\\ \mathbf{I}_{\mathbf{n}} & =\operatorname{MLP}\left(\mathbf{I}_{\mathbf{e}}+\mathcal{N}_{i}(0,1)\right) \end{aligned} TnIn=MLP(Te+Nt(0,1))=MLP(Ie+Ni(0,1))其中 N t ( 0 , 1 ) \mathcal{N}_{t}(0,1) Nt(0,1) N i ( 0 , 1 ) \mathcal{N}_{i}(0,1) Ni(0,1) 为高斯随机噪声。然后使用两个解码器生成图像 I ^ \hat I I^ 和文本 T ^ \hat T T^
I ^ = I m a g e Decoder ( T n ) ( 5 ) T ^ = T e x t Decoder ( I n ) ( 6 ) \begin{aligned}\hat{I}&=\mathrm{Image}\text{Decoder}(\mathrm{T_n})\quad&(5)\\\hat{T}&=\mathrm{Text}\text{Decoder}(\mathrm{I_n})\quad&(6)\end{aligned} I^T^=ImageDecoder(Tn)=TextDecoder(In)(5)(6)其中 ImageDecoder 通常是个文本-图像生成模型,例如 PixelCNN,而 TextDecoder 是个图像字幕模型,例如 NIC。基于生成的图像和文本,将其与输入进行比较,并构建文本-图像生成损失 L t i \mathcal{L}_{ti} Lti 和图像字幕损失 L i t \mathcal{L}_{it} Lit,通过编码器,这俩损失归一化生成的文本和图像 embedding。相对于主任务来说,这俩都是辅助任务。

4.2 多模态交换

  在得到文本和视觉模态的 embedding T e \mathbf{T}_{\mathbf{e}} Te I e \mathbf{I}_{\mathbf{e}} Ie 后,接下来就是多模态交换过程。

Transformer 基础

  这个老生常谈的话题,略过,只给出一些公式:
A t t e n t i o n ( Q , K , V ) = S o f t m a x ( Q K T d k ) V \mathrm{Attention}(\mathbf{Q},\mathbf{K},\mathbf{V})=\mathrm{Softmax}(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d_k}})\mathbf{V} Attention(Q,K,V)=Softmax(dk QKT)V在本文中仅使用 Transformer 编码器。

CrossTransformer

  基于 Transformer,提出 CrossTransformer,使用两个共享参数的 Transformer 编码器来学习文本和视觉模态的 embeddings,并在其中交换多模态的信息。
  CrossTransformer 如图 2 中的 ④ 所示。首先在文本和图像编码器输出的 embedding 上添加一个 clc,作为 CrossTransformer 的输入。之后输入向量的全局上下文信息首先要被学习,然后才进行交换。CrossTransformer 设定其浅层作为正常的 Transformer 编码器层,后面跟着一些交换层。当多模态融合完成,交换过程停止。为实现这一过程,引入两个超参数 μ \mu μ η \eta η 分别控制信息交换的起始层和终止层。在每个交换层上,用最小注意力得分的比例选择其中一个模态的 tokens 到 cls 上,而用另一个模态的所有 tokens 的平均 embedding 向量来代替。
  具体来说,给定文本和图像编码器输出的 embeddings T e \mathbf{T}_{\mathbf{e}} Te I e \mathbf{I}_{\mathbf{e}} Ie,首先添加 cls 到这些 embedding 的开头位置,于是获得 CrossTransformer 的输入:
T e ( 0 ) = C o n c a t ( v c l s ( t 0 ) , T e ) I e ( 0 ) = C o n c a t ( v c l s ( i 0 ) , I e ) \begin{aligned}\mathbf{T}_e(0)&=\mathsf{Concat}\left(\mathbf{v}_{cls}(t_0),\mathbf{T}_e\right)\\\mathbf{I}_e(0)&=\mathsf{Concat}\left(\mathbf{v}_{cls}(i_0),\mathbf{I}_e\right)\end{aligned} Te(0)Ie(0)=Concat(vcls(t0),Te)=Concat(vcls(i0),Ie)其中 v c l s ( t 0 ) \mathbf{v}_{cls}(t_0) vcls(t0) v c l s ( i 0 ) \mathbf{v}_{cls}(i_0) vcls(i0) 表示 cls 初始的 embedding。其中 n n n 为输入的文本长度, d d d 是 embedding 的维度。在 μ \mu μ 个 Transformer 编码器层后,获得更新后的 embedding T e ( μ ) \mathbf{T}_{\mathbf{e}}(\mu) Te(μ) I e ( μ ) \mathbf{I}_{\mathbf{e}}(\mu) Ie(μ)。在第 μ + 1 \mu+1 μ+1 层,进入交换层,由三个子模块组成,第一个子模块计算多头自注意力,生成中间层 embedding T ~ e ( μ + 1 ) \tilde{\mathbf{T}}_e(\mu+1) T~e(μ+1) I ~ e ( μ + 1 ) \tilde{\mathbf{I}}_e(\mu+1) I~e(μ+1);对于所有模态,第二个子模块选择 θ \theta θ 比例的最小注意力分数的 tokens 到 cls 中执行信息交换。假设对应于第 k k k 行的 T ~ e ( μ + 1 ) \tilde{\mathbf{T}}_e(\mu+1) T~e(μ+1) 被选择,其 embedding 向量更新如下:
T ~ e ( μ + 1 ) [ k , : ] = 1 n ∑ j = 1 n I ~ e ( μ + 1 ) [ j , : ] + T ~ e ( μ + 1 ) [ k , : ] \tilde{\mathbf{T}}_e(\mu+1)[k,:]=\frac{1}{n}\sum_{j=1}^n\tilde{\mathbf{I}}_e(\mu+1)[j,:]+\tilde{\mathbf{T}}_e(\mu+1)[k,:] T~e(μ+1)[k,:]=n1j=1nI~e(μ+1)[j,:]+T~e(μ+1)[k,:]其中应用残差连接来可以减少由于代替引起的信息丢失。类似的,更新 I ~ e ( μ + 1 ) \tilde{\mathbf{I}}_e(\mu+1) I~e(μ+1) 如下:
I ~ e ( μ + 1 ) [ k , : ] = 1 n ∑ j = 1 n T ~ e ( μ + 1 ) [ j , : ] + I ~ e ( μ + 1 ) [ k , : ] \tilde{\mathbf{I}}_{e}(\mu+1)[k,:] \begin{aligned}&=\frac{1}{n}\sum_{j=1}^n\tilde{\mathbf{T}}_e(\mu+1)[j,:]\end{aligned} +\tilde{\mathbf{I}}_{e}(\mu+1)[k,:] I~e(μ+1)[k,:]=n1j=1nT~e(μ+1)[j,:]+I~e(μ+1)[k,:]在信息交换后,第三个子模块将更新后的 embedding 矩阵输入到带有层归一化的 FFN 中来得到第 μ + 1 \mu+1 μ+1 层的输出 embedding:
T e ( μ + 1 ) = FFN ( T ~ e ( μ + 1 ) ) I e ( μ + 1 ) = FFN ( I ~ e ( μ + 1 ) ) \begin{aligned}\mathbf{T}_e(\mu+1)&=\text{FFN}(\tilde{\mathbf{T}}_e(\mu+1))\\\mathbf{I}_e(\mu+1)&=\text{FFN}(\tilde{\mathbf{I}}_e(\mu+1))\end{aligned} Te(μ+1)Ie(μ+1)=FFN(T~e(μ+1))=FFN(I~e(μ+1))交换过程一直持续到第 η \eta η 层结束。
  最后拼接两个 Transformer 对的输出 embedding,将其送入全连接网络来得到最后的融合 embedding 矩阵 F e \mathbf{F}_e Fe

4.3 训练目标

  整体的优化目标函数为:
L = L t a s k + α L i t + β L t i \mathcal{L}=\mathcal{L}_{task}+\alpha\mathcal{L}_{it}+\beta\mathcal{L}_{ti} L=Ltask+αLit+βLti其中 L t a s k \mathcal{L}_{task} Ltask L i t \mathcal{L}_{it} Lit L t i \mathcal{L}_{ti} Lti 分别为主任务 (MNER/MSA),图像字幕任务、文本-图像生成任务的损失。 α \alpha α β \beta β 为两个平衡损失的权重超参数。所使用的数据集如下:

在这里插入图片描述

五、实验

  两个任务:多模态命名实体识别 Multimodal Named Entity Recognition (MNER),给定输入图文对 T T T I I I,MNER 旨在从 T T T 中提取一组实体集合,并将每个实体分类到一个预定义的类别上;多模态情感分析 Multimodal Sentiment Analysis (MSA),将每个图文对分类到预定义的情感类型上。
  ResNet、BERT、PixelCNN++、NIC-Att 分别用于图像编码器、文本编码器、图像解码器、文本解码器。Batch_size 40、学习率在 [ 1 e − 4 , 5 e − 5 , 1 e − 5 ] [1e-4,5e-5,1e-5] [1e4,5e5,1e5] 中通过网格搜索得到最佳性能的学习率。图像编码器的输入图像尺寸 224 × 224 224\times224 224×224,被编码的图像尺寸为 [ 8 , 8 ] [8,8] [8,8],图像解码器的输入尺寸为 32 × 32 32\times32 32×32。在 CrossTransformer 中,保持与 Transformer 编码器设置相同,除了 dropout rate 在 [0.1,0.2,0.3,0.4] 中搜索。对于损失函数的选择,使用 CrossEntropy 用于 MNER 预测,MSA 预测图像字幕,使用混合的 logistic 损失,用于文本-图像生成,例如 PixelCNN++。对于 cls 的初始化,使用 Kaiming 初始化。实验在 6 张 V100 卡。

5.1 多模态命名实体识别部署

实施

  将生成的融合 embedding F e \mathbf{F}_{e} Fe 送入 CRF 层用于 MNER 的预测。CRF 的学习率和 dropout rate 分别设置为 0.0001 和 0.5。

结果

  
在这里插入图片描述
在这里插入图片描述

5.2 多模态情感分析

实施

  应用单层的 MLP 在融合的 cls token embedding 上来分类 MSA 中的情感,MLP 的 dropout rate 设为 0.5。

结果

  
在这里插入图片描述

5.3 消融研究

  
在这里插入图片描述

5.4 超参数敏感分析

  
在这里插入图片描述

交换率 θ \theta θ

  如图 4(a)。

初始层 μ \mu μ

  如图 4(b)。

终止层 η \eta η

  如图 4©。

六、结论

  本文提出基于交换的模型 MuSE 用于多模态融合。MuSE 首先使用两个编码器将输入的文本和图像投影到低维空间,然后归一化 embedding,并用两个生成性解码器将其推送到同一空间上。通过两个任务捕捉图像文本间的关联:图像字幕和文本-图像生成。之后,基于归一化的 embedding,提出 CrossTransformer,通过交换不同模态的 token embedding 用于多模态融合。在 MNER 和 MSA 任务上表现很好,达到了 SOTA。

写在后面

  这篇文章的写作好像有点问题,重复啰嗦了点。创新点还是可以的,多模态通道进行交互。接下来看看代码,看看有没有什么可取之处。跑是跑不了,6块 V100 的卡,租服务器也有点小贵了。

更多推荐

02. Springboot集成Flyway

目录1、前言2、什么是Flyway?3、为什么要使用Flyway?4、简单示例4.1、创建SpringBoot工程4.2、添加Flyway依赖4.3、Springboot添加Flyway配置4.4、创建执行SQL脚本4.5、启动测试4.6、Flyway版本管理5、SQL脚本文件命名规则6、使用注意事项1、前言在现代应用

kafka介绍

1.kafka概述消息中间件对比特性ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级100万级时效性msusmsms级以内可用性高(主从)高(主从)非常高(分布式)非常高(分布式)功能特性成熟的产品、较全的文档、各种协议支持好并发能力强、

SkyWalking快速上手(二)——架构剖析1

文章目录介绍架构概述一、Agent组件介绍Agent的配置配置参数详解service_namesample_n_per_3_secsnamespacecollector.backend_serviceAgent的工作原理二、Collector组件什么是Collector组件?Collector组件的配置配置Collec

List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)

系列文章目录SpringBoot+Vue3实现登录验证码功能Java实现发送邮件(定时自动发送邮件)换个角度使用Redis去解决跨域存取Session问题Redis缓存穿透、击穿、雪崩问题及解决方法SpringCache的使用–快速上手篇更多该系列文章请查看我的主页哦文章目录系列文章目录前言一、根据Key值排序1.1.

【Spring Cloud系列】Feign详解与实战

Feign详解与实战文章目录Feign详解与实战一、概述二、什么是Feign三、Feign特性四、Feign简单使用3.1Feign使用步骤3.2Feign具体使用1.引入依赖2.启动类上添加注解3.编写FeignClient接口五、使用Feign发起http请求5.1Maven导入Feign配置,并集成Jackson

全球性区块链服务网络(BSN)机制体系、关键技术和应用项目科技成果鉴定会在北京举行

原标题:《全球性区块链服务网络(BSN)机制体系、关键技术和应用项目科技成果鉴定会在北京举行》2023年9月17日,“全球性区块链服务网络(BSN)机制体系、关键技术和应用”科技成果鉴定会在北京举行。鉴定委员会由北京交通大学移动专用网络国家工程研究中心主任、中国工程院院士张宏科,中国航天科技集团五院研究员、中国科学院院

Android Kotlin 协程详解

前言关于Kotlin基础和高阶函数又不熟悉的可以先参考文章:AndroidKotlin基础详解_袁震的博客-CSDN博客AndroidKotlin高阶详解_袁震的博客-CSDN博客什么是协程?要理解协程,就要将它和线程联系起来理解。线程是什么?我想大家都清楚,而协程,它比线程更加轻量级,一个线程上面可以有多个协程。如果

无人车开源软件架构

参考视频:Apollo自动驾驶入门课程开源软件架构开放式软件层分为三个子层:实时操作系统、运行时框架和应用程序模块层实时操作系统(RTOS)可确保在给定时间内完成特定任务,“实时”是指无人车的操作系统能够及时进行计算,分析并执行相应的操作。以上是在汽车传感器收集到外界数据后的短时间内完成。假设无人车的传感器检测到车辆前

requests模块高级用法练习

文章目录模拟浏览器指纹发送get请求发送post请求文件上传服务器超时模拟浏览器指纹打开http://10.9.75.164/php/functions/setcookie.php网页,找到请求头的UA字段,这段信息是浏览器的指纹(包括当前系统、浏览器名称和版本):在Python脚本中新建一个headers字段,将该U

【ES6】

ES61ES6简介1.1什么是ES61.2为什么使用ES62ES6的新增语法2.1let2.2const2.3let、const、var的区别2.4解构赋值2.4.1数组解构2.4.2对象解构2.5箭头函数2.6剩余参数3ES6的内置对象扩展3.1Array的扩展方法3.1.1扩展运算符(展开语法)3.1.2构造函数方

华为云云耀云服务器L实例评测|基于华为云云耀云服务器L实例搭建EMQX大规模分布式 MQTT 消息服务器场景体验

文章目录前言一、😄华为云云耀服务器二、😄产品实例创建相关1、🧨开通华为云云耀服务器2、🧨创建华为云云耀服务器实例3、🧨终端登录4、🧨华为云云耀云服务器密码重置三、😄安装开源产品EMQX四、😄开放安全组五、😄访问EMQXDashboard六、😄消息传输建立测试1、🧨客户端连接消息服务器2、🧨客户端

热文推荐