414 Chapter 12. 基于自注意力的模型 肖桐 朱靖波
12.3 位置编码
在使用循环神经网络进行序列的信息提取时,每个时刻的运算都要依赖前一
时刻的输出,具有一定的时序性,这也与语言具有顺序的特点相契合。而采用自
意力机制对源语言和目标语言序列进行处理时,直接对当前位置和序列中的任意
置进行建模,忽略了词之间的顺序关系,例如图12.6中两个语义不同的句子,通过自
注意力得到的表示
˜
h(机票) 却是相同的。
h(沈阳) h() h(广州) h(机票) h(机票)
...
α
1
= 0.2
α
2
= 0.3
α
3
= 0.1
α
i
= 0.3
h(广州)
h()
h(沈阳)
h(机票) h(机票)
...
α
1
= 0.1
α
2
= 0.3
α
3
= 0.2
α
i
= 0.3
˜
h(机票) = 0.2 × h(沈阳) + 0.3 × h() +
0.1 × h(广州) + ... + 0.3 × h(机票)
12.6 “机票”的更进一步抽象表示
˜
h 的计算
题,Transformer 在原码,
来表示单词之间的顺序关系。位置编码在 Transformer 结构中的位置如图12.7它是
Transformer 成功的一个重要因素。
Self-Attention
Add & LayerNorm
Feed Forward Network
Add & LayerNorm
Embedding
+
Position
编码器输入:
编码器
Self-Attention
Add & LayerNorm
Encoder-Decoder Attention
Add & LayerNorm
Feed Forward Network
Add & LayerNorm
Output layer
Embedding
+
Position
解码器输入: <sos> I am fine
解码器
解码器输出: I am fine <eos>
12.7 Transformer 输入与位置编码
位置编码的计算方式有很多种,Transformer 使用不同频率的正余弦函数,如公
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)
即对于任固定偏移 kPE(pos + k) 被表 PE(pos) 的线函数,句话
说,位置编码可以表示词之间的距离。在实践中发现,位置编码对 Transformer 系统
416 Chapter 12. 基于自注意力的模型 肖桐 朱靖波
的性能有很大影响。对其进行改进也会带来进一步的性能提升
[462]