动机: 以前的工作都是只关注图像一次,然后使用最后一层的全连接层得到图像最有用的信息。这样的缺点就是在描述图像的时候丢失了很多有用的信息。而且,产生每个词用到的图像信息都是相同的。因此,在这篇论文中考虑到使用一些低等级的信息来获取更多的描述信息。这个工作使用了attention的机制,在生成相应词的时候只关注一些显著的特征。而且attention机制可以使我们了解到每一步模型在关注哪些内容。
一个attention模型,有一些输入,有一个上下文向量c,返回一个给每个输入一定权重的均值(权重是根据输入和上下文选择的)
如何做的:
在encoder阶段,用cnn较低层的卷积层作为图像特征,其中卷积保留了图像空间信息,在decoder阶段,结合着attention机制,动态的选择图像的特征空间用于decoder阶段。
在decoder阶段,输入增加了图像上下文向量,该向量是当前时刻图像的显著区域的特征表达。同时这篇论文提出了hard 和 soft两种机制,soft机制给权重加了限制,希望对每一个部分是同等对待的。
贡献:
soft 机制: 在看的时候考虑到了所有的输入,并且并不是给每一个输入相同的权重,而是更关注于某些输入。好处是完全可导。为什么呢,因为权重的取值取决于此时的query 和 token表示的相似度。我们可以在一个向量空间内表示她们并且计算相似度。但由于把能考虑的都考虑了进来,导致soft 的方式牺牲了效率。
hard机制:每一次只考虑一个特定的输入。 虽然更加scalable 和 有效了,但是不可微了。为什么不可微了呢?因为在训练的时候,我们不知道每一步我们应该关注哪里,即我们不能够给传经网络正确的答案,事实上也没有正确的答案,那么我们怎么训练网络参数呢?神经网络的训练需要有一个可微的损失函数的。但是在这种情况下,我们不知道下一步应该看哪里,那么我们如何定义损失函数呢。此时,我们需要强化学习了。
参考: https://blog.heuritech.com/2016/01/20/attention-mechanism/
http://stackoverflow.com/questions/35549588/soft-attention-vs-hard-attention