Meshed-Memory Transformer for Image captioning论文阅读笔记------自用

在看这篇文章之前,一定要去学习自注意力到Transformer的内容,推荐B站李宏毅老师的相关视频。

摘要

基于Transformer的架构代表了机器翻译和语言理解等序列建模任务的最新技术。但是,他们在图像描述等多模态环境中的适用性仍很大程度上尚未得到充分探索。为了填补这一空白,本文提出了 M 2 M^2 M2------ a Meshed Tramsformer with Memory for Image Captioning。该架构改进了图像编码和语言生成步骤:它学习了图像区域之间关系的多层表示,集成了所学的先验知识,并在解码阶段使用网格状连接来利用低级和高级特征。
通过实验,本文作者将 M 2 M^2 M2 Transformer和不同fully-attentive models与循环模型进行性能比较。在COCO上进行测试时,本文在“Karpathy” test split和在线服务器上的单模型和集成配置中实现了新的最先进水平。本文还评估了它在描述训练集中未见过的物体时的表现。
代码地址

介绍

图像描述使用自然语言描述图像视觉内容的任务。因此,它需要一种算法来理解和建模视觉和文本元素之间的关系,并生成一系列输出单词,这通常是通过循环神经网络模型来解决的,其中语言的顺序性是通过RNN和LSTM的循环关系来建模的。附加注意力Additional attention 或类图结构通常被添加到递归中,以便对图像区域、单词和最终标签之间进行建模。
最近出现的完全注意力模型(其中循环关系被弃用,转而使用self-attention)在集合和序列建模性能方面提供了独特的机会。此外,该设置还提供了新颖的架构建模功能,因为注意力操作符首次以多层和可扩展的方式使用。(我觉得这里的注意力操作符是指self-attention中的Q,K,V)。然而,图像描述的多模态本质要求特定的架构,不同于那些用于理解单一模型的架构。(对这句话的理解是:处理图像描述任务时,由于涉及到图像和文本两种不同的数据模态,因此需要设计特定的架构来更好的理解和处理图像和文本信息,并在二者之间建立有效的联系。这与单一模态架构的区别在于:相比于处理单一模态数据的架构,用于处理多模态数据的架构需要更加复杂和灵活,能够有效地捕捉不同模态之间的关联和信息交互。也就是融合多模态信息的同时保持模型的性能和泛化能力。)
遵循这个前提,就是上面说的图像描述的多模态本质要求特定的架构这个前提。

本文研究内容是:

提出一种新颖的fully-attentive图像描述方法的设计。这个架构的灵感来源于Transformer。并将所有的之前的图像描述算法的两个关键新颖之处与Transformer结合。

  1. (I)图像区域及其关系以multi-level fashion(多层方式)编码,其中考虑了低层和高层关系。在对这些图像区域间的关系进行编码时,本文的模型通过使用持久memory vectors学习和编码先验知识。
  2. (Ⅱ)句子的生成由多层架构来完成,利用低层次和高层次的视觉关系,而不是只有来自视觉模型的单个输入。这是通过学习的门控机制实现的,该机制对每个阶段的多层贡献进行加权。

由于这样在解码器和编码器之间创建了网格连接模式,因此命名为 M 2 M^2 M2Transformer。
图1描述了该方法的架构:
在这里插入图片描述

本文的贡献(前面两点也是本文的创新点)

  1. 本文提出了一个fully-attentive(全注意力)图像描述算法。(因为解码器和编码器都由注意力层堆栈组成,所以称为全注意力)本文的模型封装了图像区域的multi-layer encoder和生成输出句子的multi-layer decoder。为了同时利用所有的低层和高层的贡献,编码层和解码层以网状结构(mesh-like structure)连接,并通过可学习的gating mechanism(门控制)进行加权;
  2. 在本文的视觉解码器中,图像区域间的关系利用学到的先验知识以多层方式进行编码,这些先验知识通过persistent memory vectors(持久记忆向量)进行编码。
  3. 本文展示了 M 2 M^2 M2 Transformer超越了之前在图像描述方面的所有proposals,在在线COCO评估服务器上达到了新的领先;
  4. 作为补充贡献,本文使用最近提出的nocaps数据集进行实验,以比较图像描述的不同全注意力架构,并验证本文模型在新颖目标描述上的性能。最后,为了提高可重复性并促进该领域的研究,公开了源代码和训练模型。

Meshed-Memory Transformer

本文的模型在概念上还是分为解码器和编码器模块,两者都由注意力层堆栈组成。编码器负责处理输入的图像中的区域并设计它们之间的关系。而解码器则从每个编码层的输出中读取以逐字生成输出描述。单词和image-level(图像层)特征之间的所有模态内和跨模态交互都是通过scaled dot-product attention(这里的dot-product就是在自注意力中计算关联性即attention score时用的点乘(●),这里的缩放是指q●k得到的 α ′ α' α要进行缩小,然后再与v进行相乘。这样使得计算注意力分数时更稳定,避免梯度消失或爆炸的问题),而不是用递归,也就是不使用循环结构。
在这里插入图片描述
注意力基于三个向量:Q,K,V进行操作。根据Q和K之间的相似度分布(就是要得到 α ′ α' α),计算V的加权和。在对 α ′ α' α进行缩放的情况下,这个过程的式子表示如下:
在这里插入图片描述

参数含义(Q,K,V具有相同的维度)
Q n q n_q nq个查询向量的矩阵
K n q n_q nq个键
V n q n_q nq个值
d缩放因子

以上是自注意力的式子,在李宏毅老师的视频中有详细地推导过程,但是我对有些小地方不太清楚,以下是我自己的推导过程:
在这里插入图片描述
在这里插入图片描述
我根据自己的理解推导出的式子大体一致,但是V是在式子的前面,这我不知道怎么回事?我还在寻找答案。
这个 M 2 M^2 M2Transformer模型的整体结构如下图2所示,为了看得清楚,这个结构中没有显示Add & Norm操作:
在这里插入图片描述

Memory-Augmented Encoder

给定从输入图像中提取的一组图像区域X,注意力可以通过Transformer中使用的自注意力操作获得X的invariant encoding。
在这里插入图片描述
在这种情况下,queries,keys,and values是通过对输入特征进行linearly projecting(线性投影)得到的,运算符可以定义为:
在这里插入图片描述
其中 W q W_q Wq W k W_k Wk W v W_v Wv是可学习权重的矩阵。输出的是一组新的元素S(X),与X具有相同的基数,其中X的每个元素都被替换为值的加权和。
这的注意的是,注意力权重仅取决于输入集本身的线性投影之间的成对相似性,因此,self-attention operator可以被看做是一种用于编码输入集当中成对关系的方法。当使用图像区域或图像区域衍生的特征作为输入集时,S(·)可以自然地对理解图像所需要的的区域之间的成对关系进行编码,然后再进行描述。
然而,self-attention有一个巨大的局限性,因为一切仅仅依赖于成对的相似性,self-attention不能对图像区域之间的关系建立先验知识模型,也就是他不能具体描述两个区域之间具有什么关系,只知道这两个区域间的有关系的概率是多少。比如,给定一个编码人的区域和一个编码篮球的区域,如果没有先验知识,很难推断出球员或者打球的概念;同样,给定编码鸡蛋和编码烤面包的区域,如果具备先验知识,很容易得出图片描述的是早餐。
这里还没有提到persistent memory vectors,继续往下看。

Memory-Augmented Attention(记忆增强注意力)

为了克服self-attention的这种限制,本文提出一种memory-augmented attention operator(记忆增强注意力算子),将自注意力中的K和V的集合通过一个额外的"slot"(槽)进行扩展,这个“槽”可以编码先验信息。为了强调先验信息不应依赖于输入集X,附加的键和值,也就是扩展出来的那部分K和V被实现为普通可学习的向量(就是 M k M_k Mk M v M_v Mv),可以通过SGD(SGD的全称是Stochastic Gradient Descent,随机梯度下降。也是一种优化神经网络模型的方法)直接更新。公式定义为:
在这里插入图片描述
其中 M k M_k Mk M v M_v Mv是有 n m n_m nm行的可学习矩阵。且[·,·]表示串联。直观地说,通过增加可学习的K和V,通过注意力机制将有可能检索到尚未嵌入X中的学习知识(这里的learned knowledge,即学习知识指的是模型在训练过程中通过学习得到的关于输入数据的相关信息或特征,这属于额外信息,不是输入数据中明确表示的关系或知识)。同时,本文的公式使得Q不变。
就像自注意力算子(self-attention operator)一样,本文的memory augmented attention可以以多头(multi-head)方式应用。在这种情况下,记忆增强注意力操作重复h次,每个头使用不同的projection matrices(投影矩阵) W q W_q Wq W k W_k Wk W v W_v Wv和不同的可学习记忆槽(memory slots) M k M_k Mk M v M_v Mv。然后连接不同头的结果并应用线性投影(这里说的是点乘,内积)。

Encoder layer

作者将memory-augmented operator嵌入到类似Transformer的层中;记忆增强注意力的输出应用于position-wise feedward layer(位置前馈层),也就是feed forward那一层(如下图所示)。这个position-wise feedward layer由两个具有单个非线性的affine transformations(仿射变换)组成(看到这里我还以为本文对前馈层也做了改动,看公式才知道没有任何改动),这些变换独立地应用于集合的每个元素,可表示为:
在这里插入图片描述
在这里插入图片描述
在解释以上前馈层的公式之前,先根据Transformer的那篇论文《Attention is all you need》中了解一下Feed forward(本人才疏学浅,所以边看边查)。以下是论文中提到的Position-wise Feed-Forward Networks。
在这里插入图片描述
论文中提到,Transformer的编码器和解码器的每一层都有一个fully connected feed-forward network,该网络单独且相同的应用于每个位置,由两个线性变换(linear transformations)组成,中间有一个Relu激活,因此式子表示为:
在这里插入图片描述
这个式子就是一个线性变化,再包裹上Relu激活函数,再进行一次线性变换。
虽然线性变换在不同位置上是相同的,但是在层与层之间参数的使用是不一样的。除了两层线性变换这种描述外,还有一种描述方式,那就是全连接前馈神经网络由两个内核大小为1的卷积层组成。输入和输出的维度是 d m o d e l d_{model} dmodel=512,内层的维度是 d f f d_{ff} dff=2048。
回到论文中来,因此我们可以发觉本文的全连接前馈网络还是和Transformer的一致,首先解释一下式子中的符号:
在这里插入图片描述

X i X_i Xi输入集的第i个向量
F ( X ) i F(X)_i F(X)i输出集的第i个向量
σ(·)ReLU激活函数
V,U可学习权重矩阵
b,c偏差项

因此这个式子还是和FFN(x)没有什么区别,那为什么本文说“由两个具有单个非线性的affine transformations(仿射变换)组成”呢?其实这里的非线性指的是在仿射变换后会接一个非线性激活函数ReLU,并不是指进行的是非线性变换。仿射变换的意思是指对输入的每个特征向量应用线性变换,包括矩阵乘法和偏置项加法。
然后,将每个子组件(memory-augmented attention and position-wise feed forword)封装在Add & Norm层(残差连接和层归一)中。编码层的完整定义最终可以写为:
在这里插入图片描述
这个公式的意思是:经过Multi-head attention的输出,当然这个注意力中用 M k M_k Mk M v M_v Mv这两个额外的“槽”扩展了K和V,然后这个输出经过Add & Norm得到以上公式中的Z。接着将Z经过Fc层,然后将这个输出再进行一个Add & Norm得到 X ^ \hat{X} X^

Full Encoder

给定上述结构多个编码层按顺序堆叠,使得第i层消耗第i-1层计算的输出集。这相当于创建图像区域之间关系的多层编码,其中更高的编码可以利用和细化先前层已经识别的关系,最终使用先验知识。最终,N个编码层的堆栈将产生从每个编码层的输出获得的多层输出
X ^ \hat{X} X^=( X ^ 1 \hat{X}^1 X^1 X ^ 2 \hat{X}^2 X^2,……, X ^ N \hat{X}^N X^N)。
在这里插入图片描述

Meshed Decoder(网格解码)

本文的解码器以先前生成的单词和区域编码为条件(这就是Transformer解码器的输入),并负责生成输出描述的下一个单词(token)。作者利用上述输入图像的多层表示,同时仍然构建多层结构(所以本文模型的解码器和编码器都是多层的,这里的多层和Transformer模型对一部分操作要循环进行N次是有区别的,这个N一般是6)。为此,本文设计了一个meshed attention operator,即网格注意力算子(这篇文章的模型是全注意力,改动也主要是对注意力进行改动)。这个网格注意力算子与Transformer的cross -attention不同,它可以在句子生成过程中利用所有编码层。

Meshed Cross-Attention

给定向量Y的输入序列以及所有编码层X的输出,网格注意力算子通过gated cross-attentions(门控交叉注意力)将Y连接到X中的所有元素。本文不是只关注最后一个编码层,而是对所有的编码层进行交叉关注,然后将这些多层贡献在调制后求和在一起。(所有这里如何融合多层表示,也就是它这个门控交叉注意力是什么呢,就是加权求和)。形式上没本文的Meshed attention operator定义为:
在这里插入图片描述
其中的C(·)指的是encoder-decoder cross-attention(编码器-解码器交叉注意力),使用来自解码器的Q和编码器的K和V进行计算(这就是Transformer的计算方式,Transformer解码器的Cross-attention的输入就是来自编码器的K和V,以及解码器前面部分得到的Q,如下图所示),计算式子如下所示:
在这里插入图片描述
在这里插入图片描述
(6)式中, α i α_i αi是与交叉注意力结果大小相同的权重矩阵(从式子看, α i α_i αi与后面的C要进行内积运算,所以C的维度是个N×N的)。 α i α_i αi中的权重既调节每个编码层的单一贡献,也调节不同层之间的相对重要性。通过测量每个编码层的交叉注意结果与输入Q之间的相关性来计算这些数据,如下式所示:
在这里插入图片描述

[·,·]表示concat连接
σsigmoid激活函数
W i W_i Wi2d×d的权重矩阵
b i b_i bi可学习的偏差向量

Architecture of decoding layers

至于解码层,本文以multi-head方式应用meshed attention。由于单词的预测应该取决于先前预测的单词,因此解码器层包含一个掩码自注意操作(这个可以看李宏毅老师的讲解,很清楚)。此外,解码层应该包含一个position-wise feed forward layer,并且所有的组件都封装在Add & Norm中。这里说的整体结构大体与Transformer相符。编码层的最终结构可以写为:
在这里插入图片描述
在这里插入图片描述

Training details

作者使用word-level cross-entopy(词级交叉熵损失),即XE预训练本文的模型,并使用reinforcement learning(强化学习)微调序列生成。
在这里插入图片描述
当使用XE进行训练时,该模型被训练为根据先前的真实单词预测下一个token,在这种情况下,解码器的输入序列是立即可用,并且整个输出序列的计算可以在单遍中完成,从而随着时间的推移并行化所有操作。
在使用强化学习进行训练时,对使用波束搜索进行采样的序列采用self-critical sequence training approach(自我批评序列训练方法)的变体:为了解码,作者在每个时间步从解码器的概率分布中采样前k个单词,并始终保持概率最高的top-k序列。由于序列编码在此步骤中是迭代的,因此不能利用上述随时间的并行性。然而,用于在时间t计算输出token的中间值和键可以在下一次迭代中重用。
之后,作者使用CIDEr-D分数作为奖励,因为它与人类的判断很好地相关,使用奖励的平均值作为奖励的基线,而不是像以前的方式那样贪婪解码。作者发现这样可以略微地提高最终的表现。最终梯度表达式为:
在这里插入图片描述

w i w_i wibeam中的第i个句子
r(·)奖励函数
b=( ∑ i ∑_i ir( w i w^i wi))/k基线(采样序列获得的奖励的平均值)

在预测时,作者们使用波束搜索再次解码,并保留最后一个波束中预测概率最高的序列。

实验

Datasets

数据集概况COCOCOCO在线测试服务器nocaps
图片总数超过120000张图像40775(注释未公开。没有上限)15100(来自Open Images验证和测试集)。每张图像都用11个人工生成的描述进行注释
Training set除了用于验证和测试的,剩下的用来训练COCO数据集
Validation set50004500个elements组成
Test set500010600个elements组成

nocaps数据集根据与COCO的接近程度,图像可以进一步分为三个子集,即in-domain,near-domain,and out-of-domain(域内图像,近域图像,域外图像)。在此设置下,作者使用COCO数据集作为训练数据并在nocaps测试服务器上评估他们的结果。

Experimental settings(实验设置)

指标

  1. BLUE
  2. METEOR(MT)
  3. ROUGE
  4. CIDEr
  5. SPICE

实施细节

为了表示图像区域,作者使用Faster R-CNN和在Visual Genome数据集上微调的ResNet-101,从而获得每个区域的2048维特征向量。为了表示单词,作者使用one-hot向量并将他们线性投影到模型d的输入维度。还采用正弦位置编码来表示序列内的单词位置,并对第一个解码层之前的两个嵌入求和。
在模型中,设置每一层的维度为512,头的数目设为8,memory vectors的数目设为40。在每个注意力和前馈层之后,使用的dropout设为0.9。然后,在CIDEr-D优化过程中,使用固定的学习率5× 1 0 − 6 10^{-6} 106,使用Adam优化器训练所有模型,batch size为50,beam size为5。

Novel object captioning(新对象描述)

为了在nocaps数据集上训练模型,作者不使用one-hot向量,而是使用Glove词嵌入来表示单词。在第一个解码层之前和最后一个解码层之后添加两个全连接层,以在Glove维度和d维度之间进行转换,在最终的softmax之前,作者乘以词嵌入的转置。所有其他实验细节保持不变。

消融实验

下表是将本文模型与其他基于Transformer的模型比较。而且在实验中作者发现,3层的Transformer结构要比6层的Transformer结构效果要好,假设这是由于训练集大小减少以及字幕中句子的语义复杂性相对于语言理解任务而言较低。根据这一发现,所有后续实验都将使用三层。
在这里插入图片描述
下表是在单模型设置中与“Karpathy”测试split的最新技术进行比较。
在这里插入图片描述
下表是使用模型集合,与“Karpathy”test split的最新技术进行比较。
在这里插入图片描述
下表是在线 MS-COCO 测试服务器上各种方法的排行榜。
在这里插入图片描述
作者们评估了本文方法在处理包含训练集中未见的对象类别的图像时的性能。下表是在 nocaps 验证集上的性能,适用于域内和域外字幕。
在这里插入图片描述

定性结果和可视化

下图是本文的方法和原始 Transformer 模型生成的标题示例,以及相应的Ground truth。
在这里插入图片描述
下图是三个示例描述的注意力状态可视化。对于每个生成的单词,本文显示关注的图像区域,用红色勾勒出具有最大输出属性的区域。
在这里插入图片描述

总结

本文提出了 M 2 M^2 M2 Transformer,一种新颖的基于Transformer的图形描述架构。本文的模型采用了区域编码方法,该方法通过memory vectors以及编码和解码模块之间的meshed连接来利用先验知识。这种连接模式对于其他fully-attentive的架构来说是前所未有的。实验结果表明,在COCO上达到了最先进水平,在在线排行榜上排名第一。最后,通过消融实验验证了模型的组成部分,及其在描述新物体时的性能。

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用meshed memory model(网状存储模型)是一种在计算机系统中管理和分配内存的方法。与传统的层次化存储模型(例如,缓存、主存、磁盘等)不同,网状存储模型将所有存储单元组织成一个网状结构,每个存储单元之间可以直接通信和访问。这种存储模型的目的是提高计算机系统整体的性能和效率。 在网状存储模型中,所有的存储单元都被平等对待,无论是内存、磁盘还是缓存。这种平等性使得数据可以更加快速和直接地在不同的存储单元之间传输和共享。相比之下,传统的分层存储模型需要通过多个层次的转移和缓存来完成数据的传输,这会导致延迟和性能的下降。 网状存储模型的另一个优点是容错性和可扩展性。由于所有的存储单元都可以直接通信,当一个存储单元发生故障时,其他存储单元可以接管其功能,而不会导致整个计算机系统的崩溃。而且,当需要增加存储容量时,只需增加更多的存储单元,并将其添加到网状结构中即可,而不需要更改整个存储系统的架构。 网状存储模型的实现需要解决一些技术难题,例如存储单元之间的通信和同步等问题。此外,对于具体的应用程序和工作负载,需要进行具体的优化和调整,以使使用网状存储模型能够发挥最佳的性能和效果。 总的来说,使用网状存储模型可以提高计算机系统的性能和效率,提供更好的容错性和可扩展性。然而,它也面临着一些挑战和技术问题。随着计算机系统和应用需求的不断发展,网状存储模型可能会成为未来存储领域的重要研究方向。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值