第5章:预训练范式——从有监督到自监督
核心问题:深度学习模型越大越强,但标注数据太贵——互联网上有万亿级无标注文本,能否直接利用?
前四章我们看到了神经网络和 Transformer 的崛起。但有一个现实问题一直没有解决:数据从哪里来?
训练一个情感分析模型,需要十万条人工标注的评论。训练一个问答系统,需要成千上万对问答对。每扩展一个新任务,就要重新收集、重新标注——这不仅昂贵,而且速度极慢。
这一章讲述的,是 NLP 领域一场安静却彻底的革命:从"为每个任务单独训练模型",到"先在海量无标注文本上学习通用语言知识,再针对具体任务微调"。
5.1 深度学习的数据困境
标注数据有多贵?
一个典型的 NLP 数据集需要多少钱?
| 任务 | 典型数据集 | 标注规模 | 大致成本 |
|---|---|---|---|
| 情感分析 | SST-2 | 67K 句子 | 数万美元 |
| 问答 | SQuAD | 100K 问答对 | 十余万美元 |
| 自然语言推理 | SNLI | 570K 对 | 数十万美元 |
| 机器翻译 | WMT | 数百万句对 | 难以估计 |
而且,每个任务的标注数据只能用于那个任务——情感分析的数据无法直接帮助问答系统。
互联网:一座待发掘的金矿
与此同时,互联网上每天产生海量文本:
- Wikipedia:约 60 亿词(英文)
- Common Crawl:数万亿词的网页文本
- Books corpus:数十亿词的书籍文本
- GitHub、Reddit、新闻……
这些文本没有任何人工标注,但它们包含着丰富的语言知识:语法结构、词义关系、世界常识、推理模式。
关键问题变成了:能不能设计一种学习任务,让模型从无标注文本中自动学习?
迁移学习的思路
计算机视觉领域已经找到了答案:先在 ImageNet(130 万张标注图片)上预训练,学到通用的视觉特征(边缘、纹理、形状……),然后针对具体任务只需微调最后几层。
这就是**迁移学习(Transfer Learning)**的思路:
NLP 的挑战在于:视觉有 ImageNet 这样的大型标注数据集,但文本的"预训练任务"是什么?模型该学什么?
答案从词向量开始。
5.2 词向量:预训练的先声
为什么需要词向量?
在此之前,NLP 系统用 One-Hot 编码表示单词:10 万个词汇就是 10 万维的稀疏向量,每个词与其他词"距离相等"——模型无从知道"猫"和"狗"比"猫"和"飞机"更相似。
Word2Vec(2013,Google) 提出了一个优雅的想法:用上下文预测词。
Word2Vec:两种训练方式
CBOW(Continuous Bag of Words,连续词袋):用上下文预测中间词。
给定句子:"The quick [?] fox jumps",让模型预测 [?] 是 brown。
Skip-gram(跳字模型):反过来,用中间词预测上下文。
给定 brown,预测周围出现 quick、fox 的概率。
两种方式都逼迫模型把语义相近的词映射到相近的向量空间。训练完成后,神奇的事情发生了:
词向量空间里出现了语义算术!
GloVe:全局共现统计
GloVe(Global Vectors,2014,Stanford) 从另一个角度切入:统计整个语料库中词与词的共现矩阵 ,其中 表示词 在词 的上下文中出现的次数。
GloVe 的目标函数:
其中 是权重函数,让高频共现对和低频共现对都有合理贡献。
GloVe 同样能学到语义关系,且训练更快、更稳定。
静态词向量的根本局限
Word2Vec 和 GloVe 都很成功,但有一个致命问题:每个词只有一个固定向量。
考虑这两个句子:
"I went to the river bank to fish."(银行:河岸)"I deposited money at the bank."(银行:金融机构)
bank 这个词在两句话中含义完全不同,但在 Word2Vec 的词典里,它只有一个向量——只能是两种含义的"平均",两头不讨好。
:::warning 静态词向量的问题 一词一义的假设从根本上就是错的。英语中有大量一词多义(polysemy)现象,这类词向量无法正确表示。 :::
这个问题,需要一种能根据上下文动态生成词向量的方法来解决。
5.3 ELMo(2018):上下文相关的词向量
解决一词多义
ELMo(Embeddings from Language Models,2018,AI2) 的核心思想很直接:不要给每个词一个固定向量,而是根据它出现的上下文动态计算向量。
具体方法:用双向 LSTM(Bidirectional LSTM) 训练语言模型。
- 正向 LSTM:从左到右,预测下一个词
- 反向 LSTM:从右到左,预测上一个词
其中 是第 层 LSTM 对第 个词的隐层状态, 是可学习的权重, 是缩放因子。
这样,同一个词 bank 在不同句子中,会因为前后文不同,得到不同的向量表示。
ELMo 的历史意义
ELMo 在 6 项 NLP 任务上取得了显著提升,首次大规模证明了:
大规模语言模型预训练 + 下游任务微调 这条路是行得通的。
:::info ELMo 命名的由来 ELMo 是《芝麻街》里的一个红色毛怪角色。后来的 BERT(《芝麻街》里的另一个角色)、ERNIE 也延续了这个传统——NLP 研究者们的幽默。 :::
然而,ELMo 基于 LSTM,速度慢、难以并行,也不够深。2018 年,Transformer 已经横扫机器翻译领域,自然而然地,下一步是把 Transformer 用于预训练。
5.4 BERT(2018,Google):理解路线的集大成者
问题:如何让 Transformer 做预训练?
自回归语言模型(预测下一个词)有天然的不对称性:为了预测第 个词,只能看前面的词,不能"作弊"看后面——这是生成任务的合理限制,但对于理解任务(如判断情感、提取答案),我们希望模型能同时利用上下文两侧的信息。
BERT(Bidirectional Encoder Representations from Transformers,2018,Google) 的方案:设计一个专门用于预训练的任务,让 Transformer Encoder 能双向编码。
核心创新:掩码语言模型(MLM)
Masked Language Model(MLM,掩码语言模型):随机遮住输入中 15% 的词,让模型预测这些词是什么。
输入:The quick [MASK] fox jumps over the lazy dog
目标:预测 [MASK] = "brown"
与自回归不同,MLM 允许模型在预测 [MASK] 时,同时看左边的 The quick 和右边的 fox jumps。这就实现了真正的双向编码。
数学上,BERT 的预训练目标:
其中 是被遮住的位置集合, 是其余未遮住的词。
BERT 还引入了第二个预训练任务——Next Sentence Prediction(NSP,下句预测):给模型两段文本,预测第二段是否是第一段的下一句,帮助模型理解句子间关系。
BERT 的规模与效果
BERT 有两个版本:
| 版本 | 层数 | 隐层维度 | 注意力头数 | 参数量 |
|---|---|---|---|---|
| BERT-Base | 12 | 768 | 12 | 110M |
| BERT-Large | 24 | 1024 | 16 | 340M |
2018 年 10 月发布后,BERT 在 11 项 NLP 基准任务上同时刷新 SOTA,震惊了整个学界。
预训练-微调范式的确立
BERT 的使用方式非常统一:
- 预训练阶段:在 BooksCorpus + Wikipedia(33 亿词)上用 MLM 训练,学习通用语言表示
- 微调阶段:在具体任务的少量标注数据上,调整全部参数
[预训练 BERT]
↓
加一个任务专用的输出层
↓
用任务数据微调(通常只需几千到几万条)
↓
[任务专用模型]
这个范式的威力在于:BERT 的 Transformer 层学到的是通用的语言知识,大量计算都发生在预训练阶段,微调的成本极低。
:::tip BERT 的局限 BERT 是 Encoder-only 架构。它擅长"理解"——分类、抽取、判断——但不擅长"生成"。你没法让 BERT 续写一段文章。 :::
BERT 奠定了 NLP 预训练-微调的主流范式,但它不是这条路上唯一的选择。与此同时,另一条路线正在悄悄崛起。
5.5 GPT 系列:生成路线的崛起
GPT-1(2018,OpenAI):自回归路线
就在 BERT 发布的同年,OpenAI 发布了 GPT(Generative Pre-trained Transformer)。
GPT 的思路更简单:用 Transformer Decoder,以自回归方式训练语言模型——给定前 个词,预测第 个词:
这是最朴素的语言模型目标,无须任何特殊设计。GPT-1 的参数量约为 117M,效果良好,但不如同期的 BERT 引人注目。
然而,OpenAI 坚持了这条路。
GPT-2(2019):Zero-shot 能力初现
GPT-2 将参数量扩大到 1.5B,训练数据换成了从 Reddit 爬取的高质量网页文本(WebText,约 40GB)。
结果令人惊讶:GPT-2 不需要任何微调,仅凭提示(prompt),就能完成翻译、摘要、问答等任务。这叫做 Zero-shot(零样本) 能力。
更令人印象深刻的是它的生成质量——GPT-2 生成的新闻文章,人类评估者只有 52% 的概率能识别出是机器写的(接近随机猜测)。
:::warning "太危险,不敢发布" OpenAI 最初以"担心被滥用于生成假新闻"为由,只发布了 GPT-2 的小版本,数月后才逐步放出完整模型。这一决定引发了学界关于 AI 安全与开放性的大讨论,也让 GPT-2 获得了极大的媒体关注。 :::
GPT-3(2020):规模带来质变
2020 年,GPT-3 横空出世。参数量:175B,训练数据:约 570GB 文本,训练成本估计超过 460 万美元。
GPT-3 带来了一个全新的概念:In-context Learning(上下文学习)。
不需要更新模型参数,只需在 prompt 中给几个例子,GPT-3 就能理解任务并泛化:
翻译任务示例:
英语:The cat sat on the mat.
中文:猫坐在垫子上。
英语:She is reading a book.
中文:她在读一本书。
英语:The weather is nice today.
中文:[GPT-3 自动补全→ 今天天气很好。]
这叫做 Few-shot Learning(少样本学习)。GPT-3 在数百项任务上展示了惊人的泛化能力,而这一切都不需要针对任务的梯度更新。
涌现能力:规模带来质变
GPT-3 最令人震惊的特性,是涌现(Emergence):当模型规模超过某个阈值,某些能力会突然出现,而不是随着规模线性增长。
一个直觉类比:水分子在 99°C 是液体,在 100°C 变成气体——温度的连续增加,在某个临界点引发了质的变化。GPT-3 的多步推理、类比能力、代码生成等,都呈现出类似的"阈值效应"。
研究者绘制出了能力与模型规模的关系曲线,许多能力曲线呈现出明显的折线形:在小模型上几乎随机,超过某个参数量后突然跳升。
能力强但"不听话"
GPT-3 暴露了自回归语言模型的根本矛盾:
语言模型的目标是预测下一个 token(完形填空),用户的目标是得到有用的回答。
这两者并不等价。
如果你问 GPT-3:"如何制作炸弹?",作为一个"完形填空机器",它可能真的把制作步骤补全出来——因为这在训练数据中是合理的续写。
同样,GPT-3 可能生成有毒内容、虚假信息,或者在对话中"跑题",因为它根本没有被训练去"回答问题",只是被训练去"续写文本"。
:::info 预训练 ≠ 对齐 GPT-3 这一阶段揭示了一个关键问题,后来被称为对齐问题(Alignment Problem):如何让模型的行为与人类的意图、价值观对齐?这正是后来 InstructGPT、RLHF、ChatGPT 要解决的问题——我们将在后续章节详细讨论。 :::
本章小结
| 里程碑 | 时间 | 核心创新 | 局限 |
|---|---|---|---|
| Word2Vec / GloVe | 2013–2014 | 静态词向量,语义算术 | 一词一义,静态 |
| ELMo | 2018 | 双向 LSTM,动态词向量 | LSTM 慢,不够深 |
| BERT | 2018 | Transformer + MLM,双向理解 | Encoder-only,不擅长生成 |
| GPT-1/2 | 2018–2019 | 自回归预训练,Zero-shot 初现 | 规模小,能力有限 |
| GPT-3 | 2020 | 175B 参数,In-context Learning,涌现能力 | 能力强但不听话,对齐问题 |
两条技术路线的对比:
| 维度 | BERT(理解路线) | GPT(生成路线) |
|---|---|---|
| 架构 | Transformer Encoder | Transformer Decoder |
| 预训练目标 | 掩码语言模型(MLM) | 自回归语言模型 |
| 编码方向 | 双向 | 单向(从左到右) |
| 擅长任务 | 分类、抽取、理解 | 生成、续写、对话 |
| 使用方式 | 预训练 + 微调 | 预训练 + Few-shot |
GPT-3 证明了规模即能力,但也留下了一个悬而未决的问题:一个只会"续写文本"的模型,如何变成真正有用的助手?
下一章,我们将看到 OpenAI 如何用**人类反馈强化学习(RLHF)**驯服 GPT,让它从"预测机器"进化为"对话助手"——这正是 ChatGPT 诞生的故事。