很久没有更新博客了,从今天重新开始吧。本周主要阅读了两篇 GPT 的原始论文。
一、Language Models are Unsupervised Multitask Learners
GPT-2的原始论文
文章观点归纳:
1. 语言模型本身就是多任务学习器
- 传统观点:每个 NLP 任务(如问答、翻译、摘要)需要专门的监督训练。
- 本文主张:一个在大规模无标签文本上训练的纯语言模型(LM),在没有任务特定微调的情况下,就能在多种下游任务上表现出色。
- 原因:训练数据中天然包含各种任务形式(如问答对、新闻、维基百科条目),模型通过预测下一个词,隐式学习了任务结构。
✅ 关键洞见:“Zero-shot” 能力——无需微调、无需任务标签,仅靠语言建模目标即可泛化到多种任务。
2. 模型规模与数据规模至关重要
- GPT-2 拥有 1.5B 参数(当时最大之一),训练数据为 WebText(40GB 清洗后的网页文本,约 800 万网页)。
- 实验表明:更大的模型 + 更多的数据 → 更强的 zero-shot 性能。
- 图 4(你提供的内容中提到)展示了模型大小与 WebText 测试集困惑度(perplexity)的关系:模型越大,性能越好,且未饱和(仍在欠拟合)。
3. Zero-shot 性能令人惊讶
- GPT-2 在未见过任务标签的情况下,在多个标准数据集上取得当时最强或接近最强的 zero-shot 结果,例如:
- LAMBADA(语言建模长距离依赖):63.2% 准确率(SOTA)
- CoQA(对话式问答):接近有监督模型的表现
- Winograd Schema(常识推理):显著优于基线
- 这证明了通用语言模型具备跨任务迁移能力。
4. 数据污染(Data Contamination)分析
- 你提供的文本详细讨论了 WebText 与测试集(如 CoQA、LAMBADA)的n-gram 重叠问题。
- 发现:少量测试样本确实出现在训练数据中(如新闻文章重复),带来 0.5–3 F1 的性能提升。
- 但作者强调:整体影响很小(如 LAMBADA 仅下降 0.3% 准确率),说明性能主要来自泛化,而非记忆。
🛡️ 建议:未来数据集构建应使用 n-gram 去重作为标准流程。
5. 模型仍处于欠拟合状态
- 尽管 GPT-2 很大,但在 WebText 上训练损失和测试损失同步下降,说明模型容量仍未被充分利用。
- 暗示:继续扩大模型和数据仍有收益(为 GPT-3 埋下伏笔)。
6. 生成能力强大但存在风险
- GPT-2 能生成连贯、逼真的新闻文章(如“会说话的独角兽”示例)。
- 正因如此,OpenAI 最初拒绝发布完整模型,担心被滥用(如生成假新闻)。
- 这引发了关于大模型开源与安全的广泛讨论。
❓问题
1.什么是 zero-shot?
零样本学习,相比之前的需要给AI示例,也无需标注,zero-shot无需给实际的示例。
2.还有其他什么方式?
| 类型 | 是否需要任务数据 | 是否微调 | 是否给示例 | 举例 |
|---|---|---|---|---|
| Zero-shot | ❌ | ❌ | ❌ | 直接问“翻译:Hello → ?” |
| Few-shot | ❌ | ❌ | ✅(给几个例子) | 先给 2 个翻译例子,再问新句子 |
| Fine-tuning | ✅(大量标注数据) | ✅ | ❌ | 用 10 万句英中句子微调模型 |
3.zero-shot又哪些优势?
- 降低使用门槛:无需收集标注数据或训练模型。
- 体现模型泛化能力:真正“理解”而非记忆。
- 支持长尾任务:对罕见任务(如小语种翻译)也能尝试。
- 推动通用人工智能(AGI):一个模型解决无限任务。
4.zero-shot 如何提升性能?
根据文章中的实验结果
-
实验表明:更大的模型 + 更多的数据 → 更强的 zero-shot 性能。

从这个图表可以看出,在ROUGE 指标上虽然不如 SOTA,但胜于Random-3 这个随机模型。
5.什么是ROUGE 指标说明?
- ROUGE-1 (R-1):衡量单个词的重叠(unigram overlap),反映词汇匹配度。
- ROUGE-2 (R-2):衡量连续两个词的重叠(bigram overlap),反映短语结构相似性。
- ROUGE-L (R-L):衡量最长公共子序列(Longest Common Subsequence),反映句子结构和顺序一致性。
- ROUGE-AVG (R-AVG):三个指标的平均值,综合评估摘要质量。
⚠️ 注意:ROUGE 是自动评估指标,不能完全代表人类感知质量,但广泛用于比较模型性能。
6.n-gram 重叠问题是什么?
n-gram 重叠问题(n-gram overlap problem)是自然语言处理(NLP)和大语言模型(LLM)评估中的一个关键概念,尤其在数据泄露(data leakage)和评估可靠性方面具有重要意义。
- n-gram 是指文本中连续的 n 个词(或字、token)组成的序列。
- 1-gram(unigram):单个词,如 “语言”
- 2-gram(bigram):两个连续词,如 “语言模型”
- 3-gram(trigram):三个连续词,如 “语言模型强大”
- 8-gram:八个连续词(常用于检测高度重复内容)
n-gram 重叠问题指的是:训练数据与测试数据(或验证数据)。
这会导致模型在测试时“见过”答案或上下文,从而高估其真实泛化能力——本质上是一种数据污染(data contamination)。
7.为什么需要关注 n-gram 重叠?
| 问题 | 后果 |
|---|---|
| 评估失真 | 模型看似很强,实则靠“背答案” |
| 误导研究方向 | 错误归因性能提升来自架构改进,而非数据泄露 |
| 无法公平比较 | 不同模型使用不同训练数据,重叠程度不同 |
二、Language Models are Few-Shot Learners
🔑 核心观点提炼
1. 核心主张:大语言模型无需微调即可完成多种任务
“只要模型足够大,仅通过自然语言提示(prompt),就能在未见过的任务上取得强大性能。”
- 不需要:
- 任务特定的训练数据
- 微调(fine-tuning)
- 梯度更新
- 只需要:
- 一个自然语言指令(zero-shot)
- 或加上几个示例(few-shot)
✅ 这标志着从“专用模型”到“通用语言接口”的范式转变。
2. 模型规模是关键:175B 参数带来质变
GPT-3 包含多个模型规模(从 125M 到 175B 参数),实验表明:
- 性能随参数量平滑提升(scaling laws)
- 小模型(<1B)在 few-shot 任务上几乎无效
- 大模型(如 175B)在 many tasks 上接近或超过微调的 SOTA
📈 图表显示:在 Winograd、RACE、ARC 等任务上,175B 模型的 few-shot 曲线陡峭上升,而小模型几乎水平。
3. Few-shot 能力远超 zero-shot,但无需微调
- Zero-shot:仅给任务描述(如 “Translate English to French: Hello →”)
- One-shot:给 1 个例子 + 新问题
- Few-shot(通常 10–100 个例子):在上下文(context window)中提供示例
📌 关键发现:
在大多数任务中,few-shot 性能显著优于 zero-shot,且接近或超过微调的小模型(如 BERT、RoBERTa)。
但注意:GPT-3 本身从未在这些任务上微调过——所有知识来自预训练。
4. 覆盖任务极广:从问答到编程
你提供的附录片段展示了 GPT-3 在多种标准数据集上的格式化输入示例,包括:
| 数据集 | 任务类型 | 示例 |
|---|---|---|
| SQuADv2 | 阅读理解 | “Context: … Question: Is normal force equal to gravity? → Answer: yes” |
| BoolQ | 是非问答 | “Manhattan comes cheap? → false” |
| CB | 自然语言推理 | “Top quark is last of six? → False” |
| RTE / WiC | 语义相似性、词义消歧 | “Is ‘outfitter’ used the same way? → no” |
| Winograd | 常识推理 | 解析代词指代(如 “his” 指谁) |
💡 这些示例说明:所有任务都被统一为“文本补全”问题,无需修改模型结构。
5. 性能表现:部分任务达到人类水平
从你提供的表格数据(如 Winograd、PIQA、ARC、RACE、SQuADv2)可见:
- Winograd Schema(常识推理):GPT-3 175B 达到 88.6%(接近人类 94%)
- PIQA(物理常识):82.8%(SOTA)
- ARC Challenge(科学问答):51.5%(远超随机 25%)
- RACE-m(中学阅读理解):58.1%
- SQuADv2 F1:64.9(虽低于微调模型 ~90,但在 zero/few-shot 中领先)
⚠️ 但在数学、逻辑推理等任务上仍较弱(需后续模型如 PAL、Chain-of-Thought 改进)。
6. 训练与数据
- 模型架构:Transformer 解码器(与 GPT-2 相同,但更大)
- 训练数据:Filtered CommonCrawl + WebText2 + Books1/2 + Wikipedia(共 ~570GB)
- 词表:50,257 BPE tokens
- 训练目标:标准语言建模(最大化下一个词的似然)
🌐 数据多样性是 few-shot 能力的基础。
7. 局限性与风险
论文坦承 GPT-3 的问题:
- 生成虚假信息(hallucination)
- 偏见放大(性别、种族等)
- 无法更新知识(静态训练)
- 高计算成本(推理昂贵)
🔒 因此 OpenAI 以 API 形式限制访问,而非开源模型。
🧩 与 GPT-2 的关键区别
| 特性 | GPT-2 (2019) | GPT-3 (2020) |
|---|---|---|
| 参数量 | 1.5B | 175B(100 倍) |
| 核心范式 | Zero-shot | Few-shot + Zero-shot |
| 任务覆盖 | 初步验证 | 50+ 任务系统评估 |
| 开源 | 部分开源 | 闭源,仅 API |
| 性能 | 弱于微调模型 | 部分任务超越微调模型 |
✅ 总结一句话:
GPT-3 证明:当语言模型足够大时,仅通过上下文中的几个示例(few-shot),无需任何参数更新,就能在广泛任务上实现接近人类或 SOTA 的表现——这标志着通用语言智能的重大突破。
❓问题
1.为什么又用了few-shot?
GPT-3 的巨大参数量使其在预训练中获得了强大的“从上下文学习任务”的能力;而 few-shot prompt 是一种高效利用这种能力的方式——不是为了筛选训练数据,而是在推理时动态引导模型行为。
2.few-shot prompt 有哪些技巧
1) 任务隐式定义(Implicit Task Specification)
✨ 不解释规则,只示范行为
- 技巧:避免使用元语言描述任务(如“请判断句子是否合乎语法”),而是直接给出 输入 → 输出 的成对示例。
- 原理:大模型擅长模式匹配,而非逻辑推理。示例比指令更可靠。
- 示例对比:
-
❌ 差:“判断以下句子是否语法正确。”
-
✅ 好:
Text编辑 Poor English input: I eated pizza. Good English output: I ate pizza.
-
📌 关键:让模型从“怎么做”中学习“做什么”。
2.)格式一致性(Format Consistency)
🧱 严格统一输入/输出结构
-
技巧:所有示例使用完全相同的模板格式(如固定前缀、换行、标点)。
-
作用:
- 减少歧义
- 强化模式信号
- 避免模型混淆任务边界
-
实例(BoolQ):→ 问题以问号结尾,答案独占一行,小写。
Text编辑 Do hamsters provide food for any animals? yes Could a llama birth twice during War in Vietnam (1945-46)? no
⚠️ 实验表明:格式混乱会使 few-shot 性能下降 10–30%。
3.)自然语言接口(Natural Language Interface)
🗣️ 像人一样交流,不用机器标记
- 技巧:拒绝 XML/JSON/特殊 token,全部使用人类可读的自然语言。
- 原因:
- 预训练数据中极少出现结构化标记
- 模型更熟悉“Q: … A: …”这类真实对话格式
- 对比:
- ❌ 机器式:
<input>Today I have went</input> → <output>Today I went</output> - ✅ 人类式:
Poor English input: Today I have went... → Good English output: Today I went...
- ❌ 机器式:
💡 这体现了“语言即接口”(Language as Interface)的设计哲学。
4.)上下文位置与顺序(Example Ordering & Positioning)
📚 最新示例最有效,简单任务放前面
- 技巧:
- 将目标任务紧接在最后一个示例之后(利用 Transformer 的局部注意力偏好)
- 若示例难度不同,由易到难排列(帮助模型逐步构建抽象)
- 论文证据:GPT-3 在上下文末尾的示例权重更高(类似 recency bias)。
🔄 虽然论文未显式调序,但后续研究(如 “Demonstration Ordering”)证实顺序影响显著。
5)任务解耦与原子化(Task Atomicity)
🔍 一个 prompt 只解决一个子任务
-
技巧:每个 few-shot prompt 聚焦单一、原子化任务(如“语法纠错”而非“文本润色”)。
-
原因:
- 多任务混合会稀释模式信号
- 模型难以同时学习多个映射规则
-
反例:
Text编辑 Fix grammar: I eated → I ate Summarize: The cat... → A cat sat. ❌ 混合任务
✅ 正确做法:为每个任务单独设计 prompt。
6)利用预训练中的“元知识”(Leveraging Pretraining Priors)
🧠 选择模型熟悉的任务表述方式
- 技巧:prompt 格式尽量匹配预训练数据中高频出现的结构,例如:
- 问答:
Q: ... A: ...(来自 FAQ、Quora) - 翻译:
English: ... French: ...(来自多语网页) - 摘要:
TL;DR: ...(来自 Reddit)
- 问答:
- 原理:模型已内化这些“任务模板”作为条件生成的先验。
🌐 例如 GPT-3 在 Winograd 任务中表现好,部分因为代词消歧在新闻/小说中极常见。
🔬 额外高级技巧(论文隐含或后续研究证实)
| 技巧 | 说明 |
|---|---|
| 示例多样性 | 避免重复句式,覆盖不同语义场景(防过拟合表面模式) |
| 答案简洁性 | 输出尽量简短(如 yes/no),减少生成噪声 |
| 避免歧义示例 | 不使用边界案例(如“maybe”类答案),除非任务需要 |
| 零样本作为基线 | 先测试 zero-shot,再决定是否加示例(有些任务加了反而降分) |
📊 效果验证(来自 GPT-3 论文)
| 任务 | Zero-shot | Few-shot (K=10) | 提升 |
|---|---|---|---|
| Winograd | 70.2% | 88.6% | +18.4% |
| PIQA | 73.3% | 82.8% | +9.5% |
| ANLI R3 | 33.1% | 48.2% | +15.1% |
→ 证明良好设计的 few-shot prompt 能显著激活大模型潜力。
评论区