赞
踩
假如我们要处理输入向量与输出向量个数一样多的问题,比如给定一个句子,每个单词都是一个向量,要判断并输出每个单词的词性,我们肯定要考虑到每个词与这个文本序列中其他词的相关性。以上图为例,a^1 - a^4 是四个词向量,自注意力机制的总体流程就是,首先计算出第i个词与第j个词的相关性α(i,j),再根据相关性的大小,计算出最后第i个向量对应的输出b^i 。如a^1 对应输出b^1。
以a^1的计算过程为例:
1.计算出q1
q
1
=
W
q
α
1
q^1=W^qα^1
q1=Wqα1
2.计算k1,k2,k3,k4
k
1
=
W
k
α
1
;
k
2
=
W
k
α
2
;
k
3
=
W
k
α
3
;
k
4
=
W
k
α
4
;
k^1=W^kα^1; k^2=W^kα^2; k^3=W^kα^3; k^4=W^kα^4;
k1=Wkα1;k2=Wkα2;k3=Wkα3;k4=Wkα4;
3.这里采用一种常用的方法来计算α(1,j)等。即q1与k1,k2,k3,k4分别做点积,得到α(1,j)。
如:
α
(
1
,
2
)
=
q
1
k
2
α(1,2)=q^1k^2
α(1,2)=q1k2
这样我们就可以得到a1与a2、a3、a4的相关性。
4.利用softmax函数归一化得到a’(1,j)
α
′
(
1
,
j
)
=
e
x
p
(
α
(
1
,
j
)
)
/
∑
j
e
x
p
(
α
(
1
,
j
)
)
α'(1,j)=exp(α(1,j))/\sum_{j}{exp(α(1,j))}
α′(1,j)=exp(α(1,j))/j∑exp(α(1,j))
注:不一定非得选用softmax函数
5.计算v^i
v
i
=
W
v
α
i
v^i=W^vα^i
vi=Wvαi
6.得出b1
b
1
=
∑
j
α
′
(
1
,
j
)
v
j
b^1=\sum_{j}{α'(1,j)v^j}
b1=j∑α′(1,j)vj
同理可以计算出a2-a4对应的输出。
从上述过程我们可以知道要进行如下运算:
q
i
=
W
q
α
i
;
k
i
=
W
k
α
i
;
v
i
=
W
v
α
i
q^i=W^qα^i; k^i=W^kα^i; v^i=W^vα^i
qi=Wqαi;ki=Wkαi;vi=Wvαi
我们可以把a1-a4拼接成一个矩阵,乘上W^q,就得到矩阵Q。K、V的计算同理。
同样的,如下图所示,也可以计算:
A
=
K
T
Q
A=K^TQ
A=KTQ
再对每一列进行softmax,得到A‘
输出矩阵O=VA’
总结一下:
我们的输入矩阵是I,输出矩阵为O,在self-attention的过程中只有W^q 、W^k 和W^v是需要学习的参数。
将模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息,计算不同方面的相关性。
以两个头为例,对每个q^i ,分别乘上两个矩阵,得到q^(i,1)、 q^(i,2), 对k^i 和v^i 的处理同理。然后对两个头分别求注意力分数,然后weighted sum,得到b^(i,1) 和 b^(i,2) 。 b^(i,1) 和 b^(i,2) 连接起来,乘上 W^o 得到最终输出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。