跳转至

四:位置编码与 RoPE自测题答案

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247483783&idx=1&sn=4234bc9980afc84b3af8528f227c2a65&chksm=f01eb2fec7693be8f2974b11109ead2b4fbb748bc776cbce286f8ab83ba1c6e009d404f3c71c#rd

参考资料

  • RoFormer: Enhanced Transformer with Rotary Position Embedding: https://arxiv.org/abs/2104.09864

  • Attention Is All You Need: https://arxiv.org/abs/1706.03762

  • Self-Attention with Relative Position Representations: https://arxiv.org/abs/1803.02155

  • Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation: https://arxiv.org/abs/2108.12409

  • RoPE 作者苏剑林介绍:Transformer升级之路:2、博采众长的旋转式位置编码:https://spaces.ac.cn/archives/8265

  • 相对位置编码和绝对位置编码:让研究人员绞尽脑汁的 Transformer 位置编码:https://kexue.fm/archives/8130

评分标准

  • 合格:能解释为什么需要位置编码,知道绝对位置、相对位置和 RoPE 的基本区别。

  • 良好:能写出二维旋转矩阵,说明 RoPE 作用在 Q/K 上,并讲清相对位置性质。

  • 优秀:能推导 (R_m q)^T(R_n k)=q^T R_{n-m}k,能解释 KV cache、position_ids、长上下文和工程排错。

一、位置编码基础

1. Transformer 为什么需要位置编码?

Transformer 的 self-attention 本身根据 token 内容计算相关性,没有 RNN 的时间递推,也没有 CNN 的局部窗口,因此结构上不天然包含顺序信息。位置编码用于告诉模型每个 token 在序列中的位置,以及 token 之间的距离关系。 没有位置编码,模型很难区分相同 token 集合但顺序不同的句子。 关键得分点:self-attention 无顺序结构;位置编码提供顺序和距离信息。

2. 如果 self-attention 中完全不加入位置信息,会出现什么问题?

模型只能根据 token 内容做匹配,无法稳定判断谁在前、谁在后、相距多远。对于语言任务,顺序变化会改变语义,例如主谓宾关系、否定范围、指代关系都会受到影响。 纯 self-attention 对输入顺序近似是集合式处理,无法充分表达序列结构。

3. 请解释 permutation equivariant 在 self-attention 里的含义。

permutation equivariant 指如果对输入序列做同样的置换,输出也会按同样方式置换。没有位置编码时,self-attention 不知道原始 token 是第几个,只根据内容两两交互。 这说明它没有内建绝对顺序意识,需要额外位置机制破除这种对称性。 例如词顺序换了,输出词表征跟着换位置

句子我 爱 你打乱成你 爱 我自注意力输出向量也对应换位,不会错乱语义归属。

4. “我爱你”和“你爱我”为什么能说明位置编码的重要性?

这两个句子 token 集合相同,但顺序不同,语义完全不同。如果模型只看 token 内容而没有位置,它很难区分这两种排列。位置编码让模型知道“我”在第一个位置还是第三个位置,从而理解主语和宾语关系。

5. 位置编码提供的是绝对顺序信息、相对距离信息,还是二者都可能提供?

二者都可能。绝对位置编码提供每个 token 的绝对位置编号,例如第 0、1、2 位。相对位置编码直接提供 token 对之间的距离,例如 i-j。RoPE 则通过对 Q/K 施加绝对位置旋转,使点积结果体现相对位置。

6. 位置编码通常会影响 Transformer 的哪些计算环节?

不同方法影响位置不同。绝对位置 embedding 通常加到输入 embedding。relative bias 或 ALiBi 直接加到 attention score。RoPE 作用于 attention 中的 Q/K,使 QK 点积包含位置信息。 位置编码最终会影响 attention 权重和上下文表示。

7. 位置编码和 attention mask 是同一类东西吗?它们有什么区别?

不是。位置编码提供顺序或距离信息,让模型知道位置关系。attention mask 控制哪些 token 可见,例如 causal mask 防止看未来,padding mask 防止看 pad。 位置编码是信息注入,mask 是可见性约束。

8. 位置编码和 tokenizer 的 position id 有什么关系?

tokenizer 产生 token id 序列,模型根据序列位置生成 position id。位置编码根据 position id 计算位置向量、bias 或 RoPE 旋转角度。 RoPE 中 position id 尤其重要,因为不同 position id 对应不同旋转角度。推理缓存、padding 和滑窗都会影响 position id 的正确性。

二、绝对位置编码与 Sinusoidal

9. 什么是绝对位置编码?它通常如何加入模型输入?

绝对位置编码为每个绝对位置 m 提供一个向量 p_m,通常和 token embedding 相加:

h_m = token_embedding_m + p_m
这样每个位置的输入表示同时包含 token 内容和它处于第几位的信息。

10. learned absolute position embedding 的优点和缺点是什么?

优点是实现简单、可学习、能适应训练数据中的位置模式。缺点是最大位置通常受 embedding table 长度限制,超出训练长度的位置没有学过;模型也需要自己从绝对位置中学习相对距离关系。 因此 learned absolute embedding 的长度外推能力通常较弱。

11. 原始 Transformer 的 sinusoidal position encoding 公式是什么?

公式是:

PE(pos, 2i)     = sin(pos / 10000^(2i / d_model))
PE(pos, 2i + 1) = cos(pos / 10000^(2i / d_model))
其中 pos 是位置,i 是维度对索引,d_model 是隐藏维度。

12. sinusoidal encoding 中不同频率有什么作用?

不同维度使用不同频率。高频维度对短距离变化敏感,低频维度能表达更长范围的位置变化。多频率组合让模型在不同尺度上感知位置。

13. 为什么 sinusoidal encoding 比 learned absolute embedding 更有长度外推潜力?

sinusoidal encoding 是固定函数,可以为任意位置继续计算编码;learned absolute embedding 通常只有训练时定义的最大位置表。超出表长后,learned embedding 无法直接得到可靠位置向量。 但 sinusoidal 的外推潜力不等于模型一定能很好处理任意长序列,因为模型训练分布仍然有限。

14. sinusoidal encoding 是否直接建模相对距离?为什么说它仍然是绝对位置编码?

sinusoidal encoding 使用 pos 直接生成位置向量,并加到每个 token embedding 上,因此形式上是绝对位置编码。它具有一些可由线性变换表达相对位移的性质,但 attention score 中没有显式加入 i-j。 所以它不是传统意义上直接加 relative bias 的相对位置编码。

15. 把 position embedding 加到 token embedding 后,shape 是否变化?语义上发生了什么?

shape 不变,仍是 [B, T, d_model]。语义上,向量同时包含 token 内容和位置信息,后续 attention 和 FFN 可以利用这个融合表示建模顺序。

16. 绝对位置编码为什么在超出训练最大长度时可能失效?

learned absolute embedding 对超出最大长度的位置没有训练过的向量。即使能插值或扩展,模型也没在这些位置分布上训练。sinusoidal 可以计算更长位置,但模型的 attention 模式仍可能只适应训练长度。 核心原因是位置分布和距离模式外推超出训练经验。

三、相对位置编码

17. 什么是相对位置编码?

相对位置编码显式建模两个 token 之间的相对距离,例如 i-j。它不只告诉模型每个 token 是第几位,而是告诉 attention 中 query 位置和 key 位置相隔多远。

18. 相对位置编码为什么更贴近 attention 的建模需求?

attention score 是 query-key 两个位置之间的匹配分数。对这个匹配来说,相对距离通常比绝对编号更直接。例如当前 token 常关注前一个 token、附近标点或距离若干位置的实体。 因此在 attention score 中加入相对距离信息更自然。

19. 请写出一种给 attention score 加 relative position bias 的形式。

一种形式是:

score_{i,j} = q_i^T k_j / sqrt(d) + b_{i-j}
其中 b_{i-j} 是与相对距离有关的 bias,可以是可学习参数,也可以按距离 bucket 化。

20. Shaw et al. 这类相对位置表示的大致思想是什么?

Shaw et al. 的方法在 self-attention 中引入相对位置表示,让 key/value 或 attention score 与相对距离相关。直觉是 attention 不只看内容相似度,也看 token 间相对位置。 面试不必完整复现论文公式,但要知道这是较早系统引入 relative position representations 的工作。

21. T5 类 relative position bias 和把位置向量加到 embedding 有什么差异?

T5 类 relative position bias 通常直接加到 attention logits 上,影响每个 query-key pair 的 attention score。把位置向量加到 embedding 则是在输入层融合绝对位置,后续模型自己学习如何利用。 区别是:relative bias 直接作用于 token 对的距离关系;absolute embedding 作用于单个 token 的输入表示。

22. 相对位置编码相比绝对位置编码有哪些优势?

相对位置编码更直接表达 token 间距离,适合 attention 的 pairwise 结构。它对长度外推也可能更自然,因为相对距离模式可以在不同绝对位置复用。 例如“关注前一个 token”不依赖当前 token 是第 10 位还是第 1000 位。

23. 相对位置编码可能带来哪些实现成本或复杂度?

某些实现需要额外的相对位置表、bias 矩阵、距离 bucket、attention score 修改,甚至影响高效 attention kernel 或 KV cache。长序列下相对位置 bias 的构造和广播也需要仔细优化。

四、RoPE 核心思想

24. RoPE 的全称是什么?它主要解决什么问题?

RoPE 全称是 Rotary Position Embedding,即旋转位置编码。它主要解决 Transformer 中的位置信息注入问题,尤其是在 attention 中让 Q/K 点积自然包含相对位置信息。

25. RoPE 和普通绝对位置 embedding 的核心区别是什么?

普通绝对位置 embedding 通常加到 token embedding 上。RoPE 不加到输入 embedding,而是对 attention 中的 Q/K 根据位置做旋转变换。 RoPE 改变的是 Q/K 匹配结构,使 attention score 感知相对距离。

26. RoPE 通常作用在 Q、K、V 的哪些张量上?

RoPE 通常作用在 Q 和 K 上,不作用在 V 上。因为 attention 权重由 Q/K 点积决定,位置关系应该影响“关注谁”。

27. RoPE 为什么一般不作用在 V 上?

V 是被加权聚合的内容载体,不负责决定 attention 权重。位置关系主要影响 attention score,因此加在 Q/K 上即可。对 V 旋转可能改变被传递的内容表示,且不是 RoPE 核心设计。

28. RoPE 的一句话核心思想是什么?

RoPE 按 token 的绝对位置旋转 Q 和 K,使它们的点积只通过相对位置差体现位置关系,从而让 attention score 感知相对距离。

29. RoPE 为什么可以被理解为“用绝对位置方式实现相对位置效果”?

RoPE 对位置 m 的 q 使用 R_m,对位置 n 的 k 使用 R_n,这是绝对位置相关操作。但点积后:

(R_m q)^T(R_n k) = q^T R_{n-m} k
结果依赖 n-m,也就是相对位置。因此它用绝对位置旋转实现了相对位置效果。

30. RoPE 在 attention 计算流程中的位置在哪里?

典型流程:

X -> linear projections -> Q, K, V
Q/K apply RoPE
scores = Q_rot K_rot^T / sqrt(d)
mask + softmax
weights @ V
RoPE 在 Q/K 线性投影之后、计算 attention score 之前应用。

五、RoPE 数学推导

31. 请写出二维旋转矩阵 R_m 的形式。

二维旋转矩阵是:

R_m =
[ cos(m theta)  -sin(m theta)
  sin(m theta)   cos(m theta) ]
其中 m 是位置,theta 是该维度对的频率。

32. 对二维向量 [x0, x1],写出旋转后的两个分量。

旋转后:

x0' = x0 cos(m theta) - x1 sin(m theta)
x1' = x0 sin(m theta) + x1 cos(m theta)
这就是二维平面中的标准旋转。

33. 旋转矩阵为什么不改变向量模长?

旋转矩阵是正交矩阵,满足:

R_m^T R_m = I
因此:

||R_m x||^2 = x^T R_m^T R_m x = x^T x = ||x||^2
它只改变方向,不改变长度。

34. 高维 RoPE 为什么要把 head_dim 两两分组?

RoPE 的基本操作是二维旋转。高维向量可以看作多个二维子空间的拼接,每两个维度作为一组做旋转。这样可以在不同维度对上使用不同频率,表达不同尺度的位置关系。

35. RoPE 中常见的频率 theta_i = base^(-2i/d) 表示什么?

它表示第 i 个二维维度对使用的旋转频率。不同 i 对应不同频率,类似 sinusoidal position encoding 的多频率设计。常见 base=10000,但不同模型可能使用不同 base 或 scaling。

36. 请写出 RoPE 的核心恒等式 (R_m q)^T (R_n k) 如何变成只依赖 n-m。

推导:

(R_m q)^T (R_n k)
= q^T R_m^T R_n k
= q^T R_{n-m} k
因为旋转矩阵满足 R_m^T = R_{-m},所以 R_m^T R_n = R_{-m}R_n = R_{n-m}

37. 为什么 R_m^T R_n = R_{n-m}?

二维旋转矩阵满足角度可加:

R_a R_b = R_{a+b}
同时转置等于反向旋转:

R_m^T = R_{-m}
因此:

R_m^T R_n = R_{-m} R_n = R_{n-m}

38. RoPE 如何让 attention score 感知相对距离?

attention score 使用 RoPE 后是:

score_{m,n} = (R_m q_m)^T (R_n k_n)
根据核心恒等式,位置部分会以 R_{n-m} 的形式进入点积。因此 score 不仅取决于 q/k 内容,也取决于 query 和 key 的相对距离。

39. RoPE 中 m-n 和 n-m 的符号差异重要吗?工程上如何保持一致?

重要,因为符号对应相对方向,前后位置不同。不同推导可能写 m-nn-m,取决于 score 中 q/k 的顺序和旋转矩阵定义。工程上只要 Q/K 使用同一套 position id 和一致的旋转方向,训练和推理保持一致即可。 最怕的是训练、推理或模型迁移时符号和维度配对不一致。

40. RoPE 与复数乘法、欧拉公式有什么关系?

二维向量可以看作复数 x0 + i x1。乘以 e^{i m theta} 就是在复平面上旋转 m theta。欧拉公式:

e^{i theta} = cos(theta) + i sin(theta)
对应的实数形式就是二维旋转矩阵。RoPE 可以理解为在多个二维子空间中做复数相位旋转。

六、RoPE 工程实现

41. 实际实现中为什么不显式构造完整旋转矩阵?

完整旋转矩阵大部分位置是 0,显式构造和矩阵乘法浪费显存和计算。实际只需要用 cos/sin 和维度配对做逐元素运算即可,复杂度更低,也更适合 GPU kernel。

42. rotate_half(x) 通常做什么?

rotate_half 把每个二维 pair [x0, x1] 变成 [-x1, x0]。这样:

x * cos + rotate_half(x) * sin
就等价于二维旋转。

43. 请写出 x_rot = x * cos + rotate_half(x) * sin 的含义。

它是 RoPE 的高效实现形式。对每个二维 pair:

x0' = x0 cos - x1 sin
x1' = x1 cos + x0 sin
这正是二维旋转矩阵作用在向量上的结果。

44. 给定 q, k: [B, H, T, D],RoPE 中 cos/sin 常见可广播 shape 是什么?

常见可广播 shape 是:

cos, sin: [1, 1, T, D]
也可能是 [T, D] 后在 batch/head 维上 unsqueeze。关键是能与 [B, H, T, D] 对齐广播。

45. RoPE 为什么要求 head dimension 为偶数,或者只旋转偶数维?

RoPE 基于二维旋转,需要两个维度组成一对。如果 head dimension 是奇数,就无法把所有维度两两配对。实际模型通常让 head_dim 为偶数,或只对前 rotary_dim 个偶数维应用 RoPE,剩余维度不旋转。

46. interleaved pair 和 half-split pair 两种实现有什么需要注意的地方?

interleaved pair 按 (0,1),(2,3) 配对。half-split pair 可能按前半维和后半维配对。两种方式都可以,但 cos/sin 构造、rotate_half 和权重加载必须一致。 模型迁移时如果配对方式不一致,结果会明显错误。

47. RoPE 应该在 multi-head attention 的哪一步应用?

先从 hidden states 投影得到 Q/K/V,再 reshape 成多头形式,然后对每个 head 的 Q/K 应用 RoPE,最后计算 attention score。 简化流程:

hidden -> q_proj/k_proj/v_proj -> reshape heads -> apply RoPE to q/k -> attention

48. 为什么 Q 和 K 的 position ids 必须一致地反映真实 token 位置?

RoPE 的相对位置性质依赖 R_mR_n 对应真实位置。如果 Q 或 K 的 position id 错了,R_m^T R_n 就不再代表真实相对距离,attention score 的位置关系会错。

49. 推理使用 KV cache 时,RoPE 的 position id 应如何处理?

生成新 token 时,position id 应等于它在完整上下文中的位置。例如 prompt 长度为 128,则第一个生成 token 的 position id 是 128(提示词长L,首个生成 token 位置 id 固定为L,后续逐次递增)。不能因为当前 step 只输入一个 token 就把 position id 设为 0。 历史 K 已经用历史 position id 旋转并缓存,新 Q/K 也必须使用正确的后续 position id。

50. left padding 场景下 RoPE position id 可能出现什么问题?

left padding 会让真实 token 的数组下标和逻辑位置不一致。如果直接用 [0,1,2,...] 包含 pad,真实 token 的 position id 会偏移。应根据 attention mask 为真实 token 生成连续 position ids,或使用框架正确处理 padding。 否则 batch 内不同样本的位置关系会错。

51. cos/sin cache 的作用是什么?长度不够会怎样?

cos/sin cache 预先存储不同 position 和维度频率对应的 cos/sin,避免每次重复计算。长度不够时,超出位置无法取到正确旋转值,可能报错或生成错误结果。 长上下文扩展时要确保 cache 支持目标最大长度和 rope scaling 配置。

52. 请写出一个最小 RoPE apply 的 PyTorch 风格伪代码。

def rotate_half(x):
    x_even = x[..., 0::2]
    x_odd = x[..., 1::2]
    x_rot = torch.stack((-x_odd, x_even), dim=-1)
    return x_rot.flatten(-2)

def apply_rope(x, cos, sin):
    # x: [B, H, T, D]
    # cos/sin: broadcastable to x
    return x * cos + rotate_half(x) * sin

q = apply_rope(q, cos, sin)
k = apply_rope(k, cos, sin)
scores = q @ k.transpose(-2, -1)
实现中要保证维度配对方式和 cos/sin 排列一致。

七、对比与长上下文

53. RoPE 和 sinusoidal absolute PE 有什么相似点和差异?

相似点是都使用 sin/cos 多频率函数。差异是 sinusoidal PE 把位置向量加到 token embedding 上,是加性绝对位置编码;RoPE 用 sin/cos 构造旋转,对 Q/K 做乘性旋转,使 attention score 自然依赖相对距离。

54. RoPE 和 learned absolute position embedding 相比有什么优势?

RoPE 不需要学习固定位置表,可以为任意 position 计算旋转角度,具备一定长度外推能力。它还直接作用于 Q/K 点积,使 attention score 包含相对位置信息。 learned absolute embedding 简单但外推弱,且相对距离需要模型自己学习。

55. RoPE 和传统 relative position bias 相比有什么优势和局限?

优势是 RoPE 不需要为每个距离显式维护 bias 表,直接通过 Q/K 旋转把相对距离融入内积,和多头 attention 结合自然。局限是长上下文外推仍可能不稳定,且实现对 position id、rotary_dim、base、cache 一致性敏感。

56. RoPE 和 ALiBi 的核心区别是什么?

RoPE 旋转 Q/K,让 QK 内积依赖相对位置。ALiBi 不旋转 Q/K,而是直接给 attention score 加与距离成比例的线性 bias。 简化表达:

RoPE: 改 Q/K 表示。
ALiBi: 改 attention logits。

57. ALiBi 是如何注入位置信息的?

ALiBi 在 attention score 中加入距离相关的线性偏置。对于 causal LM,距离越远通常惩罚越大,使模型带有近因偏置。它不需要 position embedding 表,也不增加 token embedding。

58. 为什么 RoPE 对长度外推有一定帮助?

RoPE 使用函数式 sin/cos 旋转,可以为训练长度之外的位置继续计算编码,而不像 learned absolute embedding 受固定表限制。同时它的相对位置性质使某些距离模式可以跨绝对位置复用。

59. 为什么 RoPE 不能保证无限长上下文都稳定?

模型训练时只见过有限长度。超长位置会带来未见过的旋转相位和距离分布,高频维度可能快速周期变化,attention 模式可能偏离训练分布。因此 RoPE 有外推潜力,但不是无限可靠。

60. RoPE scaling、NTK-aware scaling、YaRN 等方法大致想解决什么问题?

这些方法试图扩展 RoPE 的可用上下文长度,让模型在更长 position 上的旋转频率和相位分布更接近训练可适应范围。它们通常通过缩放 position、调整 base、分段缩放或继续训练来减少长上下文退化。 面试中知道它们是 RoPE 长上下文扩展方法即可,不必强行推导细节。

61. 现代 decoder-only LLM 为什么常用 RoPE?

因为 RoPE 与 causal self-attention 结合自然,能让 attention score 感知相对位置;不需要 learned absolute position table;具有一定长度外推能力;工程开销小,实践效果好。因此 LLaMA、Qwen 等许多 decoder-only LLM 都采用 RoPE 或其变体。

八、工程排错与面试追问

62. 如果只对 Q 做 RoPE、不对 K 做 RoPE,会有什么问题?

RoPE 的相对位置恒等式依赖 Q 和 K 分别使用 R_mR_n。只旋转 Q 会破坏 R_m^T R_n = R_{n-m} 这个结构,attention score 不能正确表达相对位置。训练和推理效果都会受影响。

63. 如果错误地对 V 做 RoPE,可能有什么影响?

V 是内容载体。对 V 做位置旋转会改变被聚合的信息内容,不是标准 RoPE 设计,可能破坏模型训练时学到的表示。若加载已有模型后错误旋转 V,生成质量可能明显下降。

64. 如果 KV cache 推理和不使用 cache 的结果明显不一致,RoPE 相关原因有哪些?

常见原因: - 生成 step 的 position id 从 0 重新开始。

  • past key length 没有加入 position offset。

  • cached K 和新 K 使用了不同 RoPE 配置。

  • left padding position ids 错误。

  • cos/sin cache 长度或 rope scaling 不一致。

  • batch 拼接或滑窗后 position ids 错乱。

65. 如果扩展上下文长度后模型困惑度明显变差,RoPE 相关原因有哪些?

可能原因包括:RoPE 外推超出训练长度太多;base 或 scaling 不合适;cos/sin cache 没扩展;position ids 超出模型适应范围;没有进行长上下文继续训练;高频维度相位分布偏离训练。

66. 如果不同框架迁移模型后效果异常,RoPE 配置需要检查哪些字段?

需要检查: - rope_theta 或 base

  • rope_scaling
  • max_position_embeddings
  • rotary_dim
  • head_dim

  • 是否 partial rotary

  • rotate_half 配对方式

  • position_ids 生成逻辑

  • 是否对 Q/K 而不是 V 应用

  • cos/sin cache dtype 和 device

67. RoPE 的 base、rotary_dim、rope_scaling 为什么不能随意改?

这些配置决定旋转频率、哪些维度参与位置编码、长上下文位置如何缩放。随意修改会改变模型训练时的位置表示分布,导致 attention score 的位置关系错位。除非配合继续训练或明确的长上下文扩展方法,否则不应随意改。

68. 请总结 RoPE 的优点、局限和常见 bug。

优点:Q/K 点积自然包含相对位置;不需要 learned position table;具备一定长度外推能力;旋转保持范数;工程开销小。 局限:超长外推仍可能退化;实现依赖 position ids 和 cache;不同 base/scaling 不可混用;head_dim/rotary_dim 需要正确配对。 常见 bug:只旋转 Q、不旋转 K;position id 在 KV cache 中重置;left padding 位置错;rotate_half 配对方式不一致;cos/sin cache 长度不足;误改 RoPE 配置。

69. 面试官让你 30 秒解释 RoPE,你会怎么说?

RoPE 是旋转位置编码。它不把位置 embedding 加到输入上,而是在 attention 里对 Q 和 K 按位置做二维旋转。位置 m 的 Q 乘 R_m,位置 n 的 K 乘 R_n,点积后有 (R_m q)^T(R_n k)=q^T R_{n-m}k,所以 attention score 自然依赖相对距离。它通常只作用于 Q/K,不作用于 V,现代 decoder-only LLM 中很常见。

70. 请总结今天从位置编码到 RoPE 的完整知识链路。

Transformer 的 self-attention 本身没有顺序信息,因此需要位置编码。绝对位置编码给每个位置一个向量并加到 embedding 上,简单但相对距离需要模型自己学。相对位置编码直接在 attention 中建模 token 对距离,更贴近 attention 的 pairwise 结构。RoPE 用旋转矩阵对 Q/K 注入位置:q_m -> R_m q_mk_n -> R_n k_n,由于 R_m^T R_n = R_{n-m},Q/K 点积会自然依赖相对位置。工程上用 cos/sin cache 和 rotate_half 实现,推理时必须正确处理 position_ids、KV cache、padding 和 RoPE scaling。

            预览时标签不可点




































<div class="