数码小王 深度学习中的注意力机制(一)( 三 )


而每一个权重使用softmax转换为概率分布:
而是输出和输入的对齐模型(alignmentmodel) , 衡量了输入位置周围的信息和输出位置的匹配程度 。
得分依赖于Decoder端时刻的「前一时刻的隐状态」和Encoder端时刻的隐状态 。 文中使用前馈神经网络学习对齐模型 , 并且和其他组件联合学习 , 实际上学到的是softalignment , 因此可以很容易应用梯度反向传播 。
总之 , 可以理解为衡量了输出单词和输入单词的对齐程度 , 而是时刻 , 所有encode隐状态根据该对齐程度得到的期望上下文向量 , 是所有对齐情况下的期望 。 衡量了在计算下一个decoder隐状态和预测过程中 , 相对于前一个decoder隐状态 , 不同的重要性程度 。 这一「Decoder中的」注意力机制使得只需要关注源句子部分的信息 , 而不是像此前工作中非要将源句子「所有的信息」都编码成固定长度的上下文向量来用 。
ImageCaption
ICML2015:Show,AttendandTell-NeuralImageCaptionGenerationwithVisualAttention[4]
KelvinXu等人在该论文中将Attention引入到ImageCaption中 。 ImageCaption是一种场景理解的问题 , 这是视觉领域重要的一个研究方向 。 场景理解的难点在于既要进行物体识别 , 又要理解物体之间的关系 。 这相当于要让机器拥有模仿人类将大量显著的视觉信息压缩为描述性语言的能力 。
模型包括两个部分:Encoder和Decoder 。 其中 , Encoder会使用CNN提取图片低层特征;Decoder会在RNN中引入注意力机制 , 将图片特征解码为自然语言语句 。 模型总的示意图如下:
数码小王 深度学习中的注意力机制(一)
文章图片
如上图 , 模型把图片经过CNN网络 , 变成特征图 。 LSTM的RNN结构在此上运行Attention模型 , 最后得到描述 。
「目标:」输入一个图像 , 输出该图像的描述 , 其中是词典词汇的数量 , 是词的one-hot表示向量 , 是描述的长度 。
「Encoder」
在encoder端 , 模型使用CNN来提取L个D维vector , 每一个都对应图像的一个区域(这里粗体表示向量):
在原论文中 , 原始图像先经过centercropped变为的图像 , 然后经过卷积和pooling操作 , 共4次maxpooling , 最后得到的featuremap , featuremap个数共512个 , 即512个通道 。 这里对应的就是196个区域数量 , 每个区域都是原始图像经过下采样得到的 , 因此可以通过4次上采样能够恢复原始图像中对应区域 。 而 , 即每个区域的向量化表示是由所有的featuremap相应位置数值构造而成 。
与此前的工作使用Softmax层之前的那一层vector作为图像特征不同 , 本文所提取的这些vector来自于「low-level的卷积层 , 这使得Decoder可以通过从所有提取到的特征集中 , 选择一个子集来聚焦于图像的某些部分」 。 这样子就有点像NLP里的seq2seq任务了 , 这里的输入从词序列转变成了图像区域vector的序列 。 作为类比 , 图像上的个区域(平展开为196)就相当于句子的长度(单词的数量);每个区域的D维向量化表示是由D个Filter提取的该区域的特征concat在一起形成的向量 , 类比于句子每个单词的embedding经过RNN提取的「隐状态向量」 。
上下文向量计算如下:
即 , 在给定一组提取到的图像不同区域的向量表示 , 以及不同区域相应的权重条件下 , 计算上下文向量 , 最简单的方式是使用上文所述的加权和来处理 。 本文使用了两种AttentionMechanisms , 即SoftAttention和HardAttention 。 我们之前所描述的传统的AttentionMechanism就是SoftAttention 。 SoftAttention是参数化的(Parameterization) , 因此可导 , 可以被嵌入到模型中去 , 直接训练 , 梯度可以经过AttentionMechanism模块 , 反向传播到模型其他部分 。 相反 , HardAttention是一个随机的过程 , 根据随机采样 。 HardAttention不会选择整个encoder的输出做为其输入 , HardAttention会依概率来采样输入端的隐状态一部分来进行计算 , 而不是整个encoder的隐状态 。 为了实现梯度的反向传播 , 需要采用蒙特卡洛采样的方法来估计模块的梯度 。