药品网站订单源码,wordpress 做公司网站,wordpress登录入口,代理网站备案表多模态中各种Fusion骚操作
大噶好#xff0c;我是DASOU#xff1b;
今天继续写多模态系列文章#xff0c;对多模态感兴趣的可以看我之前的文章#xff1a;
其实对于多模态来说#xff0c;主要可以从三个部分去掌握它#xff1a;
如何获取多模态的表示【learning mult…多模态中各种Fusion骚操作
大噶好我是DASOU
今天继续写多模态系列文章对多模态感兴趣的可以看我之前的文章
其实对于多模态来说主要可以从三个部分去掌握它
如何获取多模态的表示【learning multimodal representations】如何做各个模态的融合【fusing multimodal signals at various levels】多模态的应用【multimodal applications】
今天我主要放在第二个部分也就是各个模态的Fusion方式汇总
Fusion做的事情简单来说就是把不同模态的信息整合为一个信息得到一个特征向量然后利用这个特征向量再去做下游任务
所以它的任务就是更深的挖掘不同模态信息同时更好的融合进最终的representation;
我们可以把Fusion分为三种融合方式
基于简单操作的融合Attention-based Fusion双线性池化融合
1. 基于简单操作的融合
Simple Operation-based Fusion 就是说来自不同模态的特征向量可以使用很简单的方式进行整合比如多个模态的特征向量的拼接加权和
举个简单的例子比如我们现在做一个图文双模态的分类任务我们获取了文本特征向量和图片特征向量那么我们可以把两个特征向量直接拼接就当做是融合后的向量了
如果我认为文本的包含的信息更加的重要图片包含的信息不是那么重要我完全可以自定义文本特征向量权重为0.7图片特征向量权重为0.3然后两者的向量再concat或者做加权的和
其实如果我们自己最开始做一个多模态任务最先想到的方式就应该是这种基于简单操作的方式
但是这个方式存在一个问题就是两个模态之后没有做足够的交互两者之间的联系比较弱一点
针对这个我们一般会在得到concat features之后不会直接去做分类任务而是再接一个或者几个全连接层让模型自动的去学习两个模态之间的关系这样效果会更好
这里还有一点需要注意的是对于concat方式我们最好是确保文本特征向量和图片特征向量维度是固定的这样后面接全连接层维度不会出错
但是有些时候我们输入的图片数量不固定那么图片特征向量维度不一定这个时候操作比较多举个简单例子可以先做一个max pooling到固定维度再去和文本拼接
如果做加权和我们需要确保文本和图片特征维度是相同的这个就不多说很好理解
以我自己个人经验来说在图文多模态分类这个使用concat这种方式能比单一的使用文本效果提升不到2个点左右当然case by case
2. Attention-based Fusion
第一种方式我一般是在任务中作为基线简单粗暴有提升之后任务迭代的时候一般都会往attention上靠一靠
因为concat虽然后面加上了全连接层学习两者之间关系但是在两者的交互上来说还是有点弱的
对于attention的操作可以简单分为1.Image attention2. Symmetric attention for images and text3. Attention in a bimodal transformer 4. Other attention-like mechanisms
我详细说一下第三点就是基于TRM的attention因为TRM太火了
基于TRM的attention这块从两个类别去理解它一个是基于TRM的多模态预训练模型一个是基于TRM的微调模型
基于TRM的多模态预训练模型就是所借助TRM输入是图片和文本信息然后做预训练任务从大量数据中学习到信息然后得到多模态预训练模型然后放入到下游任务中去
但是这些有个问题很多人都没有大量的图文平行无监督数据相反大家一般都有图文平行的标注数据
所以我们可以直接借助TRM的结构直接做下游任务的微调就可以这一块有个论文是facebook的MMBT
MMMBT其实很简单直接看这个图
就是借助bert做初始化然后图片从resent得到向量输出一般是三个然后拼接文本输入到bert直接在下游任务做微调
在这里我想多说几句其实还可以直接对文本和图片之间做attention多头或者单头都可以其实单头就够了
在写代码的时候我在遇到一个问题就是文本和图片之间attention的矩阵化我踩了下坑~~~
3. 基于双线性池化的融合办法
双线性池化也是一个比较受重视的融合方法不过它的问题就是在于会把n为变成n的平方复杂度大大提升后续的改进一般都是在降低复杂度这一块
双线性池化最初的操作就是做向量的外积获得一个矩阵然后对矩阵做sum池化得到特征向量然后再去做分类
如果是在实际业务大家还是优先考虑前两种吧双线性池化这个放后一点
先写这么多后续会写一个MMBT论文的解读
参考论文Multimodal Intelligence: Representation Learning, Information Fusion, and Applications
https://arxiv.org/pdf/1911.03977.pdf