大型语言模型 (LLMs) 彻底改变了人工智能的格局,这在很大程度上归功于它们执行上下文学习 (In-Context Learning, ICL) 的能力。这是一种无需任何参数更新,仅通过观察提示 (Prompt) 中提供的几个例子 (示例/demonstrations) ,模型就能学会解决任务的能力。
普遍的观点——以及主导深度学习大部分领域的缩放定律 (scaling law) ——表明“越多越好”。如果给 LLM 五个例子能帮助它理解任务,那么给它一百个例子应该能让它成为专家。然而,最近的实证研究发现了一个令人困惑的现象: 当示例数量从“少样本 (few-shot) ”增加到“多样本 (many-shot) ”时,性能往往会停滞不前,甚至下降。
在这篇文章中,我们将深入探讨研究论文 “Focused Large Language Models are Stable Many-Shot Learners” (聚焦型大语言模型是稳定的多样本学习者) 。 我们将探讨为什么标准的 LLM 会因为信息过多而“分心”,这种注意力分散背后的数学证明,以及提出的解决方案: FocusICL , 一种帮助模型过滤噪声并聚焦于关键信息的免训练方法。
多样本学习的承诺落空
要理解这个问题的严重性,我们需要先看看上下文学习的期望与现实之间的差距。
在标准的 ICL 设置中,你向模型提供一系列成对的输入和输出 \((q_1, r_1), (q_2, r_2), \dots\),随后是最终的查询 \(q\)。模型需要生成响应 \(r\)。
理论上,先前的研究将 ICL 等同于一种隐式的微调形式。由于微调通常遵循缩放定律 (随着数据量的增加,性能呈幂律提升) ,ICL 也应该如此。然而,随着上下文窗口的扩大——允许我们在提示中塞入数百甚至数千个例子——我们看到了相反的情况。
让我们看数据。在下图中,作者在各种基准测试中测试了几种最先进的模型 (如 Llama-3 和 Vicuna) 。

注意代表标准 ICL 的橙色线条。在许多情况下,特别是在 CountA 和 ARC 基准测试中,随着示例数量 (X 轴) 的增加,准确率持平甚至显著下降。这就是所谓的 逆缩放现象 (inverse-scaling phenomenon) 。 模型并没有学到更多东西;它反而感到困惑了。
假设: 注意力分散
为什么会发生这种情况?作者基于 Transformer 工作机制的核心——自注意力 (Self-Attention) ——提出了一个假设。
当 LLM 处理一个序列时,它会为不同的 Token 分配“注意力权重”。这些权重决定了过去的信息对当前预测有多大影响。作者认为,当你用更多的示例填充上下文窗口时,模型的注意力会被分散。示例中大量的 Token 会争夺注意力,从而将焦点从提示中最关键的部分——当前的查询 (Query) ——夺走。
“空白字符”实验
为了证明这不仅仅是因为模型获得了糟糕的例子,而是注意力机制本身的结构性问题,研究人员进行了一个巧妙的实验。他们采用了一个标准的提示,仅仅是在示例中添加了毫无意义的空白字符。

如上所示,随着空白字符数量的增加,分配给查询的注意力 (蓝线) 下降,随之而来的准确率 (红线) 也直线下降。空白字符包含零新信息,但它们成功地分散了模型的注意力。这证实了仅上下文的体量就会主动损害模型聚焦于手头问题的能力。
问题的数学根源
要严格理解为什么会发生这种情况,我们必须看看注意力机制的方程。
以前声称 ICL 等同于微调的工作通常使用 线性注意力 (Linear Attention) 来近似标准注意力机制。在线性注意力中,Softmax 操作被移除或修改了。在该近似下,添加新示例会线性地增加新信息,而不会“伤害”现有信息。
然而,LLM 使用的是 Softmax 注意力 。 Softmax 强制执行归一化约束——所有注意力权重的总和必须为 1。这引入了竞争。
作者推导出了响应的注意力头输出 \(\hat{h}_r\),它是来自查询 (\(q\)) 的结果和来自示例 (\(demos\)) 的结果的加权和。

这个方程的关键部分是 \(\lambda(h_r)\),它充当一个权重因子或“门控”,决定模型在多大程度上依赖示例与查询本身。

在这个方程中:
- 分子代表来自 示例 的注意力能量 (\(D_k\)) 。
- 分母是总注意力能量 (示例 \(D_k\) + 查询 \(Q_k\)) 。
随着示例数量 (\(N\)) 的增加,项 \(\sum \exp(h_r W_q D_k^\top)\) 变大。因此,\(\lambda(h_r)\) 趋近于 1。回顾之前的方程,随着 \(\lambda\) 的增长, 来自 \(q\) 的结果 的权重就会减少。
本质上, 噪声淹没了信号。 你给的例子越多,模型看它实际需要回答的问题就越少。
这种现象在下图中可视化了。纵轴显示了分配给查询 Token 的平均注意力权重。随着示例数量 (N,在 x 轴上) 的增加,对查询的注意力稳步衰减。

解决方案: FocusICL
受到人类学习方式的启发,作者提出了 FocusICL 。 当人类面对一本厚厚的教科书例子时,我们不会背诵每一个字。我们会:
- 过滤: 忽略无关的词 (琐碎细节) 。
- 分批: 一次学习几个例子,而不是试图将 500 个例子同时保持在工作记忆中。
FocusICL 将这两种策略实施到注意力机制中,且无需任何模型再训练。

1. Token 级: 琐碎内容过滤 (Triviality Filtering)
并非示例中的所有 Token 都是有用的。停用词、格式符号或通用 Token 可能会占用注意力预算,但却不提供推理价值。
FocusICL 正常计算注意力分数 \(s\)。然后,它识别出 示例 中相对于其他 Token 获得极低注意力分数的 Token。逻辑是,如果模型 (在标准传递中) 几乎不看某个 Token,那么它很可能是“琐碎的”。
该方法应用了一个 琐碎内容掩码 (Triviality Mask) :

- 逻辑: 如果注意力分数 \(s_i\) 处于底部的 \(p\) 百分位 (其中 \(p\) 是一个阈值) ,它将被屏蔽 (设置为负无穷大) 。
- 结果: 当应用 Softmax 时,这些 Token 获得的注意力正好为零。这释放了“注意力预算”,可以重新分配给示例和查询中的重要 Token。
2. 示例级: 分层注意力 (Hierarchical Attention)
即使经过过滤,在一次注意力传递中处理数百个示例仍会导致我们前面讨论的数学稀释。为了解决这个问题,FocusICL 引入了 分层注意力 。
示例不再是一次性关注所有 \(N\) 个,而是被分成 \(T\) 个批次。

如上图所示,模型将每个批次与查询一起独立处理。
- 批次内注意力 (Intra-Batch Attention) : 对于批次 1,模型仅关注 \(\{Demo_{Batch1}, Query\}\)。对于批次 2,它关注 \(\{Demo_{Batch2}, Query\}\),依此类推。这保持了计算中的 \(N\) 较小,防止查询的注意力信号被稀释。
- 批次间注意力 (Inter-Batch Attention) : 然后模型将所有批次的结果结合起来。
聚合公式是一个加权和:

这里,每个批次的权重由该批次的总注意力能量 (\(\sum e^{s}\)) 决定。如果一个批次包含与查询高度相关的示例,它自然会有更高的注意力分数,从而对最终表示贡献更多。
效率
有人可能会担心处理多个批次会使模型变慢。然而,由于标准注意力的复杂度是二次的 \(O(N^2)\),将输入分批实际上相对于示例总数线性化了成本。

通过设置固定的批大小 \(B\),复杂度变为 \(O(N \cdot B)\),当 \(N\) 很大时,这比 \(O(N^2)\) 效率高得多。
实验与结果
研究人员在包括 CSQA (常识问答) 、PIQA (物理交互问答) 和 GSM8K (数学推理) 在内的基准测试中,将 FocusICL 与标准 ICL 和其他基线 (如“EarlyStop”,即当性能下降时简单地停止添加演示) 进行了对比测试。
准确率提升
结果在不同的模型家族中是一致的。让我们看看在 Llama-3-8B-Instruct (一个非常流行的开源模型) 上的表现。

FocusICL (最后一行) 始终实现最高的平均准确率。在标准 ICL 经常出现逆缩放问题的 CountA 数据集上,FocusICL 保持了高性能。在所有测试的模型 (LongChat, Vicuna, Llama-3) 中,FocusICL 比普通 ICL 平均提升了 5.2% 。
稳定性和可扩展性
回想第一张图 (图 5) 显示 ICL 性能随着示例增加而下降。让我们看看 FocusICL 的注意力分布细分。

红线 (FocusICL) 随着示例数量从 50 增加到 450 几乎保持平坦。蓝线 (标准 ICL) 则急剧下降。通过保持对查询的稳定关注,FocusICL 将 LLM 变成了 稳定的多样本学习者 。
隐状态分析
为了从视觉上确认 FocusICL 改变了模型表示信息的方式,作者对模型最后一层的隐状态进行了主成分分析 (PCA) 。

- 上图 (ICL): 注意从紫色 (少样本) 到黄色 (多样本) 的颜色渐变。随着添加更多例子,表示发生了显著的漂移。这种漂移表明模型对任务的内部理解正在发生变化——而且往往是退化——这仅仅是因为文本量的原因。
- 下图 (FocusICL): 无论示例数量如何,点都紧密聚集在一起。模型保持了对查询的一致表示,证明它对增加上下文带来的干扰具有鲁棒性。
超参数搜索
实施 FocusICL 需要选择过滤阈值 (\(p\)) 和批大小 (\(B\)) 。由于这些参数可能因任务而异,作者提出了一种基于 困惑度 (Perplexity, PPL) 的自动搜索策略。
他们选择示例的一个子集,并测量模型在该子集中预测答案 (响应) 的效果。
- 他们搜索产生最低困惑度 (最佳预测) 的阈值 \(p\)。
- 他们搜索困惑度开始上升时的批大小 \(B\) (表明批次变得太大,干扰开始出现) 。
与全面评估所需的数千次运行相比,这种搜索增加的开销非常小 (仅约 25 次推理运行) ,使得 FocusICL 在部署中非常实用。
结论与启示
论文 “Focused Large Language Models are Stable Many-Shot Learners” 强调了我们目前在长上下文学习方法中的一个关键缺陷: 简单地向上下文窗口填充更多数据并不保证成功的路径。由于注意力机制中的 Softmax 归一化,信息过载会导致注意力分散,导致模型看不清实际问题。
FocusICL 提供了一个优雅的、无需训练的解决方案。通过过滤掉琐碎的 Token 并对示例进行分批处理,它确保模型可以利用多样本设置中的丰富信息,而不会被其淹没。
主要收获:
- 更多 \(\neq\) 更好 (总是) : 如果不加管理,由于注意力竞争,添加示例可能会损害性能。
- Softmax 是罪魁祸首: Softmax 注意力中的归一化迫使模型在关注示例和关注查询之间进行权衡。
- 过滤与分批: FocusICL 屏蔽琐碎内容和分层分批的策略恢复了模型的焦点。
- 效率: 对于大上下文,这种方法在计算上比标准的全注意力 ICL 更便宜。
随着我们迈向通用人工智能 (AGI) 和拥有无限长上下文窗口的模型,像 FocusICL 这样的技术将至关重要,以确保模型不仅仅是“阅读”海量数据,而是真正地 聚焦 于重要内容。
](https://deep-paper.org/en/paper/2408.13987/images/cover.png)