大模型为什么会产生“离群值”?深度解析RoPE与注意力机制

  • 发布于 2026-01-12
  • 3 次阅读

作者:唐瀚霖,阿里巴巴高级技术专家,开源推理引擎RTP-LLM的核心作者之一,研究方向为LLM和AIGC的高倍压缩和推理加速方案,曾参与DoubleSqueeze, 1bit-Adam, RazorAttention等工作。

团队介绍

RTP-LLM是阿里巴巴智能引擎团队自研的高性能大模型推理引擎,支持了淘宝、天猫、高德等业务的大模型推理需求。智能引擎源自阿里巴巴搜索、推荐和广告技术,是阿里AI工程领域的先行者和深耕者。团队专注于AI工程系统的建设,主导建立了大数据AI工程体系AI·OS,持续为阿里集团各业务提供高质量的AI工程服务。

RTP-LLM 项目已开源,欢迎交流共建: 

https://github.com/alibaba/rtp-llm

LLM中的离群值是当前大模型量化的最主要挑战,然而其本身的存在价值却很少被人讨论。

本文从Transformers的核心Attention机制的角度出发,揭示了当前LLM涌现异常值和带有RoPE位置编码的Attention之间的内部联系,为新型模型架构设计提供了一个简洁易懂的视角和思路。

离群值:大语言模型(LLM)量化的主要挑战

量化是一种广泛采用的推理加速方法。其核心思想是将浮点数​x\in\mathcal{R}映射到低维空间:

Q[x] = scale * Clamp\left(\left\lfloor\frac{x}{scale}\right\rceil, \min,\max\right)

这里​\lfloor\cdot\rceil是舍入算子。通常,对于 k 位整数量化,我们会设置​\min = -2^{k-1},\max=2^{k-1}。通常我们还会设置​scale=\frac{|x|_{\max}}{2^{k-1}},这意味着我们需要将 x 中的所有数字归一化到​[-2^{k-1}, 2^{k-1}]区间内。然而,LLM内部存在大量离群值(在激活中分步尤其显著,见图1),这给大模型量化带来了很大的挑战。

图1:Llama-13B的激活值中存在大量显著离群值

图2:量化scale难以选取

这里最棘手的部分是如何设置这个 scale。如图所示,这里存在一个两难的问题:

  1. 直接设置​scale=\frac{|x|_{\max}}{2^{k-1}}会造成量化粒度太粗,导致绝大部分数字很难被精确的表示;
  2. 剔除掉离群值,设置​scale=\frac{Top_{99\%}|x|}{2^{k-1}},这可以保证绝大部分数字都被更精确的表示,但是离群值全部被压缩到了一个很小的数字。

从原理上来看,通过牺牲1%的数值表示精度来是的剩下99%的数能够被更精准的表达,听上去是一件很自然的设计。然而,出乎意料的是,这些离群值对于LLM至关重要,许多先前的研究发现直接裁剪这部分离群值会导致 LLM 性能出现灾难性的下降(如图3)。

图3:直接强行将离群值置0会完全破坏LLM精度

因此,几乎所有关于 LLM 量化的工作都在寻找更好的方法来减少这些离群值,或者降低这些离群值的影响。但在本文,我们关注一个更本质的问题:

为什么 LLM 会出现这些离群值,以及它们为什么如此重要。

离群值带来的线索

前人的工作注意到离群值具有以下特征:

1.特别大的离群值只存在于前几个 token 中;

2.离群值的存在本身很重要,而不是它们的量级。将一个离群值从​2000 \to 500几乎没有影响,但将其从​2000 \to 10则会极大地破坏 LLM 的性能。

非常巧合的是,特质1和LLM的另外一个重要特性(attention sink)高度重合。更具体的,很多工作指出LLM 的前几个 token 起到了“注意力汇点”的作用,即这些token往往会被大量token倾注很高的注意力权重,而移除这些汇点同样会破坏 LLM 的性能。这就启发我们试图从attention sink的角度来研究离群值。

Attention Sink:注意力机制中的“空操作”(Non-op)

在 StreamingLLM[](https://arxiv.org/abs/2309.17453)中,作者注意到原始的滑动窗口注意力(SWA)会导致 LLM 胡言乱语。一个简单的修复方法是在计算中包含注意力汇点(即最开始的几个 token)。其背后的核心直觉是,作者发现在某些注意力头中,大多数 token 会将大部分注意力权重分配给汇点 token(见图4)。

图4:Llama2-7B中,多数tokens会将主要注意力权重分配给首token

那么,为什么我们需要这种奇怪的汇点 token 呢?StreamingLLM的作者注意到这些汇点在注意力机制中充当了“空操作”。更具体地说,作者发现这些汇点的 Value 值几乎为零,这意味着注意力输出(​\alpha_{ij} 表示从 token i 到 j 的注意力权重)也基会趋向为0:

o_i = \sum_{j}\alpha_{ij}v_j \approx \sum_{j\in sink} \alpha_{ij}v_j\approx 0

换而言之,当输出消失时,该注意力头对 token i 而言就不发挥作用。这对 LLM 来说是一个非常关键的机制,因为之前的研究已经揭示了某些注意力头可能仅用于特定的关系提取。当不存在这种关系时,该注意力头自然就不应生效。

离群值对注意力汇点至关重要

一个有趣的实验是:如果我们将汇点 token 的离群值设置为正常值(比如从​2000 \to 10),注意力汇点现象就会消失!下图是一个例证。但这是为什么呢?

如何构建注意力汇点(无RoPE)?

想象你是一个 LLM 模型,现在你需要找到一种方法来开发这种汇点机制。在不考虑 RoPE 的情况下,我们有:

\alpha_{ij} \propto q_i^{\top} k_j = \left(W_qx_i\right)^{\top} W_k k_j = x_i^{\top} W_q^{\top} W_k x_j.

如果对于大多数​x_j​q_i^{\top} k_j都非常大,这基本上意味着​W_q^{\top} W_k会将 token 投影到一个与其自身正交但与汇点 token 平行的低维空间中(见下图,汇点 token 的 Key 值与普通 token 非常不同):

图5:sink token的key值与其他token基本正交

所以现在我们知道,开发注意力汇点并不一定需要通道维度的离群值(channel-outlier)。那为什么在 LLM 中这种情况依然会发生呢?

RoPE 才是罪魁祸首

RoPE 是一种广泛用于建模相对距离的技术,而全注意力(Full Attention)被广泛认为有利于提高模型在长文本下的性能。下面我们将挑战这一观点。

全 Softmax 注意力在长文本下信噪比降低

注意力的输出是:​o_i = \sum_j \frac{e^{w_{ij}}v_j}{\sum_k e^{w_{ik}}}。这里​w_{ij}是 token i 和 j 之间的注意力权重。假设我们有一个长文本,结构如下:

“Alice 的关键词是:abcd,xxxxxxx(100万个 token),Alice 的关键词是什么?”

在这种情况下,为了回答关键词,我们期望某些注意力头关注到字母 abcd。这意味着这些注意力头需要将大部分注意力分数分配给召回信息。因此,我们可以将信噪比(SNR)定义为:

​SNR = \frac{e^{w_{i*}}}{\sum_k e^{w_{ik}}} = \frac{e^{w_{i*}}}{e^{w_{i*}} + \sum_{k\neq *} e^{w_{ik}}}

定义​Z:=\sum_{k\neq *} e^{w_{ik}},我们可以看到随着序列长度的增加,​Z也会增加,这意味着 SNR 会持续衰减,导致模型“迷失在不重要的信息中”(参见 OpenAI 最近的工作)[](https://arxiv.org/abs/2511.13653))。

图6:Attention在长序列下存在信噪比下降的问题

LLM 如何处理长文本

现在我们意识到 Softmax 注意力在长文本中会迷失,然而这一点和现实相悖:近期的 LLM 已经证明了其卓越的长文本处理能力。这一现象的答案在 Anthropic 的突破性工作中得到了揭示[](https://arxiv.org/abs/2209.11895)。在这篇论文中,作者发现存在一类特殊的注意力头,被称为归纳头(Induction Heads)。这些头部的逻辑非常简单:它只关注与当前 token 相似的历史 token。

图7:LLM中存在特定attention head负责长文本信息找回

现在我们可以提出一个重要的假设:

为了避免在长文本中迷失,大多数注意力头会关注其相邻 token 加汇点,而少数注意力头负责将远程 token 抓取到当前位置,以便深层网络可以在局部处理这些信息。

验证方法很简单:在[](https://arxiv.org/abs/2407.15891)中,作者首先根据召回得分筛选出前 20% 的注意力头,并丢弃其余头部的远程 KV 缓存。令人惊讶的是,准确率下降不到 3%。然而,如果我们保留 80% 的头部为全注意力,并丢弃那 20% 召回头的 KV 缓存,准确率会下降超过 30%。

RoPE机制与召回头存在冲突

如上文所述,召回头的功能非常简单,它只是为了确保相似的 token 拥有较大的注意力权重。下面我们将看到 RoPE 背后的先验设置对这种远程召回能力有一定的负面影响。

经过 RoPE 处理后,​q_m​k_n之间的注意力权重为:

\alpha_{mn} = \sum_{l=0}^{d/2} |q_{m,l}||k_{n,l}| e^{i\theta_l(m-n)+\phi_{qk}}.

这里​q_{m,l}​k_{n,l}是 Query 和 Key 的第​l个旋转分量,​\theta_l是相应的旋转频率,​\phi_{qk}是 q 和 k 之间的相位偏移。

然而,对于召回头,对于需要被召回的token(假设其位置是​n^*),无论其位置如何,我们都需要 ​\alpha_{mn^*}足够大。这意味着快旋转分量(​\theta_l较大)对召回头是有害的,因为其本身的attention score会随着相对位置变化快速波动。在这种情况下,我们需要慢旋转分量占据主要成分,以保持清晰的召回信号。事实上,如果绘制出来每个 token 的 q 和 k 的通道级分布,就会发现对于召回头,低频分量维度通常拥有非常大的量级。实际上,这种通道级的大量级是离群值出现的关键原因(在[](https://arxiv.org/abs/2502.01563)也提出了类似的观点)。

图8:LLM的key值在低频分量上会出现离群值

另一个非常有意思的观察是:召回头往往会出现更明显的attention sink现象。而这一现象的答案其实现在已经呼之欲出了。对于召回头,如果前文中不存在需要召回的信息,那通过attention sink现象就可以实现“关闭”效应。

到这里,我们其实已经能够弄清楚为什么大模型需要离群值,以及这些离群值对于attention起到了什么作用。

最终结论

由上述讨论可以看出,LLM中的离群值实际上对于attention长程依赖至关重要。更具体的,和人类一样,LLM 处理长文本的方式存在一个显著的召回模式:

  • 首先在先前的上下文中搜索相关信息,然后进行局部逻辑推理;
  • 召回头需要给相关 token 较大的注意力权重,但 RoPE 的快分量会干扰这一召回能力;
  • 为了绕过 RoPE 的副作用,这些召回头需要在低频分量的维度上产生较大的通道级信号,从而导致了离群值。

到此为止,我们已经从一个角度理解了离群值产生原因,下面则是由上述讨论分析得到的一些自然扩展。

扩展讨论

为什么长文本外推需要更大的旋转基数

最广泛使用的上下文窗口扩展方法,即 YaRN,其实质就是增大旋转基数​\theta。由于​\theta_l = \theta^{\frac{-2i}{d}},这意味着最慢的旋转分量的自旋频率为​\theta_{\min} = \frac{1}{\theta}。在这种情况下,为了确保被召回的 token 共享较大的注意力权重,我们需要​\theta_{\min} |m-n| \leq \frac{\pi}{2}。因此,我们可以有把握地预测,对于序列长度​L \geq \frac{\pi \theta}{2},召回准确率将严重下降。这就是为什么长文本 LLM 通常使用非常大的​\theta

Partial RoPE、NoPE可能更好

如上所述,​\frac{1}{\theta}为 LLM 的序列长度设定了上限,一个简单的修复方法是为某些维度设置​\theta=\infty。这种方法被称为 Partial RoPE,即 q 和 k 中的某些维度不使用 RoPE。DeepSeek-V3 和 GLM-4.6 采用了这种策略,先前的研究也发现 Partial RoPE 有利于长文本处理。

除此之外,另一种克服这一缺陷的方法是针对某些注意力头禁用 RoPE(我们称之为 NoPE)。我想你已经猜到哪些头应该使用 NoPE 了。是的,答案是召回头。这种策略在最近的 Kimi 模型中被使用,他们在线性注意力头中启用 RoPE,而在 MLA(Multi-head Latent Attention)头中使用 NoPE。

RoPE 离群值的副作用:斜条状带(Slash Pattern)

在MInference[](https://arxiv.org/abs/2407.02490)中,作者注意到注意力图中存在“斜线模式”(见下方 Qwen3-30B-A3B 某注意力头的精细图谱)。

图9:LLM的自注意力存在slash pattern

通常,近期的免训练稀疏注意力算法会尝试在计算中保留这种斜线模式。但实际上,这些斜线有一些有趣的特征:

  • 斜线模式与输入 token 无关,这意味着它只取决于输入序列长度,而与输入的语义信息无关;
  • 斜线模式呈现出一种准周期性模式。

正如指出的那样,如果这种模式与语义无关,那么其本身对于LLM并不会产生价值。实际上,这种准周期模式正是 qk 离群值在 RoPE 下产生的副作用。假设 qk 中存在某些离群通道,那么在 RoPE 下,这些离群通道的分量满足:

​w_{mn} \approx \sum_{l\in\{outliers\}} L*\mathcal{Re}\left(e^{i\theta_l(m-n)}\right)

这无非是某些旋转分量的叠加结果。实际上,如果你对该头的注意力图运行 FFT(快速傅里叶变换),你会发现峰值频率与离群值的频率一致。