长度外推
会员专享NTK-aware Scaling、YaRN 等方法让 RoPE 模型处理超长序列
在权益中心获取代码转圈视角:理解长度外推
假设模型在 max_seq_len = 4096 上训练。当推理时输入长度为 8192,会发生什么?
一个常见的直觉是"位置编号超出了训练范围,所以 OOD 了"。但这个说法不够精确,位置编号跟位置嵌入不是一回事。位置编号 是无界的,但 RoPE 的位置嵌入是三角函数组成的,有界。跟模型直接打交道的是位置嵌入,不是位置编号。所以要真正理解 OOD,我们需要从位置嵌入的角度来分析。
单位圆上的转圈
回顾上一章的内积公式,加了 RoPE 之后的 Q/K 内积可以用复数表示为:
关键在 这一项。从欧拉公式 可以知道,它就是单位圆上的一个点。当相对距离 逐渐变大时,这个点在单位圆上转圈, 越大转得越快, 越小转得越慢。
这就是"转圈视角"的核心:位置编号 是否 OOD 根本不重要,重要的是单位圆上的点是否被充分训练过。
高频 vs 低频:覆盖度的差异
假设训练长度为 ,那么 。对于每个维度 ,我们可以算出训练期间转了多少圈:
- 高频维度( 大, 小):转速快,训练期间已经转了很多圈,圆上的每一个点几乎都被训练过。即使测试时 更大,也只是在已经见过的圆上继续转,不存在 OOD 问题
- 低频维度( 小, 大):转速慢,训练期间可能还没转完一圈,被训练过的点顶多只是圆上的一段弧。测试时如果超出了这段弧的范围,就进入了模型从未见过的区域,这才是真正的 OOD
Unit Circle Coverage
4096
8192
High freq (i=0)
Rotations
651.9
Period
6
Full coverage — safe
Low freq (i=63)
Rotations
0.1
Period
54410
Arc only — OOD risk
Trained arcExtrapolation (OOD)
用具体数值来感受一下(,,):
# 最高频维度 (i=0): θ₀ = 1.0
# 圈数: 1.0 × 4096 / (2π) ≈ 651 圈 → 圆上全覆盖,安全
# 最低频维度 (i=63): θ₆₃ ≈ 0.00011
# 圈数: 0.00011 × 4096 / (2π) ≈ 0.07 圈 → 只走了一小段弧,OOD 风险极高问题的本质不是"旋转角度太大",而是低频维度在单位圆上的覆盖不足。高频维度转了几百圈,反而是最安全的。
从转圈到解法
有了这个视角,解决思路就很清晰了:
- 圈数充足的维度(高频)→ 不需要改动,直接外推
- 圈数不足的维度(低频)→ 需要把超出弧范围的部分压缩回已训练的弧内(位置内插)
- 中间地带 → 在两者之间平滑过渡
这正是后面各种方法的核心思想。区别只在于"怎么压缩"和"压缩多少"。
登录以继续阅读
这是一篇付费内容,请登录您的账户以访问完整内容。
CookLLM文档