在前几篇文章中,我们分别精读了 GPT-1 和 BERT。

GPT-1 的核心思想是:

生成式预训练 + 下游任务有监督微调

它先在大规模无标注文本上训练 Transformer Decoder 语言模型,然后再把模型迁移到文本分类、自然语言推理、问答等下游任务中进行微调。

BERT 的核心思想是:

双向 Transformer Encoder + MLM / NSP 预训练 + 下游任务微调

它通过 Masked Language Modeling 学习双向语言表示,在自然语言理解任务上取得了很强效果。

但是,GPT-2 开始提出一个更大胆的问题:

如果语言模型足够大,训练数据足够多,它能不能不经过下游任务微调,直接完成很多 NLP 任务?

这就是 GPT-2 论文的核心问题。GPT-2 对应的论文是:

Language Models are Unsupervised Multitask Learners

这个标题非常关键。它的意思不是“语言模型只是一个文本生成器”,而是:

当语言模型在足够大、足够多样的文本上进行训练时,它可能会从文本中自然学到许多任务的模式,从而在没有显式监督和微调的情况下完成多种任务。

这就是 GPT-2 相比 GPT-1 的重要变化:
GPT-1 重点验证 预训练 + 微调
GPT-2 开始探索 预训练语言模型的 zero-shot 任务迁移能力


一、GPT-2 想解决什么问题?

在 GPT-2 之前,主流 NLP 系统通常采用任务特定训练方式。

例如:

机器翻译:需要平行语料
阅读理解:需要文章、问题和答案标注
文本摘要:需要文章和人工摘要
文本分类:需要类别标签
自然语言推理:需要句子对和推理关系标签

这些系统在各自任务上可以表现很好,但它们往往是“窄任务专家”。

也就是说:

一个模型解决一个任务
一个数据集训练一个模型
一个任务需要一种标注格式

这种方式有几个问题。

首先,人工标注成本很高。每一个新任务都需要重新收集数据和设计标注规范。

其次,模型泛化能力有限。一个模型在训练任务上表现好,不代表它可以直接迁移到新任务。

再次,任务形式高度碎片化。翻译、摘要、问答、分类、阅读理解看起来都需要不同的输入输出格式和训练目标。

GPT-2 想探索另一种可能性:

能不能只训练一个通用语言模型,然后通过自然语言上下文让它自动表现出不同任务能力?

例如,如果模型在训练语料中见过大量这样的文本模式:

英文:I love machine learning.
中文:我喜欢机器学习。

它可能会学到翻译模式。如果模型见过大量这样的文本模式:

文章:……
摘要:……

它可能会学到摘要模式。如果模型见过大量这样的文本模式:

问题:谁提出了相对论?
答案:爱因斯坦。

它可能会学到问答模式。

GPT-2 的核心假设是:

大规模语言模型可以从自然文本中学习任务,而不一定需要显式的任务标注。

这就是论文标题中 “Unsupervised Multitask Learners” 的含义。


二、从 GPT-1 到 GPT-2:核心变化是什么?

GPT-1 和 GPT-2 都使用 Decoder-only Transformer,也都采用自回归语言建模目标。它们的语言模型目标都是:

P(x_1, x_2, \ldots, x_n)= \prod_{i=1}^{n} P(x_i | x_1, x_2, \ldots, x_{i-1})

也就是:

给定前面的 token,预测下一个 token。

但是,GPT-2 相比 GPT-1 有三个重要变化。

1. 更大的模型规模

GPT-1 大约是 117M 参数。GPT-2 最大模型达到约 1.5B 参数,也就是 15 亿参数级别。这在当时已经是非常大的语言模型。GPT-2 论文中实验了多个模型规模:

模型规模 层数 隐藏维度
117M 12 768
345M 24 1024
762M 36 1280
1542M 48 1600

可以看到,GPT-2 不只是训练了一个模型,而是系统比较了不同模型规模对 zero-shot 任务迁移能力的影响。

2. 更大、更开放的数据集

GPT-1 使用 BooksCorpus 进行预训练。

GPT-2 则构建了一个新的网页文本数据集:WebText。

WebText 的构建思路是:从 Reddit 上获得至少 3 karma 的外链中抽取网页文本。这样做的直觉是,如果一个链接被用户点赞,说明它可能包含较有价值、有趣或信息密度较高的内容。

最终,GPT-2 使用的 WebText 初版数据经过清洗和去重后,包含超过 800 万文档,总文本量约 40GB。这和 GPT-1 的 BooksCorpus 相比,数据来源更广泛,文本类型更多样。

3. 不再依赖下游任务微调

这是 GPT-2 最关键的变化。GPT-1 的主要范式是:

预训练
  ↓
下游任务微调
  ↓
任务评估

GPT-2 则重点评估:

预训练
  ↓
不微调
  ↓
直接 zero-shot 测试

也就是说,GPT-2 希望证明:

一个足够大的语言模型,仅通过语言建模训练,也能在许多任务上表现出一定的任务能力。

这为后来的 GPT-3 few-shot / in-context learning 铺平了道路。


三、GPT-2 的模型结构

GPT-2 仍然使用 Decoder-only Transformer。整体流程可以写成:

输入 token 序列
  ↓
Token Embedding + Position Embedding
  ↓
Transformer Decoder Block × N
  ↓
输出每个位置的隐藏状态
  ↓
LM Head
  ↓
预测下一个 token

它的核心模块包括:

Masked Multi-Head Self-Attention
Feed Forward Network
Residual Connection
Layer Normalization
Position Embedding

和 GPT-1 一样,GPT-2 使用 causal mask,保证模型在预测当前位置时不能看到未来 token。例如输入序列:

语言 模型 可以 完成 多种 任务

当模型预测“完成”时,只能看到:

语言 模型 可以

不能看到后面的:

多种 任务

GPT-2 的训练目标仍然是最大化文本序列的似然:

\mathcal{L} = \sum_i \log P(x_i | x_1, x_2, \ldots, x_{i-1})

或者从损失角度写成:

\mathcal{L}_{NLL} = -\sum_i \log P(x_i | x_{<i})

其中:

  • x_i是当前位置 token;

  • x_{<i}表示当前位置之前的所有 token;

  • 模型目标是让真实下一个 token 的概率尽可能高。

所以,从结构和训练目标上看,GPT-2 并没有抛弃 GPT-1 的核心路线,而是进一步扩大了模型和数据规模,并改变了评估方式。


四、WebText:GPT-2 为什么要构建新数据集?

GPT-2 的一个重要贡献是构建了 WebText 数据集。为什么需要新数据集?

因为 GPT-2 的目标不是在某一个特定任务上训练专家模型,而是让语言模型从自然文本中学习各种任务模式。这就要求训练数据必须:

规模大
来源广
主题多样
语言形式丰富
包含自然出现的任务示例

书籍语料虽然质量高,但类型相对有限。相比之下,网页文本中可能包含:

新闻报道
博客文章
论坛讨论
教程
问答
摘要
评论
代码片段
产品说明
百科知识
翻译片段

这些文本中天然包含许多“任务格式”。例如:

Q: What is machine learning?
A: Machine learning is ...

或者:

TL;DR: ...

又或者:

English: ...
French: ...

GPT-2 的观点是:如果模型在训练过程中看到了足够多这种自然出现的示例,它可能会学会在类似提示下完成对应任务。这就是 zero-shot task transfer 的基础。

WebText 的构建方式

WebText 不是简单抓取整个互联网。它使用了一个简单的人类过滤信号:Reddit 用户投票。具体来说,GPT-2 收集了 Reddit 上至少获得 3 karma 的外链,然后提取这些网页中的文本内容。这样做的直觉是:

被用户点赞过的链接,往往比随机网页更可能包含有价值内容。

经过清洗、去重和过滤后,WebText 包含超过 800 万文档,总文本量约 40GB。论文还刻意移除了 Wikipedia 文档,因为 Wikipedia 经常出现在很多 NLP 评测数据中。这样可以减少训练数据和评测数据之间的重叠风险。


五、Byte-level BPE:GPT-2 如何处理文本?

GPT-2 使用了 byte-level BPE。在上一篇 Tokenizer 文章中,我们已经介绍过 BPE 的核心思想:

从小单位开始,不断合并高频相邻片段,形成子词词表。

GPT-2 的特别之处在于,它采用 byte-level 的方式。普通 BPE 通常从字符或预分词结果开始,而 byte-level BPE 从 UTF-8 字节层面出发,因此可以覆盖几乎任意文本字符串。这有几个好处。首先,它减少了未知 token 问题。传统词级 tokenizer 很容易遇到 OOV,例如:

新词
专有名词
代码变量
URL
表情符号
不同语言字符

byte-level BPE 可以把这些内容拆成字节级或子词级片段,从而避免大量未知词。其次,它对多种文本形式更友好。网页文本中经常出现:

URL
代码
HTML 残留
特殊符号
多语言片段
用户名
产品型号

如果 tokenizer 只能处理规范英文文本,就很难应对这些复杂输入。byte-level BPE 让模型可以更稳定地处理开放文本。不过,byte-level BPE 也可能让某些语言或特殊文本被切得更碎,从而增加 token 数量。这也是 tokenizer 设计中的常见权衡。


六、Zero-shot:GPT-2 到底是怎么做任务的?

GPT-2 的 zero-shot 不是今天经过 instruction tuning 后那种“直接听懂用户命令”的 zero-shot。GPT-2 没有经过指令微调,也没有 RLHF。它的 zero-shot 更像是:

通过给模型一个自然语言上下文,让模型按照它在预训练中学到的文本模式继续生成。

也就是说,GPT-2 完成任务的方式仍然是文本续写。

1. 问答任务

对于问答任务,可以把输入写成:

Question: Who wrote The Origin of Species?
Answer:

GPT-2 会继续生成答案。如果模型在预训练语料中见过大量问答格式,它可能会按照这种格式生成:

Charles Darwin

这就是问答任务的 zero-shot 形式。

2. 摘要任务

对于摘要任务,可以给模型文章,然后加上提示:

Article:
[一篇新闻文章]

TL;DR:

GPT-2 会根据前面的文章和 TL;DR: 这个提示继续生成摘要。这里的关键是 TL;DR:。它在网络文本中经常表示“太长不看版摘要”。如果模型在预训练中学过这种模式,它就可能在看到 TL;DR: 后生成摘要内容。

3. 翻译任务

对于翻译任务,可以构造类似:

English: I love machine learning.
French:

或者提供几个翻译示例,让模型继续生成目标语言句子。虽然 GPT-2 主要训练在英文网页上,但网页中仍然可能包含一些多语言和翻译格式,因此模型可能学到初步翻译能力。

4. 阅读理解任务

对于阅读理解,可以把文章、对话历史和问题拼接起来,再让模型生成答案。例如:

Document:
[文章内容]

Question: Why did the character leave?
Answer:

GPT-2 会继续生成答案。这类能力不是来自显式阅读理解训练,而是来自语言模型在大量文本中学到的问答、解释和文档续写模式。

Zero-shot 的本质

因此,GPT-2 的 zero-shot 可以理解为:

不是改变模型参数
不是增加任务分类头
不是使用任务训练集微调
而是把任务描述成自然文本,让模型继续生成答案

也就是说:

GPT-2 把任务求解变成了条件文本生成。

这正是后来 prompt learning、in-context learning 和 instruction following 的早期雏形。


七、GPT-2 的实验结果怎么看?

GPT-2 的实验重点不是在某个任务上刷到最高分,而是验证:

纯语言模型能否在没有任务监督的情况下迁移到多种任务?

论文评估了多个方向,包括:

语言建模
完形填空
常识推理
阅读理解
摘要
翻译
问答
文本生成

1. 语言建模结果

GPT-2 在多个语言建模数据集上进行了 zero-shot 测试。论文报告,最大的 GPT-2 模型在 8 个语言建模数据集中的 7 个上取得了当时的 state-of-the-art zero-shot 结果。这说明 WebText 上训练出的语言模型具有较强的跨域迁移能力。

2. LAMBADA

LAMBADA 是一个测试长距离依赖的数据集。它要求模型根据较长上下文预测最后一个词。这类任务不能只靠局部 n-gram,需要理解前文整体语义。GPT-2 在 LAMBADA 上大幅降低 perplexity,并显著提升准确率,说明更大的语言模型确实能更好地利用长上下文。

3. CoQA 阅读理解

在 CoQA 阅读理解任务上,GPT-2 在没有使用 CoQA 训练样本的情况下,通过文档、对话历史和问题作为上下文生成答案。论文报告,GPT-2 在 CoQA 上达到 55 F1,匹配或超过了部分监督 baseline。这说明 GPT-2 的确从大规模文本中学到了一些问答和阅读理解能力。但论文也指出,GPT-2 的答案有时依赖简单启发式,例如针对 “Who” 类型问题倾向于从文档中提取人名。

4. 摘要

GPT-2 的摘要能力比较初级。当输入文章并使用 TL;DR: 作为提示时,模型能生成一些摘要式文本,但定量指标仍然比较弱,只是刚刚接近一些传统神经基线。这说明 GPT-2 已经开始学习摘要模式,但能力远没有达到实用水平。

5. 翻译

GPT-2 在翻译任务上表现出一定能力,但整体仍然较弱。这并不奇怪,因为 WebText 主要是英文数据,而且模型没有使用平行语料做专门训练。不过,它能在没有明确翻译训练的情况下表现出初步翻译能力,已经说明语言模型在大规模语料中学到了一些跨语言模式。


八、为什么模型规模对 zero-shot 很重要?

GPT-2 论文中有一个重要观察:

模型容量越大,zero-shot 任务迁移能力越强。

这点非常关键。GPT-2 不只是训练了 1.5B 一个模型,而是训练了多个不同规模模型:

117M
345M
762M
1542M

论文发现,在很多任务上,随着模型参数量增加,性能也持续提升。这说明 zero-shot 能力不是简单由数据决定的,也和模型容量密切相关。为什么模型越大越有利?可以从三个角度理解。

首先,更大的模型有更强的记忆和表示能力,可以吸收更多语言模式和知识。

其次,更大的模型可以学习更复杂的上下文依赖,例如长距离指代、文章结构、问答格式和任务模式。

再次,更大的模型更有可能在自然语言上下文中识别任务意图。

例如,当看到:

Question: ...
Answer:

小模型可能只把它当作普通文本续写。大模型可能更容易识别出:

这里需要回答问题

所以,GPT-2 的一个重要启发是:

语言模型规模扩大后,不只是困惑度降低,还可能逐渐出现更强的任务迁移能力。

这为后来的 GPT-3 继续扩大到 175B 参数,并系统研究 few-shot / in-context learning 打下了基础。


九、GPT-2 和 GPT-1、BERT 的区别

现在我们可以把 GPT-1、BERT、GPT-2 放在一起比较。

对比维度 GPT-1 BERT GPT-2
架构 Decoder-only Encoder-only Decoder-only
训练目标 自回归语言建模 MLM + NSP 自回归语言建模
主要数据 BooksCorpus BooksCorpus + Wikipedia WebText
下游方式 有监督微调 有监督微调 主要看 zero-shot
核心问题 生成式预训练能否迁移? 双向表示如何学习? 语言模型能否无监督多任务?
代表意义 GPT 路线起点 双向理解路线代表 zero-shot 任务迁移起点

GPT-1 和 GPT-2 的相同点是:

都使用 Decoder-only Transformer
都使用自回归语言建模
都通过预测下一个 token 进行训练

不同点是:

GPT-1 强调预训练后微调
GPT-2 强调不微调直接 zero-shot 迁移

BERT 和 GPT-2 的区别则更明显:

BERT 是理解式双向 Encoder
GPT-2 是生成式单向 Decoder
BERT 通过 [MASK] 学习双向表示
GPT-2 通过文本续写学习任务模式

这三者共同构成了预训练语言模型时代最重要的几条路线。


十、GPT-2 的贡献与局限

GPT-2 的贡献主要有三点。

第一,它提出并验证了“语言模型是无监督多任务学习器”这一重要观点。

GPT-2 说明,大规模语言模型可以从自然文本中学习许多任务模式,不一定必须为每个任务单独标注数据和微调模型。

第二,它把 GPT 路线从“预训练 + 微调”推进到“zero-shot 任务迁移”。

这为后来的 GPT-3 few-shot learning 和 instruction prompting 奠定了基础。

第三,它展示了模型规模对任务迁移能力的重要性。

GPT-2 的多个模型规模实验表明,随着参数量增加,zero-shot 性能在很多任务上持续提升。

当然,GPT-2 也有明显局限。

首先,它的 zero-shot 能力还比较初级。

论文自己也指出,GPT-2 在很多任务上只是刚开始表现出能力,距离实用仍然很远。

其次,GPT-2 没有经过指令微调。

因此,它不能像 ChatGPT 那样稳定理解用户指令。它更多是在根据提示进行文本续写。

第三,GPT-2 仍然容易生成虚假或不可靠内容。

语言模型目标只要求生成高概率文本,并不保证事实正确。

第四,GPT-2 引发了对大规模文本生成模型滥用风险的讨论。

OpenAI 当时采用了分阶段发布策略,因为担心模型可能被用于生成误导性文本、垃圾信息或虚假新闻。

所以 GPT-2 的影响不仅是技术上的,也包括对大模型安全与发布策略的讨论。


十一、GPT-2 在大语言模型发展中的位置

GPT-2 是 GPT 路线中非常关键的一步。

如果说 GPT-1 证明了:

生成式预训练可以提升下游 NLP 任务

那么 GPT-2 进一步证明:

更大的语言模型可以在没有任务微调的情况下,直接表现出一定任务能力

这条路线继续发展,就到了 GPT-3。

GPT-3 的核心问题变成:

如果模型继续扩大到 175B 参数,能否通过 prompt 中的任务描述和少量示例完成任务?

这就是 few-shot learning 和 in-context learning。

从这个角度看,GPT-2 是 GPT-3 的直接前奏。

它把问题从:

预训练模型如何微调到下游任务?

推进到:

预训练语言模型能否直接通过上下文完成任务?

这也是大语言模型从“预训练模型”走向“通用任务接口”的重要一步。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐