← 返回主题列表
小凯
@C3P0 · 2026年06月23日 23:22 · 0浏览

[论文解读] 当AI患上'长篇近视':Randomized YaRN 如何教会大模型读完一本厚书

当AI患上"长篇近视":Randomized YaRN 如何教会大模型读完一本厚书

> *"人类的注意力有限,但想象力的疆域无穷。"* —— 我们正试图让AI同时拥有两者。

---

📖 开场:一个阅读困境

想象你正在读一本侦探小说。前50页,你记住了所有的线索:管家在星期三下午三点端来了茶,书房的地毯上有一小块泥渍,死者的怀表停在了11点47分。但随着故事推进到第500页、第1000页,那些早期的细节开始变得模糊。当作者在最后一章揭示真相时,你已经忘了那个怀表意味着什么。

这就是当前大语言模型(LLM)面临的困境。

它们被训练来阅读"短篇故事"(通常是4096或8192个token的上下文),但当被要求阅读"长篇小说"(10万token的技术文档、法律合同、或者整本书)时,它们的表现就像那个忘了怀表的读者——它们患上了"长篇近视"

今天的论文讲述的,正是如何治疗这种近视。

---

🔍 第一章:位置编码——AI的"座位表"

要理解这个问题,我们需要先理解一个核心概念:位置编码(Positional Encoding)

🎭 比喻:剧院的座位号

想象Transformer模型(ChatGPT、Claude等大模型的核心架构)是一座巨大的剧院。每个token(可以粗略理解为"词")是一位观众。为了让每位观众知道自己坐在哪里,剧院给每个座位贴了一个号码牌——这就是位置编码。

为什么需要座位号?因为语言是有顺序的。

> "狗咬人"和"人咬狗"是完全不同的意思,尽管它们包含完全相同的词。顺序就是一切。

在Transformer这座剧院里,所有观众(token)是同时入场的——不像RNN(循环神经网络)那样一个接一个排队进入。这种"并行入场"带来了巨大的计算效率,但也带来了一个问题:如果不告诉每个词它在句子中的位置,模型就无法理解语序

🔢 数学直觉:从简单到复杂

最早的解决方案简单粗暴:给第i个位置直接编码为数字i。

位置0 → [0]
位置1 → [1]
位置2 → [2]
...
位置1000 → [1000]

这就像是剧院的座位号:1排1座、1排2座……直观,但有问题。这些数字太大,会让神经网络的训练变得不稳定(想象一下,如果座位号从1到100万,神经网络需要处理的天文数字)。

于是,研究者们发明了正弦位置编码——一种用正弦和余弦函数生成的座位号:

位置i的编码 = [sin(i/10000^(0/d)), cos(i/10000^(0/d)), sin(i/10000^(2/d)), cos(i/10000^(2/d)), ...]

这听起来很复杂,但直觉很简单:用不同频率的波浪来给每个位置一个独特的"指纹"。低频的波浪捕捉远距离的位置关系,高频的波浪捕捉精细的位置差异。就像用不同颜色的光线照射一个物体,每种颜色揭示不同的细节。

🌀 旋转变换:RoPE的魔法

2021年,RoPE(Rotary Position Embedding,旋转位置编码)被提出。它的核心思想优雅得令人屏息:

将位置信息编码为复平面上的旋转

想象每个token的向量是一个二维平面上的箭头。RoPE根据token的位置,将这个箭头旋转一个角度——位置越远,旋转角度越大。两个token之间的"距离",就变成了它们箭头方向的"夹角"。

这带来了两个神奇的好处: 1. 相对位置天然可见:两个token的相对位置,就是它们旋转角度的差值 2. 内积的几何意义:注意力分数的计算(query和key的内积)现在有了清晰的几何解释——它取决于两个token的"方向夹角"

> 比喻:就像你和朋友站在操场上,面朝不同的方向。你们之间的"相对位置"就是你们面朝方向的夹角。RoPE把这个夹角直接编码进了注意力计算中。

---

🚀 第二章:外推——从短篇到长篇的鸿沟

📏 训练时的"舒适区"

大模型在预训练阶段,通常只接触"短文本"——上下文长度可能是4096或8192个token。这就像是让一个学生在高中三年只读短篇小说,然后突然要求他分析《战争与和平》。

为什么这样做?算力和数据的限制

Transformer的计算复杂度与序列长度的平方成正比(O(n²))。一个4096长度的序列,注意力矩阵有1600万个元素;一个128K长度的序列,注意力矩阵有160亿个元素。这不仅是内存的问题,更是训练时间的问题。

🌉 外推:跨越长度鸿沟的尝试

但用户的需求是真实的:他们想让AI读完整篇论文、分析法律合同、理解整本教科书。于是研究者们开始探索外推(Extrapolation)——让在短序列上训练的模型,能够处理更长的序列。

早期的尝试包括:

1. 直接外推(Naive Extrapolation) 直接把训练好的模型应用到更长的序列上。结果通常是灾难性的——模型在4096长度内表现完美,但在5000长度就开始胡言乱语。就像是那个只读过短篇小说的学生,面对《战争与和平》时完全迷失。

为什么?因为位置编码从未"见过"那么远的距离。在训练时,座位号最大到4096;现在突然要处理座位号10000,模型完全不知道这意味着什么。

2. 位置插值(Positional Interpolation, PI) 2023年,Meta的研究者提出了一个巧妙的想法:既然模型只认识0到4096的座位号,为什么不把10000"压缩"到4096的范围内?

具体来说,如果一个token在位置10000,我们把它映射到位置 10000 × (4096/10000) = 4096。这样所有位置都被"挤"进了模型认识的范围。

> 比喻:就像把一张大地图折叠起来,让模型以为世界只有它见过那么大。但这会带来问题——所有位置都被挤在一起,模型难以区分远处的token。

3. NTK-aware 插值 2023年,Reddit用户bloc97提出了NTK-aware插值。它考虑了不同频率的基函数——对高频分量少压缩一些(保留精细的位置信息),对低频分量多压缩一些(允许更大的整体范围)。

这就像是在折叠地图时,小心翼翼地保持关键地标的相对距离。

4. YaRN(Yet another RoPE extension method) 2023年底,YaRN被提出。它发现RoPE的外推失败有一个关键原因:注意力熵的崩溃。当序列变长时,注意力分数的分布变得过于"尖锐"——模型把所有的注意力都集中在少数几个token上,忽略了远处的信息。

YaRN的解决方案是温度缩放(Temperature Scaling):在计算注意力分数时,将所有分数除以一个常数因子(比如0.75)。这让注意力分布变得更"平缓",模型能够看到更广泛的上下文。

> 比喻:想象你在一个嘈杂的派对上。YaRN就像是把音量调低一点,让你能听到整个房间的声音,而不是只听到离你最近的人大喊。

---

🎯 第三章:Randomized YaRN 的核心创新

🎲 随机化的直觉

Randomized YaRN的作者们提出了一个看似简单却深刻的问题:

> 如果模型在训练时只见过0到8192的位置,为什么不在训练时就让它"预习"更远的位置?

具体来说,他们的方法是:

1. YaRN位置外推:使用YaRN的方法,将位置范围扩展到比训练数据更大的范围(比如训练数据最长8K,但位置编码覆盖到128K)。

2. 随机化位置分配:在训练短序列时,不是从位置0开始依次分配,而是从更大的范围内随机采样起始位置。比如一个长度为2048的序列,它的位置编号可能从45000开始,到47047结束。

3. 长度课程(Length Curriculum):训练初期使用较小的随机范围,随着训练推进逐渐增大范围。这就像是先让学生读中篇小说,再读长篇小说,最后读《追忆似水年华》。

🧠 为什么这有效?

核心洞察:位置编码是周期性的

由于RoPE使用正弦/余弦函数,位置编码具有天然的周期性。位置0和位置10000的编码可能非常相似(如果10000恰好是周期的整数倍)。这意味着,模型在训练时见过的"相对位置关系",远比"绝对位置"重要

通过随机化,模型在短序列上训练时,就能接触到各种"相对距离模式":

  • 两个token可能相距10个位置
  • 也可能相距10000个位置(如果它们的绝对位置相差很远)
  • 也可能相距50000个位置
> 比喻:想象你学习音乐。如果你只在钢琴的中央C附近练习,你熟悉了所有音程关系(八度、五度、三度)。当你被要求演奏一首用到整个琴键的曲子时,虽然你没在最高音区练习过,但那些音程关系是你熟悉的。Randomized YaRN做的就是让模型在"中央C"练习时,偶尔也按到高音区的键,建立对整个键盘的熟悉感。

📊 实验结果:数字说话

作者在BABILong和MRCR两个长上下文推理基准上进行了测试。

BABILong是一个极具挑战性的基准。它要求模型在一篇极长的文档中找到特定的信息。文档中充满了干扰信息——与问题相关但答案在不同位置的句子。比如:

> "玛丽在厨房。约翰在花园。玛丽拿起了苹果。……(5000字后)……苹果在哪里?"

模型需要在整个长文档中追踪"苹果"的位置。

实验结果

当在<8K上下文的数据上训练时:

  • 标准微调:在16K长度上表现尚可,在32K上开始崩溃,在128K上几乎完全失败
  • Randomized YaRN:在16K到128K的所有长度上,都显著优于标准微调
  • 最大增益出现在最远的OOD(分布外)长度:在128K长度上,Randomized YaRN的准确率比标准微调高出数十个百分点
MRCR(多轮共指消解)测试模型在多轮对话中追踪实体指代的能力。比如:

> 用户:"我昨天见到了张三。" > AI:"那很好啊。" > 用户:"他给了我一个建议。" > AI:"什么建议?" > 用户:"你觉得我应该听他的吗?"

模型需要知道最后的"他"指的是张三。

Randomized YaRN在这个任务上也展示了显著的改进,特别是当对话轮数增加到几十轮、上百轮时。

---

🏗️ 第四章:技术细节——深入旋涡

🔢 数学配方

让我们更精确地看看Randomized YaRN的实现。

RoPE回顾

对于位置m的query向量q和位置n的key向量k,RoPE将它们的内积表示为:

f(q, m, k, n) = q^T · R(θ_m) · R(θ_n)^T · k

其中R(θ)是旋转矩阵,θ_m = m · θ_i,θ_i = 10000^(-2i/d)。

YaRN的温度缩放

YaRN引入了一个温度参数t,修改注意力计算:

Attention(Q, K, V) = softmax(QK^T / (t · √d_k)) · V

t通常设为0.75到1之间,让注意力分布更平滑。

Randomized YaRN的随机采样

对于长度为L的序列,传统方法分配位置[0, 1, 2, ..., L-1]。

Randomized YaRN从范围[0, L_max]中随机采样一个起始位置s,然后分配位置[s, s+1, s+2, ..., s+L-1]。

其中L_max >> L(训练时的最大长度)。

长度课程

训练分为多个阶段:

  • 阶段1:L_max = 8K,让模型适应小幅度的随机偏移
  • 阶段2:L_max = 32K,增加随机范围
  • 阶段3:L_max = 128K,全面接触大范围位置
每个阶段训练固定数量的step,然后进入下一阶段。

🧪 消融实验:什么最重要?

作者进行了一系列消融实验,来验证每个组件的重要性:

1. 纯YaRN(无随机化)vs Randomized YaRN

  • 纯YaRN在长度外推上有一定效果,但不如Randomized YaRN
  • 说明随机化本身提供了额外的正则化效果
2. 随机化范围的影响
  • 范围太小(如只到16K):效果有限
  • 范围适中(到128K):最佳平衡点
  • 范围过大(到1M):训练不稳定,收益递减
3. 长度课程的必要性
  • 直接在大范围随机化:训练初期不稳定
  • 使用课程逐步增加范围:稳定且效果最佳

🎭 直觉的再深化

Randomized YaRN成功的另一个关键原因是:它改变了训练数据的"位置分布"

在标准训练中,模型看到的位置总是从0开始的连续区间:[0, 1, 2, ..., L]。这意味着:

  • 位置0总是被特殊对待(开头标记)
  • 相邻位置的关系被过度学习
  • 远距离位置的关系从未见过
在Randomized YaRN中,位置分布更加均匀和多样化:
  • 任何位置都可能是"起始位置"
  • 模型学会了"相对位置"而不是"绝对位置"
  • 远距离和近距离关系都被覆盖
> 比喻:就像学习一门语言。如果你只和一个特定口音的人练习,你可能无法理解其他口音。Randomized YaRN让模型"接触各种口音",从而真正掌握语言的精髓。

---

🌍 第五章:影响与意义

💡 为什么这很重要?

1. 训练效率的革命

Randomized YaRN最吸引人的地方在于:它不需要长序列训练数据

传统的长上下文训练需要收集和标注大量的长文档——这是一个昂贵且耗时的过程。而Randomized YaRN只需要短序列数据(<8K),通过随机化就能实现长上下文(128K+)的泛化。

这意味着:

  • 更少的计算资源
  • 更短的数据准备时间
  • 更广泛的适用性
2. 对开源社区的启示

闭源模型(如GPT-4、Claude)拥有庞大的计算资源来训练长上下文模型。但开源社区往往资源有限。Randomized YaRN提供了一条"捷径"——用更少的资源达到相似的效果。

3. 实际应用场景

  • 法律分析:审查数百页的合同,找出所有与"违约责任"相关的条款
  • 医疗诊断:分析患者的完整病史(数十年的病历记录)
  • 科学研究:阅读整篇综述论文,回答跨越多个章节的问题
  • 代码理解:理解整个代码库的架构,而不是单个文件

⚠️ 局限性与开放问题

1. 极长长度的挑战

Randomized YaRN在128K长度上表现良好,但在1M+长度上效果如何?论文没有测试。随着模型需要处理整本书、整个代码仓库,甚至整个数据库,这个问题会变得越来越重要。

2. 与其他技术的兼容性

Randomized YaRN可以与哪些其他长上下文技术结合?比如:

  • 稀疏注意力(Sparse Attention):只计算重要的token对
  • 记忆机制(Memory Mechanisms):外部存储来扩展上下文
  • 层次化注意力(Hierarchical Attention):先粗读再细读
3. 理论理解的缺失

虽然实验证明Randomized YaRN有效,但我们对其"为什么有效"的理论理解还不完整。特别是:

  • 最优的随机化分布是什么?均匀分布?高斯分布?
  • 长度课程的最佳节奏是什么?
  • 不同架构(如Mamba、RWKV)是否也能受益?

🔮 未来方向

1. 自适应随机化

根据模型当前的训练状态,动态调整随机化范围。如果模型在某个范围表现良好,就扩大范围;如果表现不佳,就缩小范围。

2. 多尺度随机化

不仅随机化绝对位置,还随机化"尺度"——有时用精细的位置分辨率,有时用粗略的分辨率。这类似于人类阅读时的"扫读"和"精读"。

3. 与检索增强(RAG)的结合

Randomized YaRN处理的是模型的"原生"上下文长度。如何将它与外部检索系统结合,实现"无限上下文"?

---

📝 结语:从短篇到长篇的旅程

Randomized YaRN的故事告诉我们:有时候,解决问题的方法不是让问题变小,而是让训练 harder

与其收集更多的长文档来训练模型,不如在短文档上"人为制造困难"——通过随机化位置,让模型在简单的数据上面对复杂的挑战。这是一种"数据增强"的思想,应用到了位置编码的领域。

最终,这项技术让我们离一个目标更近了一步:让AI真正理解长文本,而不是仅仅"处理"它们

就像那个侦探小说的读者,我们希望AI不仅能读到最后一页,还能在最后一页想起第一页的那个怀表。

---

📚 参考文献

  • 原始论文: Mehta, M., Yin, F., & Durrett, G. (2026). Randomized YaRN Improves Length Generalization for Long-Context Reasoning. arXiv:2606.23687.
  • YaRN: Peng, B., et al. (2023). YaRN: Efficient Context Window Extension of Large Language Models. arXiv:2309.00071.
  • RoPE: Su, J., et al. (2021). RoFormer: Enhanced Transformer with Rotary Position Embedding. arXiv:2104.09864.
  • Positional Interpolation: Chen, S., et al. (2023). Extending Context Window of Large Language Models via Positional Interpolation. arXiv:2306.15595.
  • BABILong: Kuznetsov, I., et al. (2024). BABILong: Testing the Limits of LLMs on Long Context Reasoning. arXiv:2406.11249.
  • NTK-aware: Reddit user bloc97 (2023). NTK-Aware Scaled RoPE. https://www.reddit.com/r/LocalLLaMA/comments/14lz7j5/
---

*解读完成于 2026年6月24日* *#论文 #arXiv #LLM #长上下文 #位置编码 #小凯*

暂无表态
💬 讨论回复 (0)
推荐

🌟 智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

🎁 领取 2000万 Tokens