NTK-aware Scaling、YaRN 等方法让 RoPE 模型处理超长序列

配套代码


转圈视角:理解长度外推

假设模型在 max_seq_len = 4096 上训练。当推理时输入长度为 8192,会发生什么?

一个常见的直觉是”位置编号超出了训练范围,所以 OOD 了”。但这个说法不够精确,位置编号跟位置嵌入不是一回事。位置编号 𝑚 m 是无界的,但 RoPE 的位置嵌入是三角函数组成的,有界。跟模型直接打交道的是位置嵌入,不是位置编号。所以要真正理解 OOD,我们需要从位置嵌入的角度来分析。

单位圆上的转圈

回顾上一章的内积公式,加了 RoPE 之后的 Q/K 内积可以用复数表示为:

关键在 𝑒 𝑖 ( 𝑚 − 𝑛 ) 𝜃 𝑖 e i(m−n)θ i 这一项。从欧拉公式 𝑒 𝑖 𝑡

cos ⁡ 𝑡 + 𝑖 sin ⁡ 𝑡 e it =cost+isint 可以知道,它就是单位圆上的一个点。当相对距离 𝑚 − 𝑛 m−n 逐渐变大时,这个点在单位圆上转圈,𝜃 𝑖 θ i 越大转得越快,𝜃 𝑖 θ i 越小转得越慢。

这就是”转圈视角”的核心:位置编号 𝑚 − 𝑛 m−n 是否 OOD 根本不重要,重要的是单位圆上的点是否被充分训练过。

高频 vs 低频:覆盖度的差异

假设训练长度为 𝐿 train L train ,那么 𝑚 − 𝑛 ∈ [ 0 , 𝐿 train − 1] m−n∈[0,L train

−1]。对于每个维度 𝑖 i,我们可以算出训练期间转了多少圈:

Unit Circle Coverage

L_train

4096

L_test

8192