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


而权重的计算 , 作者引入了一个Attention模型 , 实际上就是上篇文章MT任务中的对齐模型 。
是当前要预测的「输出词」的位置 , 是输入词的位置 。
数码小王 深度学习中的注意力机制(一)
文章图片
「Decoder」
使用LSTM来解码并生成描述词序列 , LSTM结构单元如下:
数码小王 深度学习中的注意力机制(一)
文章图片
具体LSTM的计算:(可以发现如何将融入到LSTM中的 , 实际上就是多一个线性变换 , 再全部加起来)
第一个式子实际上是四个式子 , 分别得到输入门、遗忘门、输出门和被输入门控制的候选向量 。 其中 , 三个门控由sigmoid激活 , 得到的是元素值皆在0到1之间的向量 , 可以将门控的值视作保留概率;候选向量由tanh激活 , 得到的是元素值皆在-1到1之间的向量 。 是仿射变换 , 在上式也就是要对最右边的三项进行加权求和 , 可以将T理解为分块矩阵 。 最右边的三个式子 , 其中是「输出词的embeddingmatrix」 , 是one-hot词表示 , 用来lookup , 得到dense词向量表示 。 是前一时刻的decoder状态 , 是LSTM真正意义上的“输入” , 代表的是捕捉了特定区域视觉信息的上下文向量 , 既然它和时刻有关 , 就说明它是一个动态变化的量 , 在不同的时刻将会捕捉到与本时刻相对应的「相关图像区域」 。 这个量将由attention机制计算 。
第二个式子是更新旧的记忆单元 , element-wise的运算表示三个门控将对各自控制的向量的每个元素做“取舍”:0到1分别代表完全抛弃到完全保留 。 第三个式子是得到隐状态 。
有了隐状态 , 就可以计算词表中各个词的概率值 , 那么取概率最大的那个作为当前时刻生成的词 , 并将作为下一时刻的输入 。 其实就是softmax全连接层(两层MLPs+softmax) 。 是单词的数量 。
原论文中还有一些比较有意思的Trick 。
解码的输出:模型生成的一句caption被表示为各个词的one-hot编码所构成的集合 , 输出的captiony表示为:
是字典的单词个数 , 是句子长度 。 的形式为 , 即只有第处位置为1 , 其它位置为0 。
RNN建模时 , 会用在embedding , 将稀疏one-hot向量转成dense的embedding向量 。 模型的输出概率会用于拟合真实的 。
LSTM初始输入:
LSTM中的记忆单元与隐藏单元的初始值 , 是两个不同的多层感知机 , 采用所有特征区域的平均值来进行预测的:
图像的encode:
文中使用VGGnet作为encoder进行编码 , 且不进行finetuning 。 encoder得到的featuremaps 。 因此decoder处理的是flattened 。
Caption的Decode:
在decode时 , 由于模型每次更新所需要的时间正比于最长的句子 , 如果随机采样句子进行解码 , 训练时间会很长 。 为了解决这个问题 , 文中会在预处理环节 , 将句子按照长度分组 。 每次更新时 , 随机采样一个长度 , 然后使用相应的分组内的句子进行训练 , 这样就能显著提高运行效率 。
个人觉得输出词的embeddingmatrix也可以使用word2vec预训练好的词向量代替 , 文中没提到 。
SpeechRecognition
NIPS2015:Attention-BasedModelsforSpeechRecognition[5]
给定一个英文的语音片段作为输入 , 输出对应的音素序列 。 Attention机制被用于对输出序列的每个音素和输入语音序列中一些特定帧进行关联 。
Entailment
ICLR2016:ReasoningaboutEntailmentwithNeuralAttention[6]
语义蕴含 , 句子关系推断方面的早期工作 , 也是采用了基本的Attention模型 。 给定一个用英文描述的前提和假设作为输入 , 输出假设与前提是否矛盾、是否相关或者是否成立 。 举个例子:前提:在一个婚礼派对上拍照;假设:有人结婚了 。 该例子中的假设是成立的 。 Attention机制被用于关联假设和前提描述文本之间词与词的关系 。