正弦位置编码PE到旋转位置编码RoPE 📅 2026/7/13 15:18:01 正弦位置编码公式其中m序列下标i维度下标d维度输入融合可以看出正弦PE是直接对输入直接加上PE再计算QKV假设有一个词嵌入针对这个3*4的嵌入根据公式可计算出其固定的近似PE:那么X E PE正弦位置编码有一个致命缺陷不能表征两个序列的相对位置关系只和绝对位置相关这样就会导致一个问题当推理输入的序列长度比训练的要长那么推理效果会急剧下降下面来做一个公式推到就清晰了设两个位置m,n:计算Q和K的点积即注意力权重矩阵转置性质那么即最终可以看出来公式中不存在m-n相对距离所以说正弦位置编码只能建模绝对位置RoPERoPE可以很好的解决PE没有相对位置的问题有以下几个特点不直接把位置向量加到词嵌入把 Q、K 的特征向量每两个维度当成平面坐标按 token 位置做二维旋转Q (m) 和 K (n) 做点积结果只和两个 token 的相对距离 m-n有关天然区分语序V 不做任何旋转。要理解旋转位置编码我们需要先复习一下复数我们平时的1、2、-3、0.5都是实数只能画在一条数轴上。 但数学需要描述「平面上的点」于是发明复数把一维数轴扩展成二维复平面复数复数通用形式a实部对应平面 X 轴坐标b虚部对应平面 Y 轴坐标i虚数单位核心规则对应这平面坐标a, b举例对应平面点(3, 4)任意复数对应平面向量:向量长度模乘以特殊复数表示向量绕远点逆时针旋转弧度长度不变。这就是RoPE的底层几何逻辑。我们回到RoPE中来单头维度 h向量两两分组每组二维旋转矩阵对位置 m 的原始向量分组旋转得到等价于为什么旋转矩阵是这样的呢用刚刚的复数知识推导一下就明了了对维度两两分组把向量看做复数然后乘以对应的旋转复数其实就完成的旋转位置编码旋转因子其中那么回顾一下对应平面向量那么由上述公式就可得到旋转后的结果为什么说旋转位置编码只和相对位置有关系设 Query 位置 mKey 位置 n即只和n-m的相对位置有关。RoPE的设计另一个精妙之处单头维度 d维度分组它的基础频率变形位置pos的旋转角度为。注意这里的是弧度制不是角度制并且那么当m很小时维度小,,每向后移动 1 个 tokenpos1旋转角度 1 弧度旋转极快.它可以区分相邻、短距离词语捕捉局部语法。例如“我 吃 饭”模型需要分清「我和吃」、「吃和饭」这种局部语序快旋转的低 m 分组提供巨大角度差保证近距离词语不会混淆当m 很大后半段维度pos 哪怕增加上千总旋转角度增量极小旋转非常缓慢。 可以捕捉远距离依赖长距离 token 之间角度差距不会爆炸既精妙又“危险”RoPE的巨大缺陷恰巧就发生在高频区即m比较小的分组,当推理的序列长度很大比训练时的最大序列长度还要大时会带来极大的旋转角度也给模型带来从没见过的相对位置超出训练见过的角度分布模型无法识别相对距离虽然低频大m分组本身旋转极慢不受影响但无法修复局部语序崩坏。当前主流的RoPE变体都是为了解决这个问题的