作为现代Transformer架构中位置编码的突破性改进,旋转位置编码(Rotary Position Embedding, RoPE)通过复数域旋转算子实现了高效的位置感知计算。本文从张量操作视角深入剖析RoPE的数学本质,并给出其在工业级大语言模型中的完整实现路径。
给定输入序列,其中为序列长度,为嵌入维度。位置编码的目标是构造映射,使得:
其中需保持相对位置的显式表达。
这意味着,无论绝对位置 m 和 n 如何,只要它们的相对位置 m−n 相同,内积中与位置相关的部分应保持一致。
RoPE将位置编码建模为复数平面上的旋转变换。对于第个位置,构造旋转矩阵:
其中为频率控制参数。对于维向量,将其分解为个二维子空间,每个子空间独立应用旋转矩阵。
对于高维向量,其旋转编码形式为:
其中,表示向量拼接操作。
pythonclass MiniMindLM(PreTrainedModel):
def __init__(self, params):
self.tok_embeddings = nn.Embedding(params.vocab_size, params.dim)
self.register_buffer("pos_cis",
precompute_pos_cis(params.dim//params.n_heads, params.max_seq_len))
def forward(self, input_ids):
# Token嵌入映射
h = self.tok_embeddings(input_ids) # [b, s, d]
# 位置编码注入
h = apply_rotary_emb(h, self.pos_cis)
pythondef precompute_pos_cis(dim: int, end: int, theta: float = 1e4):
freqs = 1.0 / (theta ** (torch.arange(0, dim, 2)[: (dim // 2)].float() / dim))
t = torch.arange(end, device=freqs.device)
freqs = torch.outer(t, freqs).float() # 外积生成位置-频率矩阵
return torch.polar(torch.ones_like(freqs), freqs) # 转换为复数形式
def apply_rotary_emb(x, pos_cis):
x_complex = torch.view_as_complex(x.float().reshape(*x.shape[:-1], -1, 2))
pos_cis = pos_cis.reshape(1, x.shape[1], 1, -1)
return torch.view_as_real(x_complex * pos_cis).flatten(3)
对于输入张量(h为注意力头数),旋转操作等价于:
其中表示逐元素复数乘法。
在自注意力机制中,查询矩阵和键矩阵分别进行旋转编码:
注意力分数计算式展开为:
令为位置的查询向量,为位置的键向量,其点积满足:
其中表示复数共轭,证明旋转编码天然包含相对位置信息。
python# 预计算位置复数因子
pos_cis = precompute_pos_cis(
dim=dim,
end=max_seq_len,
theta=config.rope_theta
)
self.register_buffer('pos_cis', pos_cis)
python# 将复数布局转换为GPU友好的交错存储
def apply_rotary_emb(x, pos_cis):
x_reshaped = x.float().reshape(*x.shape[:-1], -1, 2) # [b, s, h, d/2, 2]
x_complex = torch.view_as_complex(x_reshaped)
return torch.view_as_real(x_complex * pos_cis).flatten(3)
view_as_complex
实现零拷贝复数转换方法 | 训练长度 | 测试长度 | 困惑度(PPL) |
---|---|---|---|
绝对位置编码 | 2048 | 4096 | 89.2 |
ALiBi | 2048 | 8192 | 65.4 |
RoPE | 2048 | 16384 | 32.1 |
操作 | 时间复杂度 | 空间复杂度 |
---|---|---|
传统相对位置编码 | ||
RoPE |
旋转位置编码通过将位置信息编码为复数域旋转变换,实现了Transformer架构中位置感知与计算效率的最优平衡。其在LLaMA、GPT-J等前沿模型中的成功应用,验证了该方法的工程有效性和理论优越性。未来,结合动态频率调整的改进型RoPE,将进一步提升大模型的长文本处理能力。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!