背景:语言模型LM通过将由每个预测步骤生成的信息整合到用于下一预测的上下文中来顺序地向前传播上下文向量。 这种信息向前传播的一个后果是,当新信息被整合到上下文中时,旧信息往往会从上下文中消失,也就是无法处理长距离依赖。第二个问题是上下文可以由更新的信息支配,所以当RNN-LM确实出错时,这个错误可以向前传播,导致序列的其余部分出现级联错误。
思路:在输出当前时刻的单词时,得到隐藏层状态后,通过计算之前的隐藏层状态得到一个上下文向量,然后把这个上下文向量和当前时刻隐藏层状态连接起来,经过一个tanh层处理,softmax后输出当前预测的单词。
猜想:把这个语言模型作为NMT的decoder。
首先使用一个多层RNN编码输入,在每一个时间步把上一个循环层的输出存储在记忆buffer中
然后计算上下文向量,
是当前时刻的隐藏层状态,
是t时刻之前的隐藏层状态
接下来把上下文向量和当前隐藏层状态
连接起来经过tanh层作为隐藏层的最终输出
最后使用softmax作为输出层得到当前时刻预测的单词
在计算注意力分数的时候,有两种计算函数
single表示只使用i时刻隐藏层状态中的信息,分数
可以看作是状态
的绝对相关性总结,每一个隐藏层状态的分数是固定不变的,如果使用single计算,图中则没有h3指向attention layer这条线
combined表示利用之前时刻隐藏层状态中的信息和当前t时刻隐藏层状态
中的信息,分数
可以看作是状态
和当前时刻状态
之间的相对相关性,每个时间步的分数是不一样的,图中显示的就是combined计算方式
从实验结果可以看出single的效果要好于combined