论文题目
- Improving Language Understanding by Generative Pre-Training
- Language Models are Unsupervised Multitask Learners
- Language Models are Few-Shot Learners
这三篇论文分别对应 GPT-1、GPT-2 和 GPT-3。它们的模型结构没有发生根本性变化,主线是沿着 decoder-only Transformer 语言模型不断扩大模型规模、训练数据和任务适配方式。GPT-1 关注预训练后微调,GPT-2 关注零样本迁移,GPT-3 进一步把重点推进到上下文学习和少样本学习。
背景介绍
在 GPT-1 之前,NLP 任务通常依赖任务特定模型结构和人工设计特征。词向量、语言模型预训练等方法已经证明未标注文本有价值,但如何把大规模未标注语料中的知识稳定迁移到多种下游任务,还不是一个统一范式。
GPT 系列的基本思路很直接:把自然语言建模成从左到右的序列预测问题,给定前文 tokens,预测下一个 token:
这类目标天然适合互联网规模文本,因为训练数据不需要人工标注。模型只要不断学习“下一个词是什么”,就会被迫吸收语法、语义、事实、文体、任务格式等信息。GPT-1 到 GPT-3 的关键变化,是这些能力如何被下游任务调用出来。
GPT-1:生成式预训练 + 下游微调
GPT-1 的核心问题是:能不能先用大规模无标注文本训练一个通用语言模型,再把它迁移到各种自然语言理解任务上?
模型采用 12 层 Transformer decoder,hidden size 为 768,12 个 attention heads,上下文长度为 512,参数量约 1.17 亿。训练语料使用 BooksCorpus。训练分成两个阶段:
- 无监督预训练:使用标准语言模型目标,通过前文预测下一个 token。
- 监督微调:把下游任务改写成统一输入格式,在任务标注数据上继续训练。
GPT-1 比较关键的地方在于,它没有为每个任务设计一套完全不同的模型结构,而是尽量把不同 NLP 任务统一成“输入一段 token 序列,然后输出标签或答案”的形式。例如文本蕴含、相似度判断、问答和分类任务,都可以通过特殊分隔符和线性输出层接到同一个 Transformer 上。
从实验结果看,GPT-1 在 12 个任务中的 9 个达到或接近当时最好效果。它的意义不只是指标提升,更重要的是确立了一种清晰的迁移学习范式:
1 | 大规模无监督预训练 -> 任务数据监督微调 -> 下游任务效果提升 |
GPT-1 仍然明显依赖下游标注数据和微调。如果换一个任务,通常需要重新构造输入格式、加入任务头并微调参数。此时的 GPT 更像一个强大的迁移学习底座,而不是只靠自然语言提示就能适配任务的通用模型。
GPT-2:语言模型作为无监督多任务学习器
GPT-2 继承 GPT-1 的 decoder-only Transformer 架构,但把核心问题往前推了一步:如果模型足够大、训练数据足够多样,它能不能不经过微调,直接完成很多任务?
GPT-2 的训练数据是 WebText,来自 Reddit 高赞外链网页,略多于 800 万文档、40GB 文本。论文特意去掉 Wikipedia,以降低评测集污染风险。模型规模分为 117M、345M、762M 和 1542M 四档,最大模型即 1542M 参数 GPT-2,通常简称 15 亿参数模型。相比 GPT-1,GPT-2 的上下文长度扩展到 1024,词表扩展到 50,257,并使用 byte-level BPE。
GPT-2 的一个重要观察是:很多监督学习数据集,本质上也可以被看成自然语言中的一种“任务格式”。比如翻译任务可以写成:
1 | Translate English to French: |
摘要任务可以在文章后面加上 TL;DR:,问答任务可以把上下文、问题和答案提示拼成一个文本序列。模型不需要为任务更新参数,只需要继续生成文本。
这就是 GPT-2 论文标题中“Unsupervised Multitask Learners”的含义:语言模型在大规模网页文本中见过大量任务痕迹,训练目标虽然只是预测下一个词,但模型可能隐式学到翻译、摘要、问答、阅读理解等任务。
实验上,GPT-2 在多个语言建模数据集上取得很强的 zero-shot 结果,在阅读理解 CoQA 上也展示出一定迁移能力。不过论文也承认,GPT-2 的零样本能力并不稳定。比如摘要、翻译等任务有时表现仍然较弱,不少任务距离有监督系统还有明显差距。
GPT-2 的贡献在于,它把 GPT-1 的“预训练后微调”推进到“只靠提示和续写也能做任务”的方向。虽然 GPT-2 还不是一个可靠的通用任务求解器,但它让 prompt 的雏形变得清晰起来。
GPT-3:上下文学习与少样本学习
GPT-3 的问题意识更加直接:人类看到任务说明和少量示例后,往往不需要成千上万条标注样本就能理解新任务。语言模型如果继续扩大规模,是否也能通过上下文中的示例完成新任务?
GPT-3 仍然是自回归 decoder-only Transformer。最大模型达到 1750 亿参数,训练数据包括过滤后的 Common Crawl、WebText2、Books1、Books2 和 Wikipedia。所有模型都训练 300B tokens,即约 3000 亿 tokens;上下文长度扩展到 2048 tokens。
GPT-3 论文系统比较了三种任务适配方式:
- Zero-shot:只给任务说明,不给示例。
- One-shot:给一个示例。
- Few-shot:给少量示例,但不更新模型参数。
例如情感分类可以写成:
1 | Decide whether the sentence is positive or negative. |
模型需要根据 prompt 中的说明和示例,在上下文里临时推断任务模式,然后生成答案。这个过程被称为 in-context learning。它和传统 fine-tuning 的区别是:模型参数不发生变化,任务信息只存在于上下文窗口中。
GPT-3 在翻译、问答、完形填空、常识推理、算术、词形变换等任务上展示了明显的规模效应。模型越大,few-shot 相比 zero-shot 的收益越明显。特别是在一些任务上,GPT-3 不通过梯度更新也能接近甚至超过早期监督模型。
不过 GPT-3 的局限也很清楚:
- 事实性不稳定,容易生成看似合理但错误的内容。
- 对 prompt 表述敏感,不同写法可能导致效果差异很大。
- 推理能力并不可靠,尤其在多步逻辑和复杂数学上容易失败。
- 训练数据存在偏见,模型会继承甚至放大部分社会偏见。
- 训练和推理成本极高,普通研究者难以复现。
GPT-3 的意义在于,它把语言模型从“需要微调的预训练模型”推进到“可以通过自然语言接口和少量示例调用的通用模型”。它同时也暴露了可控性、事实性、偏见和交互方式等问题,这些问题也是理解大规模语言模型能力边界时必须关注的部分。
多任务学习中的样本组织方式
GPT-1、GPT-2 和 GPT-3 都在讨论语言模型如何迁移到多个任务,但三者对“任务样本”的组织方式很不一样。这也是理解 GPT 系列从 fine-tuning 走向 prompting 的关键。
GPT-1:任务样本用于监督微调
GPT-1 的多任务能力主要来自“预训练 + 下游任务微调”。预训练阶段只做普通语言模型训练;到了下游任务阶段,每个任务仍然需要标注样本,并把样本改造成 GPT 可以接收的连续 token 序列。
例如文本蕴含任务可以组织为:
1 | <start> Premise $ Hypothesis <end> |
相似度任务可以把两个句子按不同顺序输入:
1 | <start> Sentence1 $ Sentence2 <end> |
问答或多选任务可以组织为:
1 | <start> Context Question $ AnswerCandidate <end> |
这里的 $ 对应 GPT-1 论文中的 delimiter token 记号,实际微调输入还会加入随机初始化的 start/end token。对问答或常识推理任务,论文里的写法是把 context 和 question 与每个候选答案拼接,并在候选答案前加入 delimiter token。GPT-1 的关键是:不同任务被改造成统一的序列输入形式,但这些样本仍然是训练样本,会参与梯度更新。换句话说,GPT-1 的样本组织目标是让不同监督任务可以接到同一个预训练 Transformer 上。
GPT-2:任务样本隐含在网页文本格式中
GPT-2 不再针对每个下游任务微调。它的假设是:大规模网页文本本身包含大量自然出现的任务格式,比如问答、翻译、摘要、教程、列表、评论和解释。模型在 WebText 上训练时,虽然目标仍然只是预测下一个 token,但可能已经从这些文本中隐式学到任务模式。
因此,推理时主要是把任务包装成语言模型可以续写的上下文,让模型根据文本模式继续生成。GPT-2 论文里的重点不是人工设计一套统一 prompt 模板,而是模型可能已经从 WebText 中见过大量“自然发生的任务示范”。
翻译任务在论文实验中会给出若干类似的平行句对,然后让模型补全最后一个等号后的内容:
1 | English sentence = French sentence |
摘要任务则明确用了 TL;DR: 作为任务提示:
1 | 文章正文 ... |
阅读理解问答任务使用的是“文档 + 对话历史 + 最后一个 A:”的形式:
1 | Document ... |
GPT-2 和 GPT-1 的差异在于:GPT-2 推理时不给标注训练集,也不更新参数,而是把任务变成文本续写问题。样本组织从“训练数据集格式转换”变成了“自然语言上下文提示”。
GPT-3:少量样本直接放进上下文
GPT-3 进一步把样本组织方式显式化。它不更新模型参数,而是把任务说明、少量输入输出示例和待预测样本一起放进上下文,让模型在前向推理过程中归纳任务模式。
论文对 few-shot 的一般组织方式是:从同一任务的训练集中抽取 K 个示例作为上下文,每个示例包含 context 和 completion,示例之间用 1 到 2 个换行分隔;最后放入一个只有 context 的待预测样本,让模型补全 completion。
例如分类任务可以抽象为:
1 | Sentence: I loved the movie. |
翻译任务在 GPT-3 论文附录中使用的 one-shot / few-shot 格式更接近等号连接的 context-completion:
1 | I love this movie. |
这些示例不是传统意义上的训练样本,因为模型参数不会更新。它们更像是临时任务定义,告诉模型“输入长什么样、输出长什么样、映射关系是什么”。GPT-3 论文把这种方式明确称为 few-shot:推理时给出少量 demonstrations,但只做前向计算,不做梯度更新。
样本组织方式对比
| 模型 | 样本放在哪里 | 样本是否参与参数更新 | 任务适配方式 | 关键变化 |
|---|---|---|---|---|
| GPT-1 | 下游任务训练集中 | 是 | 监督微调 | 把不同任务改造成统一序列输入 |
| GPT-2 | 大规模 WebText 中隐式存在;推理时只给 prompt | 否 | zero-shot 续写 | 把任务写成自然语言续写格式 |
| GPT-3 | prompt 上下文中显式给出少量示例 | 否 | zero-shot / one-shot / few-shot in-context learning | 用上下文示例临时定义任务 |
所以从多任务学习的样本组织角度看,GPT 系列的演进可以概括为:
1 | GPT-1:样本用于训练参数 |
在 GPT-3 的设定中,prompt 不再只是“提示模型输出什么”,而是变成了“组织任务样本和任务说明的接口”。
三代 GPT 的关键差异
| 模型 | 发布时间 | 参数规模 | 训练数据 | 任务适配方式 | 核心贡献 |
|---|---|---|---|---|---|
| GPT-1 | 2018 | 约 1.17 亿 | BooksCorpus | 预训练 + 监督微调 | 确立生成式预训练迁移范式 |
| GPT-2 | 2019 | 最大 1542M,约 15.4 亿 | WebText | zero-shot prompt / 文本续写 | 展示语言模型的无监督多任务能力 |
| GPT-3 | 2020 | 最大约 1750 亿 | Common Crawl、WebText2、Books、Wikipedia | zero-shot / one-shot / few-shot in-context learning | 系统展示少样本上下文学习能力 |
从 GPT-1 到 GPT-3,最关键的变化不是模型从 Transformer 换成了另一种架构,而是任务调用方式变了:
1 | GPT-1:模型学通用表示,下游任务再微调 |
为什么规模会这么重要
三篇论文共同指向一个结论:语言模型能力很大程度上受规模影响。这里的规模至少包含三层含义:
- 参数规模:更大的模型有更强的模式记忆和组合能力。
- 数据规模:更多样的文本让模型接触到更多任务、知识和表达格式。
- 计算规模:更长时间、更大 batch、更稳定的训练使模型能吸收数据中的规律。
GPT-2 和 GPT-3 论文都展示了类似现象:同一类模型,随着参数和数据增长,困惑度下降,迁移能力增强,少样本能力变得更明显。这不意味着“只要变大就能解决一切”,但它说明了一个非常重要的工程事实:在足够通用的训练目标下,扩大模型和数据本身就可能带来新的可用能力。
个人理解
GPT-1 的价值在于把“语言模型预训练”变成了 NLP 的基础设施。它告诉我们,语言模型不只是生成文本的模型,也可以为理解任务提供通用表示。
GPT-2 的价值在于改变了任务建模视角。很多任务不一定非要加一个分类头或设计专门网络,也可以被写成自然语言上下文中的生成问题。这为用 prompt 组织任务提供了一个很直接的视角。
GPT-3 的价值在于把 prompt 从“提示模型输出”提升为“在上下文中描述任务”。少样本示例不再只是输入数据,而是临时任务定义。模型看起来像是在学习新任务,但学习发生在前向推理过程中,而不是参数更新过程中。
因此,GPT-1、GPT-2、GPT-3 的演进可以概括为:
1 | 预训练迁移 -> 零样本续写 -> 上下文学习 |
这条线索可以帮助理解 GPT 系列三篇论文的共同范式:先用通用语言模型目标从大规模文本中学习知识和模式,再通过微调、提示或上下文示例等方式把能力调用出来。