引言
这是Transformer的第二篇文章,上篇文章中我们了解了分词算法BPE,本文我们继续了解Transformer中的位置编码和核心模块——多头注意力。
下篇文章就可以实现完整的Transformer架构。
位置编码
我们首先根据BPE算法得到文本切分后的子词标记,然后经过输入嵌入层将每个标记转换为对应的向量表示,但Transformer不再基于类似RNN循环的方式,而是可以一次为所有的标记进行建模,因此丢失了输入中单词之间的相对位置关系。
在真正喂给Transformer模型之前,一个重要的操作是为嵌入向量表示增加位置表示,即位置编码。位置变可以通过学习得到也可以通过固定设置,这里介绍Transformer原始论文中使用的基于正弦函数和余弦函数的固定位置编码。
一个好的位置编码应该具有以下性质:
- 每个时间步(位置)的编码应该唯一;
- 任意两个时间步的距离应该与句子长度无关;
- 取值应该是有界的;
我们从这几个方面来分析下Transformer中使用的位置编码: