本文摘自 http://www.cosmosshadow.com/ml/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/2016/03/08/Attention.html
参考 Show, Attend and Tell: Neural Image Caption Generation with Visual Attention https://arxiv.org/abs/1502.03044
code:https://github.com/jazzsaxmafia/show_attend_and_tell.tensorflow
https://github.com/shmsw25/show-attend-and-tell
https://github.com/kelvinxu/arctic-captions 作者代码
⟹⟹ A bird flying over a body of water
如上,根据图片,生成主题描述。
如上图,模型把图片经过CNN网络,变成特征图。 LSTM的RNN结构在此上运行Attention模型,最后得到主题输出。
特征图均匀地切割成多个区域,表示为
L表示切割的区域个数。 如区域大小为14×14,D=196。
输出的主题y可以编码为
K是字典的单词个数,C是句子长度。 yi的形式为 (0,0,…,0,1,0,…,0,0),即只有第i处位置为1,其它位置为0。
z^t是对整张图片部分信息的动态表示,一个Attention模型,如下计算
其中 i表示第 i个特征区域,共 L 个。 函数 fatt采用多层网络实现,利用前一时刻的隐藏状态 ht−1 与 L 个特征区域,分别得到每个区域的权重 αti 。 权重 αti可以理解为(1)下一步选择哪一个特征区域的概率,也可以理解为(2)每一个特征区域在下一次输入中所占的比例。 不同的理解与应用,体现在函数 ϕ 的不同实现上。 按(1)实现称为 Stochastic “Hard” Attention ,按(2)实现称为 Deterministic “Soft” Attention。 下图上一排为 soft 模型,下一排为 hard 模型。
LSTM中的记忆单元与隐藏单元的初始值,是两个不同的多层感知机,采用所有特征区域的平均值来进行预测的:
而最终的单词概率输出,采用深度输出层实现
上面的随机模型需要采样位置 st,我们还可以通过直接计算 ẑ t
这就是Deterministic “Soft” Attention模型,通过 α 来选择感兴趣的特征区域。 该模型可以通过端到端的的反馈方法进行学习。
在计算 α 的时候,有
来保证感兴趣的所有区域的权重和为1。 另外,可以加入一个新的正则化,每一个区域在 TT 步中,被观察的权重拉近:
这个正则的加入,可以使得生成的主题更加丰富。就是结果更好嘛!
另外,在 z^t 的计算中添加一个标量进行缩放,通过前一个隐藏单元 ht−1 来计算
最终,端到端的目标函数可写为