返回列表
2026年7月31日 · 8 分钟

GPT-3 真正改变了什么,任务适应从微调移到了上下文

GPT-3 的重点不是 1750 亿参数,而是把任务适应从微调阶段挪到了上下文中。

LLM GPT-3 In-context Learning Meta-learning
GPT-3 从微调到上下文

2018 到 2020 年,NLP 的默认配方很清楚。

先在大规模无标注语料上预训练一个语言模型,再为每个下游任务收集标注数据,做任务特定微调。

这个路线管用。BERT、GPT-2、T5 这类模型都在不同任务上证明了预训练加微调的有效性。但它也留下了一个问题:如果每个任务都要重新准备数据、重新训练参数,那模型到底是在获得一种通用能力,还是只是在不断适配一个个具体数据集?

GPT-3 这篇论文的关键,不只是把模型参数推到 1750 亿,而是把问题换了一个方向:

如果不微调,只在 prompt 里给任务说明和少量示例,模型能不能完成任务?

这篇文章想回答的就是这个问题。更准确地说,它讨论的是 GPT-3 如何把任务适应从训练阶段挪到推理阶段,也就是后来说得越来越多的 in-context learning。

微调为什么不够让人满意

预训练加任务特定微调的流程并不复杂。

先让模型在大规模文本上学习语言分布,再针对翻译、问答、阅读理解、情感分类等任务收集标注样本,更新模型参数。

这种方式的问题主要有三个。

第一,每个任务都需要新数据集。任务越多,数据收集和标注成本越高。

第二,微调后的模型可能对分布外数据泛化不好。模型在某个 benchmark 上表现很好,不代表它真的学会了任务本身,也可能只是适应了测试集的分布。

第三,模型可能利用训练数据里的虚假特征。它学到的未必是任务规律,而是标注数据中某些偶然相关的模式。

所以 GPT-3 的问题意识不是”能不能把某个任务刷到最高分”,而是”能不能减少任务特定训练,让同一个模型通过上下文临时适应不同任务”。

这个转向很重要。

它把模型能力的评价方式,从”针对每个任务重新训练之后表现如何”,推向了”拿到一个新任务,只靠自然语言说明和几个例子,模型能否快速进入状态”。

Few-shot 不是微调,而是推理时的临场适应

GPT-3 是一个 1750 亿参数的自回归语言模型。论文的核心主张可以概括为:

scaling up language models greatly improves task-agnostic, few-shot performance.

把模型做大,会显著提升与任务无关的少样本能力。

这里的 few-shot 和传统监督学习里的 few-shot 不完全一样。GPT-3 不会拿这几个例子更新参数。参数不动,梯度不更新。模型只是把任务说明和示例读进上下文窗口,然后继续预测下一个 token。

换句话说,任务适应发生在上下文里,而不是权重里。

可以把它和 fine-tuning 做一个对比:

维度Fine-tuningIn-context learning
参数是否更新
是否需要任务数据集通常需要只需要 prompt 和示例
能力是否持久保存写入模型参数只存在于当前上下文
任务切换成本重新微调或维护多个模型更换 prompt
主要风险过拟合任务数据受上下文长度和提示质量限制

这就是 in-context learning 最有意思的地方。

它看起来像学习,但不是训练意义上的学习。模型没有永久获得一个新技能,只是在当前上下文里识别任务模式,然后临时改变输出分布。

这也是为什么我更愿意把它理解为一种”临场适应”。它不是把知识写入参数,而是在推理时根据上下文调整行为。

GPT-3 为什么会有这种能力

论文把这种能力和 meta-learning 联系起来。

预训练时,语言模型会看到大量不同类型的文档。有些文档在讲故事,有些在写代码,有些在列问答,有些在做翻译示例。模型为了预测下一个 token,必须不断根据前文判断”当前上下文正在遵循什么模式”。

长期来看,这相当于反复练习一件事:

从上下文里识别模式,并沿着这个模式继续生成。

当模型规模足够大、训练语料足够丰富时,这种模式识别能力会变得更强。于是,在推理阶段给它几个输入输出示例,它就可能把这些示例当成当前文档的局部模式,并继续补全下一个例子。

这不是说模型真的理解了任务,也不是说它学到了一个可以迁移到所有场景的算法。更保守的说法是:GPT-3 说明,大规模语言模型可以通过上下文表现出某种任务适应能力,而这种能力会随 scale 增强。

关键证据:few-shot 随规模增长得更快

GPT-3 论文中一个关键观察是,zero-shot、one-shot 和 few-shot 的表现都会随着模型规模上升而提升,但 few-shot 的提升更明显。

Zero-shot、one-shot 与 few-shot 性能随模型参数规模的变化趋势

如果模型变大只是记住了更多事实,那它当然会在很多任务上更强。但 few-shot 和 zero-shot 之间的差距随着模型规模扩大而变大,说明这里可能还有另一层能力在增强。

更大的模型不只是”知道更多”,也更擅长从示例中识别当前任务。

我目前倾向于把 scaling 带来的增强拆成三层。

第一层是知识容量。模型参数更多,训练语料更多,能够压缩和保留更多语言、事实和常见模式。

第二层是模式识别。看到几个例子后,模型更容易判断这个 prompt 里隐含的任务是什么。

第三层是任务迁移。预训练中见过的大量文本模式,可以被迁移到当前上下文里,形成一种临时的任务适应。

这三层不是完全独立的。知识越多,模型越可能见过相似模式;模式识别越强,few-shot 示例越能发挥作用;任务迁移越稳定,prompt 才更像一种轻量任务接口。

GPT-3 解决了什么,又没有解决什么

回到微调的三个痛点,GPT-3 的 few-shot 路线确实给出了一个新的答案。

它不需要为每个任务都收集完整标注数据。prompt 里的示例就是临时数据集。

它不需要为每个任务更新参数。同一个模型可以在翻译、问答、阅读理解、文本生成之间切换。

它也降低了任务特定微调带来的某些过拟合风险。因为没有针对单一数据集更新权重,模型不容易把某个 benchmark 的虚假特征永久写入参数。

但这不等于 few-shot 就替代了 fine-tuning。

第一,它受限于上下文窗口。GPT-3 的上下文窗口只有 2048 token,能放进去的示例数量有限。

第二,prompt 本身会变成新的不稳定来源。示例怎么选、顺序怎么排、任务怎么描述,都会影响结果。

第三,few-shot 表现有竞争力,不代表它总能超过精心微调后的模型。在高价值、强约束、数据充足的任务上,微调仍然可能更可靠。

第四,in-context learning 到底是在”学习任务”,还是在”匹配预训练中见过的文本模式”,这个问题本身并没有被 GPT-3 完全回答。

所以 GPT-3 的贡献不是宣告微调结束,而是证明了另一条路线的可行性:

当模型规模足够大时,任务适应可以部分发生在上下文中。

这为后来的 prompt engineering、instruction tuning、chain-of-thought、tool use 以及 Agent 工作流都埋下了伏笔。因为一旦任务可以通过上下文描述,prompt 就不再只是输入文本,而开始变成一种临时程序、一种任务接口。

我从这篇论文里得到的判断

GPT-3 最值得记住的地方,不是 1750 亿参数这个数字本身,而是它改变了”如何使用模型”的基本想象。

在 GPT-3 之前,想让模型适应一个新任务,默认动作是准备数据、微调参数、评估结果。

GPT-3 之后,一个新的默认动作出现了:先试着把任务写进上下文。

这并不总是更好,但它足够便宜、足够通用,也足够改变后续技术路线。今天我们讨论 Agent、Context Engineering、长上下文、工具调用,背后其实都延续了同一个问题:

如果模型的行为可以被上下文临时塑造,那么上下文应该如何被组织、维护和验证?

从 GPT-3 到 Context Engineering,任务环境如何设计

GPT-3 证明了 scale 本身会带来新的使用方式。但它也留下了一个更长期的问题:当越来越多能力被放进上下文里,我们真正需要设计的,可能就不只是模型参数,而是模型每一次推理时所处的任务环境。