这篇文章在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是多层的话)顶层的隐藏状态
h
t
h_t
ht(也就是当前decoder隐藏状态)作为输入,目的是导出上下文向量
c
t
c_t
ct(context vector),
c
t
c_t
ct捕获了相关的词源端信息,然后通过
c
t
c_t
ct和
h
t
h_t
ht结合得到当前时刻的预测词
y
t
y_t
yt。
具体的,给定当前隐层状态
h
t
h_t
ht和词源端信息
c
t
c_t
ct,我们通过一个简单的连接层来结合这两个向量的信息,来产生注意力机制的隐层状态
h
ˉ
t
\bar{h}_t
hˉt:
h
ˉ
t
=
t
a
n
h
(
W
c
[
c
t
;
h
t
]
)
\bar{h}_t=tanh(W_c[c_t;h_t])
hˉt=tanh(Wc[ct;ht]) 可以看见
[
c
t
;
h
t
]
[c_t;h_t]
[ct;ht]就是简单连接了两个向量.
然后注意力向量
h
ˉ
t
\bar{h}_t
hˉt,会作为softmax层的输入,来产生预测分布:
p
(
y
t
∣
y
<
t
,
x
)
=
s
o
f
t
m
a
x
(
W
s
h
ˉ
t
)
p(y_t|y_{<t},x)=softmax(W_s\bar{h}_t)
p(yt∣y<t,x)=softmax(Wshˉt)
两种模型不同之处就是
c
t
c_t
ct的获取过程是不同的。
Global Attention
全局注意力机制在导出上下文向量
c
t
c_t
ct时会考虑encoder层的所有隐层状态.如图所示,
最下面一行蓝色的矩形表示encoder层,红色矩形表示decoder层. 模型中,有一个变长的矢量
a
t
a_t
at(对齐向量alignment vector),它的size等于编码层时间步数,它通过比较当前decoder层隐层状态
h
t
h_t
ht和每个词源隐层状态
h
ˉ
s
\bar{h}_s
hˉs:
a
t
(
s
)
=
a
l
i
g
n
(
h
t
,
h
ˉ
s
)
=
e
x
p
(
s
c
o
r
e
(
h
t
,
h
ˉ
s
)
)
∑
s
′
e
x
p
(
s
c
o
r
e
(
h
t
,
h
s
′
ˉ
)
)
(
1
)
a_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)
at(s)=align(ht,hˉs)=∑s′exp(score(ht,hs′ˉ))exp(score(ht,hˉs))(1)
这里的score是基于内容的函数,我们考虑三种形式:
s
c
o
r
e
(
h
t
,
h
ˉ
s
)
{
h
t
T
h
ˉ
s
d
o
t
h
t
T
W
a
h
ˉ
s
g
e
n
e
r
a
l
v
a
T
t
a
n
h
(
W
a
,
[
h
t
;
h
ˉ
s
]
)
c
o
n
c
a
t
score(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.
score(ht,hˉs)⎩⎨⎧htThˉshtTWahˉsvaTtanh(Wa,[ht;hˉs])dotgeneralconcat
除此之外,在我们的早期尝试中,我们使用基于局部的函数:
a
t
=
s
o
f
t
m
a
x
(
W
a
h
t
)
l
o
c
a
t
i
o
n
a_t=softmax(W_ah_t)\quad\quad location
at=softmax(Waht)location
a
t
a_t
at相当于一组权重,上下文向量
c
t
c_t
ct可以看做是使用
a
t
a_t
at对所有词源隐层状态做加权平均得到的.
Local Attention
全局注意力缺点是对每一个目标输出都尝试关注所有单词,其计算开销大且对于更长的序列是不实际的,因此本文又提出了局部注意力机制,这部分工作是受Xu et al等提出的hard和soft注意力机制的启发。在他们的工作中soft注意力机制对应全局注意力方法,只是权重被"softly"的放置于图像的所有patch上. 而hard注意力机制,会在每个时间步选择某一个patch去关注.
虽然不需要关注所有输入源,但是其是不可微的,且其需要更加复杂的技巧比如减少方差,或者需要强化学习进行训练.
我们的局部注意力机制集中于选择一个小的上下文窗口,并且是可微的,且这种方法可以避免soft attention中的大量计算代价,与此同时比hard attention更容易训练.
具体的,在每个decode时间步
t
t
t,模型首先生成一个对齐位置(aligned position)
p
t
p_t
pt.那么上下文向量
c
t
c_t
ct是对窗口(window)
[
p
t
−
D
,
p
t
+
D
]
[p_t-D,p_t+D]
[pt−D,pt+D]中的词源隐层状态的加权平均.其中
D
D
D是凭经验(empirically)选择的,与全局注意力机制中不同,此时局部对齐向量
a
t
a_t
at是固定维度的,即
∈
R
2
D
+
1
\in \mathbb{R}^{2D+1}
∈R2D+1.
我们对局部注意力机制考虑两种变体:
A.单调对齐(Monotonic alignment )(Local-m)-我们简单设置
p
t
=
t
p_t=t
pt=t,也就是假设词源和目标序列大致单调排列。此时对齐向量
a
t
a_t
at的计算为(1)式,也就是Local-m和全局模型是一样的,只是向量
a
t
a_t
at是固定长度的,这是因为
D
D
D是固定的,窗口也固定了,那么(1)式只在固定长度窗口上计算。
B.预测对齐(Predictive alignment)(Local-p)-这里我们不在使用简单对齐,而是预测一个对齐位置:
p
t
=
S
⋅
s
i
g
m
o
i
d
(
v
p
T
t
a
n
h
(
W
p
h
t
)
)
p_t=S \cdot sigmoid(v_p^Ttanh(W_ph_t))
pt=S⋅sigmoid(vpTtanh(Wpht))
这里
W
p
W_p
Wp和
v
p
v_p
vp是模型参数,是需要学习的。
S
S
S是源句长度,上式的结果是
p
t
∈
[
0
,
S
]
p_t\in [0,S]
pt∈[0,S].为了支持
p
t
p_t
pt附近的对齐点,我们设置了一个以
p
t
p_t
pt为中心的高斯过程,具体的,
a
t
a_t
at的定义如下:
a
t
(
s
)
=
a
l
i
g
n
(
h
t
,
h
ˉ
s
)
e
x
p
(
−
(
s
−
p
t
)
2
2
σ
2
)
a_t(s)=align(h_t,\bar{h}_s)exp(-\frac{(s-p_t)^2}{2\sigma^2})
at(s)=align(ht,hˉs)exp(−2σ2(s−pt)2)
其中
a
l
i
g
n
(
)
align()
align()函数也是见(1)式.且根据经验设置
σ
=
D
2
\sigma=\frac{D}{2}
σ=2D.注意
p
t
p_t
pt是一个实数;
s
s
s是以
p
t
p_t
pt为中心的窗口中的整数.Local-p与Local-m相似,只是动态的计算
p
t
p_t
pt,并且使用截断的高斯分布来修改原始对齐权重(也就是上式中加入了后半部分的高斯过程改变原始对齐权重
a
l
i
g
n
(
)
align()
align()),使用
p
t
p_t
pt导出
a
t
a_t
at,我们可以计算
W
p
W_p
Wp和
v
p
v_p
vp的反向传播梯度.这个模型处处可微.