GPT-3论文精读-Language Models are Few-Shot Learners:GPT-3 如何把“大模型”推向 In-Context Learning 时代
作者:千天夜
方向:大模型论文精读 / NLP / Transformer
论文:Language Models are Few-Shot Learners
核心关键词:GPT-3、Few-shot、In-context Learning、Decoder-only、Prompt、Scaling Law
摘要
如果说 BERT 代表了“预训练 + 微调”的大规模语言理解时代,那么 GPT-3 则把大模型推向了另一个方向:
预训练一个足够大的语言模型,
然后不微调,
只通过自然语言指令和少量示例完成任务。
这篇论文最著名的观点就是标题本身:
Language Models are Few-Shot Learners
语言模型本身就是小样本学习器
当然,这里的 few-shot 和传统机器学习里的 few-shot 不完全一样。GPT-3 论文里的 few-shot 指的是:把几个任务示例放进 prompt 里,让模型在上下文中理解任务,而不是拿少量样本更新模型参数。
这篇文章我会按照论文主线,从研究动机、模型结构、训练数据、in-context learning、实验结论和局限性几个方面精读 GPT-3。中间也会重点解释几个容易混淆的问题:
1. RNN 表征是什么?
2. GPT-3 到底有没有 encode?
3. Encoder 模块和普通 encode 有什么区别?
4. 双向就是 Encoder,单向就是 Decoder 吗?
5. GPT-3 的 few-shot 到底是不是微调?
一、论文想解决什么问题?
在 GPT-3 之前,NLP 的主流路线大致是:
大规模无监督预训练
↓
下游任务微调
↓
得到任务专用模型
比如 BERT 就是典型代表。
我们先在大量文本上预训练一个通用语言模型,然后针对情感分类、问答、自然语言推理、命名实体识别等任务分别微调。
这种方法很强,但它有一个问题:
每来一个新任务,往往还需要一批标注数据和一次微调过程。
而人类不是这样学习的。
比如别人告诉我们:
请把英文翻译成中文:
apple -> 苹果
dog -> 狗
cat ->
我们基本马上就知道,cat 应该翻译成 猫。
我们不需要重新训练大脑参数,也不需要几万条标注样本。
GPT-3 论文想验证的就是:
如果语言模型足够大,
它能不能也像人类一样,
只通过任务说明和少量例子理解新任务?
这就是 GPT-3 论文的核心问题。
二、从 RNN 表征到 Transformer 表征
在理解 GPT-3 之前,我们先补一个概念:RNN 表征是什么?
早期 NLP 里,我们经常用 RNN、LSTM、GRU 处理序列。
比如一句话:
I love this movie
RNN 会按顺序读:
I → love → this → movie
每读一个词,都会更新一次隐藏状态:
h1 = RNN(I)
h2 = RNN(love, h1)
h3 = RNN(this, h2)
h4 = RNN(movie, h3)
最后的 h4 就可以看作这句话的向量表示,也就是所谓的 文本表征。
所以,RNN 表征可以简单理解为:
用循环神经网络把文本序列压缩成向量表示。
但是 RNN 有一个问题:它是顺序计算的。
必须先算 h1,才能算 h2;
必须先算 h2,才能算 h3。
这导致长距离依赖难学,训练也不够并行。
Transformer 的出现,就是为了解决这个问题。它不用循环结构,而是通过 self-attention 让 token 之间直接建立联系。
比如一句话:
The animal didn't cross the street because it was too tired.
模型需要知道 it 指的是 animal,而不是 street。RNN 要靠隐藏状态一层层传过去,而 Transformer 可以通过 attention 直接让 it 关注到 animal。
因此,从 RNN 到 Transformer,本质上是:
从“顺序传递上下文”
变成
“通过 attention 直接建模 token 关系”
三、GPT-3 到底有没有 Encoder?
这个问题非常容易混。
很多人听到 GPT-3 是 Decoder-only Transformer,就会以为:
GPT-3 没有 encode。
但这句话是不准确的。
准确说法应该是:
GPT-3 有文本编码过程,
但 GPT-3 没有 Transformer Encoder 模块。
这两个东西不是一回事。
任何语言模型处理文本时,都要先做编码。
比如输入:
The cat is
GPT-3 会先做:
原始文本
↓
Tokenizer 分词
↓
Token ID
↓
Token Embedding
↓
Transformer 层
↓
预测下一个 token
这里的:
文本 → token → id → embedding
当然可以叫 encode。
所以 GPT-3 不是“不编码文本”。
GPT-3 只是没有使用 BERT 那种 Transformer Encoder stack。
四、Encoder、Decoder、encode 三个概念不要混
这里是我认为初学者最容易卡住的地方。
我们要区分三个概念:
1. encode:一个动作,把文本变成向量表示
2. Encoder:Transformer 里的一类结构模块
3. Decoder:Transformer 里另一类结构模块
4.1 普通 encode 是什么?
普通 encode 是泛称。
比如:
“猫” → token id → embedding vector
这就是编码。
无论是 BERT、GPT-3、T5、LLaMA、Qwen,只要处理文本,都需要这一步。
所以:
所有语言模型都有 encode 过程。
4.2 Transformer Encoder 是什么?
Transformer Encoder 是一种具体网络结构。
它的典型特点是:
双向 self-attention
也就是说,一个 token 可以同时看左边和右边。
比如句子:
I love this movie because it is exciting.
在 BERT 中,movie 可以看到:
左边:I love this
右边:because it is exciting
所以 BERT 更适合做:
理解
分类
抽取
匹配
检索
BERT 的典型流程是:
[CLS] I love this movie . [SEP]
↓
Transformer Encoder
↓
取 [CLS] 向量
↓
分类头
↓
positive
它像是:
先读完整句话,
再做判断。
4.3 GPT-3 的 Decoder-only 是什么?
GPT-3 是自回归语言模型,它的目标是:
根据前文预测下一个 token。
比如:
I love this
模型预测:
movie
所以 GPT-3 不能偷看未来 token。
它的注意力是因果的:
I 只能看 I
love 只能看 I love
this 只能看 I love this
movie 只能看 I love this movie
也就是:
后面的 token 可以看前面的 token,
前面的 token 不能看后面的 token。
这就是 GPT-3 的 causal attention / masked self-attention。
五、双向就是 Encoder,单向就是 Decoder 吗?
作为入门理解,可以先这样记:
双向注意力 ≈ Encoder 风格
单向因果注意力 ≈ Decoder-only 风格
但是严格来说,不能简单等价。
更准确的说法是:
Encoder / Decoder 是结构角色;
双向 / 单向 是注意力可见范围。
BERT 是:
Encoder-only + 双向注意力 + 适合理解
GPT-3 是:
Decoder-only + 单向因果注意力 + 适合生成
原始 Transformer 是:
Encoder 读完整输入
Decoder 逐步生成输出
比如机器翻译:
English: I love you.
↓ Encoder
语义表示
↓ Decoder
French: Je t'aime.
但 GPT-3 没有 Encoder,也没有 cross-attention。
GPT-3 更像是:
prompt → 继续生成
比如:
Classify the sentiment.
Sentence: I love this movie.
Sentiment:
GPT-3 继续生成:
positive
所以 GPT-3 的所有任务,都被包装成了“文本续写”。
六、GPT-3 的核心:In-Context Learning
GPT-3 论文真正重要的地方,不是提出了一个新 attention 结构,而是提出并系统验证了:
大规模语言模型可以通过上下文进行任务学习。
这就是 In-Context Learning。
它的形式非常简单:
任务说明 + 少量示例 + 新输入 → 模型生成答案
例如翻译任务:
Translate English to French:
sea otter => loutre de mer
cheese => fromage
apple =>
模型看到前面的示例后,会继续生成:
pomme
注意,这里没有梯度下降,没有反向传播,没有更新参数。
模型只是在 prompt 里识别出了一个模式:
这是英文到法文的映射任务。
这就是 GPT-3 论文里 few-shot 的核心。
传统机器学习里的 few-shot 通常是:
给少量样本,更新模型参数。
GPT-3 里的 few-shot 是:
给少量样本,不更新参数,只放进上下文。
所以 GPT-3 的 few-shot 更准确地说应该叫:
few-shot prompting
或者
in-context few-shot learning
七、Zero-shot、One-shot、Few-shot、Fine-tuning 的区别
GPT-3 论文非常重要的一点,是把不同任务适应方式分得很清楚。
7.1 Fine-tuning
Fine-tuning 是传统方法。
预训练模型
↓
任务数据集
↓
梯度更新
↓
任务专用模型
比如情感分类:
输入:This movie is wonderful.
标签:positive
用大量样本继续训练模型,让模型参数发生变化。
特点是:
需要训练数据
需要反向传播
需要更新参数
效果通常很强
但每个任务都要单独处理
7.2 Few-shot
GPT-3 里的 few-shot 是:
给多个示例,但不更新参数。
比如:
Sentence: I love this movie.
Sentiment: positive
Sentence: This film is terrible.
Sentiment: negative
Sentence: The acting is wonderful.
Sentiment: positive
Sentence: This movie is boring.
Sentiment:
模型输出:
negative
这里的前三个样本不是训练数据,而是 prompt 的一部分。
7.3 One-shot
One-shot 是只给一个示例:
Sentence: I love this movie.
Sentiment: positive
Sentence: This film is boring.
Sentiment:
模型要根据一个例子理解任务格式。
7.4 Zero-shot
Zero-shot 是不给示例,只给指令:
Classify the sentiment of this sentence:
This movie is boring.
Sentiment:
模型直接输出:
negative
从难度上看:
Fine-tuning < Few-shot < One-shot < Zero-shot
从数据依赖上看:
Fine-tuning 最大
Few-shot 较小
One-shot 更小
Zero-shot 最小
这正是 GPT-3 论文想强调的方向:
让模型尽量少依赖任务专用数据,
尽量通过自然语言交互完成任务。
八、GPT-3 的模型结构:没有新模块,重点是规模
GPT-3 不是一篇“发明新结构”的论文。
它基本沿用 GPT-2 风格的 Decoder-only Transformer。
论文真正想验证的是:
如果把自回归语言模型继续放大,
会不会出现更强的上下文学习能力?
GPT-3 最大模型有:
参数量:175B
层数:96 层
隐藏维度:12288
注意力头数:96
上下文窗口:2048 tokens
训练 token 数:300B
作者还训练了 8 个不同规模的模型,从 125M 到 175B,用来观察规模变化带来的性能趋势。
这个设计很重要。
因为作者不是只想证明:
GPT-3 很强。
而是想证明:
随着模型规模变大,
few-shot / one-shot / zero-shot 能力会整体增强。
所以 GPT-3 的关键词不是“新结构”,而是:
scale
scaling law
in-context learning
few-shot performance
九、GPT-3 的训练数据:Common Crawl + 高质量语料混合
GPT-3 的训练数据主要来自:
Common Crawl
WebText2
Books1
Books2
Wikipedia
其中 Common Crawl 最大,但网页数据质量参差不齐,所以作者没有直接全量使用,而是做了过滤、去重和混合采样。
这里有一个很重要的思想:
数据不是越多越好,
高质量数据要有更高采样权重。
如果完全按网页数据量采样,模型可能会被大量低质量文本影响,比如:
广告页面
SEO 垃圾文本
重复模板
论坛碎片
乱码内容
所以 GPT-3 的数据处理大致包括:
1. 对 Common Crawl 做质量过滤
2. 做文档级 fuzzy deduplication,去掉近似重复
3. 混入 WebText、Books、Wikipedia 等高质量语料
这个思想后来在大模型训练中越来越重要。
现在我们已经很清楚:
模型能力 = 模型规模 + 数据规模 + 数据质量 + 训练策略
不是单纯堆参数就够了。
十、实验结果:后面其实主要是验证,不是提出新理论
GPT-3 论文后面的实验非常多,包括:
语言建模
LAMBADA
闭卷问答
翻译
Winograd / Winogrande
阅读理解
SuperGLUE
自然语言推理
算术
单词重排
新闻生成
但这些实验大多是在验证同一个核心观点:
模型越大,in-context learning 能力通常越强。
更具体一点:
few-shot 通常强于 one-shot
one-shot 通常强于 zero-shot
大模型通常强于小模型
这不代表 GPT-3 在所有任务上都达到了最强。
论文也指出,GPT-3 在一些任务上仍然表现不稳定,尤其是复杂推理、长程一致性、精确计算、专业领域任务等。
比如算术任务很有意思。
GPT-3 在简单加减法上随着规模变大有明显提升,但这并不说明它真正掌握了稳定的数学算法。
更准确地说:
它从大量文本中学到了一些计算模式,
但还不能保证像符号计算器一样稳定可靠。
这也是后来为什么会出现:
Chain-of-Thought
工具调用
代码解释器
检索增强
计算器增强
因为语言模型本身的生成能力很强,但精确推理和精确计算仍然需要额外机制增强。
十一、闭卷问答:模型参数里真的存了知识吗?
GPT-3 的 closed-book QA 很有代表性。
所谓 closed-book QA,就是:
不接搜索引擎
不接数据库
不接外部知识库
直接靠模型参数回答问题
例如:
Q: Who wrote the novel 1984?
A: George Orwell
这种任务说明,语言模型在预训练过程中确实压缩了大量世界知识。
但问题也很明显:
模型可能答对,
也可能一本正经地胡说。
这就是大模型幻觉问题。
为什么会这样?
因为 GPT-3 的训练目标本质上是:
预测下一个 token
它不是一个数据库,也不是一个逻辑证明系统。
它生成的是“在当前上下文下最可能出现的文本”,而不是“经过事实校验后的答案”。
所以我们使用大模型时要记住:
语言模型很会生成合理文本,
但合理文本不一定等于真实事实。
十二、数据污染:大模型评测必须面对的问题
GPT-3 使用了大规模互联网语料,而很多 benchmark 题目也可能出现在互联网上。
这会带来一个问题:
模型会不会在预训练时见过测试集?
如果见过,那么测试成绩就可能虚高。
这就是 Data Contamination,数据污染。
GPT-3 论文专门讨论了这个问题。作者尝试检测和移除 benchmark 重叠数据,但也承认过滤过程并不完美。
这个问题对我们做研究非常重要。
如果以后我们自己训练或评测大模型,一定要关注:
训练集和测试集是否重叠
benchmark 是否被互联网公开传播
是否做了去重
是否有私有测试集
是否使用时间切分
是否进行 contamination check
大模型时代,评测不只是“跑个分数”。
更重要的是:
这个分数到底可信不可信?
十三、GPT-3 的局限性
GPT-3 很强,但并不完美。
论文中提到的局限可以总结为:
1. 会生成错误事实
2. 长文本一致性不稳定
3. 复杂推理能力有限
4. 数学和精确计算不可靠
5. 对训练数据分布高度敏感
6. 训练和推理成本极高
7. 可能放大数据中的偏见
8. 可能被用于生成虚假信息
这一点非常关键。
GPT-3 不是“真正解决语言理解”的终点,而是证明了一件事:
规模扩大可以显著改变语言模型的能力边界。
它把研究重点从:
如何为每个任务设计模型?
推进到:
如何训练一个足够通用的模型,
让它通过自然语言交互适应不同任务?
十四、GPT-3 论文真正的贡献
读完整篇论文后,我认为 GPT-3 的贡献可以概括为四点。
14.1 系统验证了 Scaling 的威力
GPT-3 告诉我们:
模型规模扩大后,
不是简单地“语言建模 loss 变低”,
而是会带来更强的任务泛化能力。
这为后来的大模型路线奠定了基础。
14.2 把 In-Context Learning 推到了核心位置
GPT-3 之前,主流范式还是:
pretrain + fine-tune
GPT-3 之后,大家开始重视:
pretrain + prompt
也就是:
任务不一定要通过参数更新完成,
也可以通过上下文描述完成。
这正是今天大模型应用的基本形态。
14.3 统一了很多 NLP 任务的形式
GPT-3 把分类、翻译、问答、推理、摘要等任务都包装成:
输入文本 → 输出文本
比如分类不再一定需要分类头,而可以写成:
Sentence: I love this movie.
Sentiment:
然后让模型生成:
positive
这一步非常关键。
它让大模型从“任务专用系统”走向“通用文本接口”。
14.4 暴露了大模型时代的新问题
GPT-3 也让我们看到了新问题:
幻觉
偏见
数据污染
高成本
可解释性不足
滥用风险
所以 GPT-3 不只是技术论文,也是一篇大模型时代的转折点论文。
十五、和 BERT 的路线对比
最后再把 BERT 和 GPT-3 放在一起看。
| 对比项 | BERT | GPT-3 |
|---|---|---|
| 架构 | Encoder-only | Decoder-only |
| 注意力 | 双向 self-attention | 单向 causal attention |
| 训练目标 | Masked Language Modeling | Next Token Prediction |
| 典型用法 | 预训练 + 微调 | 预训练 + prompt |
| 适合任务 | 理解、分类、抽取 | 生成、对话、续写、few-shot |
| 是否天然生成文本 | 不强 | 强 |
| 是否依赖任务微调 | 通常依赖 | 论文中不微调 |
| 核心思想 | 学到强表征 | 学到通用上下文适应能力 |
一句话总结:
BERT 更像是一个强大的语言理解器;
GPT-3 更像是一个强大的文本续写器。
但正是因为“续写”这个形式足够通用,所以 GPT-3 可以把很多任务都转成 prompt completion。
十六、最终总结
《Language Models are Few-Shot Learners》这篇论文没有提出新的 Transformer 核心模块,也没有像 BERT 那样设计新的预训练目标。
它真正重要的地方在于:
当语言模型规模足够大时,
它可以在不更新参数的情况下,
仅凭自然语言指令和少量示例完成大量任务。
也就是说,GPT-3 把大模型研究从:
预训练 + 微调
推向了:
预训练 + 上下文学习
这也是今天我们使用 ChatGPT、Claude、Gemini、Qwen、LLaMA 等大模型的基本方式。
我们不再为每个任务训练一个模型,而是直接写 prompt:
请总结这段话
请翻译成英文
请解释这段代码
请判断情感倾向
请根据例子完成任务
这背后的思想源头之一,就是 GPT-3 这篇论文。
所以,如果只用一句话概括 GPT-3 的贡献,我会这样写:
GPT-3 证明了:大规模自回归语言模型不仅能生成文本,还能通过上下文表现出近似“小样本学习”的能力。
这也是它成为大模型发展史上关键节点的原因。
参考文献
- Brown et al., Language Models are Few-Shot Learners, 2020.
- Devlin et al., BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, 2018.
- Vaswani et al., Attention Is All You Need, 2017.
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)