热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >一文看懂 LLaMA 中的旋转式位置编码(Rotary Position Embedding)

一文看懂 LLaMA 中的旋转式位置编码(Rotary Position Embedding)

来源:互联网 更新时间:2026-08-02 13:27

要理解 LLaMA 为什么这么强,关键之一就在于它的“旋转式位置编码”(Rotary Position Embedding,简称 RoPE)。这个机制最早出自论文 [1],它巧妙地将相对位置信息融入到了 self-attention 的计算中,从而显著提升了 Transformer 架构的性能。LLaMA 系列模型正是这一技术的典型受益者。

接下来,我们就结合论文和代码,深入拆解一下 RoPE 的工作原理。

基本概念

先来定义一些基础概念。假设我们有一个长度为 N 的输入序列:

其中 wi 表示序列中的第 i 个 token。这个序列对应的 embedding 表示是:

这里的 xi 就是第 i 个 token wi 对应的 d 维词嵌入向量。

在做 self-attention 之前,需要先基于这些词嵌入向量计算出 query、key、value 向量,同时还要把位置信息加进去。这个过程可以统一表示为:

这里,qm 表示第 m 个 token 的词向量 xm 融合了位置 m 信息后的 query 向量。同理,knvn 就是第 n 个 token 的词向量 xn 融合了位置 n 信息后的 key 和 value 向量。

本质上,所有基于 Transformer 的位置编码方法,核心都是在设计一个合适的 f{q,k,v} 函数。

那最终计算第 m 个词向量 xm 对应的 self-attention 输出时,就是拿 qm 和每个位置 nkn 算 attention score,然后用这些 score 去加权求和对应的 vn,得到输出向量 om

绝对位置编码

说到位置编码,最常见的一种做法是绝对位置编码。它的思路很直接:先计算一个位置编码向量 pi,然后把它加到词嵌入 xi 上,再一起乘以变换矩阵 W{q,k,v}

经典的绝对位置编码向量 pi 是按下面这个公式算的:

可以看到,p_{i,2t}p_{i,2t+1} 分别对应偶数索引和奇数索引位置的计算。用 Python 代码来实现就是:

# position 就对应 token 序列中的位置索引 i
# hidden_dim 就对应词嵌入维度大小 d
# seq_len 表示 token 序列长度
def get_position_angle_vec(position):
    return [position / np.power(10000, 2 * (hid_j // 2) / hidden_dim) for hid_j in range(hidden_dim)]

# position_angle_vecs.shape = [seq_len, hidden_dim]
position_angle_vecs = np.array([get_position_angle_vec(pos_i) for pos_i in range(seq_len)])

# 分别计算奇偶索引位置对应的 sin 和 cos 值
position_angle_vecs[:, 0::2] = np.sin(position_angle_vecs[:, 0::2])  # dim 2t
position_angle_vecs[:, 1::2] = np.cos(position_angle_vecs[:, 1::2])  # dim 2t+1

# positional_embeddings.shape = [1, seq_len, hidden_dim]
positional_embeddings = torch.FloatTensor(position_angle_vecs).unsqueeze(0)

旋转式位置编码

RoPE 的思路则更进一步。它希望 query 向量 qm 和 key 向量 kn 之间的内积,能够被一个函数 g 直接表示出来,而这个 g 的输入是词嵌入向量 xmxn 以及它们之间的相对位置 m - n。换句话说,它要做的就是:

(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>
(x_m,m),f_k(x_n,n)>(x_m,m),f_k(x_n,n)>
(x_m,m),f_k(x_n,n)>

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc