大模型为什么会产生“离群值”?
转载精简:从 Attention Sink 与 RoPE 的冲突出发,理解 LLM 激活离群值的来源,以及 YaRN、Partial RoPE、NoPE、slash pattern 的成因
本文转载并精简自公众号「青稞AI」的《大模型为什么会产生“离群值”?深度解析 RoPE 与注意力机制》。 作者:唐瀚霖,阿里巴巴高级技术专家,开源推理引擎 RTP-LLM 的核心作者之一。 原文链接:https://mp.weixin.qq.com/s/RdL9HwbhSyGJ_BGaT42lQA ↗ 精简过程去掉了绝大部分数学推导与配图,完整内容请看原文。
离群值是量化最头疼的问题#
量化的做法是把浮点映射到低位宽整数:先选一个缩放因子把数值归一化到可表示区间,再舍入。
LLM 的激活值里存在大量离群值,让这个缩放因子非常难选:
- 取大了,量化粒度太粗,剩下 99% 的正常数值被粗糙表示;
- 取小了(把离群值剔出去),正常值精度上去了,但离群值被整体压扁。
看上去“牺牲 1% 换 99% 精度”很划算,实测却相反:把离群值裁掉或置零,LLM 精度会灾难性下降。所以几乎所有的量化工作都在想办法削弱离群值的影响,而很少问一句:它们为什么会出现,又为什么这么重要。
线索:离群值长得很像 attention sink#
前人总结的两个特征:
- 特别大的离群值只出现在最前面几个 token 上;
- 重要的不是离群值的大小,而是它是否存在——把数值改小几乎没影响,把它去掉则精度崩盘。
第一条和 attention sink(注意力汇点)高度重合:LLM 前几个 token 会被大量 token 分走很高的注意力权重,而移除这些汇点同样会破坏性能。顺着这条线往下看。
Attention Sink 本质是一次“空操作”#
StreamingLLM 发现滑动窗口注意力会让模型胡言乱语,把最前几个 token 一并保留就能修复。
原因在于:在这些注意力头里,大多数 token 把大部分注意力权重分给汇点 token,而汇点的 Value 几乎为零,注意力输出因此趋近 0——等价于这个头在当前 token 上不工作。
这对 LLM 很关键:某些注意力头只负责特定的关系抽取,当这种关系不存在时,让该头输出 0 就是最干净的关闭方式。
进一步实验更直接:把汇点 token 的离群值改成普通量级,attention sink 现象就消失了。也就是说,离群值是维持汇点的必要条件。
怎么“造”一个汇点#
不考虑 RoPE 时,只要让大多数 query 与汇点 key 的内积都很大,效果就是把 token 投影到一个与自身正交、但与汇点 key 平行的低维方向上(实验里能看到汇点 key 与其他 key 基本正交)。
所以造汇点并不需要在通道维度上出现离群值。那真实 LLM 里为什么还是出现了?
症结在 RoPE#
长文本下 Softmax 注意力会“迷路”#
设想上下文是:“Alice 的关键词是 abcd,……(上百万 token),Alice 的关键词是什么?”
要答对,某些头必须把注意力分数集中到 abcd 上。但序列越长,被平摊掉的注意力总量越大,信噪比持续衰减,模型就淹没在无关信息里。
LLM 的对策:局部头 + 召回头#
Anthropic 关于 induction head 的工作揭示了一类专门关注“与当前 token 相似的历史 token”的头。由此得到一个假设:
为了不在长文本里迷路,大多数注意力头只关注相邻 token 和汇点;少数召回头负责把远处 token 抓回当前位置,交给深层网络做局部处理。
RazorAttention 的验证很干脆:先按召回得分筛出前 20% 的召回头,丢掉其余头的远程 KV cache,准确率下降不到 3%;反过来保留 80% 全注意力头、丢掉那 20% 召回头的 KV cache,准确率掉超过 30%。
RoPE 的快分量在干扰召回#
RoPE 用不同频率的旋转分量编码相对位置。对召回头而言,无论被召回的 token 在多远,都希望注意力分数足够大——但快旋转分量的分数会随相对位置快速波动,对召回有害。
因此召回头必须让慢旋转(低频)分量占主导,于是这些头在低频维度上出现极大的通道级数值——这就是离群值的主要来源。
另一个吻合的观察:召回头往往伴随更明显的 attention sink。逻辑也顺:如果前文没有需要召回的信息,就通过 sink 把这个头关掉。
由这个视角推出的一些结论#
长文本外推要加大旋转基数:YaRN 的本质就是增大 base。base 越大,最慢分量的频率越低,召回头能覆盖的距离越远——这解释了长文本模型为什么普遍用很大的 base。
Partial RoPE / NoPE 可能更好:既然低频离群值的存在是为了让召回不被 RoPE 干扰,那就干脆让部分维度不加 RoPE(Partial RoPE,DeepSeek-V3、GLM-4.6 在用),或者对特定头禁用 RoPE(NoPE)。Kimi 的做法是在线性注意力头里启用 RoPE、在 MLA 头里用 NoPE,而该关掉哪些头,答案显然是召回头。
slash pattern 是 RoPE 的副作用:MInference 注意到注意力图里存在斜条纹,它有两个特点——与输入语义无关、只取决于序列长度,并且呈准周期性。这正是 qk 的离群通道在 RoPE 下叠加出的周期信号;对着注意力图跑 FFT,峰值频率会和离群值的频率对得上。既然与语义无关,这些斜线的信息价值其实存疑,但不少免训练稀疏注意力算法仍在刻意保留它。
总结#
LLM 处理长文本的召回模式有点类似人类:先在上下文里搜索相关信息,再做局部推理。召回头要在 RoPE 快分量的干扰下保住召回信号,就不得不在低频维度上放大通道级数值——离群值由此而来。
参考#
- StreamingLLM:https://arxiv.org/abs/2309.17453 ↗
- OpenAI 关于长文本信噪比的工作:https://arxiv.org/abs/2511.13653 ↗
- Anthropic induction heads:https://arxiv.org/abs/2209.11895 ↗
- RazorAttention:https://arxiv.org/abs/2407.15891 ↗
- 通道级离群值相关工作:https://arxiv.org/abs/2502.01563 ↗
- MInference:https://arxiv.org/abs/2407.02490 ↗
- DoPE:https://arxiv.org/html/2511.09146v1 ↗