权重 α i \alpha_i αi
decoder的初始状态是encoder的最后一个状态
h
m
h_m
hm,在attention下,encoder的所有状态都要保留下来。首先需要计算
s
0
s_0
s0与encoder的每一个
h
i
h_i
hi的相关性(权重)
α
i
=
a
l
i
g
n
(
h
i
,
s
0
)
\alpha_i = align(h_i, s_0)
αi=align(hi,s0)。最终算出来
α
1
,
α
2
,
⋯
,
α
m
\alpha_1, \alpha_2, \cdots, \alpha_m
α1,α2,⋯,αm,
a
l
p
h
a
i
alpha_i
alphai都是介于01之间的实数,且所有
α
\alpha
α的和为1
计算方法
方法一(attention第一篇论文中提出的)
首先将
h
i
h_i
hi与
s
0
s_0
s0作concatenation得到一个更高维的向量。然后求矩阵
w
w
w与这个向量的乘积,得到一个向量,然后将tanh应用于向量的每一个元素上,将每一个元素压缩到[-1,1],将tanh的输出与
v
v
v求内积,结果为一个实数
α
i
~
\tilde{\alpha_i}
αi~。
需要注意的是,图中的矩阵
w
w
w和
v
v
v都是参数,需要通过训练数据学习。
求出
m
m
m个参数
α
1
~
,
α
2
~
,
⋯
,
α
m
~
\tilde{\alpha_1}, \tilde{\alpha_2}, \cdots , \tilde{\alpha_m}
α1~,α2~,⋯,αm~需要对他们使用softmax变换(和为1):
[
α
1
,
α
2
,
⋯
,
α
m
]
=
S
o
f
t
m
a
x
(
[
α
1
~
,
α
2
~
,
⋯
,
α
m
~
]
)
[\alpha_1, \alpha_2, \cdots, \alpha_m] = Softmax([\tilde{\alpha_1}, \tilde{\alpha_2}, \cdots , \tilde{\alpha_m}])
[α1,α2,⋯,αm]=Softmax([α1~,α2~,⋯,αm~])
方法二(更常用)
- Linear maps(
W
k
,
W
Q
W_k,W_Q
Wk,WQ通过训练得到):
k i = W k ⋅ h i k_i = W_k \cdot h_i ki=Wk⋅hi, for i = 1 to m i = 1 \text{ to } m i=1 to m
q 0 = W Q ⋅ s 0 q_0 = W_Q \cdot s_0 q0=WQ⋅s0 - Inner product:
α i ~ = k i T q 0 \tilde{\alpha_i} = k^{T}_{i}q_0 αi~=kiTq0, for i = 1 to m i = 1 \text{ to } m i=1 to m - Normalization:
[ α 1 , α 2 , ⋯ , α m ] = S o f t m a x ( [ α 1 ~ , α 2 ~ , ⋯ , α m ~ ] ) [\alpha_1, \alpha_2, \cdots, \alpha_m] = Softmax([\tilde{\alpha_1}, \tilde{\alpha_2}, \cdots , \tilde{\alpha_m}]) [α1,α2,⋯,αm]=Softmax([α1~,α2~,⋯,αm~])