跳到主要内容
Zubnet AI学习Wiki › In-Context Learning
基础

In-Context Learning

别名:ICL、上下文学习
大型语言模型从提示词里的示例或指令临时学会一项任务的能力,全程不更新模型权重。给它看几组输入输出,它就能在新输入上延续模式,等于在请求发生时用自然语言现场编程。OpenAI 2020 年的 GPT-3 论文让这个概念走红,而提示词之所以能成为一种界面,根本原因也在这里。

为什么重要

上下文学习把一个冻结模型变成了通用工具:不必为每项任务训练一个专家,只要用文字描述任务,几秒钟后就能得到可用答案。提示词工程之所以成为一门技能,没有 ML 训练流水线的团队之所以也能发布 AI 功能,都得益于它。问题是,这种学习是租来的,不是买下来的——它只活在上下文窗口里,而且每次调用都要重新为那些示例付费。

深度解析

从机械过程看,上下文学习就只是推理。提示词——指令、少量演示、新输入——在一次前向传播中穿过 Transformer,注意力层承担全部工作:把新输入与上下文中的演示匹配起来,再生成符合隐含模式的续写。没有计算梯度,没有碰触权重,磁盘上的模型在前后两个时刻逐字节完全相同。看起来像学习,其实只是模型在利用预训练期间吸收的模式,理解任务被写下来时通常长什么样。让这件事声名大噪的演示,是 OpenAI 那篇介绍 1750 亿参数 GPT-3 的论文“Language Models are Few-Shot Learners”(2020):同一个冻结模型只看提示词文本,就能完成翻译、问答和算术,而且水平是同时代小模型够不到的。

零样本、单样本与少样本

这些术语描述的是提示词包含多少个演示。零样本只有指令,例如“把这条评论分为正面或负面”;单样本加入一个完整示例;少样本学习则加入少数几个演示——聊天模型通常用 2–10 个,研究环境中可能达到几十个。一个判断情感的少样本提示词,可以展示三条短评,每条后面跟一个标签,再给出第四条评论和“情感:”二字——模型会照着演示过的格式补全标签。格式一致性比新手预想的更重要:分隔符相同、标签词表相同、字段顺序也相同。如果输出约定难以描述却很容易示范,那么在分类、抽取和格式任务中,少样本通常能稳定胜过零样本。

问题是,模型对示例如何挑选、如何排列敏感得古怪。一个有大量记录的失败模式是多数标签偏差:四个示例中若有三个标为“正面”,不论真实输入是什么,模型都会偏向正面。近因偏差,也就是过度看重最后一个示例,以及示例顺序效应,同样真实存在——只把同一批示例打乱顺序,准确率就可能摆动好几个百分点。实践者会用标签均衡的集合、困难且有代表性的示例而不是简单题来抵消偏差,有时还会重新校准输出概率。这种脆弱性正是 2020 年后整个领域大力推进指令调校的部分原因:能听懂纯文字指令的模型,需要拿示例陪护的次数更少。

它究竟为什么有效

还没有公认解释,但两种理论占据主流。第一种来自机制可解释性:研究人员逆向分析注意力时,发现了被称为归纳头的回路,它们会执行一种简单算法——找到当前模式上一次在上下文中出现的位置,看看后面跟了什么,再预测同样的东西。这种复制模式的动作几乎正是少样本学习所需,而且归纳头往往恰好在训练进展到上下文学习能力猛增的阶段形成;即便它不是完整故事,这层对应也很耐人寻味。第二种理论把 ICL 描述为隐式贝叶斯推断:预训练文本是潜在任务和格式的大杂烩,一条内部连贯的提示词会让模型推断自己正处在哪类文档中,再顺势续写。两种视角并不冲突——一个描述回路,一个描述统计——也都能解释为什么干净、自洽的提示词胜过潦草提示词。

毫无争议的是它对规模的依赖。小模型的少样本能力很弱,甚至完全没有;随着参数和训练数据增加,能力会突然变强,是涌现能力最干净的例子之一。GPT-3 的结果之所以震撼,原因就在这里:对 10 亿参数模型毫无作用的提示词,到了 1750 亿参数模型上却有效。这也是为什么上下文学习质量至今仍是模型世代之间一道不张扬的分水岭——大模型需要的示例更少,也更能容忍乱一些的示例。

什么也不会保存

一个挥之不去的误解是,模型会像训练时那样从你的示例中“学习”——一次效果很好的少样本会话,会让模型在服务下一名用户时也变得更好。不会。推理期间权重保持冻结;表面的学习只是上下文窗口里的激活状态,上下文一丢,它也随即蒸发。新开一次聊天,精心挑选的示例连一点痕迹都不会留下。这正是它与微调的根本差别:微调用梯度下降重写权重,并持续影响此后的每次请求。聊天产品若显得跨会话记得你,那是记忆功能——把存下来的笔记重新注入后续提示词——不是上下文学习。

短暂性也有成本:什么都不会保存,所以每一次需要这种行为的请求,都得重新携带示例;如果 10 个演示都很扎实,一条 10-shot 提示词就可能给每次调用增加数千 token。提示缓存能缓解一些——供应商以折扣价复用已经处理过的前缀——但对高流量、范围窄的任务而言,微调过的小模型往往拥有更好的单位经济性。常见经验法则是:先用上下文学习做原型,等提示词税或错误率开始难看到丢脸,再伸手拿微调。

提示词如何变成界面

2020 年以前,要让语言模型适应一项任务,通常得靠迁移学习:拿一个预训练模型,在标注数据上微调,再部署成专家。GPT-3 的少样本结果翻转了这笔经济账——如果冻结模型可以用自然语言编程,一个 API 就能服务所有任务,用户还能自带任务而来。这次倒转创造了提示词工程这门学科,让系统提示词成为标准控制面,也铺好了后来的许多技术;它们其实都是乔装过的 ICL:思维链提示之所以有效,部分原因是把完整的推理轨迹展示给模型,检索增强生成则相信模型会使用任何落进上下文的文字。更新的术语“上下文工程”只是同一洞见长大后的样子:上下文窗口是编程界面,上下文学习是运行它的解释器。

← 所有术语
ESC