Massive Activations in Large Language Models
作者: Mingjie Sun, Xinlei Chen, J. Zico Kolter, Zhuang Liu
机构: Carnegie Mellon University, Meta AI Research, Bosch Center for AI
图 1: LLaMA2-7B中的激活值幅度(z轴)。x和y轴分别是序列维度和特征维度。对于这个特定模型,我们观察到具有巨大激活值的激活出现在两个固定的特征维度(1415, 2533),以及两种类型的词元(token)上——起始词元,以及第一个句号(.)或换行符(\n)。
A1 主要贡献
本文发现并研究了大型语言模型(LLMs)内部表征中一个令人惊讶的现象:极少数激活值表现出异常巨大的量级,我们称之为“巨量激活”(massive activations)。
-
核心问题与研究目标:在LLMs的隐藏状态中,存在某些激活值的量级远超其他激活值(例如,比中位数大4个数量级以上),尽管模型中存在归一化层。本研究旨在揭示这一现象,探究其存在性、位置、功能及其内在机制。
-
核心贡献与创新点:
- 证明普遍存在性:本文证明了巨量激活在各种不同模型大小和家族的LLMs中广泛存在,并非个例。
- 定位与特性:系统地刻画了巨量激活的位置。在模型深度上,它们通常在初始几层后突然出现,并在最后几层减弱。在特征维度上,它们出现在少数固定的、与输入无关的维度中。在序列维度上,它们常与起始词元和分隔符词元(如句号、换行符)相关联。本文还明确区分了巨量激活与先前已知的“离群特征”(outlier features)。
- 揭示功能:作为偏置项:通过干预实验证明,巨量激活在LLMs中扮演着固定但至关重要的偏置项(bias terms)角色。将仅仅四个巨量激活置零会导致模型性能灾难性崩溃,而将它们设置为其经验均值则对模型性能无影响。
- 关联自注意力机制:揭示了巨量激活与自注意力机制之间的紧密联系。它们导致注意力概率高度集中于其所在的词元,进而使这些词元在注意力输出的计算中形成隐式的偏置项。
- 提出消除方法:实验证明,通过在自注意力机制中显式地增加额外的偏置项(可学习的键和值嵌入),可以使LLMs在预训练阶段不再学习产生巨量激活。
- 泛化至视觉Transformer (ViTs):研究发现,巨量激活现象同样存在于ViTs中,并且它们也起到固定偏置的作用。此外,本文将巨量激活与最近提出的“寄存器词元”(register tokens)联系起来,为寄存器词元的功能提供了不同于原始论文的解释。
A3 背景知识与关键发现
我们研究自回归Transformer,它由L个解码层堆叠而成。每个层ℓ接收前一个隐藏状态$h^{ℓ−1} \in R^{T \times d}$作为输入,并输出一个隐藏状态$h^ℓ \in R^{T \times d}$,其中T是词元数量,d是特征数量。Transformer层使用残差连接【索引19,Deep residual learning for image recognition+2016+CVPR】,其计算可表示为:
其中$F^ℓ$是残差变换,包括注意力和MLP块。一个激活值指的是隐藏状态中的一个标量值。除非特别说明,我们研究的激活值是$h^ℓ$,即残差求和的输出,而非$F^ℓ$内部的任何中间状态。
巨量激活的普遍存在。我们从LLaMA2-7B的一个示例开始。在图1中,我们可视化了模型中间层的隐藏状态$h^ℓ$。我们向模型输入短句,并可视化激活值的幅度(z轴),其中x和y轴分别对应序列和特征维度。每个蓝色行对应一个词元的特征嵌入。我们观察到多达四个激活值具有显著大的幅度。最大的激活值(约2000)大约是中位数幅度(约0.2)的10,000倍。这些激活值的巨大规模使其脱颖而出,因此我们称之为巨量激活。
图 2: LLaMA2-13B中的巨量激活。在该模型中,它们出现在两个固定的特征维度(2100, 4743),并且仅限于起始词元。
图 3: Mixtral-8x7B中的巨量激活。在该模型中,它们位于两个特征维度(2070, 3398),并存在于起始词元、分隔符词元以及某些词语词元(“ and”和“of”)中。
巨量激活的广泛性。巨量激活并非LLaMA2-7B所特有,而是在LLMs中广泛观察到的现象。在图2和图3中,我们展示了LLaMA2-13B和Mixtral-8x7B【索引27,Mixtral of experts+2024+arXiv】中也存在巨量激活。值得注意的是,对于Mixtral-8x7B,最大的激活值幅度可以达到7,000,比中位数特征幅度(约0.3)大约4个数量级。更多关于预训练和微调LLMs的结果请参见附录A。
巨量激活的特性。我们总结了巨量激活的两个主要特性。最显著的特性是这些激活值拥有巨大的数值,其幅度远大于其他激活值,通常比中位数值大几个数量级。另一个特性是它们的数量极其稀少。对于图1中的LLaMA2-7B,每个展示的隐藏状态中大约有40,000个总激活值,但最多只能识别出四个巨量激活。
量化定义巨量激活。我们量化地呈现了顶部激活值的幅度,如表1所示。我们同时提供一个宽松但广泛的定义:如果一个激活值的幅度超过100,并且至少是其所在隐藏状态中位数量级的1000倍左右,那么它就符合巨量激活的条件。我们发现这个标准能有效地在各种LLMs中识别出我们关注的这些激活值,它们在表1中以粗体标出。
表 1: 三个LLM在某个隐藏状态下,五个最大、前1%和10%以及中位数的激活值幅度。被认为是巨量激活的值已用粗体突出显示。
分析设置。接下来,我们确定巨量激活在LLMs中的位置。为了进行全面分析,我们不再使用短句作为输入,而是从RedPajama数据集【索引52,Redpajama: an open dataset for training large language models+2023+URL:https://github.com/togethercomputer/RedPajama-Data】中收集了100个序列(每个序列包含4,096个词元)。我们在这些序列上运行LLMs,并收集每一层的隐藏状态。
2.1 哪些层?
巨量激活在层间的分布。我们确定哪些层的输出隐藏状态表现出巨量激活。在图4中,我们可视化了每层输出隐藏状态的三个最大激活值幅度和中位数幅度,结果是在100个序列上平均得到的。我们检查了三个模型:LLaMA2-7B、13B和Phi-2【索引25,Phi-2: The surprising power of small language models+2023+URL:https://www.microsoft.com/en-us/research/blog/ phi-2-the-surprising-power-of-small-language-models/】(更多LLMs见附录A.4)。在所有情况下,对于大多数中间层,前三个最大的激活值都来自隐藏状态中的相同位置。总的来说,我们观察到:1. 巨量激活在大部分中间层中存在,并且其值基本保持恒定。2. 它们在初始几层出现,并在最后几层开始减弱。
图 4: LLMs中每一层的三个最大激活值幅度及中位数幅度。
突然出现而非累积形成。在LLaMA2-7B中,巨量激活首次出现在第2层,并保持近乎恒定的值直到第30层。有趣的是,对于LLaMA2-7B和13B,巨量激活是在单层计算后非常迅速地出现的,例如分别在第2层和第4层之后。这意味着它们不是通过多层逐渐累积的结果,而是由一种相当不同的机制引起的。
2.2 哪些特征和序列维度?
定位巨量激活的具体位置。我们确定巨量激活在隐藏状态内的位置,即它们的特征和序列维度。由于我们已经证明它们的值在中间层基本保持不变,我们选择任意一个这样的层进行分析。
-
LLaMA2-7B的位置。在这个模型中,巨量激活被识别在两个特征维度(1415和2533)。关于序列维度,我们发现巨量激活出现在:1. 起始词元;2. 序列中第一个句号(.)或换行符(\n)的词元。图1展示了LLaMA2-7B的这些发现,这在长序列上也保持一致。当输入包含“.”或“\n”词元时,会观察到四个巨量激活。在没有这两种词元的少数情况下,我们能看到两个巨量激活,都与初始词元相关。
-
LLaMA2-13B的位置。我们发现该模型中的巨量激活始终出现在两个特征维度,即2100和4743。这些激活值完全位于序列的起始词元内,无论其语义如何。图2展示了LLaMA2-13B中的这些行为。对于任何给定的输入序列,只存在两个巨量激活,分别对应第一个词元的特征2100和4743。
-
Mixtral-8x7B的位置。对于这个模型,巨量激活位于两个特征维度,即2070和3398。在序列维度上,我们发现它们与起始词元、分隔符词元以及某些词语词元相关联,例如词元“and”和“of”。这些词语词元往往是连词和介词,表示相对较少的语义。图3展示了Mixtral-8x7B中的这些模式。通常,对于长度为4096个词元的输入,这些词元主要位于序列的早期部分。
位置总结。我们将对上述三个模型之外的LLMs的发现进行总结,并根据经验观察将其他模型进行分类。
- 特征维度:巨量激活始终存在于极少数固定的维度中。
- 序列维度:我们根据巨量激活的位置将LLMs分为三类:
a) 仅起始词元:包括LLaMA2-13B, MPT和GPT-2。
b) 起始词元和第一个“强”分隔符词元(即“.”或“\n”):包括LLaMA2-7B和LLaMA2-7B-Chat。
c) 起始词元、分隔符词元(如“.”、“\n”、“’”或“,”)以及某些弱语义词元(如“and”、“from”、“of”或“2”):包括LLaMA2-70B, Mistral-7B, Mixtral-8x7B, Falcon-40B和Phi-2。
2.3 与离群特征的区别
区分巨量激活与离群特征。在了解了巨量激活的性质和位置之后,我们现在讨论它们与离群特征(outlier features)之间的区别,后者是LLMs中一个看似相似的现象。Dettmers等人【索引14,LLM.int8(): 8-bit matrix multiplication for transformers at scale+2022+NeurIPS】已经确定了LLMs中存在以大幅值为特征的离群特征。
概念上的差异。从概念上讲,一个巨量激活是一个标量值,由序列和特征维度共同决定;相比之下,一个离群特征是一个向量,对应于所有词元的激活值。此外,巨量激活仅出现在极少数的词元上,而离群特征则期望其维度内的大部分激活值都很大。
实践中的非重叠性。在实践中,我们发现巨量激活与离群特征的维度并不重叠。我们使用Dettmers等人【索引14,LLM.int8(): 8-bit matrix multiplication for transformers at scale+2022+NeurIPS】的定义来识别LLaMA2-7B和13B中的离群特征:如果一个特征在超过25%的层和6%的词元上,激活值幅度超过6.0,并且这种情况在100个序列中出现超过90个,则该特征被视为离群特征。我们分别在这两个模型中发现了10个和25个离群特征。然而,它们中没有一个对应于巨量激活的特征维度。
3. 巨量激活在LLMs中充当偏置项
探究巨量激活的功能角色。虽然我们已经证明了巨量激活的存在并确定了它们的位置,但它们在LLMs中的功能角色尚不清楚。它们对内部计算重要吗?还是它们只是没有效果的冗余激活?本节将更深入地研究LLMs来回答这些问题。与之前的被动观察不同,我们采取更主动的方法,通过修改巨量激活来检验其如何影响LLMs的外部行为。
巨量激活的低方差特性。我们首先测量了巨量激活在不同输入序列间的方差。除了巨量激活,我们还根据平均幅度选择了另外三个位置,分别对应于隐藏状态内的前1%/10%和中位数。在表2中,我们展示了LLaMA2-7B和13B在100个序列中这些位置激活值的均值和标准差。我们发现,与其它激活值相比,巨量激活值的方差相对于其均值要小得多。
表 2: 隐藏状态内2个最大、前1%、前10%及中位数幅度的激活值在不同位置的均值和方差。我们发现巨量激活的变化远低于其他激活。
干预实验设置。我们通过干预一个层中的巨量激活来修改LLMs的推理过程——对于一个展现出巨量激活的隐藏状态,我们手动将这些激活值设置为选定的固定值。然后将修改后的隐藏状态输入到下一层,之后的计算照常进行。我们在LLaMA2-7B和13B中修改巨量激活。我们评估了在WikiText、C4和PG-19上的困惑度,以及在BoolQ、PIQA、WinoGrande、Arc-Easy和Arc-Challenge上的平均零样本准确率。对每个模型,我们在巨量激活首次出现的隐藏状态上进行一次干预。这对应于LLaMA2-7B的第2层和LLaMA2-13B的第4层。
表 3: LLaMA2-7B和13B中巨量激活的干预分析。我们将巨量激活设置为固定值,并评估干预后模型的困惑度(↓)和零样本准确率(%,↑)。
置零实验:验证其关键性。我们评估没有巨量激活的LLMs的性能。我们在它们首次出现时,将隐藏状态中的值设为零,即从干预后的LLMs中移除巨量激活。结果(表示为“Set to zero”)显示在表3中。有趣的是,模型性能出现了显著下降,例如困惑度爆炸。作为对比分析,我们将相同数量的激活值——那些平均幅度接近中位数幅度的激活值——同样设为零。我们发现这没有导致性能下降。这些结果凸显了巨量激活在LLMs内部计算中扮演的关键角色。
置为均值实验:验证其偏置作用。我们移除了巨量激活值中的微小方差。具体来说,我们将巨量激活的值调整为其经验均值。该均值是在RedPajama的100个序列上计算的。这项干预的结果(表示为“Set to mean”)显示在表3中。我们发现困惑度和零样本准确率几乎没有变化。这表明它们的值是恒定的且与输入无关,即功能上类似于偏置项。
核心发现总结。我们的发现可以总结为:巨量激活在LLMs中充当固定但重要的偏置项。
对巨量激活位置的解释。这些激活值作为偏置的特性,或许可以解释为什么LLMs将它们存储在特定的层和词元上:
- 起始词元:这些激活值倾向于出现在起始词元,可能是因为每个自回归训练实例都包含一个初始词元。由于LLMs基于下一个词的预测,起始词元是序列中所有前向传播过程都会使用的唯一词元。
- 分隔符词元:这些激活值存在于分隔符词元中,可能是由于这些词元的语义价值相对较低,使得它们成为存储此类偏置的低成本选择。相反,如果将具有丰富语义的词元重新用于存储偏置,则可能会导致输入信息的重大损失。
- 出现于初始几层之后:巨量激活仅在最初几层之后出现,可能是因为LLMs需要一些初始层来处理与巨量激活相关的词元的含义。在这些层中,它们的语义可能通过自注意力机制转移到其他词元位置,并在此后的计算中得以保留。
A2 方法细节
本节中,我们将探索并研究LLMs中巨量激活的内部机制,特别是其与自注意力的关系。
4.1 注意力集中于巨量激活
巨量激活出现前后的注意力模式对比。我们观察到,在LLMs中,巨量激活出现前后的注意力模式存在显著差异。图5展示了LLaMA2-7B中每层所有注意力头(head)的平均注意力对数(softmax前)。输入是来自MMLU【索引23,Measuring massive multitask language understanding+2021+ICLR】的一个提示:“ The following are multiple choice questions (with answers) about machine learning.\n\n ...”。回顾一下,在LLaMA2-7B中,巨量激活首次出现在第2层的输出中(见图4)。我们发现在第3层及更深的层(例如第31层),注意力主要集中在与巨量激活相关的两个词元上。我们的观察结果在各种LLMs中也具有一致性。图6展示了在相同输入下,LLaMA2-13B和Phi-2中类似的注意力集中模式。更多LLMs的结果请参见附录B.1。
图 5: LLaMA2-7B中巨量激活出现前后的注意力模式。对于每一层,我们可视化了输入序列在所有注意力头上的平均注意力对数(softmax前的未归一化分数)。
图 6: LLaMA2-13B(左)和Phi-2(右)中巨量激活出现后的注意力模式。
注意力对数值的分布模式。我们注意到,不同模型在注意力对数值的分布上存在一致的模式。在图5和图6中,巨量激活出现后,许多注意力对数值趋向于负值。它们主要由不含巨量激活的词元的查询(query)和键(key)状态之间的内积计算得出。然而,当键状态属于与巨量激活相关的词元时,得到的注意力对数值是略微正的。因此,在注意力softmax(沿每行计算)中,这些特殊的注意力对数值将吸引大部分的注意力概率。
与“注意力汇”(attention sinks)的联系。最近,Xiao等人【索引59,Efficient streaming language models with attention sinks+2023+arXiv】指出LLMs会大量关注起始词元。我们在图6a中对LLaMA2-13B的发现与他们的结果一致。经验上,我们发现在那些巨量激活仅存在于起始词元的LLMs中,这一结论是成立的。然而,我们对LLaMA2-7B和Phi-2的结果表明,LLMs也会将大量注意力分配给其他与巨量激活相关的词元。此外,我们的结果揭示了这些注意力集中模式出现的更深层原因。
4.2 巨量激活施加隐式注意力偏置
深入注意力块的计算机制。在这一部分,我们深入研究注意力块内部的计算,并证明LLMs使用巨量激活来在自注意力中强制施加一个隐式的偏置项。
注意力LayerNorm和QKV投影。我们研究巨量激活对自注意力中查询、键和值状态(Q/K/V)的影响。在LLMs中,每层的输入特征会先经过层归一化(LayerNorm)【索引3,Layer normalization+2016+arXiv】,然后通过线性投影转换为查询、键和值状态,如图7a所示。这种设计选择始于GPT-2【索引42,Language models are unsupervised multitask learners+2019+Technical Report】并被现代LLMs广泛采用。
图 7: 从输入隐藏状态到查询、键和值状态的激活轨迹。
激活轨迹的可视化。图7b可视化了该示意图中计算的所有隐藏状态(LLaMA2-7B,第3层)。我们发现,在所有阶段,与巨量激活相关的两个词元的特征都与其他词元截然不同。具体来说,在第一个“normalize”步骤之后,这两个词元的嵌入呈现为一个稀疏向量,带有两个明显的非零元素。值得注意的是,随后的QKV状态在每个嵌入内部表现出相当小的变化。我们推测注意力LayerNorm可能在此过程中起到了关键作用(进一步讨论见附录B.2)。
注意力输出分解。鉴于注意力也集中在与巨量激活相关的词元上(第4.1节),我们因此隔离这些词元,研究它们对注意力输出(注意力矩阵与值向量相乘的结果)的影响。在公式2中,我们将每个词元k的注意力输出分解为两部分:来自注意力集中的词元集合C的价值更新;以及从其他词元聚合的价值更新。
其中$p_{ki}$是查询词元k对词元i的注意力分布,$v_i$是词元i的值状态。
图 8: 来自与巨量激活相关词元的价值更新基本相同。
价值更新作为偏置项。图8可视化了LLaMA2-7B中分解后的价值更新和注意力输出,输入提示为“Summer is warm. Winter is cold.”。在这种情况下,集合C由词元“Summer”和第一个句号词元组成。我们可以看到,来自C的价值更新在不同词元间几乎是相同的,即它们充当了加性偏置项,尽管这并非显式施加的。此外,我们注意到这种价值更新模式在各种输入中都惊人地相似。更多分析请参见附录B.3。总的来说,我们的结果表明,LLMs使用巨量激活将大量注意力分配到某些词元上。然后,这些词元被用来在计算注意力输出时形成一个恒定的偏置项。
4.3 显式注意力偏置消除巨量激活
引入显式注意力偏置。鉴于LLMs在预训练期间有强烈的需求去学习隐式注意力偏置,我们因此尝试直接用额外的偏置项来增强自注意力。有趣的是,我们发现增强了显式注意力偏置的模型不会表现出巨量激活。
显式偏置的公式。我们的想法是显式地建模这种注意力偏置,但不是通过重新利用输入序列中已有的词元。因此,我们为每个注意力头引入额外的可学习参数$k', v' \in R^d$。具体来说,给定输入查询、键和值矩阵$Q, K, V \in R^{T \times d}$,带有显式注意力偏置的增强注意力计算如下:
其中$k'$和$v'$分别与键和值矩阵K/V拼接。所提出的注意力机制可以作为标准注意力的直接替代品,而无需修改Transformer的其他部分,例如位置嵌入和MLP块。
实验结果:显式偏置消除了巨量激活。我们训练了三个GPT-2模型:标准模型、在输入前添加了一个sink token的GPT-2【索引59,Efficient streaming language models with attention sinks+2023+arXiv】以及带有显式注意力偏置的GPT-2。训练设置详见附录B.4。我们发现这三个模型在收敛时性能相同,但在巨量激活的状态上差异显著,如图9所示。值得注意的是,在带有显式注意力偏置的GPT-2中,与默认的GPT-2和带有sink token的模型相比,巨量激活消失了。
图 9: 当使用显式注意力偏置(公式3)训练GPT-2时,巨量激活消失。
最大激活值随层数的变化。图10展示了每个层输出特征的三个最大激活值幅度。值得注意的是,在引入显式注意力偏置后,GPT-2中的顶部激活值幅度随着层数加深而逐渐增加。这些结果表明,显式注意力偏置消除了LLMs在预训练阶段产生巨量激活的必要性。我们将研究我们替代性注意力公式的其他方面,如训练稳定性【索引56,Small-scale proxies for large-scale transformer training instabilities+2023+arXiv】,作为未来的工作。
图 10: 三个GPT-2模型中每一层输出特征的三个最大激活值幅度。
本节发现总结。
巨量激活与自注意力机制相关联。LLMs使用巨量激活将大量注意力集中在极少数词元上,从而在注意力计算中注入隐式偏置项。此外,通过使用显式注意力偏置来增强LLMs,可以消除巨量激活。
5. 视觉Transformer中的巨量激活
研究ViT中的巨量激活。在本节中,我们研究视觉Transformer(ViTs)【索引16,An image is worth 16x16 words: Transformers for image recognition at scale+2021+ICLR】是否也表现出巨量激活。我们注意到,虽然ViTs和LLMs都基于自注意力,但ViTs采用全局词元混合,这与LLMs的自回归特性形成对比。
ViTs中的巨量激活现象。我们探索了几个基于ViT的模型家族:CLIP【索引43,Learning transferable visual models from natural language supervision+2021+arXiv】、MAE【索引20,Masked autoencoders are scalable vision learners+2021+arXiv】和DINOv2【索引39,Dinov2: Learning robust visual features without supervision+2024+arXiv】。我们检查了这些家族中的ViT-L模型。图11展示了输入图像在倒数第二层的激活值幅度。我们发现,在CLIP和DINOv2 ViT-L中存在巨量激活,我们高亮了相应的序列维度。在这两个模型中,有极少数(少于四个)激活值的幅度显著大于其他激活值。此外,这些激活值位于特定的特征维度,并出现在随机的图像块(patch)词元上。然而,在MAE ViT-L中我们没有观察到巨量激活。在该模型中,一个特征维度(927)在所有词元上都表现出一致的大值。
图 11: 在CLIP和DINOv2的ViT-L中存在巨量激活,但在MAE中不存在。
ViTs中的巨量激活作为偏置项。图13显示了CLIP和DINOv2 ViT-L中每层的三个最大激活值幅度和中位数,结果在1000张图像上取平均。我们发现,巨量激活在不同图像中持续存在,并且它们的值在均值附近基本保持不变。值得注意的是,与LLMs不同,巨量激活仅在ViTs的后期阶段开始出现。
图 13: CLIP和DINOv2 ViT-L中每一层的三个最大激活值幅度及中位数幅度。
表 4: CLIP ViT-L中巨量激活的干预分析。
ViT干预实验。遵循我们在第3节中的方法,我们对CLIP ViT-L进行了干预分析。我们分别将两个最大的巨量激活修改为零和均值。干预在第13层进行,这是该模型中巨量激活首次出现的地方。结果显示在表4中,我们评估了在ImageNet上的零样本准确率。我们可以看到,将巨量激活设置为零导致准确率显著下降,而设置为其均值则导致准确率下降可忽略不计。这些结果表明,巨量激活在ViTs中作为固定但关键的偏置项发挥作用,与我们在第3节中的观察结果一致。
寄存器作为ViT中的偏置。最近,Darcet等人【索引12,Vision transformers need registers+2023+arXiv】提出用额外的可学习词元来增强标准ViT,他们称之为寄存器词元(register tokens)。他们表明,用寄存器词元训练ViT可以得到更平滑的注意力图,并且得到的模型家族(即DINOv2-reg)在下游任务上的性能优于DINOv2。在检查DINOv2-reg中最大的ViT-G模型时,我们观察到巨量激活的存在,如图14所示。然而,与标准ViT不同,巨量激活并非出现在图像块词元中,而是完全出现在一个固定的寄存器词元内,即寄存器3。这表明该模型使用寄存器3来存储这些激活值。图16可视化了最后一层[CLS]词元的注意力分布。我们发现大部分注意力都分配给了寄存器3,这与我们之前在注意力模式上的发现相呼应(第4.1节)。
图 14: DINOv2-reg ViT-G。
图 16: [CLS]词元的平均注意力。
表 5: 我们将每一层的所有寄存器特征固定为其均值,并评估干预后的ViT。
寄存器干预实验。此外,我们进行干预分析来研究寄存器的作用。我们将每一层输出的所有寄存器特征替换为它们的均值,该均值在10,000张ImageNet训练图像上计算得出。这种干预消除了寄存器聚合全局输入信息的预期目的【索引12,Vision transformers need registers+2023+arXiv】。表5显示了结果。我们发现,具有固定寄存器特征的ViT实现了与原始模型相当的准确率,这表明寄存器在ViT中充当学习到的偏置。这导致寄存器词元处的键和值状态是恒定的,有效地向自注意力引入了偏置项(公式3中的额外k'和v')。因此,带有寄存器词元的ViT在功能上等同于一个用显式注意力偏置增强的标准ViT。
本节发现总结。
巨量激活存在于许多但并非所有的ViT中。与LLMs中的类似,这些激活充当恒定偏置。我们还表明,最近提出的寄存器词元也具有类似的功能。
A4 实验
实验环境
-
数据集
- LLM分析与训练: 使用RedPajama数据集的100个长序列(每个4096词元)进行分析。GPT-2模型在OpenWebText2数据集上进行训练。
- LLM评估: 使用WikiText, C4, PG-19评估困惑度;使用BoolQ, PIQA, WinoGrande, Arc-Easy, Arc-Challenge评估零样本准确率。
- ViT分析与评估: 使用ImageNet数据集。
-
模型架构
- LLMs: LLaMA2 (7B, 13B, 70B), LLaMA3 (8B, 70B), Mixtral-8x7B, Mistral-7B, Phi-2, MPT-7B, Falcon-7B, 以及从头训练的GPT-2模型。详细信息见附录表7。
- ViTs: CLIP (ViT-L), MAE (ViT-B/L), DINOv2 (ViT-S/B/L/G), DINOv2-reg (ViT-G)。详细信息见附录表8。
-
硬件与软件配置
- 硬件: 论文未明确提及具体的硬件配置(如GPU型号/数量)。
- 软件: GPT-2的训练基于NanoGPT代码库【索引28,Nanogpt+2023+URL:https://github.com/karpathy/nanoGPT】。
实验结果
-
巨量激活的存在性与定位
- 实验内容: 在多种LLMs和ViTs中可视化中间隐藏层的激活值幅度。
- 实验结果: 在绝大多数被测LLMs和部分ViTs(如CLIP, DINOv2)中,均观察到少数激活值幅度远超其他激活值的现象(图1, 2, 3, 11)。这些巨量激活在LLM的中间层突然出现并保持恒定,在ViT的后几层出现(图4, 13)。它们位于固定的特征维度,但在LLM中与特定语义较弱的词元(起始词元、分隔符)相关,在标准ViT中与随机的图像块词元相关。
-
巨量激活的功能验证(干预实验)
- 实验内容: 在LLaMA2和CLIP ViT-L中,将巨量激活的值手动设置为零或其经验均值,并评估模型性能。
- 实验结果: 将巨量激活置零会导致模型性能灾难性下降(困惑度爆炸或准确率骤降);而将其设置为均值则对性能几乎无影响(表3, 4)。
- 分析结论: 结果强有力地证明了巨量激活在模型中扮演着固定但至关重要的偏置项(bias terms)角色。
-
巨量激活与自注意力机制的关系
- 实验内容: 对比巨量激活出现前后层的注意力图,并分解注意力输出的计算过程。
- 实验结果: 巨量激活出现后,注意力会高度集中于其所在的词元(图5, 6)。对注意力输出的分解表明,来自这些被高度关注词元的价值(value)更新部分,对于所有查询词元来说几乎是恒定的(图8)。
- 分析结论: LLMs利用巨量激活来集中注意力,从而在注意力计算中隐式地注入一个与输入内容无关的偏置项。
-
通过显式偏置消除巨量激活
- 实验内容: 训练一个修改版的GPT-2模型,其自注意力机制中加入了额外的可学习键/值向量($k', v'$)作为显式偏置。
- 实验结果: 经过训练后,这个带有显式偏置的GPT-2模型不再产生巨量激活现象,且其性能与标准GPT-2模型相当(图9, 10)。
- 分析结论: 在模型中提供显式的偏置机制,可以满足其对偏置的需求,从而避免了通过学习产生巨量激活。
-
ViT中的寄存器词元分析
- 实验内容: 分析DINOv2-reg ViT-G中的巨量激活位置,并对寄存器词元进行干预实验。
- 实验结果: 巨量激活唯一地出现在一个固定的寄存器词元上(图14)。将所有层的寄存器特征固定为其在大量数据上的均值,模型的性能几乎不受影响(表5)。
- 分析结论: 寄存器词元的功能与巨量激活类似,也是作为一种学习到的偏置项存在,这为寄存器词元提供了一个新的功能解释。
A5 结论
研究总结。对大型Transformer进行自回归训练在自然语言处理领域取得了重大进展。本研究揭示了这些大型语言模型(LLMs)中广泛存在巨量激活的现象。尽管数量极其稀少,但这些激活值对模型性能至关重要,且其值与输入无关。我们建立了巨量激活与自注意力机制之间的紧密联系,并表明LLMs利用它们来实现一种隐式的注意力计算偏置。我们的发现同样很好地推广到了视觉Transformer(ViTs)。我们希望本研究中提出的新结果有助于更深入地理解当今的大规模基础模型。
实践意义与未来方向。我们讨论了这项工作的一些实际意义和未来方向。
1. LLM量化:具有大幅值的激活值的存在已被广泛认为是有效量化LLMs的主要挑战【索引14,LLM.int8(): 8-bit matrix multiplication for transformers at scale+2022+NeurIPS】、【索引58,Smoothquant: Accurate and efficient post-training quantization for large language models+2023a+ICML】。本文识别了LLMs中一种新型的离群激活值,我们希望我们的发现能对LLM压缩的研究有所裨益。
2. 模型可解释性:将过多注意力概率分配给少数固定词元的注意力图可能不利于机理可解释性【索引37,In-context learning and induction heads+2022+Transformer Circuits Thread】。我们提出的注意力公式可以使LLMs中产生的注意力图更具可解释性,并可能有利于下游应用【索引12,Vision transformers need registers+2023+arXiv】。
3. 大规模训练:我们对新注意力公式的研究主要集中在其对巨量激活的影响上,并且由于计算资源限制,我们的实验仅限于一个小型的GPT-2模型。观察我们的结果如何推广到更大规模的模型,以及我们的注意力公式如何影响现代LLMs的训练稳定性【索引56,Small-scale proxies for large-scale transformer training instabilities+2023+arXiv】,将是很有趣的。
A6 附录
A 更多关于LLMs中巨量激活的结果
A.1 预训练LLMs。我们在LLaMA2-70B, LLaMA3, Phi-2, Mistral-7B, MPT-7B和Falcon-7B等更多预训练模型中展示了巨量激活的存在。结果(图17-23)表明,巨量激活在这些模型中普遍存在且特性与正文描述一致。有趣的是,在LLaMA2-70B中,巨量激活出现在代表数值的词元上(如“0”和“2”)。此外,Mistral-7B和Mixtral-8x7B中巨量激活的特征维度相同(2070),暗示后者可能是基于前者微调而来。
图 17: LLaMA2-70B中的巨量激活。
... (图18-23展示了其他模型的类似结果)
A.2 微调LLMs。我们证明了在指令微调后的聊天模型(如LLaMA2-Chat, Mistral-Instruct)中,巨量激活依然存在。其值和位置与原始预训练模型大体相同(图24-27)。一个例外是Mixtral-8x7B,微调后换行符“\n”上的巨量激活消失了。
图 24: LLaMA2-7B-Chat中的巨量激活。
... (图25-27展示了其他微调模型的结果)
A.3 BOS Token <s>。当在输入序列前添加BOS(Beginning of Sequence)词元<s>时,巨量激活依然存在。在LLaMA2模型中,其位置不受影响;但在Mixtral-8x7B中,一些巨量激活转移到了BOS词元上(图28-30)。
图 28: 当输入前添加BOS词元<s>时,LLaMA2-7B中的巨量激活。
... (图29-30展示了其他模型的结果)
A.4 逐层分析。图31提供了本文研究的所有LLMs的逐层分析。结果普遍证实了正文的观察:巨量激活在中间层出现并保持恒定,在初始层出现,在最后一层消失。
图 31: LLMs的逐层分析。
B 更多关于自注意力的结果
B.1 注意力集中于巨量激活。我们为LLaMA2-70B和Mistral-7B提供了更多注意力集中模式的证据(图32, 33)。注意力主要集中在与巨量激活相关的序列维度上。图34展示了注意力softmax后的概率分布,这些特殊词元获得了远高于其他词元的注意力概率。
图 32: LLaMA2-70B在第10, 40, 60层的平均注意力对数。
... (图33-34展示了其他模型的结果)
B.2 注意力LayerNorm。我们深入分析了注意力LayerNorm(包括标准LayerNorm和RMSNorm)在巨量激活影响下的作用。当输入特征向量x中存在少数大幅值激活时,归一化步骤的分母(σ或RMS(x))会变得非常大。这将导致所有正常值被压缩至零,同时保留巨量激活的离群特性,从而产生一个由少数巨量激活决定的、截然不同的归一化特征(图35)。
图 35: LLaMA2-7B和Phi-2中注意力LayerNorm的激活轨迹。
B.3 隐式注意力偏置。我们在多个不同输入和模型层(第3、15、30层)上进一步验证了来自巨量激活相关词元的价值更新(Σ p_ki v_i)的恒定性。结果(图36-38)显示,在同一层中,无论输入序列如何变化,这部分价值更新都表现出惊人的一致性,证实了其作为偏置项的作用。
图 36: LLaMA2-7B第3层在四个输入序列下的价值更新。
... (图37-38展示了其他层的结果)
B.4 显式注意力偏置。我们详细描述了GPT-2的训练设置,并验证了三个模型(标准、带sink token、带显式偏置)收敛后困惑度均为3.04。图39显示,带显式偏置的GPT-2模型将大部分注意力分配给了我们插入的额外k'和v'向量。我们还测试了其他几种注入偏置的方式(如Softmax-off-by-one,增加特征维度偏置,仅增加值偏置),但发现这些替代方案都无法在预训练中消除巨量激活(图40)。
图 39: 默认GPT-2和带显式注意力偏置的GPT-2的注意力分布。
... (图40展示了替代偏置方案的结果)
C 更多关于视觉Transformer的结果
C.1 ViTs中的巨量激活。我们展示了在4个不同输入图像上,CLIP ViT-L、DINOv2 ViT-L和DINOv2-reg ViT-G中的巨量激活情况(图42-44)。对于标准ViT,巨量激活出现在随机的图像块词元上;而对于DINOv2-reg ViT-G,它们固定出现在寄存器3上。
图 42: CLIP ViT-L在4张图像上的巨量激活示例。
... (图43-44展示了其他ViT的结果)
C.2 掩码自编码器中的寄存器是偏置。在MAE中,预训练时添加的“dummy token”在微调时功能上等同于寄存器词元。我们进行了干预实验,将这个词元的特征在所有层中固定为其均值。结果(表6)显示模型性能不受影响,进一步支持了寄存器在ViTs中充当偏置的论点。
表 6: 掩码自编码器(MAEs)中的寄存器是偏置。
C.3 逐层分析。图45-47提供了本文研究的所有ViT的详细逐层分析。与LLMs不同,一些ViT(如MAE ViT-B/L)不表现出巨量激活。在存在巨量激活的ViT中,其跨层趋势也与LLMs不同,例如在DINOv2 ViT-L中,它们在模型后期出现,但在最后一层输出时消失。
图 45: MAE和CLIP中ViTs的逐层分析。
... (图46-47展示了其他ViT家族的结果)
D 模型和数据集
表 7: 本文实验所用LLM模型的相关信息。
表 8: 本文实验所用ViT模型的相关信息。
💬 评论讨论
欢迎在这里分享您的想法和见解!