论文名称:Meshed-Memory Transformer for Image Captioning(用于图像描述的带存储器的网状Transformer)
原论文地址: 下载地址
官方开源代码地址:代码
本篇博客参考文章:
1、[CVPR2020] Meshed-Memory Transformer for Image Captioning
2、论文笔记:Meshed-Memory_Transformer_for_Image_Captioning_CVPR2020
Abstract
基于transformer的架构代表了序列建模任务(如机器翻译和语言理解)的最新水平。然而,它们在图像描述等多模态上下文中的适用性在很大程度上仍未得到充分探索。为了填补这一空白,我们提出了M2一个带有内存的网状Transformer,用于图像描述。该体系结构改进了图像编码和语言生成步骤:它集成学习到的先验知识学习图像区域之间关系的多级表示,并在解码阶段使用网状连接来利用低、高级特征。实验中,我们研究了M2Transformer的性能和不同的完全注意模型,并与 recurrent使用的模型进行了比较。在COCO上进行测试时,我们的建议在“卡帕西”测试分割和在线测试服务器上实现了单模型和集成配置的新状态。我们也评估它在描述训练集中看不见的物体时的表现。训练模型和代码复制实验是公开的:https://github.com/aimagelab/
meshed-memory-transformer.
1. Introduction
图像标注是用自然语言描述图像的视觉内容的任务。因此,它需要一个算法来理解和建模视觉元素和文本元素之间的关系,并生成一个输出单词序列。这通常通过循环神经网络模型来解决[40,15,43,42,7],其中语言的顺序性质是用rnn或lstm的循环关系来建模的。为了建模图像区域、单词和最终标签[20]之间的关系,添加注意力或图状结构[46]经常被添加到递归[43,12]中。
除了卷积语言模型[5]的研究之外,这种模式在过去几年中一直是主要的方法,但是[5]并没有成为主要的选择。最近出现的充分关注模型,复发的关系放弃了自我关注的使用,提供了独特的机会在设置和序列建模表演,作证的Transformer[37]和Bert[8]模型及其应用[33]检索和视频理解[35]。此外,这种设置还提供了新颖的架构建模功能,这是注意力操作符第一次以多层和可扩展的方式使用。然而,图像字幕的多模态性质要求特定的框架,不同于那些用于理解单一的模态。
在此前提下,我们研究了一种全新的图像描述方法的设计。我们的架构从用于机器翻译的Transformer模型[37]中获得灵感,并结合了两个与之前所有图像字幕算法相关的关键创新点:
(i)图像区域及其关系以多级方式编码,其中考虑了低级和高级关系。当建模这些关系时,我们的模型可以通过使用持久记忆向量来学习和编码先验知识。
(ii)句子的生成采用多层架构,利用低级和高级的视觉关系,而不仅仅是视觉形态的单一输入。这是通过一个学习的门控机制来实现的,该机制在每个阶段权重多级别的贡献。由于这在编码器和解码器层之间创建了一个网格连接模式,我们将我们的模型命名为网格内存转换器(mesh-memory Transformer,简称M2 Transformer)。图1描述了架构的模式。
通过实验,我们探索了不同的全注意基线和最近的建议,获得了关于全注意模型在图像字幕中的表现的见解。在COCO基准测试中,我们的M2 Transformer在“卡帕西”测试集上达到了一个新的先进水平,无论是单模型还是整体配置。最重要的是,它超过了在线测试服务器上的现有提议,在已发布的算法中排名第一。
的贡献。综上所述,我们的贡献如下:
Contributions.
•我们提出了一种全新的 fully-attentive图像描述算法。我们的模型封装了一个用于图像区域的多层编码器和一个生成输出句子的多层解码器。为了开发低级和高级的贡献,编码和解码层以网状结构连接,并通过可学习的门控机制进行加权;
•在我们的视觉编码器中,图像区域之间的关系以多层次的方式编码,利用学到的先验知识,这是通过持久记忆向量建模;
•我们展示的M2变压器超越了所有先前的图像字幕建议,实现了在线COCO评估服务器上的一个新状态;
•作为补充贡献,我们使用最近提出的nocaps数据集进行实验,比较不同的fully-attentive的图像字幕架构,并验证我们的模型在新对象字幕上的性能。最后,为了提高再现性,促进该领域的新研究,我们将公开所有实验的源代码和训练过的模型。
3. Meshed-Memory Transformer
我们的模型可以在概念上分为编码器模块和解码器模块,它们都是由一堆attentive的层组成的。编码器负责处理输入图像的区域并设计它们之间的关系,解码器则从每个编码层的输出中逐字读取,生成输出描述。所有模态内和跨模态交互之间的词和图像级特征建模通过缩放点积注意,没有使用 recurrence。注意操作三组向量,即一组查询Q、键K和值V,根据查询和键向量之间的相似度分布,取值向量的加权和。在标量点积注意的情况下,算子可以被正式定义为
其中Q是一个有nq个查询向量的矩阵,K和V都包含了nk个键向量和值向量,三种向量都有同样的维度,d是一个缩放因子。
3.1. Memory-Augmented Encoder
给定从输入图像中提取的一组图像区域X,可以通过Transformer[37]中使用的自注意操作来获得X的置换不变编码。在这种情况下,查询、键和值是通过线性投影输入特征获得的,operator可以定义为
where Wq, Wk, Wv are matrices of learnable weights.
self-attention operator的输出是一组新的元素S(X),与X具有相同的基数,其中X的每个元素都被替换为值的加权和,即输入的线性投影(Eq. 1)。
值得注意的是,attentive权值仅仅依赖于输入集本身的线性投影之间成对的相似性。因此,self-attention operator可以被视为一种编码输入集中的成对关系的方法。当使用图像区域(或从图像区域派生的特征)作为输入集时,S(·)可以自然地对理解输入图像之前描述它所需的区域之间的成对关系进行编码。
然而,自我注意定义中的这种特性有一个显著的局限性。因为每件事都仅仅依赖于成对的相似性,所以自我注意不能模拟图像区域之间关系的先验知识。例如,给定一个区域编码一个人,一个区域编码一个篮球,在没有任何先验知识的情况下,将很难推断出球员或游戏的概念。同样,给定编码鸡蛋和烤面包的区域,我们可以通过对关系的先验知识很容易地推断出这幅图描绘的是一顿早餐。
Memory-Augmented Attention. 为了克服自我注意的这种局限性,我们提出了记忆增强注意操作。在我们的建议中,用于自我注意的键和值的集合被扩展为附加的“槽”,它可以编码先验信息。为了强调先验信息不应依赖于输入集X,额外的键和值被实现为简单可学习的向量,可以直接通过SGD更新。形式上,该operator定义为:
其中Mk和Mv是有着nm行的可以学习的矩阵,[·, ·] indicates concatenation.直观地说,通过添加可学习的键和值,通过注意,将有可能检索尚未嵌入x的已学习知识。同时,我们的公式保持查询集不变。
就像 self-attention operator一样,我们的记忆增强注意可以多头运用。在本例中,记忆增强注意操作重复进行h次,每个头部使用不同的投影矩阵Wq、Wk、Wv和不同的可学习记忆槽Mk、Mv。然后,我们连接来自不同头部的结果,并应用一个线性投影。
Encoding layer. 我们将记忆增强算子嵌入到一个Transformer-like层中:记忆增强注意的输出被应用到一个由两个具有单一非线性的仿射变换组成的position-wise前馈层中,这两个仿射变换独立地应用于集合中的每个元素。在形式上,
Xi表示input set中第i个向量,F(X)i是输出向量的第i个向量。Also, σ(·) is the ReLU activation function, V and U are learnable weight matrices, b and c are bias terms.
每个子组件(memory-augmented attention and position-wise feed-forward)然后被封装在一个residual connection和layer norm operation.中。编码层的完整定义可以写成:
where AddNorm indicates the composition of a residual
connection and of a layer normalization.
Full encoder. 在上述结构下,多个编码层按顺序堆叠,使第i层消耗第i - 1层计算的输出集。这相当于为图像区域之间的关系创建多级编码,其中较高的编码层可以利用和细化前一层已经识别的关系,最终使用先验知识。因此,一堆N编码层将产生一个多层输出X = (X1,…~ XN),从每个编码层的输出获得。
3.2. Meshed Decoder
我们的解码器以之前生成的单词和区域编码为条件,并负责生成输出标题的下一个标记。在这里,我们利用前面提到的输入图像的多层次表示,同时仍然构建一个多层结构。为此,我们设计了一个meshed attention operator,与Transformer中的 cross-attention operator不同,它可以在句子生成过程中利用所有编码层。
Meshed Cross-Attention. 给定向量Y的输入序列,以及来自所有编码层X ~的输出,Meshed
Attention operator通过gated cross-attentions将Y连接到X中的所有元素。我们不是只关注最后一个编码层,而是对所有编码层执行交叉注意cross-attention。这些多层次的贡献在被调制后汇总在一起。形式上,我们的 meshed attention operator被定义为
其中C(·,·)表示encoder-decoder cross-attention,使用解码器的查询和编码器的键和值计算:
αi是一个权重矩阵,其大小与cross-attention结果相同。αi中的权重既调节了每个编码层的单一贡献,也调节了不同编码层之间的相对重要性。通过测量每个编码层的cross-attention计算结果与输入查询之间的相关性,计算结果如下:
where [·, ·] indicates concatenation, σ is the sigmoid activation, Wi is a 2d×d weight matrix, and bi is a learnable bias vector.
Architecture of decoding layers. 至于编码层,我们在一个多头的fashion上应用meshed attention。由于单词的预测只能依赖于之前预测的单词,解码器层包含一个隐藏的自我注意操作,该操作将来自其输入序列Y的第t个元素的查询与从左侧子序列(即Y≤t)获得的键和值连接起来。此外,解码器层包含一个position-wise的前馈层(如Eq. 4),所有组件都封装在AddNorm操作中。解码器层的最终结构可以写成:
其中Y为向量的输入序列,Smask表示随时间的a masked self-attention。最后,我们的解码器是将多个解码器层堆叠在一起,帮助改进对文本输入的理解和下一个token的生成。总的来说,解码器以词向量为输入,其输出序列的第t个元素编码t+1时刻的一个字的预测,条件是Y≤t。在进行线性投影和softmax操作之后,它对字典中单词的概率进行编码。
3.3. Training details
按照图像字幕的标准做法[29,31,4],我们使用词级交叉熵损失(XE)预训练我们的模型,并使用强化学习来微调序列生成。当使用XE进行训练时,训练模型预测给定先前ground-truth单词的下一个标记;在这种情况下,解码器的输入序列立即可用,整个输出序列的计算可以一次完成,所有操作随时间并行化。
在强化学习训练时,我们对使用波束搜索[4]采样的序列采用一种自批判序列训练方法[31]的变体:解码时,我们从解码器在每个时间步的概率分布中抽样前k个单词,并始终保持最高概率的前k个序列。由于序列解码在此步骤中是迭代的,因此无法利用上述随时间变化的并行性。然而,用于计算t时刻的输出令牌的中间键和值可以在下一次迭代中重用。
在之前的作品[4]中,我们使用apple - d分数作为奖励,因为它与人类的判断[38]很好地相关。我们使用奖励的平均值作为奖励的基线,而不是像之前的方法那样贪婪解码[31,4],因为我们发现它可以略微提高最终的表现。一个样本的最终梯度表达式为:
transformer-based architectures 没有充分利用到多模型图像字幕。
图像描述是用自然语言描述图像的视觉内容的任务。因此,它需要一种算法来理解和建模视觉元素和文本元素之间的关系,并生成一个输出单词序列。 这通常是通过循环神经网络模型来解决的,其中语言的顺序本质是用rnn或lstm的循环关系来建模的,为了建立图像区域、单词和最终标签之间的关系模型,常常在递归中加入附加注意力或图形样结构。
在最近出现的fully attentive models中循环关系被抛弃,而使用self-attention,在集合和序列建模性能方面提供了独特的机会,此外,此设置还提供了新颖的架构建模功能,因为注意力操作符首次以多层和可扩展的方式使用。然而,图像描述的多模态本质要求特定的架构,不同于那些用于理解单一模态的架构。
虽然基于Transformer的体系结构代表了序列建模任务(如机器翻译和语言理解)的最新水平。然而,它们对图像描述等多模态上下文的适用性仍然有待探索。作者提出了 M2,一个用于图像描述的带存储器的网状Transformer。该体系结构改进了图像编码和语言生成步骤:它结合学习到的先验知识学习图像区域之间关系的多层次表示,并在解码阶段使用网状连接来挖掘低级和高级特征。
论文方法(M2 Transformer)
整个模型分为编码器和解码器模块,编码器负责处理输入图像的区域并设计它们之间的关系,解码器从每个编码层的输出中逐字读取并输出描述。文字和图像级特征之间的模态内和跨模态的交互都是通过缩放点积注意力来建模的,而不使用递归。注意力操作基于三个向量:Q,K,V。根据Q和K向量之间的相似度分布,计算V向量的加权和,表示如下:
其中Q,K,V都是由向量组成的矩阵,具有相同的维度。
transformer-based architectures 没有充分利用到多模型图像字幕。
我们提出了一个新型fully-attention图像字幕算法,对于image caption我们提出了一个带有内存的 网格transformer。这个结构优化了图像编码器和语言生成步骤,它学习集成先验知识的图像区域之 间关系的多级表示,并在解码阶段使用网格状连接来利用低和高级特征。
我们的模型包含了一种区域编码方法,它通过内存向量和利用先验知识编码和解码模块之间的网状 连接。 值得注意的是,对于其他fully-attention的架构来说,这种连接模式是前所未有的。
memory augmented encoder
给定从输入图像中提取的一组图像区域X,attention可以通过transformer中使用的自注意操作来获得X的排列不变编码。在这种情况下,query、key和value是通过线性投影输入特征来获得的。
meshed decoder
解码器以之前生成的单词和区域编码为条件,生成输出字幕的下一个标记,为了构建多层结构,我们设计了一个meshed attention operator,它能够利用到句子生成中的所有编码层。
Memory-Augmented Encoder
传统的Transformer可表示为:
本文提出,这种self-attention有一定的局限性,因为一切都完全取决于pairwise similarities,所以self-attention不能对图像区域之间关系的先验知识进行建模。 例如,给定一个region encode一个人,一个region encode一个球,如果没有任何先验知识,就很难推断出球员或比赛的概念。
由此引入了Memory-Augmented Attention的概念
Memory-Augmented Attention
这里与传统的self-attention有一定的区别,为了编码出先验知识,它在key和value部分新增了一部分slotsMk,Mv,这两个矩阵可以通过SGD自动学习,及可以自动学习到输入X XX 所不能表达的先验知识。
除此之外,Multi-Head Attention的步骤和Transformer并没有什么不同。
Encoding layer
类似Transformer有:
Feed Forward可以表示为:
Full encoder
由此可以堆叠多个encoding layer,上一个layer的输出作为下一个layer的输入。
这相当于创建图像区域之间关系的多级编码,其中更高的编码层可以利用和改进先前层已经识别的关系,最终使用这些先验知识建模。最终可以获得一系列layer的输出:
Meshed Decoder
在这里,在构建多层结构的同时利用了上述输入图像的多级表示。 与传统的Transformer不同,可以充分利用不同的Encoding Layer的信息。
Meshed Cross-Attention
如上如所示,将Y与不同Layer Encode出来的信息进行Cross-attention,再由Y与Cross-attention进行一个attention,将不同layer的Cross-attention 信息加权起来,放入feed-forward层。
Cross-attetion表示如下:
加权因子:
Meshed Cross-attention:
Architecture of decoding layers
同样类似于Transformer:
其中Smask代表t时刻只能知道t-1及之前的信息,要为模型加上mask
浅谈 Attention 机制的理解
图解Transformer(完整版)
【NLP】Transformer模型原理详解