论文链接:Knowing When to Look: Adaptive Attention via A Visual Sentinel for Image Captioning
目前大多数的基于attention机制的image captioning模型采用的都是encoder-decoder的框架。然而在decode的时候,decoder应该对不同的词有不同的attention策略。例如,”the”、”of”等词,或者是跟在”cell”后面的”phone”等组合词,这类词叫做非视觉词(non-visual word),更多依赖的是语义信息而不是视觉信息。而且,在生成caption的过程中,非视觉词的梯度会误导或者降低视觉信息的有效性。因此,本文提出了带有视觉标记的自适应的attention模型(adative attention model with a visual sentinel),在每一个time step,模型决定更依赖于图像还是visual sentinel。其中,visual sentinel存放了decoder已经知道的信息。
本文的贡献在于
文章介绍了普通的encoder-decoder框架,这里不再赘述。但文章定义了context vector ct c t ,对于没有attention机制的模型, ct c t 就是图像经过CNN后提取出的feature map,是不变的;而对于有attention机制的模型,基于hidden state,decoder会关注图像的不同区域, ct c t 就是该区域经过CNN后提取出的feature map。
文章对 ct c t 的定义如下:
ct=g(V,ht) c t = g ( V , h t )
其中g是attention function, V=[v1,...,vk] V = [ v 1 , . . . , v k ] 代表k个区域的图像feature, ht h t 是t时刻RNN的hidden state。
由此可以得到k个区域的attention分布 αt α t :
zt=wThtanh(WvV+(Wght)11T) z t = w h T t a n h ( W v V + ( W g h t ) 1 1 T ) (这里把 V V 与 ht h t 相加,而有些论文则使用一个双线性矩阵来连接它们)
αt=softmax(zt) α t = s o f t m a x ( z t )
其中 11∈Rk 1 1 ∈ R k 是所有元素为1的向量,目的是让 (Wght)11T ( W g h t ) 1 1 T 相乘得到k*k大小的矩阵。
最终本文的 ct c t 为
ct=∑ki=1αtivti c t = ∑ i = 1 k α t i v t i
与show, attend and tell使用 ht−1 h t − 1 的做法不同,本文使用的是 ht h t 。结构如下
作者认为 ct c t 可以看作 ht h t 的残差连接,可以在预测下一个词时降低不确定性或者提供情报。(不是应该做一个实验验证使用 ht h t 和 ht−1 h t − 1 的差别?)并且发现,这种spatial attention方式比其他模型表现更好。
decoder存储了长时和短时的视觉和语义信息,而visual sentinel st s t 作为从里面提取的一个新的元件,用来扩展上述的spatial attention model,就得到了adaptive attention model。
具体的扩展方式就是在原有的LSTM基础上加了两个公式:
gt=σ(Wxxt+Whht−1) g t = σ ( W x x t + W h h t − 1 )
st=gt⊙tanh(mt) s t = g t ⊙ t a n h ( m t )
其中 xt x t 是LSTM的输入, mt m t 是memory cell(有些论文里用 ct c t 表示)。
这里的 gt g t 叫sentinel gate,公式形式类似于LSTM中的input gate, forget gate, ouput gate,决定了模型到底关注图像还是visual sentinel;而 st s t 公式的构造与LSTM中的 ht=ot⊙tanh(ct) h t = o t ⊙ t a n h ( c t ) 类似。
而adaptive attention model中的context vector c^=βtst+(1−βt)ct c ^ = β t s t + ( 1 − β t ) c t
βt∈[0,1] β t ∈ [ 0 , 1 ] 可以视为真正意义上的sentinel gate,控制模型关注visual sentinel和 ct c t 的程度。
与此同时,spatial attention部分k个区域的attention分布 αt α t 也被扩展成了 αt^ α t ^ ,做法是在 zt z t 后面拼接上一个元素:
αt^=softmax([zt;wThtanh(Wsst+(Wght))]) α t ^ = s o f t m a x ( [ z t ; w h T t a n h ( W s s t + ( W g h t ) ) ] )
扩展后的 αt^ α t ^ 有k+1个元素,而 βt=αt^[k+1] β t = α t ^ [ k + 1 ] 。
(CVPR和arxiv版本的原文都写的是 βt=αt[k+1] β t = α t [ k + 1 ] ,我在github上问了作者,这确实是个笔误https://github.com/jiasenlu/AdaptiveAttention/issues/14)
这里的 Wg W g 与 zt=wThtanh(WvV+(Wght)11T) z t = w h T t a n h ( W v V + ( W g h t ) 1 1 T ) 中的 Wg W g 是相同的(为什么这样做? Wh W h 也是一样的,作者在这里没有提到,在后续的论文里的公式(9)提到了)。
上述公式可以简化为:
βt=wThtanh(Wsst+(Wght))] β t = w h T t a n h ( W s s t + ( W g h t ) ) ]
c^=βtst+(1−βt)ct c ^ = β t s t + ( 1 − β t ) c t
αt^=softmax([zt;βt]) α t ^ = s o f t m a x ( [ z t ; β t ] )
最终单词的概率分布:
pt=softmax(Wp(c^+ht)) p t = s o f t m a x ( W p ( c ^ + h t ) )
文章选择了ResNet的最后一层卷积层的特征来表示图像,维度是2048x7x7,并使用 A={a1,...,ak},ai∈R2048 A = { a 1 , . . . , a k } , a i ∈ R 2048 来表示k个局部图像特征,而全局图像特征则是局部特征的平均:
ag=1k∑ki=1ai a g = 1 k ∑ i = 1 k a i
局部图像特征需要经过转换:
vi=ReLU(Waai) v i = R e L U ( W a a i )
vg=ReLU(Wbag) v g = R e L U ( W b a g )
最终全局图像特征将与word embedding拼接在一起成为LSTM的输入: xt=[wt;vg] x t = [ w t ; v g ] (这里有一个细节,是不是因为这里把全局图像特征拼接进来了,才导致模型spatial attention与其他模型相比的提升呢?作者并没有进行这样的对比。https://github.com/jiasenlu/AdaptiveAttention/issues/2)
局部图像特征则用在了attention部分。
Table 1在test splits上对比了在Flickr30k和MSCOCO数据集上模型与其他模型的表现,可以看到,模型的spatial attention部分就已经比其他模型表现好了,而加入了adaptive attention部分以后表现更加出色。
Table 2在COCO server上对比了模型与其他模型的表现可以看到,adaptive attention模型(emsemble后)的表现是当时SOTA的结果。
Fig 4是spatial attention的权重 α α 的可视化结果,前两列是成功的样本,最后一列是失败的样本。模型进行attention的区域基本都是合理的,只是可能对一些物体的材质判断失误。
Fig 5主要是sentinel gate 1−β 1 − β 的可视化,对于视觉词,模型给出的概率较大,即更倾向于关注图像特征 ct c t ,对于非视觉词的概率则比较小。同时,同一个词在不同的上下文中的概率也是不一样的。如”a”,在一开始的概率较高,因为开始时没有任何的语义信息可以依赖、以及需要确定单复数。
Fig 6对COCO和Flickr30k中词典中的词被认为是视觉词的平均概率进行了排序,来看看模型能否分辨出视觉词与非视觉词,两个数据集间的相关性为0.483。其中,
1. 对于一些实际上是视觉词,但是与其他词有很大关联性的词,模型也会把它视为非视觉词,如”phone”一般都跟在”cell”后面。
2. 不同数据集上不同的词的概率不一样,如”UNK”,可能是由于训练数据分布的不同。
3. 对于一些有相近意义的同源词,如”crossing”, “cross”, “crossed”,他们的概率却相差很大。(为什么?)
模型没有依赖外部的语料信息,完全是自动地发现这些趋势。
Fig 11显示了使用弱监督方法生成的bounding box与真实bounding box的对比。本文是第一个使用这种方法来评估
image caption的attention效果的。具体生成方法是,对于某个单词而言,先用NLTK将其映射到大类上,如”boy”, “girl”映射到people。然后图像中attention weight小于阈值(每个单词的阈值都不一样)的部分就会被分割出来,取分割后的最大连通分量来生成bounding box。并计算生成的和真实bounding box的IOU(intersection over union),对于spatial attention和adaptive attention模型,其平均定位准确率分别为0.362和0.373。说明了,知道何时关注图像,也能让模型更清楚到底要去关注图像的哪个部分。
Fig 7显示了top 45个COCO数据集中出现最频繁的词的定位准确性。对于一些体积较小的物体,其准确率是比较低的,这是因为attention map是从7x7的feature map中直接放大的,而7x7的feature map并不能很好地包含这些小物体的信息。
Fig 8显示了单词”of”在spatial attention和adaptive attention模型中的attention map。如果没有visual sentinel,非视觉词如”of”的attention就会高度集中在图像的边缘部分,可能会在反向传播时形成噪声影响训练。
本文提出了adaptive attention机制,其模型公式都非常简单,adaptive attention部分增加的几个变量也非常简洁,但却对模型的表现有了很大的提升。文章进行的详尽的实验又进一步验证了adaptive attention的有效性,可谓非常巧妙。
PS:如果读者想要复现这篇论文的结果,这个链接会对你有帮助。https://github.com/jiasenlu/AdaptiveAttention/issues/4