主要参考苏神blog,传送门,自己整理下加深记忆
绝对位置编码
绝对位置编码一般形式的带绝对位置编码的Attention形式如下:
{
q
i
=
(
x
i
+
p
i
)
W
Q
k
i
=
(
x
i
+
k
i
)
W
K
v
i
=
(
x
i
+
v
i
)
W
V
a
i
,
j
=
s
o
f
t
m
a
x
(
q
i
k
j
T
)
o
i
=
∑
j
a
i
,
j
v
j
\left\{ \begin{aligned} q_i & = &(x_i+p_i)W_Q \\ k_i & = & (x_i+k_i)W_K\\ v_i & = & (x_i+v_i)W_V\\ a_{i,j} & = & softmax(q_ik_{j}^{T})\\ o_i & = &\sum_ja_{i,j}v_j \end{aligned} \right.
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧qikiviai,joi=====(xi+pi)WQ(xi+ki)WK(xi+vi)WVsoftmax(qikjT)j∑ai,jvj
其中softmax表示对
j
j
j那一维归一化,这里的向量都是指行向量。将
q
i
k
j
T
q_ik_j^T
qikjT展开可得:
q
i
k
j
T
=
(
x
i
+
p
i
)
W
Q
W
K
T
(
x
j
+
p
j
)
T
=
(
x
i
W
Q
+
p
i
W
Q
)
(
W
K
T
x
j
T
+
W
K
T
p
j
T
)
q_ik_j^T=(x_i+p_i)W_QW_K^T(x_j+pj)^T=(x_iW_Q+p_iW_Q)(W_K^Tx_j^T+W_K^Tp_j^T)
qikjT=(xi+pi)WQWKT(xj+pj)T=(xiWQ+piWQ)(WKTxjT+WKTpjT)
相对位置编码
经典式
相对位置编码有绝对位置编码启发而来,相对位置编码起源于Google的论文《Self-Attention with Relative Position Representations》,华为的NEZHA也用了这种位置编码。Google把第一项位置去掉,第二项
p
j
W
K
p_jW_K
pjWK改为二元位置向量
R
i
,
j
K
R_{i,j}^K
Ri,jK,即:
a
i
,
j
=
s
o
f
t
m
a
x
(
x
i
W
Q
(
x
j
W
K
+
R
i
,
j
K
)
T
)
a_{i,j}=softmax(x_iW_Q(x_jW_K+R_{i,j}^K)^T)
ai,j=softmax(xiWQ(xjWK+Ri,jK)T)
o
i
o_i
oi的计算方式变为:
o
i
=
∑
j
a
i
,
j
(
x
j
W
K
+
R
i
,
j
V
)
o_i = \sum_ja_{i,j}(x_jW_K+R_{i,j}^V)
oi=j∑ai,j(xjWK+Ri,jV)
XLNET式
起源于Transformer-XL的论文《Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context》。将绝对位置编码中的
q
i
k
j
T
q_ik_j^T
qikjT完全展开可得到:
x
i
W
Q
W
K
T
x
j
T
+
x
i
W
Q
W
K
T
p
j
T
+
p
i
W
Q
W
K
T
x
j
T
+
p
i
W
Q
W
K
T
p
j
T
x_iW_QW_K^Tx_j^T+x_iW_QW_K^Tp_j^T+p_iW_QW_K^Tx_j^T+p_iW_QW_K^Tp_j^T
xiWQWKTxjT+xiWQWKTpjT+piWQWKTxjT+piWQWKTpjT
于是transformer-XL将
p
j
p_j
pj替换为相对位置向量
R
i
−
j
T
R_{i-j}^T
Ri−jT,两个
p
i
p_i
pi替换成可训练的向量
u
,
v
u,v
u,v:
x
i
W
Q
W
K
T
x
j
T
+
x
i
W
Q
W
K
T
R
i
−
j
T
+
u
W
Q
W
K
T
x
j
T
+
v
W
Q
W
K
T
R
i
−
j
T
x_iW_QW_K^Tx_j^T+x_iW_QW_K^TR_{i-j}^T+uW_QW_K^Tx_j^T+vW_QW_K^TR_{i-j}^T
xiWQWKTxjT+xiWQWKTRi−jT+uWQWKTxjT+vWQWKTRi−jT
并且直接去掉了 v j v_j vj的位置偏置,直接令 o i = ∑ j a i , j x j W V o_i=\sum_ja_{i,j}x_jW_V oi=∑jai,jxjWV
T5式
来源于文章《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》,该篇文章认为输入纤细与位置信息应该是独立(解耦)的,那么它们就不应该有过多的交互,所以“输入-位置”,“位置-输入”两项的Attention可以删掉,而
p
i
W
Q
W
K
T
p
j
T
p_iW_QW_K^Tp_j^T
piWQWKTpjT只是一个依赖于
(
i
,
j
)
(i,j)
(i,j)的标量,可以直接将它作为参数训练出来,即简化为:
x
i
W
Q
W
K
T
x
J
t
+
β
i
,
j
x_iW_QW_K^Tx_J^t+\beta _{i,j}
xiWQWKTxJt+βi,j,与XL一样在
v
j
v_j
vj上的位置偏置直接被去掉。
但与一般不同的是,不同于常规位置编码对将
β
i
,
j
\beta _{i,j}
βi,j视为
i
−
j
i-j
i−j的函数进行截断的做法,T5对相对位置进行了“分桶”处理,即相对位置是
i
−
j
i-j
i−j的实际上对应的是
f
(
i
−
j
)
f(i-j)
f(i−j)的位置,映射关系如下:
DeBERTa式
起源于《DeBERTa: Decoding-enhanced BERT with Disentangled Attention》,T5是剔除掉第2和第3项,而DeBERTa则去掉第四项:
q
i
k
j
T
=
x
i
W
Q
W
K
T
x
j
T
+
x
i
W
Q
W
K
T
R
i
,
j
T
+
R
j
,
i
W
Q
W
K
T
x
j
T
q_ik_j^T=x_iW_QW_K^Tx_j^T+x_iW_QW_K^TR_{i,j}^T+R_{j,i}W_QW_K^Tx_j^T
qikjT=xiWQWKTxjT+xiWQWKTRi,jT+Rj,iWQWKTxjT
FLAT: Chinese NER Using Flat-Lattice Transformer(ACL2020)
FLAT也采用相对位置编码,attention矩阵的计算方式如下:
A
i
,
j
∗
=
E
x
i
W
q
W
k
T
E
x
j
T
+
E
x
i
W
q
W
k
,
R
T
R
i
,
j
T
+
u
W
k
,
E
T
E
x
j
T
+
v
W
k
,
R
T
R
i
,
j
T
A_{i,j}^{*}=E_{x_i}W_qW_{k}^{T}E_{x_j}^{T} + E_{x_i}W_{q}W_{k,R}^{T}R_{i,j}^{T} + uW_{k,E}^{T}E_{x_j}^{T} + vW_{k,R}^{T}R_{i,j}^{T}
Ai,j∗=ExiWqWkTExjT+ExiWqWk,RTRi,jT+uWk,ETExjT+vWk,RTRi,jT
并提出了四中相对距离的表示方式,同时考虑字符和词之间的关系:
{
d
i
j
h
h
=
h
e
a
d
[
i
]
−
h
e
a
d
[
j
]
d
i
j
h
t
=
h
e
a
d
[
i
]
−
t
a
i
l
[
j
]
d
i
j
t
h
=
t
a
i
l
[
i
]
−
h
e
a
d
[
j
]
d
i
j
t
t
=
t
a
i
l
[
i
]
−
t
a
i
l
[
j
]
\left\{ \begin{aligned} d_{ij}^{hh} & = & head[i]-head[j] \\ d_{ij}^{ht} & = & head[i]-tail[j]\\ d_{ij}^{th} & = & tail[i]-head[j]\\ d_{ij}^{tt} & = & tail[i]-tail[j] \end{aligned} \right.
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧dijhhdijhtdijthdijtt====head[i]−head[j]head[i]−tail[j]tail[i]−head[j]tail[i]−tail[j]
相对位置的encoding为:
的计算方式与vanilla Transformer相同。