Transformer中的位置编码
简介
众所周知,Transformer 中的注意力机制并不区分各个 token 的顺序,可以认为是对 token 集合进行操作,因此在需要明确 token 顺序的场景下,我们必须人为地在 token 中注入位置信息,这就是位置编码 (positional encoding)。理想的位置编码应该具有如下性质:
- 唯一性:每个位置都配备唯一的编码;
- 相对性:两个位置编码之间存在只与相对位置有关(与绝对位置无关)的关系式;
- 外推性:模型能够直接泛化到比训练序列长度更长的情形下;
- 远程衰减性:随着两个位置之间的距离变大,它们位置编码的相似度变小。
可学习位置编码
最简单的想法就是让模型自己学习位置编码。设 nn.Embedding()
初始化
可学习位置编码原理简单,实现方便,但是缺点也很明显:一是位置编码是模型隐式地学习出来的,因此不能保证具有相对性和远程衰减性;二是位置编码的数量固定为训练时设置的数量,因此无法在测试时外推到更长的序列上。
使用可学习位置编码的工作包括 BERT[2], GPT-1[3], ViT[4] 等。下图展示了预训练的 ViT 中可学习位置编码互相之间的 cosine 相似度:
可以看见,模型确实学习到了合理的位置编码——距离越近,编码相似度越高。另外,由于图像数据是 2D 的,上图还显现出了有趣的行结构与列结构,也证明了可学习位置编码的有效性。
Sinusoidal 位置编码
设
上面这个式子看起来有点抽象,我们不妨可视化一下:
图中共有 50 个位置编码,每个编码是 128 维的向量。第
- 当
时,曲线周期为 ,即上图第一列形成一条周期为 的三角函数曲线; - 当
时,曲线周期为 ,即上图最后一列形成周期为 的三角函数曲线。不过此时周期太大,所以看不出变化。
可见,sinusoidal 位置编码的设计思路与二进制编码非常像——低位周期小频率高、高位周期大频率低,因此在某种程度上,sinusoidal 位置编码可以看作是二进制编码的连续版本。
现在,有几个问题有待回答:
- 为什么既要用
,又要用 ? - 为什么周期要设计为指数函数的形式?
- 为什么底数是 10000?
对于第一个问题,答案是:这样设计使得 sinusoidal 位置编码具有相对性。具体而言,考虑位置偏移量
对于第二个问题,个人倾向于认为这只是作者的经验性选择,没有什么特别的道理,也许线性形式或者多项式形式都是可行的。
对于第三个问题,根据我们前面的讨论,可以知道底数与最大周期息息相关——若底数为
最后,由于三角函数具有周期性,因此 sinusoidal 位置编码具有一定(比较有限)的外推性。另外,sinusoidal 位置编码也具有(大致)远程衰减性,如下图所示:
PyTorch 实现:
1 |
|
相对位置编码
相对位置编码不再只关注于给输入的 embedding 注入位置信息,而是结合了 attention 的计算过程进行设计。考虑配备了位置编码
论文[5]丢弃与
有关的项,然后将第三项中的 改作 :Transformer-XL[6] 和 XLNet[7] 将
替换为 ,两个 分别替换为可学习向量 : 进一步地,考虑到 所在空间与 不一定相同,因此将 前面的投影矩阵 换成新的矩阵 :T5[8] 直接丢弃“一次项”,将“二次项”简化为可学习的标量参数
:DeBERTa[9] 则丢弃“二次项”,将“一次项”中的
替换为 :
RoPE 旋转位置编码
RoPE[10]是当前 LLM 的默认选择,以绝对位置编码的形式实现了相对性,由苏神在他的博客中提出。
首先考虑二维情形,对于
对于
可以看见,RoPE 其实和 sinusoidal 位置编码有很多相似之处,只不过 sinusoidal 是加式编码,而 RoPE 是乘式编码。乘式编码结合 attention 中的内积运算,使得 RoPE 体现出来的相对性比 sinusoidal 位置编码更加“显式”。
参考资料
- Vaswani, Ashish, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, and Illia Polosukhin. Attention is all you need. Advances in neural information processing systems 30 (2017). ↩︎
- Devlin, Jacob, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805 (2018). ↩︎
- Brown, Tom, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared D. Kaplan, Prafulla Dhariwal, Arvind Neelakantan et al. Language models are few-shot learners. Advances in neural information processing systems 33 (2020): 1877-1901. ↩︎
- Dosovitskiy, Alexey, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani et al. An image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929 (2020). ↩︎
- Shaw, Peter, Jakob Uszkoreit, and Ashish Vaswani. Self-attention with relative position representations. arXiv preprint arXiv:1803.02155 (2018). ↩︎
- Dai, Zihang, Zhilin Yang, Yiming Yang, Jaime Carbonell, Quoc V. Le, and Ruslan Salakhutdinov. Transformer-xl: Attentive language models beyond a fixed-length context. arXiv preprint arXiv:1901.02860 (2019). ↩︎
- Yang, Zhilin, Zihang Dai, Yiming Yang, Jaime Carbonell, Russ R. Salakhutdinov, and Quoc V. Le. Xlnet: Generalized autoregressive pretraining for language understanding. Advances in neural information processing systems 32 (2019). ↩︎
- Raffel, Colin, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, and Peter J. Liu. Exploring the limits of transfer learning with a unified text-to-text transformer. Journal of machine learning research 21, no. 140 (2020): 1-67. ↩︎
- He, Pengcheng, Xiaodong Liu, Jianfeng Gao, and Weizhu Chen. Deberta: Decoding-enhanced bert with disentangled attention. arXiv preprint arXiv:2006.03654 (2020). ↩︎
- Su, Jianlin, Murtadha Ahmed, Yu Lu, Shengfeng Pan, Wen Bo, and Yunfeng Liu. Roformer: Enhanced transformer with rotary position embedding. Neurocomputing 568 (2024): 127063. ↩︎
- 苏剑林. (Feb. 03, 2021). 《让研究人员绞尽脑汁的Transformer位置编码 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/8130 ↩︎
- 苏剑林. (Mar. 08, 2021). 《Transformer升级之路:1、Sinusoidal位置编码追根溯源 》[Blog post]. Retrieved from https://www.spaces.ac.cn/archives/8231 ↩︎
- 苏剑林. (Mar. 23, 2021). 《Transformer升级之路:2、博采众长的旋转式位置编码 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/8265 ↩︎
- BERT为何使用学习的position embedding而非正弦position encoding? - 纳米酱的回答 - 知乎 https://www.zhihu.com/question/307293465/answer/1028613658 ↩︎
- Amirhossein Kazemnejad. Transformer Architecture: The Positional Encoding. https://kazemnejad.com/blog/transformer_architecture_positional_encoding/ ↩︎
- Zhang, Aston, Zachary C. Lipton, Mu Li, and Alexander J. Smola. Dive Into Deep Learning. https://d2l.ai/chapter_attention-mechanisms-and-transformers/self-attention-and-positional-encoding.html ↩︎
- Alibi位置向量外推性:看起来很长其实还是短. https://developer.aliyun.com/article/842370 ↩︎
- EleutherAI. Rotary Embeddings: A Relative Revolution. https://blog.eleuther.ai/rotary-embeddings/ ↩︎