In-Context Learning/zh
| Article | |
|---|---|
| Topic area | Large Language Models |
| Prerequisites | Transformer, Large Language Model, Attention Mechanism |
概述
上下文学习(ICL)是预训练大型语言模型的一种能力,它通过在提示中放入少量输入-输出示例进行条件化,在推理时执行新任务,无需对其参数进行任何更新。模型将这些示例当作普通词元读取,并生成以相同格式解决保留查询的补全。ICL 由 GPT-3 论文推广,该论文表明,将自回归transformer扩展到数千亿参数后,这种能力会陡然涌现,使单个冻结的模型成为通用的少样本学习器。[1] 由于在 ICL 期间没有梯度流动,它在操作上不同于微调和经典的元学习:唯一的适应通道就是前向传播。
ICL 之所以重要,是因为它改变了下游系统的构建方式。从业者不再为每个任务训练一个模型,而是部署一个基础模型,并通过编写提示来引导其行为。这一转变是现代提示工程、检索增强生成以及使用工具的智能体的基础,并支撑着大多数前沿 LLM 的生产部署。
机制与直觉
典型的 ICL 提示由三部分组成:可选的自然语言指令、$ k $ 个形如(输入,输出)的演示序列,以及一个最终的查询输入,模型必须为其生成输出。标准命名遵循演示的数量:$ k=0 $ 为零样本(zero-shot),$ k=1 $ 为单样本(one-shot),$ k>1 $ 为少样本(few-shot)。模型从未看到独立的"训练"信号;它只是在给定提示的条件下续写最可能的序列。
直观上,演示同时扮演两个角色。它们通过展示输入分布、输出空间和标签格式来指定任务,并提供模型可用于模式匹配的具体范例。经验上,令人意外的是,性能提升中很少来自于实际输入-标签配对的正确性:打乱标签往往只会适度降低准确率,而破坏输入分布或标签空间则会严重损害性能。[2] 这表明 ICL 主要激活了预训练模型中已潜在的能力,而非从提示中学习新能力。
形式化
设 $ p_\theta $ 表示参数为 $ \theta $ 的冻结自回归语言模型。给定一个提示上下文
$ {\displaystyle C_k = (x_1, y_1, x_2, y_2, \ldots, x_k, y_k, x_{\text{query}})} $
模型按以下方式预测答案
$ {\displaystyle \hat{y} = \arg\max_y p_\theta(y \mid C_k).} $
条件分布 $ p_\theta(\cdot \mid C_k) $ 完全通过在拼接的词元序列上运行 Transformer 的前向传播来计算;$ \theta $ 保持不变。所谓的"学习"完全表现为上下文和模型预训练权重的函数。
一个有用的视角是将 ICL 视为隐式贝叶斯推断:模型的行为就像它对由预训练诱导的潜在任务持有一个先验,而演示会锐化它关于正在请求哪个任务的后验。[3] 在这一视角下,即使模型从未显式存储这些演示,它们仍然有效;它们更新的是后验,而不是参数。
推理行为
ICL 在推理时具有几个独特的特征,使其有别于其他适应方法。
- 无状态:每次新查询都是独立的前向传播;模型不会发生持久变化。两个并行用户可以使用同一模型搭配完全不同的 ICL 提示。
- 计算量随上下文长度增长:由于自注意力在序列长度上是二次的,将 $ k $ 翻倍会使推理成本(在 prefill 阶段)大致按二次方增长,而在解码时则线性增长。KV 缓存和共享前缀技巧可在重复使用同一组演示时降低成本。
- 顺序敏感:性能会随演示顺序显著波动,尤其当模型存在近因偏差时。选择与排序策略(例如基于检索、按与查询的相似度排序)是实践中的活跃方向。
- 格式敏感:分隔符的选择、标签的措辞以及空白字符都可能使准确率变动数个百分点。ICL 在微调通常不会出错的方面表现脆弱。
变体
若干常见变体扩展了基本方案。
- 零样本提示
- 没有演示,仅有指令。现代指令微调模型在零样本下的表现通常几乎与少样本一样好,因为指令微调已经将格式内化。
- 少样本提示
- 含 $ k $ 个演示的标准 ICL 设置。由于上下文长度限制和收益递减,$ k $ 通常较小(4-32)。
- 思维链(CoT)
- 演示包含中间推理步骤,而不仅是最终答案。CoT 大幅改善多步算术、符号推理和常识推理,目前已是分析性任务的默认做法。[4]
- 检索增强 ICL
- 演示按查询从更大的语料库中动态选择,通常使用嵌入相似度。这将 ICL 与检索增强生成结合起来。
- 多样本(many-shot)ICL
- 在百万词元级上下文窗口下,提示可携带数百乃至数千个演示,在窄任务上有时接近微调的质量。
- 代码与工具 ICL
- 演示展示如何调用工具、编写代码或遵循结构化输出模式;模型从这些示例中学习协议。
理论视角
为什么一个冻结的 Transformer 在其前向传播中能表现出类似学习的行为,是一个活跃的研究问题,目前已涌现出多种互补的解释。
归纳头(induction-head)解释识别出特定的注意力头电路,这些电路在经过充分的预训练后会实现"回看,然后带偏移地复制"的模式。这些头能够补全 $ [A][B] \ldots [A] \to [B] $ 序列,并且与训练过程中 ICL 的涌现高度相关。[5]
隐式优化器解释认为,在某些假设下,transformer在 ICL 输入上的前向传播可以在由演示定义的隐式线性或核回归目标上实现梯度下降。构造性证明表明,transformer 可在单次前向传播中模拟一次或多次梯度步骤,为上下文回归提供了机制性解释。[6]
贝叶斯解释将 ICL 视为对预训练分布中编码的潜在任务的后验推断,在没有显式元训练循环的情况下复现类似元学习的行为。这三种视角并不互斥:归纳头可以实现隐式梯度步骤或贝叶斯更新所需的查找。
与微调和元学习的比较
ICL 用提示设计换取参数更新。与微调或参数高效微调(如 LoRA)相比,ICL 几乎没有配置成本,不需要数据流水线,也不会产生每个任务的工件,但在数据丰富的任务上其准确率上限通常较低,且每次推理的计算成本更高。微调将适应一次性摊销到权重中;而 ICL 在每次调用时都要付出代价。
与经典元学习(如 MAML)相比,ICL 是免费涌现的元学习:元训练目标只是对多样化语料的标准下一词元预测,而内循环是一次前向传播而非显式的梯度步骤。因此 ICL 训练成本低得多,但更难控制或分析。
在实践中,混合方法十分常见:先对一个指令微调模型在广泛的任务格式上进行微调,再通过 ICL 按任务进行引导。检索式流水线将 ICL 与动态示例库结合,使其与非参数化学习之间的界限趋于模糊。
局限性
ICL 继承了底层模型的局限,并增加了一些自身的局限。性能在超过某个任务特定的演示数量后会趋于平稳甚至下降;长上下文会带来二次方的注意力成本;行为对演示的选择、顺序和格式都很敏感。由于参数不会变化,ICL 无法可靠地向模型教授未在预训练中体现的真正全新的事实内容;演示只能引导已有的能力。鲁棒性研究表明,当任务与演示分布稍有偏离时,ICL 的准确率往往只是覆盖在幻觉上的一层薄壳。
此外还存在安全相关的失效模式。对抗性演示可被用于引出不期望的行为(提示注入),而使 ICL 有用的那种灵活性,也使其难以加以约束。生产系统通常将 ICL 与输出验证、检索式接地以及偏好微调的基础模型相结合,以限制这些风险。
参考文献
- ↑ Brown et al., "Language Models are Few-Shot Learners," 2020. Template:Cite arxiv
- ↑ Min et al., "Rethinking the Role of Demonstrations," 2022. Template:Cite arxiv
- ↑ Xie et al., "An Explanation of In-context Learning as Implicit Bayesian Inference," 2021. Template:Cite arxiv
- ↑ Wei et al., "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models," 2022. Template:Cite arxiv
- ↑ Olsson et al., "In-context Learning and Induction Heads," 2022. Template:Cite arxiv
- ↑ von Oswald et al., "Transformers Learn In-Context by Gradient Descent," 2022. Template:Cite arxiv