Effective Approaches to Attention-based Neural Machine Translation论文笔记

这篇文章在NMT(Neural machine translation)上尝试了两种简单且有效的注意力机制:一个可以注意所有单词的全局方法(global approach),和一个只看部分单词的局部方法(local approach).
1.全局方法类似(Bahdanau et al.2015),但是结构更简单,
2.局部方法可以看为是hard和soft注意力机制(Xu et al.,2015)的混合:它计算代价比全局方法和soft方法低。 同时不同于hard方法局部注意力机制几乎任何位置都是可微的,也就是更容易应用和训练。

这两种方法的一致之处是,在decoding阶段的每个时间步,两种方法首先都会将LSTM(decoder是多层的话)顶层的隐藏状态hth_t(也就是当前decoder隐藏状态)作为输入,目的是导出上下文向量ctc_t(context vector),ctc_t捕获了相关的词源端信息,然后通过ctc_thth_t结合得到当前时刻的预测词yty_t
具体的,给定当前隐层状态hth_t和词源端信息ctc_t,我们通过一个简单的连接层来结合这两个向量的信息,来产生注意力机制的隐层状态hˉt\bar{h}_thˉt=tanh(Wc[ct;ht])\bar{h}_t=tanh(W_c[c_t;h_t]) 可以看见[ct;ht][c_t;h_t]就是简单连接了两个向量.
然后注意力向量hˉt\bar{h}_t,会作为softmax层的输入,来产生预测分布:
p(yty<t,x)=softmax(Wshˉt)p(y_t|y_{<t},x)=softmax(W_s\bar{h}_t)
两种模型不同之处就是ctc_t的获取过程是不同的。

Global Attention

全局注意力机制在导出上下文向量ctc_t时会考虑encoder层的所有隐层状态.如图所示,Effective Approaches to Attention-based Neural Machine Translation论文笔记
最下面一行蓝色的矩形表示encoder层,红色矩形表示decoder层. 模型中,有一个变长的矢量ata_t(对齐向量alignment vector),它的size等于编码层时间步数,它通过比较当前decoder层隐层状态hth_t和每个词源隐层状态hˉs\bar{h}_s:
at(s)=align(ht,hˉs)=exp(score(ht,hˉs))sexp(score(ht,hsˉ))1a_t(s)=align(h_t,\bar{h}_s)=\frac{exp(score(h_t,\bar{h}_s))}{\sum_{s'}exp(score(h_t,\bar{h_{s'}}))}(1)
这里的score是基于内容的函数,我们考虑三种形式:
score(ht,hˉs){htThˉsdothtTWahˉsgeneralvaTtanh(Wa,[ht;hˉs])concatscore(h_t,\bar{h}_s)\left\{\begin{matrix} h_t^T\bar{h}_s&dot \\ h_t^TW_a\bar{h}_s&general \\ v_a^Ttanh(W_a,[h_t;\bar{h}_s])&concat \end{matrix}\right.
除此之外,在我们的早期尝试中,我们使用基于局部的函数:
at=softmax(Waht)locationa_t=softmax(W_ah_t)\quad\quad location
ata_t相当于一组权重,上下文向量ctc_t可以看做是使用ata_t对所有词源隐层状态做加权平均得到的.

Local Attention

全局注意力缺点是对每一个目标输出都尝试关注所有单词,其计算开销大且对于更长的序列是不实际的,因此本文又提出了局部注意力机制,这部分工作是受Xu et al等提出的hard和soft注意力机制的启发。在他们的工作中soft注意力机制对应全局注意力方法,只是权重被"softly"的放置于图像的所有patch上. 而hard注意力机制,会在每个时间步选择某一个patch去关注.
虽然不需要关注所有输入源,但是其是不可微的,且其需要更加复杂的技巧比如减少方差,或者需要强化学习进行训练.
Effective Approaches to Attention-based Neural Machine Translation论文笔记
我们的局部注意力机制集中于选择一个小的上下文窗口,并且是可微的,且这种方法可以避免soft attention中的大量计算代价,与此同时比hard attention更容易训练.
具体的,在每个decode时间步tt,模型首先生成一个对齐位置(aligned position) ptp_t.那么上下文向量ctc_t是对窗口(window)[ptD,pt+D][p_t-D,p_t+D]中的词源隐层状态的加权平均.其中DD是凭经验(empirically)选择的,与全局注意力机制中不同,此时局部对齐向量ata_t是固定维度的,即R2D+1\in \mathbb{R}^{2D+1}.
我们对局部注意力机制考虑两种变体:
A.单调对齐(Monotonic alignment )(Local-m)-我们简单设置pt=tp_t=t,也就是假设词源和目标序列大致单调排列。此时对齐向量ata_t的计算为(1)式,也就是Local-m和全局模型是一样的,只是向量ata_t是固定长度的,这是因为DD是固定的,窗口也固定了,那么(1)式只在固定长度窗口上计算。

B.预测对齐(Predictive alignment)(Local-p)-这里我们不在使用简单对齐,而是预测一个对齐位置:
pt=Ssigmoid(vpTtanh(Wpht))p_t=S \cdot sigmoid(v_p^Ttanh(W_ph_t))
这里WpW_pvpv_p是模型参数,是需要学习的。SS是源句长度,上式的结果是pt[0,S]p_t\in [0,S].为了支持ptp_t附近的对齐点,我们设置了一个以ptp_t为中心的高斯过程,具体的,ata_t的定义如下:
at(s)=align(ht,hˉs)exp((spt)22σ2)a_t(s)=align(h_t,\bar{h}_s)exp(-\frac{(s-p_t)^2}{2\sigma^2})
其中align()align()函数也是见(1)式.且根据经验设置σ=D2\sigma=\frac{D}{2}.注意ptp_t是一个实数;ss是以ptp_t为中心的窗口中的整数.Local-p与Local-m相似,只是动态的计算ptp_t,并且使用截断的高斯分布来修改原始对齐权重(也就是上式中加入了后半部分的高斯过程改变原始对齐权重align()align()),使用ptp_t导出ata_t,我们可以计算WpW_pvpv_p的反向传播梯度.这个模型处处可微.