理解Transformer中的位置编码
为什么要位置编码
【文本分类】
- I like this movie because it doesn’t have an overhead history. Positive
- I don’tlike this movie because it has an overhead history. Negative
在文本分类中,not出现地方不同,导致分类的类别也不同
【命名实体识别】
lnc.之前单词一般为公司具体名称即LOC(组织机构)
in 之后一般为TIME(时间) 和 LOC (组织机构)
三角函数的位置编码(原始Transformer)
{
P
E
(
p
o
s
,
2
i
)
=
sin
(
p
o
s
10000
2
i
/
d
m
o
d
e
l
)
P
E
(
p
o
s
,
2
i
+1
)
=
cos
(
p
o
s
10000
2
i
/
d
m
o
d
e
l
)
\left\{ \begin{matrix} PE(pos,2i)=\sin \left( \frac{pos}{{{10000}^{2i/{{d}_{model}}}}} \right) \\ PE(pos,2i\text{+1})=\cos \left( \frac{pos}{{{10000}^{2i/{{d}_{model}}}}} \right) \\ \end{matrix} \right.
⎩⎨⎧PE(pos,2i)=sin(100002i/dmodelpos)PE(pos,2i+1)=cos(100002i/dmodelpos)
其中,
p
o
s
pos
pos 是 token的位置索引,设句子长度为
L
L
L,那么
p
o
s
=
0
,
1
,
.
.
.
,
L
−
1
pos=0,1,...,L-1
pos=0,1,...,L−1。
i
i
i是向量的某一维度,假设
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512时
i
=
0
,
1
,
.
.
.
,
255
(
因
为
2
i
了
)
i=0,1,...,255(因为2i了)
i=0,1,...,255(因为2i了)
根据如上公式,可以为每个位置上的token生成
d
m
o
d
e
l
d_{model}
dmodel维的位置向量
【为什么这么做】因为根据三角函数
{
sin
(
α
+
β
)
=
sin
α
cos
β
+con
α
sin
β
cos
(
α
+
β
)
=
cos
α
cos
β
−
sin
α
sin
β
\left\{ \begin{matrix} \sin (\alpha +\beta )=\sin \alpha \cos \beta \text{+con}\alpha \text{sin}\beta \\ \cos (\alpha +\beta )=\cos \alpha \cos \beta -\sin \alpha \sin \beta \\ \end{matrix} \right.
{sin(α+β)=sinαcosβ+conαsinβcos(α+β)=cosαcosβ−sinαsinβ
可得:
{
P
E
(
p
o
s
+
k
,
2
i
)
=
P
E
(
p
o
s
,
2
i
)
×
P
E
(
k
,
2
i
+1
)
+
P
E
(
p
o
s
,
2
i
+1
)
×
P
E
(
k
,
2
i
)
P
E
(
p
o
s
+
k
,
2
i
+1
)
=
P
E
(
p
o
s
,
2
i
+1
)
×
P
E
(
k
,
2
i
+1
)
−
P
E
(
p
o
s
,
2
i
)
×
P
E
(
k
,
2
i
)
\left\{ \begin{matrix} PE(pos+k,2i)=PE(pos,2i)\times PE(k,2i\text{+1})\text{+}PE(pos,2i\text{+1})\times PE(k,2i) \\ PE(pos+k,2i\text{+1})=PE(pos,2i\text{+1})\times PE(k,2i\text{+1})-PE(pos,2i)\times PE(k,2i) \\ \end{matrix} \right.
{PE(pos+k,2i)=PE(pos,2i)×PE(k,2i+1)+PE(pos,2i+1)×PE(k,2i)PE(pos+k,2i+1)=PE(pos,2i+1)×PE(k,2i+1)−PE(pos,2i)×PE(k,2i)
【结论】
当求
P
E
(
p
o
s
+
k
,
2
i
)
PE(pos+k,2i)
PE(pos+k,2i)的向量时,可表示为对
P
E
(
p
o
s
,
2
i
)
PE(pos,2i)
PE(pos,2i)上的线性表示,因为
P
E
(
k
,
2
i
+
1
)
PE(k,2i+1)
PE(k,2i+1)当每次 k=1 时就是一个固定的值,这样逐步向后推
。
Reference
本博客的基础知识来源于浅谈 Transformer-based 模型中的位置表示,然后基于此,我自己得到上面的结论。