一、先搞懂:为什么Transformer必须要有位置编码?
Transformer的注意力机制天生是"认词不认顺序"的,比如"我吃苹果"和"苹果吃我",没有位置信息的话,模型会觉得这两句话完全一样,这显然不符合语言逻辑。
之前的方案有两种:
- 绝对位置编码:给每个位置单独学一个向量,简单但没法处理训练时没见过的超长文本,长度外推性差。
- 相对位置编码:直接计算两个词之间的距离,灵活但计算复杂,还会影响大模型常用的KV缓存推理效率。
旋转位置编码(RoPE)就是为了同时兼顾两者的优点诞生的,现在Llama、Qwen、ChatGLM等主流大模型都在用它。
二、核心逻辑:用"旋转角度"藏住位置信息
它的思路特别巧妙:不对词向量直接加位置向量,而是把词向量在二维平面里旋转一个角度,用旋转的角度大小代表它所在的位置。
- 两个词的绝对位置不同,旋转的角度就不同;
- 计算两个旋转后向量的内积时,结果只和它们的角度差(也就是相对距离)有关,自动就带上了相对位置信息。
三、小白也能懂的直观类比
你可以把每个词的向量想象成手表上的指针:
- 位置0的指针指向12点方向,位置1的指针转30度指向1点,位置2的指针再转30度指向2点,以此类推;
- 不管两个指针分别指向几点,它们之间的夹角永远只和"隔了几个小时"有关,和各自的绝对指向没关系;
- 这样算出来的注意力得分,自然就只和两个词的相对距离挂钩,完全不用额外加复杂的计算步骤。
【不懂RoPE=不懂大模型】彻底理解 旋转位置编码(RoPE) :为Transformer注入强大的位置信息!AI大模型基础知识 AI大模型微调 大模型教程
通俗易懂-大模型的关键技术之一:旋转位置编码rope (2)
四、它好在哪里?
- 既保留了绝对位置编码的简单高效,不破坏KV缓存的使用,推理速度快;
- 又天然自带相对位置编码的特性,长文本外推能力比旧方案强很多,能轻松处理训练时没见过的更长序列;
- 旋转是正交操作,不会改变词向量本身的长度,模型训练更稳定。