【收藏学习】大模型位置编码全解析:从Transformer到RoPE的演进之路
本文详细解析了大模型中的位置编码技术,介绍了从绝对位置编码、Transformer的Sinusoidal位置编码、相对位置编码到当前主流的旋转式位置编码(RoPE)的演变历程。分析了位置编码如何解决文本顺序信息问题,评估了各种编码方法在表征绝对位置、相对位置等方面的优劣。RoPE因其全面满足位置表征需求而被广泛采用,但面对超长文本处理,位置编码技术仍在持续演进中。
本文详细解析了大模型中的位置编码技术,介绍了从绝对位置编码、Transformer的Sinusoidal位置编码、相对位置编码到当前主流的旋转式位置编码(RoPE)的演变历程。分析了位置编码如何解决文本顺序信息问题,评估了各种编码方法在表征绝对位置、相对位置等方面的优劣。RoPE因其全面满足位置表征需求而被广泛采用,但面对超长文本处理,位置编码技术仍在持续演进中。
Transformer可以说是大模型的“模型结构鼻祖”,现代大模型的Decoder-only的基础模型结构就是基于其decoder部分(去掉和Encoder连接的部分)改进的。

Transformer原始架构,红框是decoder部分,图源论文《Attention Is All You Need》
从模型结构图中可以看出,模型主要由一般的文本(Token) Embedding层、Position Embedding层、Attention层、Norm层、FeedFarward(MLP)层等构成,我们首先介绍Position Embedding层(PE)。PE的演变主要分为两个部分,一个部分是表征输入文本Position的算法的演变,另一个部分是为了能够支撑大模型理解更长上下文,研究者们所做的努力。本期主要整理了第一部分,主要从以下几个方面逐渐展开:
- 为什么大语言模型需要位置编码?
- 怎么样算是一个好的位置编码算法?
- 从大语言模型发展至今,位置编码算法是如何演变的?
- 位置编码算法已经够用了吗?
1、为什么大语言模型需要位置编码?
Transformer采用Self-Attention结构,相比于原来处理文本信息常用的串行RNN类结构,Self-Attention可以并行计算提升计算效率,但是缺少了文本序列的前后位置信息。
然而文本又需要这种顺序信息来辅助语义理解,例如:“我打了他”和“他打了我”,一模一样四个字,但是完全不一样的意思,所以Self-Attention需要位置编码信息。
现在大语言模型普遍采用Self-Attention架构,所以需要通过位置编码把文字间的顺序关系加进大模型去。

Self-Attention和RNN的结构对比,图源李宏毅的机器学习课程
2、怎么算是一个好的位置编码算法?
既然需要位置编码,那需要一个什么样的位置编码呢?换言之,怎么样的位置编码是一个好的位置编码算法?
从我们理解文本的过程去考虑,主要有3个方面特征是理解文本语义时重要的参考能力项:
-
能表征绝对位置信息:小时候写作文老师常常强调“总分总”结构、“首段首句”的作用等,这些都是从文本的绝对位置去衡量的;
-
能表征相对位置信息:
-
相对位置顺序:还是那个例子,“我打了他”和“他打了我”,前后相对位置不一样,语义就产生了区别;
-
相对位置距离:文字和文字之间相对距离越近,有相关性的可能性越高;反之,离得越远,产生语义交互的可能性越低。
既然我们人类理解文本是从这些维度区分位置的,大模型本质上是在建模人类理解文本的过程,那么衡量一个位置编码算法的好坏也可以从这几个维度出发去评估。
3、从大语言模型发展至今,位置编码算法是如何演变的?
3.1 绝对位置编码
在Transformer出现前,更早的深度学习模型(如Convolutional sequence to sequence learning)在处理文本时,已经会加入位置向量信息了,一般采用的方式是固定一个可学习的 n × d_{model}的位置编码器,像一个位置id对应的向量词典,根据position id索引到对应的向量。
使用时,就和token向量直接相加,输入到后面的模型层中。每一行向量都是可学习的,会随着预训练改变,模型训练者期望其能学习到上述位置特征,但总体其实是个黑盒。一般这种方式训练出的位置向量不会有重复的,基本满足表征“绝对位置”的能力,但是,“相对位置”的表征能力就比较难直接预估了。
并且,这种方式最大的问题是不具备外推性,训练的时候覆盖到最长多长的位置,预测的时候最大就只能到多长,因为更长的文本position信息没法用位置向量表征。
这种方式实现起来非常简单(https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt2/modeling_gpt2.py#L554C6-L554C80),效果也不错,在大模型初期,对文本长度的追求没有那么高的时候,这种方法基本够用,所以GPT系列模型早期基本都是用这种编码方式。
3.2 Transformer的Sinusoidal位置编码
推荐阅读猛猿的这个博客:https://mp.weixin.qq.com/s/Xtb_dVXq-aDQOwz8_kI6dA
为了解决3.1节中,文本长度不能泛化的问题,Transformer的作者提出了Sinusoidal位置编码。Sinusoidal位置编码的原理已经有很多大佬讲很多很细致了(如上述推荐文章),我这里就从第二节的几个能力项的角度简单验证下是否满足咱们的需求。
首先看下Sinusoidal位置编码的定义:

其中,t表示一个文本序列中第t个token的位置序号,i表示一个位置向量中的维度。
因为不同位置t不一样,加上函数的波长从2到10000*2,所以一般不会出现重复向量,满足绝对位置信息表征的能力,并且相比于绝对位置编码,理论上不受限于训练的最长长度,具备更好一些的泛化性。
那么是否具备相对向量表征能力呢?可以说部分具备。
- 位置t和位置t+k的转换是由k决定的,也就是相同的相对距离可以通过相同的线性变换得到。我们假设位置向量只有2维,手推一下公式如下(忽略我的丑字:):

记住最后一行左边这个二维矩阵,后面会考(狗头
- 在Self-Attention中,不同位置的元素是通过内积计算相关性的,Sinusoidal位置编码的两个位置之间的内积是由相对距离决定的。具体推导在上述博客中有展开,这里直接贴过来:

图源猛猿的文章https://mp.weixin.qq.com/s/Xtb_dVXq-aDQOwz8_kI6dA
但是,Sinusoidal位置编码存在其不足:
- 一方面是缺少相对顺序表征,即相差k和相差-k的两个位置之间的内积是一样的

图源论文 TENER: Adapting Transformer Encoder for Named Entity Recognition
=【【【【【=
- 另一方面是,由于是PE向量的相对距离稳定性,会在attention计算时被Q和K的权重矩阵W破坏掉

综上,Transformer中提出的Sinusoidal位置编码尽管优美,但是一些不足导致直接沿用的大模型比较少。业界还在继续探索适合Self-Attention体质的位置编码算法。
3.3 相对位置编码
相对位置编码的代表论文是Google的这一篇《Self-Attention with Relative Position Representations》。同样是为了解决绝对位置编码不能外推的问题,这篇论文直接放弃了绝对位置表征的能力,认为在Self-Attention结构下,只要相对位置信息也能达到很好的效果(论文实验验证确实差距不大),而相对位置的信息不需要加在最下面embedding层,而是加在Attention层的计算中(如下图所示)。

绝对位置编码和相对位置编码的对比,黄色高亮为attention中位置向量的计算区别

相对位置编码的取值示例,图源论文Self-Attention with Relative Position Representations
看到这,你可能会有疑问,相对位置也是无底洞啊,一万个字,开头和结尾不就相对9999个距离吗?这篇论文的假设是,过了一定的距离,位置相关性已经不太有作用了,所以只要表征[-k, k]即可;另外,attention会有多层,多层就可以表征更长的距离,就比如第一层可以表征[1, 2k]的位置,到了第二层的Attention层,第2k个位置会和相对距离2k以内的位置产生关系,以此类推,attention越多,理论上一共能覆盖到的位置越多。
Google在其后面推出的T5大模型中就沿用了这一相对位置编码的思想,在其基础上增加了分桶的思路,例如相对距离为2以内的可以用一个相对位置编码,2-4可以用一个,4-8可以用一个,越往外一个相对位置向量可以表征更多的位置序号,因为模型可能对其距离更不敏感,具体实现可见其模型代码https://github.com/huggingface/transformers/blob/main/src/transformers/models/t5/modeling_t5.py#L203。
3.4 旋转式位置编码(Rotary Position Embedding,RoPE)
数学好的建议直接看一遍苏剑林大神的博客原文:https://spaces.ac.cn/archives/8265
数学不太好的(像我),建议看十遍(狗头
苏神的复数式推导我看一次忘一次,真“常看常新”,但是我会安慰自己:没关系,会用就行。咱还是直接拿过来结论,看看是不是符合咱们对好的位置编码的能力项要求吧。
对于位置m的token向量q,利用RoPE添加位置信息的方式如下(二维为例):

(这个转换矩阵和前面Sinusoidal位置编码那一节,我们做其相对位置变换的时候算出那个转换矩阵是不是很像!)
因为这个位置转换矩阵取决于m,所以可以表征绝对位置信息。
再来看相对位置表征能力(请再次忽略我的丑字):

依然是相对距离取决于k,满足相对位置表征能力。
再来看self-attention中内积的计算部分,相对位置的表征能力依旧能打,依旧是两者的内积最终位置计算的部分取决于相对距离:

并且这个相对距离与Sinusoidal位置编码的内积的相对距离不同,是会区分正负的,因为有sin函数的存在,所以相对顺序信息也有了。所以,RoPE对位置向量的几项能力的表征是都满足的,这也是RoPE被广泛采用的重要原因吧!
4、位置编码已经够用了吗?
位置编码算法经过几年的迭代更新,最新的RoPE在应用到大模型上时,基本已经满足我们在第2节提出的几个维度的能力项了,是不是已经够用了呢?
答案是还不够。
随着大模型的能力发展,和对其能力的需求期待的不断提升,如何能让大模型在预测时,处理成百上千万的超长文本的时候维持在短文本上的表现,仍然是AI从业者持续探索的问题,下期我们就接着一起学习一下,怎么做“长度外推”,以及现在都是用哪些技术帮助提升大模型在超长上下文表现的。
那么,如何系统的去学习大模型LLM?
作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。
所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。
由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~
为什么要学习大模型?
我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。


👉大模型学习指南+路线汇总👈
我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。

👉①.基础篇👈
基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。
👉②.进阶篇👈
接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。
👉③.实战篇👈
实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。
👉④.福利篇👈
最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!
更多推荐



所有评论(0)