以第一种为例Sequence Labeling任务:
例子: I saw a saw
序列输入到FC层
得到各个单词的词性不能解决saw
是不同词性的问题,采用考虑上下文的context
,将前后几个向量串起来输入到FC
,考虑Window
包括多个前后多个frame
考虑整个input的sequence资讯,可将Window变大甚至盖住整个sequence,但是可能过拟合,FC参数过多。
考虑整个input的sequence资讯信息更好的办法:
self-attention考虑一整个资讯信息并返回与输入相同数目的vetor输出,再输入FC决定应该是什么。
self-attention可以叠加:
输入+self-attention+FC+self-attention+FC(交替使用,FC专注某一位置的咨询,self-attention关注整个资讯)
注:self-attention最相关文章:Attention is all you need.(提出了
transformer
,transformer
最重要的module就是self-attention
,Bert
也有应用)
self-attention输入是一串Vector(可能整个网络的input,也可能是隐层的output)
例:
输入: a 1 a 2 a 3 a 4 a^{1} \quad a^{2} \quad a^{3} \quad a^{4} a1a2a3a4
输出: b 1 b 2 b 3 b 4 b^{1} \quad b^{2} \quad b^{3} \quad b^{4} b1b2b3b4
找出与
a
1
a^{1}
a1 相关的其他向量(哪些向量是重要的,哪些部分跟判断
a
1
a^{1}
a1 是哪一个level有关系,哪些是决定
a
1
a^{1}
a1 得class或regression数值所需用到的资讯)
其中每一个向量与
a
1
a^{1}
a1 关联的程度,用数值 α 表示(计算 α 方法有:Dot-product(transformer
中使用)、Additive)
q
1
=
W
q
a
1
q^{1}=W^qa^1
q1=Wqa1(
q
q
q称为query)
k
2
=
W
k
a
2
k^{2}=W^ka^2
k2=Wka2(
k
k
k称为key),
k
3
=
W
k
a
3
k^{3}=W^ka^3
k3=Wka3,
k
4
=
W
k
a
4
k^{4}=W^ka^4
k4=Wka4,
k
1
=
W
k
a
1
k^{1}=W^ka^1
k1=Wka1
α
(
1
,
2
)
=
q
1
⋅
k
2
α(1,2)=q^1·k^2
α(1,2)=q1⋅k2(
α
(
1
,
2
)
α(1,2)
α(1,2)代表query
是1提供,key
是2提供的,1与2的关联性,也称为attention score
),
α
(
1
,
3
)
=
q
1
⋅
k
3
α(1,3)=q^1·k^3
α(1,3)=q1⋅k3,
α
(
1
,
4
)
=
q
1
⋅
k
4
α(1,4)=q^1·k^4
α(1,4)=q1⋅k4
本身也会计算:
α
(
1
,
1
)
=
q
1
⋅
k
1
α(1,1)=q^1·k^1
α(1,1)=q1⋅k1
计算出
a
1
a^{1}
a1与每一个向量关联性后,做一个softmax
,输出一排
α
′
(
1
,
i
)
α'(1,i)
α′(1,i)
根据
α
′
α'
α′ 抽取这个sequence里重要的咨询:
v
1
=
W
v
a
1
v^{1}=W^va^1
v1=Wva1、
v
2
=
W
v
a
2
v^{2}=W^va^2
v2=Wva2、
v
3
=
W
v
a
3
v^{3}=W^va^3
v3=Wva3、
v
4
=
W
v
a
4
v^{4}=W^va^4
v4=Wva4
再用
v
i
v^i
vi 乘以
α
′
(
1
,
i
)
α'(1,i)
α′(1,i) ,然后再累加得到
b
1
b^1
b1
α
′
(
1
,
1
)
⋅
v
1
+
α
′
(
1
,
2
)
⋅
v
2
+
α
′
(
1
,
3
)
⋅
v
3
+
α
′
(
1
,
4
)
⋅
v
4
=
b
1
α'(1,1)·v^1+α'(1,2)·v^2+α'(1,3)·v^3+α'(1,4)·v^4=b^1
α′(1,1)⋅v1+α′(1,2)⋅v2+α′(1,3)⋅v3+α′(1,4)⋅v4=b1
主角:
a
2
a^{2}
a2
每一个向量与
a
2
a^{2}
a2关联的程度,用数值
α
α
α 表示(计算
α
α
α 方法:Dot-product
)
q
2
=
W
q
a
2
q^{2}=W^qa^2
q2=Wqa2
k
1
=
W
k
a
1
k^{1}=W^ka^1
k1=Wka1、
k
2
=
W
k
a
2
k^{2}=W^ka^2
k2=Wka2、
k
3
=
W
k
a
3
k^{3}=W^ka^3
k3=Wka3、
k
4
=
W
k
a
4
k^{4}=W^ka^4
k4=Wka4
根据
q
2
q^{2}
q2 去对
a
1
a1
a1 到
a
4
a4
a4 求attention score
α
(
2
,
1
)
=
q
2
⋅
k
1
α(2,1)=q^2·k^1
α(2,1)=q2⋅k1、
α
(
2
,
2
)
=
q
2
⋅
k
2
α(2,2)=q^2·k^2
α(2,2)=q2⋅k2、
α
(
2
,
3
)
=
q
2
⋅
k
3
α(2,3)=q^2·k^3
α(2,3)=q2⋅k3、
α
(
2
,
4
)
=
q
2
⋅
k
4
α(2,4)=q^2·k^4
α(2,4)=q2⋅k4
计算出
a
2
a^{2}
a2 与每一个向量关联性后,做一个softmax,输出一排
α
′
(
2
,
i
)
α'(2,i)
α′(2,i)
根据
α
′
α'
α′ 抽取这个sequence
里重要的咨询:
v
1
=
W
v
a
1
v^{1}=W^va^1
v1=Wva1、
v
2
=
W
v
a
2
v^{2}=W^va^2
v2=Wva2、
v
3
=
W
v
a
3
v^{3}=W^va^3
v3=Wva3、
v
4
=
W
v
a
4
v^{4}=W^va^4
v4=Wva4
再用
v
i
v^i
vi 乘以
α
′
(
2
,
i
)
α'(2,i)
α′(2,i),然后再累加得到
b
2
b^2
b2
α
′
(
2
,
1
)
⋅
v
1
+
α
′
(
2
,
2
)
⋅
v
2
+
α
′
(
2
,
3
)
⋅
v
3
+
α
′
(
2
,
4
)
⋅
v
4
=
b
2
α'(2,1)·v^1+α'(2,2)·v^2+α'(2,3)·v^3+α'(2,4)·v^4=b^2
α′(2,1)⋅v1+α′(2,2)⋅v2+α′(2,3)⋅v3+α′(2,4)⋅v4=b2
第一步:每一个a
都要分别产生q
k
v
,I
为Input
q
i
=
W
q
a
i
q^{i}=W^qa^i
qi=Wqai ——>
(
q
1
q
2
q
3
q
4
)
=
W
q
(
a
1
a
2
a
3
a
4
)
k
i
=
W
k
a
i
k^{i}=W^ka^i
ki=Wkai——>
(
k
1
k
2
k
3
k
4
)
=
W
k
(
a
1
a
2
a
3
a
4
)
v
i
=
W
v
a
i
v^{i}=W^va^i
vi=Wvai——>
(
v
1
v
2
v
3
v
4
)
=
W
v
(
a
1
a
2
a
3
a
4
)
第二步:每一个
q
i
q^{i}
qi 都和每一个
k
k
k 计算 Dot-product
得到 attention score
α ( 1 , 1 ) = k 1 ⋅ q 1 α(1,1) = k^1·q^1 α(1,1)=k1⋅q1, α ( 1 , 2 ) = k 2 ⋅ q 1 α(1,2) = k^2·q^1 α(1,2)=k2⋅q1, α ( 1 , 3 ) = k 3 ⋅ q 1 α(1,3) = k^3·q^1 α(1,3)=k3⋅q1, α ( 1 , 4 ) = k 4 ⋅ q 1 α(1,4) = k^4·q^1 α(1,4)=k4⋅q1
α
(
1
,
i
)
=
k
i
⋅
q
1
α(1,i) = k^i·q^1
α(1,i)=ki⋅q1 ——>
(
k
1
k
2
k
3
k
4
)
⋅
q
1
=
(
α
(
1
,
1
)
α
(
1
,
2
)
α
(
1
,
3
)
α
(
1
,
4
)
)
(
k
1
k
2
k
3
k
4
)
⋅
(
q
1
q
2
q
3
q
4
)
=
(
α
(
1
,
1
)
α
(
2
,
1
)
α
(
3
,
1
)
α
(
4
,
1
)
α
(
1
,
2
)
α
(
2
,
2
)
α
(
3
,
2
)
α
(
4
,
2
)
α
(
1
,
3
)
α
(
2
,
3
)
α
(
3
,
3
)
α
(
4
,
3
)
α
(
1
,
4
)
α
(
2
,
4
)
α
(
3
,
4
)
α
(
4
,
4
)
)
第三步:输出 b 1 = α ′ ( 1 , i ) ⋅ v i b^{1}=α'(1,i)·v^i b1=α′(1,i)⋅vi
(
v
1
v
2
v
3
v
4
)
⋅
(
α
(
1
,
1
)
α
(
2
,
1
)
α
(
3
,
1
)
α
(
4
,
1
)
α
(
1
,
2
)
α
(
2
,
2
)
α
(
3
,
2
)
α
(
4
,
2
)
α
(
1
,
3
)
α
(
2
,
3
)
α
(
3
,
3
)
α
(
4
,
3
)
α
(
1
,
4
)
α
(
2
,
4
)
α
(
3
,
4
)
α
(
4
,
4
)
)
=
(
b
1
b
2
b
3
b
4
)
O
O
O 其中每一个column就是self-attention
的输出。
self-attention
中唯一需要学的参数:
W
q
W^q
Wq、
W
k
W^k
Wk、
W
v
W^v
Wv
self-attention
是用
q
q
q 去找相关的
k
k
k ,相关有很多种不同的形式,也许不能只有一个
q
q
q,要多个
q
q
q负责不同种类的相关性。
q
i
=
W
q
a
i
q^i=W^qa^i
qi=Wqai(
q
q
q称为query)然后
q
i
q^i
qi 再乘以另外2个矩阵得到
q
i
,
1
q^{i,1}
qi,1,
q
i
,
2
q^{i,2}
qi,2
解释:2个head,里面有2种不同相关性,
i
i
i代表位置,1和2代表这个位置的第几个
q
q
q,
q
q
q有2个,对应
k
k
k 和
v
v
v 也有2个。
得到的
b
b
b可以都接起来,再乘以一个矩阵得到
b
i
b^i
bi,再送到下一层。
以上Self-attention
的方法没有对位置信息考虑,需要考虑上位置的咨询。
Positional encoding:为每一个位置设定一个vetor(称为positional vetor
:
e
i
e^i
ei(
i
i
i代表位置)
e
i
+
a
i
e^i + a^i
ei+ai 再计算
q
i
q^i
qi、
k
i
k^i
ki、
v
i
v^i
vi
Positional encoding有不同的方法产生:例如sinusiodal/cos
、RNN
、Floater network
、或者通过学习得到。
注:做语音识别、语音辨识整个sequence可能太长,使用Truncated Self-attention
人为的设定一小个范围。
self-attention
用于Graph
上,结点和边对应到矩阵上,没有边对应的位置可以不计算attention score
直接设为0,这就是一种GNN