少样本学习 Few-Shot Learning 是什么?
少样本学习(Few-Shot Learning)是指只给模型寥寥几个示范样本,就让它去完成一类新任务的做法。好比带新同事,你不讲一大堆规章,只把三份填好的表格摆在他面前,说一句“照这个样子来”,他多半就能自己做出第四份。如今在大模型圈里,这个词最常指的是在提示词里放几组输入和输出的例子,也叫 few-shot prompting。
它是怎么回事:例子放进提示词,模型本身不变
先说清楚 shot 是什么:一个 shot 就是一个示范。只写任务说明、不给示范,叫 zero-shot;给一个叫 one-shot;给几个就是 few-shot。这套叫法出自 GPT-3 论文,作者按推理时提供了多少示范来区分这三档。
整个过程没有训练。模型的参数不会被改动,例子只是塞进提示词里的文字。GPT-3 论文把这叫上下文学习(in-context learning),指模型在读这段上下文的那一次前向计算里完成适应。微软 Azure OpenAI 的文档讲得很直白:这不是模型被永久改变,例子只是让模型在当前这一次推理中更倾向于按你想要的方式回答。换一个对话,一切归零。
从哪来的:先是小样本图像识别,后来被 GPT-3 搬进提示词
这个词最早属于传统机器学习。Yaqing Wang 等人 2020 年发表在 ACM Computing Surveys 的综述,把少样本学习定义为:监督信息很有限时,借助先验知识让模型快速泛化到新任务。典型场景是给程序看几个样例,让它学会解析并生成新的手写字符;也包括标注数据很难拿到的情况,比如涉及隐私或伦理限制的数据。
2016 年,Google DeepMind 的 Oriol Vinyals 等人在 NIPS 上发表《Matching Networks for One Shot Learning》。思路是训练时就模拟考试:每次只给每个类别几个样本,并不断更换任务,让网络学会拿一小组带标签的样本去判断新样本属于哪一类,遇到没见过的类别也不必重新微调。论文摘要报告,Omniglot 上的一次样本准确率从 88% 提到 95%,ImageNet 上从 82.2% 提到 87.8%。
转折在 2020 年。OpenAI 的 Tom Brown 等人发表《Language Models are Few-Shot Learners》,训练了 1750 亿参数的 GPT-3,在不做梯度更新、不微调的条件下,只靠文字写明任务和示范来测试它。论文的结论是,模型越大,对上下文里示范的利用越高效,有些任务上可以和此前经过微调的先进方案相比。从这之后,“少样本”在大模型语境里多了一层意思:示范不再是训练样本,而是提示词里的一段文字。
现在在哪用:各家官方文档都在讲,建议却不完全一样
Anthropic 把这个技巧叫 multishot prompting,提示词工程文档建议放 3 到 5 个多样且相关的例子,并用 XML 标签把例子和指令隔开,让 Claude 分清哪些是示范、哪些是任务。Google 的 Gemini 文档建议提示词里总是带上少样本示例,还说例子足够清楚时可以删掉一部分指令;Vertex AI 的文档则提醒,例子要配上清晰的指令,否则模型可能从例子里学到你没打算教的规律。OpenAI 的开发者文档把 few-shot learning 描述成在提示词里放一小把输入输出示例,通常写在 developer 消息里,用来代替微调。
上下文窗口变大以后,例子也不必只放几个。Google DeepMind 的 Rishabh Agarwal 等人在 NeurIPS 2024 发表了 Many-Shot In-Context Learning,用 100 万 token 上下文的 Gemini 1.5 Pro 试了放几百上千个示范,称为 many-shot。作为对照,论文提到 GPT-3 的上下文只有 2048 token。结果是很多任务从 few-shot 过渡到 many-shot 时有明显提升;他们还试了让模型自己生成解题过程来充当示范,缓解人工写例子太费力的问题。
容易混的地方:它不是微调,也不总是越多越好
少样本学习不等于微调。微调会用数据更新模型权重,改完一直有效;提示词里的少样本只管这一次调用。传统机器学习里的少样本学习又是另一回事,它指训练阶段就只有几个样本,靠元学习等办法解决。两边同名,机制不同,读论文时先看清说的是哪一种。
另一个常见误解是例子里的答案必须全对。Sewon Min 等人在 EMNLP 2022 的论文里做了个反直觉的实验:把示范里的标签随机替换,在一批分类和选择题任务上性能只是小幅下降,12 个模型包括 GPT-3 都是如此。他们认为真正起作用的是示范展示了标签范围、输入文本的分布和整体格式。这说明例子首先在教格式和范围,不过实验范围只是那批任务和模型,别推到所有场景。
还有一点,并非所有模型都吃这一套。DeepSeek-R1 的技术报告提到,少样本提示会让它的表现变差,推荐用零样本,直接写明问题和输出格式。
我们 AI主线 的建议是:先把指令写清楚,拿不准格式或语气时,再加两三个有代表性、彼此不重复的例子。例子越多,每次请求带的内容越长,费用和延迟也跟着涨,Gemini 的文档还提醒过多的例子可能让模型过拟合到示范上。换了模型,就拿“有例子”和“没例子”各跑一遍对比,推理类模型尤其别想当然。