深度学习之image-caption(二)show attend tell 注意力机制

在NIC模型基础上,加入注意力attention机制:

论文:《 Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》(arXiv: 1502.03044

模型图片:

模型理解:

encoder:VGG19作为预训练模型,使用其low-level层特征

输入图像I归一化到224×224

特征a直接使用现成的VGG网络中conv5_3层的14×14×512维特征。区域数量L=14×14=196,维度D=512。 
为了能够更好地描述局部内容,所以使用了较低层级的特征。提取的 L 个 D 维vector,每一个都对应图像的一个区域:

decoder可以通过选择所有特征向量的子集来选择性地聚焦于图像的某些部分

LSTM模型生成的一句caption被表示为各个词的one-hot编码所构成的集合时:

其中 K 是词表大小,C 是句子长度。

LSTM的数学模型如下(省略偏置,本文所有关于神经网络的式子都省略了偏置):

第一个式子实际上是四个式子,分别得到输入门、遗忘门、输出门和被输入门控制的候选向量。其中,三个门控由sigmoid激活,得到的是元素值皆在 0 到 1 之间的向量,可以将门控的值视作保留概率;候选向量由tanh激活,得到的是元素值皆在 -1 到 1 之间的向量。Ts,t代表的是从 Rs  Rt 的映射。

      最右边括号里的三个量是四个式子共有的三个输入量:Eyt−1 是look-up得到词 yt−1的 m 维词向量;ht−1是上一时刻的隐状态;z^t∈RD 是LSTM真正意义上的“输入”,代表的是捕捉了特定区域视觉信息的上下文向量,既然它和时刻 t 有关,就说明它是一个动态变化的量,在不同的时刻将会捕捉到与本时刻相对应的相关图像区域。这个量将由attention机制计算得到,后面会详细介绍。相比之下,在上篇论文中所介绍的NIC模型中,解码过程除了在首个时刻输入了图像特征之外,随后并不存在这个输入,而本文的模型则与标准的encoder-decoder框架一样,将encoder端得到的信息在每一时刻都输入decoder。

第二个式子是更新旧的细胞状态,element-wise 的运算表示三个门控将对各自控制的向量的每个元素做“取舍”:0 到 1 分别代表完全抛弃到完全保留。

第三个式子是得到隐状态。值得注意的是,作者给出了隐状态和细胞状态的初始值的计算方式,使用两个独立的多层感知机,感知机的输入是各个图像区域特征的平均:

 

有了隐状态,就可以计算词表中各个词的概率值,那么取概率最大的那个作为当前时刻生成的词,并将作为下一时刻的输入。其实就是个全连接层:

通过attention机制计算出的 z^t被称为 context vector,是捕捉了特定区域视觉信息的上下文向量。

      首先需要明确,attention要实现的是在解码的不同时刻可以关注不同的图像区域,进而可以生成更合理的词。那么,在attention中就有两个比较关键的量,一个是和时刻 t 相关,对应于解码时刻;另一个是输入序列的区域 ai,对应图像的一个区域。

      实现这种机制的方式就是在时刻 t ,为输入序列的各个区域 i 计算出一个权重 αti 。因为需要满足输入序列的各个区域的权重是加和为一的,使用Softmax来实现这一点。至于Softmax需要输入的信息,则如上所讲,需要包含两个方面:一个是被计算的区域 ai ,另一个就是上一时刻 t-1 的信息 ht−1


式中的 fattfatt 是耦合计算区域 i 和时刻 t 这两个信息的打分函数。论文中使用多层感知机,也算是最常用的了。现在,有了权重,就可以计算 z^t了:

根据论文最终在程序中复现时,使用了soft attention 机制,权重 αti 所扮演的角色是图像区域 ai在时刻 t 的输入decoder的信息中的所占的比例。既然这样,就将各区域 ai与对应的权重 αt,i做加权求和就可以得到 z^t

和机器翻译中非常标准的end-to-end训练非常像了,整个模型光滑、可微,利用反向传播来进行end-to-end的训练。复现论文模型总结如下:

inference:使用beam search搜索最优序列

猜你喜欢

转载自blog.csdn.net/weixin_41694971/article/details/81361814
今日推荐