《Knowing When to Look: Adaptive Attention via A Visual Sentinel for Image Captioning》 CVPR.2017
本文观点:
在 caption 中非视觉词 (比如 the,of 等) 的生成,并不需要视觉信息,它们的梯度反而会影响到视觉信息的有效性。而且,有些看似需要视觉特征来生成的词,也可以通过人类的语言模型预测出来 (比如 “taking on a cell” 后面生成 “phone”)。
改进方法:
设计了蕴含历史信息的 visual sentinel,来表示已生成文本的历史信息。然后引进一个参数,来控制 attention 中视觉信息和历史信息的比重。相当于从时间的维度来决定什么时候看,看多少。
此外,作者改变了 spatial attention model,提出了带有视觉标记的自适应的 attention 模型(adaptive attention model with a visual sentinel),使得模型在生成每一个词时,可以决定需要关注图像本身还是只需要依靠语言模型。如果判断需要关注图像,再通过 spatial attention 来决定关注图像的哪个区域。
本文贡献:
首先,作者提出了改进的 spatial attention 模型。
(在《Show, attend and tell: Neural image caption generation with visual attention》的 attention model 上进行改进)
图 (a) 是传统的 attention model,由 h t − 1 h_{t-1} ht−1 决定要看的图片信息。
图 (b) 是作者提出的 spatial attention model,由 h t h_t ht 来决定要看的信息,作者认为这可以降低 hidden state 对于下一个词预测的不确定性。
注意两者的区别就在于 c t c_t ct 如何生成
(是否可以做一个实验验证使用 h t h_t ht 和 h t − 1 h_{t-1} ht−1 的性能差别?)
context vector c t c_t ct 的计算:
c t = g ( V , h t ) c_t=g(V,h_t) ct=g(V,ht)
图像中 k 个区域的 attention distuibution:
z t = w h T t a n h ( W v V + ( W g h t ) I T ) , α t = s o f t m a x ( z t ) z_t=w^T_htanh(W_vV+(W_gh_t)\mathbb I^T),\alpha_t=softmax(z_t) zt=whTtanh(WvV+(Wght)IT),αt=softmax(zt)
得到最终的 c t c_t ct : c t = ∑ i = 1 k a t i v t i c_t=\sum^{k}_{i=1}a_{ti}v_{ti} ct=∑i=1kativti
这里是本文的核心创新,作者认为对于非视觉词,它们的生成应该取决于 历史信息而不是视觉信息,因此在这种情况下应该对视觉信息加以控制。所以在此处引进 visual sentinel。
通过在 spatial attention model 中添加新元件 visual sentinel,就得到了adaptive attention model。
和前面改进的 spatial attention model 相比,就是多了一个 s t s_t st 信息,而它的生成结构其实和 h t h_t ht 是一致的,所以它所蕴含的就是 generator 已经生成的文本信息。
具体的扩展方式就是在原有的 LSTM 基础上加了俩公式:
g t = σ ( W x x t + W h h t − 1 ) , s t = g t ⊙ t a n h ( m t ) g_t=\sigma(W_xx_t+W_hh_{t-1}),s_t=g_t⊙tanh(m_t) gt=σ(Wxxt+Whht−1),st=gt⊙tanh(mt)
将 s t s_t st 引入到 attention 后,attention 生成的新 context 向量 c ^ t \hat c_t c^t : c ^ = β t s t + ( 1 − β t ) c t \hat c=\beta_ts_t+(1-\beta_t)c_t c^=βtst+(1−βt)ct
引入一个新的参数 β t \beta_t βt (sentinel gate,取值范围 [0,1]),控制模型关注 s t s_t st 和 c t c_t ct 的程度。
k 个区域的 attention 分布 α t \alpha_t αt 也扩展成了 α ^ t \hat \alpha_t α^t:
具体做法是在 z t z_t zt 后面拼接一个元素:
α ^ = s o f t m a x ( [ z t ; w h T t a n h ( W s s t + ( W g h t ) ) ] ) \hat \alpha=softmax([z_t;w^T_htanh(W_ss_t+(W_gh_t))]) α^=softmax([zt;whTtanh(Wsst+(Wght))])
扩展后的 α ^ t \hat \alpha_t α^t 有 k + 1 个元素,且 β t = α ^ t [ k + 1 ] \beta_t=\hat \alpha_t[k+1] βt=α^t[k+1]
(这里论文中有一个笔误,写的是 β t = α t [ k + 1 ] \beta_t=\alpha_t[k+1] βt=αt[k+1])
最终生成词的概率分布:
p t = s o f t m a x ( W p ( c ^ + h t ) ) p_t=softmax(W_p(\hat c+h_t)) pt=softmax(Wp(c^+ht))
问题:本文中的 context vector c t c_t ct 和普通 encoder-decoder 框架中的 context vector c t c_t ct 有什么不同?
涉及到两种上下文向量建模方法:① vanilla-encoder-decoder 方法;② attention-based encoder-decoder 方法