赞
踩
RNN网络的的输入是一个定长的向量。例如,分类网络的输入图片大小是固定的。当网络的输入变为变长的向量时,RNN网络就不再适用了,自注意力机制(Self-attention)可以解决这一问题,通过“动态”地生成不同连接地权重。
如下图所示,自注意力机制的输入为长度为 N N N( N N N可变化)的向量,输出同样为长度为 N N N的向量。
自注意力机制根据各个输入向量的关联输出,使得每个输出向量包含输入向量的上下文关系。首先需要计算两个输入向量的关联 α \alpha α。
如下图所示为Dot-product和Additive两种计算关联
α
\alpha
α的方法。
其中 W q W^q Wq和 W k W^k Wk分别为计算query和key的权重矩阵,通过学习得到。
假设使用最常用的Dot-product方法,分别计算输入向量
a
1
a^1
a1和向量
a
1
,
a
2
,
a
3
,
a
4
a^1,a^2,a^3,a^4
a1,a2,a3,a4的关联性,并经过softmax处理(或relu等其他方法),得到的关联性分别为
α
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′
根据输入向量
a
1
a^1
a1和向量
a
i
a^i
ai的关联性的
α
i
,
1
′
\alpha'_{i,1}
αi,1′(
i
=
1
,
2
,
3
,
4
i=1,2,3,4
i=1,2,3,4),可以计算得到
a
1
a^1
a1对应的输出向量
b
1
=
∑
i
α
1
,
i
′
v
i
b^1=\sum_i\alpha'_{1,i}v^i
b1=i∑α1,i′vi其中
v
i
=
W
v
a
i
v^i=W^va^i
vi=Wvai,
W
v
W^v
Wv为计算value的权重矩阵,通过学习得到。
同样地,根据输入向量
a
2
a^2
a2计算向量
a
i
a^i
ai的关联性的
α
i
,
1
′
\alpha'_{i,1}
αi,1′(
i
=
1
,
2
,
3
,
4
i=1,2,3,4
i=1,2,3,4),然后计算
a
2
a^2
a2对应的输出向量
b
2
=
∑
i
α
2
,
i
′
v
i
b^2=\sum_i\alpha'_{2,i}v^i
b2=i∑α2,i′vi其中
v
i
=
W
v
a
i
v^i=W^va^i
vi=Wvai。
将相同的过程应用于
b
2
,
b
3
,
b
4
b^2,b^3,b^4
b2,b3,b4,就可以得到输入向量
a
1
,
a
2
,
a
3
,
a
4
a^1,a^2,a^3,a^4
a1,a2,a3,a4对应的自注意力机制的输出。
注意到输出
b
1
,
b
2
,
b
3
,
b
4
b^1,b^2,b^3,b^4
b1,b2,b3,b4是无先后顺序的,因此可以同时计算。在机器学习中,通过矩阵运算实现。
得到:
Q
=
W
q
I
Q=W^qI
Q=WqI
K
=
W
k
I
K=W^kI
K=WkI
V
=
W
v
I
V=W^vI
V=WvI之后使用Dot-product方法用矩阵计算输入向量
a
1
a^1
a1和向量
a
1
,
a
2
,
a
3
,
a
4
a^1,a^2,a^3,a^4
a1,a2,a3,a4的关联性为
α
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′:
同理可以计算输入向量
a
1
,
a
2
,
a
3
,
a
4
a^1,a^2,a^3,a^4
a1,a2,a3,a4和向量
a
1
,
a
2
,
a
3
,
a
4
a^1,a^2,a^3,a^4
a1,a2,a3,a4的关联性矩阵并做softmax处理:
得到:
A
′
=
s
o
f
t
m
a
x
(
K
T
Q
)
A'=softmax(K^TQ)
A′=softmax(KTQ),最后,同理通过矩阵的方式得到输出
O
O
O:
即:
O
=
V
A
′
O=VA'
O=VA′整个自注意力机制从输入
I
I
I到输出
O
O
O的流程为:
用公式的形式为
O
=
V
s
o
f
t
m
a
x
(
K
T
Q
)
O=Vsoftmax(K^TQ)
O=Vsoftmax(KTQ)
对于多头自注意力机制,原本的参数矩阵 W q , W k , W v W^q,W^k,W^v Wq,Wk,Wv都被分割成2个新的矩阵(以2头自注意力机制为例),在进行输出计算的时候,分别计算输入和每一个分割后的矩阵的计算结果。
对于第1个头的结果 b i , 1 b^{i,1} bi,1,将输入和 W q , 1 , W k , 1 , W v , 1 W^{q,1},W^{k,1},W^{v,1} Wq,1,Wk,1,Wv,1计算:
对于第2个头的结果
b
i
,
2
b^{i,2}
bi,2,将输入和
W
q
,
2
,
W
k
,
2
,
W
v
,
2
W^{q,2},W^{k,2},W^{v,2}
Wq,2,Wk,2,Wv,2计算:
注意到,在之前的自注意力机制中,没有位置信息,即调换 a 1 a^1 a1和 a 4 a^4 a4的顺序对结果也没有任何影响,但是在实际情况中,有时候位置的信息也是重要的,这时候就需要Positional Encoding。
在每一个位置上设置一个位置向量 e i e^i ei,使用时和输入向量 a i a^i ai求和
e
i
e^i
ei可以通过人为给定或者机器学习得到,下图为一些
e
i
e^i
ei:
可以将一张图片考虑为一个向量的结合,每一个像素点的RGB三个元素组成一个向量,因此就可以用自注意力机制进行图像的处理:
两个用自注意力机制处理图像的例子:
由于CNN只考虑一个 K × K K \times K K×K的接受域内的像素,而self-attention的接受域为整张图片,如下图所示。因此CNN可以视为一个简化版的self-attention。
事实上,如下的文章严谨地证明了这一结论:只要设定合适的参数,self-attention可以达到和CNN一样的效果。
由于CNN可以视为一个简化版的模型,而self-attention相对复杂。因此CNN适合于相对较小地数据集,而self-attention适合于更大的数据集。如下图所示,self-attention在大数据集上的效果更好。
Self-attention和RNN的主要区别在于:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。