12.3 位置编码 415
式(12.3)和(12.4)所示:
PE(pos,2i) = sin(
pos
10000
2i/d
model
) (12.3)
PE(pos,2i + 1) = cos(
pos
10000
2i/d
model
) (12.4)
式中 PE(·) 表示位置编码的函数,pos 表示单词的位置,i 代表位置编码向量中的第几
维,d
model
是 Transformer 的一个基础参数,表示每个位置的隐藏层大小。因为,正
余弦函数的编码各占一半,因此当位置编码的维度为 512 时,i 的范围是 0-255。在
Transformer 中,位置编码的维度和词嵌入向量的维度相同(均为 d
model
),模型通过
将二者相加作为模型输入,如图12.8所示。
e(沈阳) e(到) e(广州) e(的) e(机票)
h(沈阳)
h(到)
h(广州)
h(的)
h(机票)
⊕ ⊕ ⊕ ⊕ ⊕
PE(1) PE(2) PE(3) PE(4) PE(5)
沈阳
到
广州
的
机票
...
...
...
...
图 12.8 位置编码与词编码的组合
那么为什么通过这种计算方式可以很好的表示位置信息?有几方面原因。首先,
正余弦函数是具有上下界的周期函数,用正余弦函数可将长度不同的序列的位置编
码的范围都固定到 [−1, 1],这样在与词的编码进行相加时,不至于产生太大差距。另
外位置编码的不同维度对应不同的正余弦曲线,这为多维的表示空间赋予一定意义。
最后,根据三角函数的性质,如公式(12.5)和(12.6):
sin(α + β) = sinα ·cosβ + cosα ·sinβ (12.5)
cos(α + β) = cosα ·cosβ −sinα ·sinβ (12.6)
可以得到第 pos + k 个位置的编码,如公式(12.7)和(12.8):
PE(pos + k,2i) = PE(pos,2i) ·PE(k,2i + 1) +
PE(pos,2i + 1) ·PE(k,2i) (12.7)
PE(pos + k,2i + 1) = PE(pos,2i + 1) ·PE(k, 2i + 1) −
PE(pos,2i) ·PE(k, 2i) (12.8)
即对于任意固定的偏移量 k,PE(pos + k) 能被表示成 PE(pos) 的线性函数,换句话
说,位置编码可以表示词之间的距离。在实践中发现,位置编码对 Transformer 系统