首先对于
a
1
a^1
a1,将
a
1
a^1
a1与
W
q
W^q
Wq进行乘积,得到
q
1
q^1
q1,然后剩余的输入,通过乘以
W
k
W^k
Wk计算出
k
2
,
k
3
,
k
4
k^2,k^3,k^4
k2,k3,k4。之后将计算的
q
1
q^1
q1与
k
2
,
k
3
,
k
4
k^2,k^3,k^4
k2,k3,k4分别进行点积,就分别得到了
a
2
a^2
a2对
a
1
a^1
a1,
a
3
a^3
a3对
a
1
a^1
a1,
a
4
a^4
a4对
a
1
a^1
a1的注意力分数
α
1
,
2
,
α
1
,
3
,
α
1
,
4
\alpha_{1,2},\alpha_{1,3},\alpha_{1,4}
α1,2?,α1,3?,α1,4?。
然后对于每一个
a
1
,
a
2
,
a
3
,
a
4
a^1,a^2,a^3,a^4
a1,a2,a3,a4通过乘以
W
v
W^v
Wv计算出
v
1
,
v
2
,
v
3
,
v
4
v^1,v^2,v^3,v^4
v1,v2,v3,v4.接下来将计算出来的
v
1
,
v
2
,
v
3
,
v
4
v^1,v^2,v^3,v^4
v1,v2,v3,v4分别乘以对应的注意力权重
α
1
,
1
′
,
α
1
,
2
′
,
α
1
,
3
′
,
α
1
,
4
′
\alpha^{'}_{1,1},\alpha^{'}_{1,2},\alpha^{'}_{1,3},\alpha^{'}_{1,4}
α1,1′?,α1,2′?,α1,3′?,α1,4′?并进行求和,就得到了
b
1
b^1
b1.
b
2
,
b
3
,
b
4
b^2,b^3,b^4
b2,b3,b4也是同样的道理。
2.3 整体的矩阵计算
首先将每一个
a
1
,
a
2
,
a
3
,
a
4
a^1,a^2,a^3,a^4
a1,a2,a3,a4(也就是矩阵
I
I
I)都分别乘以
W
q
,
W
k
,
W
v
W^q,W^k,W^v
Wq,Wk,Wv,就得到了
q
1
,
q
2
,
q
3
,
q
4
q^1,q^2,q^3,q^4
q1,q2,q3,q4(矩阵Q),
k
1
,
k
2
,
k
3
,
k
4
k^1,k^2,k^3,k^4
k1,k2,k3,k4(矩阵K),
v
1
,
v
2
,
v
3
,
v
4
v^1,v^2,v^3,v^4
v1,v2,v3,v4(矩阵V)
然后用矩阵Q乘以矩阵K就得到了矩阵A(也就是注意力矩阵),最后将矩阵A送入Softmax,就得到了
A
′
A^{'}
A′
比如在做词性标记的时候,往往句首的词性是动词的概率较低,所以也需要考虑到位置的信息,但是Self-attention没有位置信息,上面的
a
1
,
a
2
,
a
3
,
a
4
a^1,a^2,a^3,a^4
a1,a2,a3,a4标号是为了理解而标记上去的,实际上它们之间的位置信息是不确定的,没有说谁就在谁的前面或者后面。
改进:可以通过position encoding的技术来实现位置信息。就是在每一个位置引入一个位置向量
e
i
e^i
ei,不同位置的
e
i
e^i
ei是不一样的。通过
e
i
e^i
ei来告诉不同位置的位置信息。
目前position representation的方法很多,不用仅仅局限于上面的
e
i
e^i
ei.