4. 理解 YaRN

📅 2026/7/12 5:23:15
4. 理解 YaRN
从 RoPE 到 YaRN大语言模型长上下文扩展技术详解随着大语言模型LLM的快速演进模型能够处理的上下文长度Context Window已成为衡量其能力的核心指标之一。无论是 ChatGPT 阅读长篇财报、Claude 处理数十万 Token 的代码库还是 Gemini 进行超长上下文推理长文本能力都至关重要。然而受限于算力成本大多数基础模型如 Llama、Mistral、Qwen 等在预训练时的上下文长度通常仅为 2048、4096 或 8192 Token。如果直接将一个在 4K 上下文下训练的模型用于推理 64K 甚至 128K 的序列模型的表现会迅速崩溃。为了打破这一限制研究界提出了一条清晰的长上下文扩展技术路线RoPE → NTK-Aware Scaling → Position Interpolation (PI) → YaRN → LongRoPE → LongRoPE2其中YaRNYet another RoPE extensioN凭借其极低的微调成本和优秀的性能成为目前开源社区应用最广泛的扩展方案之一。它由 Nous Research 团队在 2023 年提出论文标题为YaRN: Efficient Context Window Extension of Large Language Models。论文的核心目标是让原本只能处理几千个 Token 的模型在尽量少训练成本的情况下支持数万甚至十几万个 Token 的长上下文。论文地址YaRN(原论文ArXiv)一、为什么需要 RoPE1.1 Transformer 的“位置盲区”Transformer 架构的核心是 Self-Attention自注意力机制但它本身是无法感知 Token 顺序的。对于 Attention 计算而言“我爱中国”和“中国爱我”的 Token 集合完全相同计算结果毫无区别。因此必须人为注入位置编码Position Embedding。1.2 RoPE 的核心思想旋转即位置传统的绝对位置编码是直接将位置信息加在 Token Embedding 上而RoPERotary Position Embedding旋转位置编码的巧妙之处在于它通过旋转矩阵来编码位置信息。假设查询向量和键向量Q , K ∈ R d Q,K \in \mathbb{R}^{d}Q,K∈Rd对于第m mm个位置RoPE 的操作为Q m R ( m ) Q Q_m R(m)QQm​R(m)QK m R ( m ) K K_m R(m)KKm​R(m)K其中R ( m ) R(m)R(m)是一个旋转矩阵。对于二维特征( x 1 , x 2 ) (x_1, x_2)(x1​,x2​)引入旋转角ϕ m θ \phi m\thetaϕmθ其旋转过程可表示为[ x 1 ′ x 2 ′ ] [ cos ⁡ ϕ − sin ⁡ ϕ sin ⁡ ϕ cos ⁡ ϕ ] [ x 1 x 2 ] \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \begin{bmatrix} \cos\phi -\sin\phi \\ \sin\phi \cos\phi \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}[x1′​x2′​​][cosϕsinϕ​−sinϕcosϕ​][x1​x2​​]RoPE 最重要的性质在 Attention 计算点积时Q m T K n Q T R ( n − m ) K Q_m^T K_n Q^T R(n-m) KQmT​Kn​QTR(n−m)K。通过推导可以发现点积的结果只与相对位置( n − m ) (n-m)(n−m)有关。这意味着RoPE 天然以绝对位置编码的形式实现了相对位置编码的效果。二、理解 RoPE 的命门频率与位置外推要理解长上下文扩展的难点必须先搞懂 RoPE 中的频率Frequency。2.1 频率到底是什么很多文章笼统地说“高频负责局部低频负责全局”但这非常抽象。在 RoPE 中旋转角度ϕ i m θ i \phi_i m\theta_iϕi​mθi​其中m mm是位置θ i \theta_iθi​是频率。一句话理解频率位置每增加 1 个 Token向量在特定维度上的旋转角度增加多少。RoPE 为不同的维度设计了不同的频率θ i 10000 − 2 i / d \theta_i 10000^{-2i/d}θi​10000−2i/d其中i ii是维度编号d dd是隐藏层总维度。这导致了一个现象靠前的维度频率极高靠后的维度频率极低。我们可以用时钟来生动比喻高频维度像秒针频率大Token 位置稍微变化一点角度就转过一大圈。这让模型能像“显微镜”一样敏锐区分“Token 100”和“Token 101”这种局部相邻位置。低频维度像时针频率极小Token 位置变化成千上万角度才缓慢转动一点。它虽然无法区分相邻细节但在长跨度下不会发生周期重叠Aliasing混叠非常适合记忆遥远位置的整体轮廓。2.2 外推灾难Position Extrapolation假设模型预训练时最大长度为 4096那么模型在训练期间见过的最大位置m ∈ [ 0 , 4096 ] m \in [0, 4096]m∈[0,4096]。到了推理阶段如果强行输入长度为 65536 的文本对于低频维度来说它需要计算65536 θ i 65536 \theta_i65536θi​的旋转角——这是一个模型在训练期间从未见过的数值范围。遇到完全陌生的位置分布模型的注意力机制就会彻底混乱无法进行长距离检索困惑度PPL急速飙升。这就是长上下文的“外推灾难”。三、治标不治本Position Interpolation (PI)为了解决外推问题学术界提出了Position Interpolation (PI位置插值)。它的核心逻辑非常暴力既然模型没见过超纲的位置那就把长文本“压缩”回训练区间。假设训练长度是 4K目标长度是 32K扩展倍率s 8 s 8s8。PI 算法将所有新位置m mm映射为m ′ m / s m m/sm′m/s。例如把第 32768 个 Token 当作第 4096 个 Token 塞给模型。实际位置压缩后输入模型的位置409651281921024327684096PI 的致命缺陷一刀切PI 等价于把所有维度的频率统一缩小s ss倍θ i ′ θ i / s \theta_i \theta_i / sθi′​θi​/s。但我们前面说过高频维度负责捕捉相邻 Token 的精细顺序局部语法、短距离依赖。经过s 8 s8s8的严重压缩后原本相邻 Token 的位置差异变小了模型变得难以区分相邻 Token。这导致 PI 扩展后的模型虽然能看长文了但在短上下文任务上的基础能力出现了明显衰退。四、YaRN 的优雅解法分频施策YaRNYet another RoPE extensioN的作者敏锐地发现了 PI 的痛点问题不在于压缩而在于不应该对所有频率进行同等强度的压缩。YaRN 提出了一个优雅的准则保护局部能力只拉伸远程能力。4.1 频率分段策略YaRN 根据维度的不同频率采取了截然不同的处理方式高频部分负责局部信息保持原样不压缩。θ i ′ θ i \theta_i \theta_iθi′​θi​低频部分负责全局信息按照扩展倍率缩放。θ i ′ θ i / s \theta_i \theta_i / sθi′​θi​/s中间频率过渡区引入一个权重因子α i \alpha_iαi​进行平滑过渡。YaRN 巧妙地设计了一个Ramp 函数来计算α i \alpha_iαi​实现了平滑插值避免了频率的突变θ i ′ ( 1 − α i ) θ i α i θ i s \theta_i (1-\alpha_i)\theta_i \alpha_i \frac{\theta_i}{s}θi′​(1−αi​)θi​αi​sθi​​4.2 Attention Temperature 修正频率调整完后YaRN 的作者还发现了一个长上下文的通病Attention 分布容易变得过于平坦所有 Token 权重接近无法聚焦关键信息。为此YaRN 在标准 Attention 机制中引入了一个温度系数t 1 t 1t1A softmax ( t ⋅ Q K T d ) A \text{softmax}\left( t \cdot \frac{QK^T}{\sqrt{d}} \right)Asoftmax(t⋅d​QKT​)通过放大点积的差异强行让 Attention 的概率分布变得更加尖锐从而大幅提升了模型在海量文本中的“长距离精确检索”能力。五、YaRN 的微调范式与长文演进5.1 极低成本的微调流程使用 YaRN 扩展上下文长度非常轻量化通常只需四步加载权重加载基础模型如 Llama、Mistral。替换参数将原始 RoPE 频率公式替换为 YaRN 的分段频率公式。输入长文喂入 32K、64K 甚至 128K 的长文本数据。轻量继续训练通常只需要消耗十几亿到几十亿 Token 的算力即可完成长文能力的适配成本远低于从头预训练。5.2 大模型长上下文技术的全貌从宏观视角来看RoPE 体系下的长文扩展技术脉络非常清晰PI统一按比例压缩牺牲了局部性能。YaRN引入 Ramp 函数分频率平滑压缩兼顾了局部与全局。LongRoPE / LongRoPE2微软提出的进一步优化方案不再使用人工设定的固定规则而是通过进化算法搜索最优的频率缩放策略从而在短文本和超长文本百万级 Token之间取得更极致的平衡。总结YaRN 的成功本质上是对 Transformer 位置编码底层逻辑的一次深刻回归。它基于一个极其直观但极易被忽略的事实在 RoPE 的频率空间中高频负责局部细节低频负责全局轮廓。通过构建巧妙的 Ramp 函数进行分段插值再辅以 Attention 温度修正YaRN 实现了“既要又要”既保留了预训练模型强大的短文理解能力又解锁了远超训练长度的长文处理空间。这也是为什么今天大量标榜支持 64K、128K 甚至更大上下文窗的开源大模型其底层依然流淌着 YaRN 及其变种的血液。