由于seq2seq模型中,decoder 非常依赖encoder后的context.但context中的信息太多,不能针对性的生成正确的decoder.因此引入attention.
下面是一种实现方法:
q
j
=
W
q
I
q_j = W_qI
qj=WqI
k
i
=
W
k
I
k_i = W_kI
ki=WkI
v
i
=
W
v
I
v_i = W_vI
vi=WvI
[
a
1
j
,
a
2
j
,
.
.
.
,
a
n
j
]
=
s
o
f
t
m
a
x
(
[
k
1
,
k
2
,
.
.
.
,
k
n
]
∗
q
j
)
[a_{1j}, a_{2j},...,a_{nj}]=softmax( [k_1, k_2,...,k_n]*qj)
[a1j,a2j,...,anj]=softmax([k1,k2,...,kn]∗qj)
H
j
=
[
a
1
j
v
1
+
a
2
j
v
2
+
.
.
.
+
a
n
j
v
n
]
H_j = [a_{1j}v_1+a_{2j}v_2+...+a_{nj}v_n]
Hj=[a1jv1+a2jv2+...+anjvn]
图解:
硬性注意力:之前提到的注意力是软性注意力,其选择的信息是所有输入信息在注意力 分布下的期望。还有一种注意力是只关注到某一个位置上的信息,叫做硬性注意力(hard attention)。硬性注意力有两种实现方式:(1)一种是选取最高概率的输入信息;(2)另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现。
硬性注意力模型的缺点:硬性注意力的一个缺点是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用在反向传播算法进行训练。为了使用反向传播算法,一般使用软性注意力来代替硬性注意力。硬性注意力需要通过强化学习来进行训练。