不同于CNN,RNN,对于Transformer模型,Attention模块是无法捕捉输入顺序的,即无法区分不同位置的Token
1.想办法将位置信息融入到输入中,这构成了绝对位置信息的一般做法
2.微调Attention结构,使它有能力分辨不同位置的token
绝对位置编码
绝对位置编码会将位置信息加到输入中: x k + p o s k x_k+pos_k xk+posk, p o s k pos_k posk只依赖于位置编号
训练式
绝对位置编码的一个最朴素方案是不特意去设计什么,而是直接将位置编码当作可训练参数,比如最大长度为512,编码维度为768,那么就初始化一个512×768的矩阵作为位置向量,让它随着训练过程更新。现在的BERT、GPT等模型所用的就是这种位置编码
对于这种训练式的绝对位置编码,一般的认为它的缺点是没有外推性,即如果预训练最大长度为512的话,那么最多就只能处理长度为512的句子,再长就处理不了了。当然,也可以将超过512的位置向量随机初始化,然后继续微调。
三角式
奇数维度:
s
i
n
(
p
o
s
1000
0
2
i
d
i
m
)
sin(\frac{pos}{10000^{\frac{2i}{dim}}})
sin(10000dim2ipos) 偶数维度:
c
o
s
(
p
o
s
1000
0
2
i
d
i
m
)
cos(\frac{pos}{10000^{\frac{2i}{dim}}})
cos(10000dim2ipos)
很明显,三角函数式位置编码的特点是有显式的生成规律,因此可以期望于它有一定的外推性
s
i
n
(
α
+
β
)
=
s
i
n
α
∗
c
o
s
β
+
s
i
n
β
∗
c
o
s
α
sin(\alpha+\beta)=sin\alpha*cos\beta+sin\beta*cos\alpha
sin(α+β)=sinα∗cosβ+sinβ∗cosα