从少样本分类说起
假设你有一个文本分类系统,需要判断用户评论的情感是正面还是负面。传统做法是收集标注数据,微调一个分类器。但如今更常见的做法是:在提示词里给出几个示例,例如“电影很棒:正面”“剧情拖沓:负面”,然后让模型对新的评论“特效惊艳”进行分类。模型没有更新任何参数,却似乎理解了任务。这种能力被称为上下文学习(In-Context Learning, ICL)。
一个自然的疑问是:模型凭什么能从几个示例中“学会”分类?它真的在推理吗,还是在记忆训练数据中的相似片段?Anthropic 的研究团队在 2022 年提出一个具体机制:归纳头(Induction Heads)。他们发现,Transformer 内部存在一种注意力回路,专门负责“复制前文模式并预测后续 token”。少样本分类的许多行为,可能正是这种回路在起作用。
本文以少样本分类为贯穿场景,拆解归纳头的工作原理:它由哪两个注意力头组成,信息如何流动,为什么需要至少两层 Transformer,以及它如何解释模型“举一反三”的能力。随后对比任务向量与函数向量的解释视角,最后讨论归纳头在什么条件下失效,以及工程上如何观察和利用这一机制。
基线:为什么简单记忆不够
要理解归纳头的价值,先看一个更简单的假设:模型只是记住了训练数据中的 n-gram 片段。比如看到“电影很棒”就联想到“正面”,因为训练语料中“很棒”后面常跟正面评价。这种基于局部统计的机制确实存在,Transformer 的单层注意力就能实现类似 bigram 的功能。但少样本分类要求模型处理训练时从未见过的组合——新评论“特效惊艳”不在训练数据中,模型必须从提示词里的示例推断出“惊艳”属于正面词。
如果模型只依赖固定的 n-gram 表,它无法动态适应提示词中的新映射。这正是归纳头超越基线的地方:它不依赖固定的词对,而是根据当前上下文中的重复模式,临时建立“A→B”的映射。在少样本分类中,A 是“电影很棒”这类输入,B 是“正面”标签。当模型看到新的输入“特效惊艳”时,归纳头会寻找上下文中与当前输入相似的 A,并预测对应的 B。
这种机制的关键在于“相似”不是精确匹配,而是模糊的、基于表示的相似。因此归纳头能处理同义改写、不同领域的示例,甚至跨语言的翻译式任务。它把上下文学习从“记住片段”提升为“在线建立映射”。
归纳头的双层注意力结构
归纳头不是单个注意力头,而是由两个注意力头协作构成的回路。在两层纯注意力模型中,第一层有一个“前一个 token 头”(previous token head),它的作用是把当前位置的前一个 token 的信息复制到当前位置。第二层才是真正的归纳头,它利用第一层留下的信息,去查找序列中与当前 token 相同或相似的位置,并关注那个位置之后的 token。
以序列 [A][B] ... [A] 为例,当模型处理最后一个 [A] 时,前一个 token 头会把 [A] 的信息写入当前位置的表示。归纳头的查询(query)基于这个表示,而它的键(key)则来自序列中其他位置。由于第一层已经为每个 token 附加了“前一个 token 是谁”的信息,归纳头可以找到那些“前一个 token 也是 A”的位置,即序列开头的 [A],然后关注它后面的 [B]。最终,模型预测下一个 token 是 [B]。
这个过程可以形式化为:给定当前 token 的表示,归纳头计算与所有历史位置的注意力分数,其中历史位置 j 的键包含了 token j 及其前一个 token 的信息。当历史位置 j 的前一个 token 与当前 token 相似时,注意力分数高,模型从位置 j+1 的 value 中提取信息,用于预测。
下图展示了这一信息流动过程:
flowchart TD
A[输入序列 A B ... A] --> B[第一层: 前一个token头]
B --> C[每个位置携带前一个token信息]
C --> D[第二层: 归纳头计算注意力]
D --> E{当前token与历史位置的前一个token是否相似?}
E -- 是 --> F[关注历史位置之后的token B]
E -- 否 --> G[注意力分散, 预测依赖其他机制]
F --> H[输出预测: 下一个token为B]
在少样本分类中,序列可以看作 [示例1输入][示例1标签] ... [新输入]。归纳头会找到与新输入相似的示例输入,并关注其后的标签 token,从而预测新输入的标签。
为什么需要两层:组合的必要性
归纳头的形成依赖于注意力头的跨层组合,因此至少需要两层 Transformer。单层模型只有一次注意力计算,无法实现“先复制前一个 token,再查找相似前缀”的两步操作。Anthropic 的论文指出,单层纯注意力模型只能实现 bigram 和 skip-trigram 统计,无法形成归纳头。
这种组合的必要性也解释了为什么训练过程中归纳头的出现会伴随一个“相变”。研究者在训练不同规模的 Transformer 时发现,训练损失曲线早期会出现一个凸起,此时上下文学习能力突然提升约 250%,同时归纳头开始形成。这个相变只发生在多层模型中,单层模型永远不会出现。
从工程角度看,这意味着上下文学习能力不是平滑涌现的,而是某个训练阶段内突然建立的。如果模型训练不足,可能尚未形成归纳头,少样本分类能力会很弱;一旦跨过相变,能力显著增强。这为模型训练提供了可观测的信号:监控训练损失曲线上的凸起,可以判断模型是否已获得上下文学习能力。
归纳头如何实现“模糊”模式匹配
归纳头的核心优势在于它处理的是“模糊”相似,而非精确匹配。在少样本分类中,示例输入和新输入很少完全相同,例如“电影很棒”和“特效惊艳”共享“正面”语义,但字面不同。归纳头如何识别这种相似?
关键在于 token 的表示向量。经过多层处理后,相似语义的 token 在表示空间中距离较近。归纳头的注意力分数基于查询与键的点积,因此当新输入的表示与某个示例输入的表示相似时,即使字面不同,注意力也会集中到该示例上。
Anthropic 的研究将这种能力称为“模糊键”(smeared keys)机制。他们通过修改架构使键表示变得模糊,发现归纳头的形成时间会改变,上下文学习能力也随之移动,这提供了因果证据。
在少样本分类中,这种模糊匹配让模型能处理同义词、不同措辞乃至跨语言示例。例如,示例是英文评论,新输入是中文,只要表示空间中对齐,归纳头仍能工作。这解释了为什么大型模型能在零样本或少样本设置下完成多种语言的任务。
与任务向量、函数向量的关系
归纳头不是唯一解释上下文学习的机制。后续研究提出了任务向量(Task Vectors)和函数向量(Function Vectors)的概念。任务向量指模型中某些方向编码了任务信息,激活这些方向就能改变模型行为;函数向量则更具体,指在特定层中,通过激活某些方向可以“编程”模型执行某个函数。
归纳头与这些概念并不冲突,而是处于不同粒度。归纳头描述的是底层电路:两个注意力头如何组合实现模式复制。任务向量和函数向量则描述更高层的表征:模型内部可能存在一个方向,代表“情感分类”这个任务,激活它就能让模型执行分类。
可以推断,任务向量和函数向量的形成可能依赖于归纳头。归纳头提供了“从示例中提取映射”的基础能力,而任务向量则可能是这种能力在特定任务上的固化。例如,当模型看到多个正面/负面示例时,归纳头反复复制“示例→标签”的映射,这些映射在残差流中叠加,最终形成代表任务的方向。
不过,这一推断尚未被直接证实。Anthropic 的论文主要针对归纳头,任务向量的研究是独立进展。两者之间的关系仍是开放问题,但理解归纳头有助于解释任务向量为何有效:没有模式复制的基础,任务向量就缺乏信息来源。
归纳头的失效条件与能力边界
归纳头并非万能。它的核心假设是“历史会重演”:如果当前模式在上下文中出现过,那么后续结果也可能相同。当这个假设不成立时,归纳头会误导模型。
在少样本分类中,如果示例分布与真实任务不一致,归纳头会复制错误的映射。例如,提示词中示例是“电影很棒:正面”,但新评论“剧情拖沓”实际上也是正面(因为反转),模型若依赖归纳头会预测负面。此外,当示例数量很少且彼此矛盾时,归纳头可能无法形成稳定的映射,导致预测随机。
另一个失效条件是上下文过长。归纳头需要在整个序列中搜索相似前缀,如果上下文长度超过模型的注意力窗口,早期的示例可能被截断,模型无法访问。工程上,长上下文场景需要额外的机制,如滑动窗口或稀疏注意力,但这会削弱归纳头的全局搜索能力。
此外,归纳头对“相似性”的依赖意味着它容易受到对抗性扰动。如果输入被精心修改,使其表示偏离示例空间,归纳头可能找不到相似项,模型退化为随机猜测。
下表对比了归纳头与其他上下文学习机制在几个维度上的表现:
| 机制 | 核心操作 | 需要层数 | 处理模糊相似 | 任务泛化 | 失效条件 |
|---|---|---|---|---|---|
| 归纳头 | 复制前文模式 | ≥2 | 是 | 有限 | 模式不重复、上下文过长 |
| 任务向量 | 激活任务方向 | 深层 | 是 | 较强 | 任务方向未形成 |
| 函数向量 | 编程特定函数 | 深层 | 是 | 强 | 需要特定激活模式 |
| 显式微调 | 更新参数 | 任意 | 是 | 强 | 需要标注数据 |
工程观察与利用
理解归纳头对工程实践有直接帮助。首先,可以通过注意力模式检测模型是否形成了归纳头。具体做法是:输入一个包含重复模式的序列,检查注意力头是否关注与当前 token 共享前一个 token 的位置。如果多个注意力头表现出这种模式,说明模型具备归纳能力。
其次,训练过程中可以监控归纳头的形成。Anthropic 的研究发现,归纳头的形成与训练损失曲线上的凸起同步。如果训练时观察到损失异常上升然后下降,可能正是归纳头在形成。这可以作为模型是否获得上下文学习能力的早期信号,无需等到下游任务评估。
在推理阶段,可以利用归纳头的行为来改进少样本提示。例如,确保示例中的输入与目标输入在表示空间上接近,可以提高归纳头的匹配概率。具体操作包括:使用与目标领域相似的示例、避免示例之间的冲突、控制示例数量在注意力窗口内。
此外,当模型在少样本任务上表现不佳时,可以检查是否因归纳头失效所致。如果注意力模式显示模型没有关注任何示例,可能需要调整提示格式,使模式更明显。例如,在示例之间加入分隔符,帮助模型定位边界。
局限与未解问题
归纳头机制的研究主要基于小型纯注意力模型,对于大型模型,证据是相关性的而非因果的。Anthropic 的论文明确指出,对于带有 MLP 的大型模型,他们只能提供相关性证据,无法像小模型那样直接消融。因此,归纳头是否完全主导大型模型的上下文学习,仍是未解问题。
另一个未解问题是归纳头如何支持“全新任务”的少样本学习。简单的模式复制可以解释同类型任务的迁移,但模型有时能处理训练中从未见过的任务类型,例如数学推理或代码生成。这可能涉及更复杂的电路组合,超出了简单归纳头的范畴。
此外,归纳头的“模糊匹配”依赖于表示空间的结构,而表示空间如何形成,与训练数据的分布密切相关。如果训练数据中重复模式很少,归纳头可能不会形成。这解释了为什么某些领域(如罕见语言)的模型上下文学习能力较弱。
最后,归纳头与灾难性遗忘的关系尚不明确。当模型在微调后失去上下文学习能力时,是否因为归纳头被破坏?如果是,那么保持归纳头的完整性可能成为微调策略的考量因素。
总体而言,归纳头提供了一个从微观电路到宏观能力的解释桥梁,但距离完整理解 Transformer 的上下文学习仍有很长的路。对于工程师,理解这一机制有助于设计更好的提示、诊断模型行为,并在训练中观察能力的涌现。