Transformer 已经渐渐成为目前 LLM 最通用底层架构之一,其中的位置编码也显得极其重要,由于注意力分数本质上是每个 token 的 val 加权和,并没有考虑其中的空间信息,因此需要在自注意力模块之前就将位置信息融合进序列中。
绝对位置编码
绝对位置编码是一种将序列中的每个位置进行编码的方法,它为每个位置分配一个唯一的编码向量。其优势在于它不依赖于序列中的其他元素,可以独立地表示每个位置的信息,比较简单容易计算。
Transformer 所用的就是绝对位置编码策略,计算公式如下:
\[\text{PE}(pos,2i)=\sin(pos/10000^{2i/d}) \]\[\text{PE}(pos,2i+1)=\cos(pos/10000^{2i/d}) \]其缺点也比较明显:
- 绝对位置编码无法反应不同词之间的相对关系,例如位置 1 和 2 跟 5 和 500 的差异是一样的
- 表示不了比预训练文本长度更长的位置向量表示,如果预训练最大长度为 512 的话,那么最多就只能处理长度为 512 的句子,再长就处理不了了。