Skip to main content

第5章:预训练范式——从有监督到自监督

核心问题:深度学习模型越大越强,但标注数据太贵——互联网上有万亿级无标注文本,能否直接利用?

前四章我们看到了神经网络和 Transformer 的崛起。但有一个现实问题一直没有解决:数据从哪里来?

训练一个情感分析模型,需要十万条人工标注的评论。训练一个问答系统,需要成千上万对问答对。每扩展一个新任务,就要重新收集、重新标注——这不仅昂贵,而且速度极慢。

这一章讲述的,是 NLP 领域一场安静却彻底的革命:从"为每个任务单独训练模型",到"先在海量无标注文本上学习通用语言知识,再针对具体任务微调"。


5.1 深度学习的数据困境

标注数据有多贵?

一个典型的 NLP 数据集需要多少钱?

任务典型数据集标注规模大致成本
情感分析SST-267K 句子数万美元
问答SQuAD100K 问答对十余万美元
自然语言推理SNLI570K 对数十万美元
机器翻译WMT数百万句对难以估计

而且,每个任务的标注数据只能用于那个任务——情感分析的数据无法直接帮助问答系统。

互联网:一座待发掘的金矿

与此同时,互联网上每天产生海量文本:

  • Wikipedia:约 60 亿词(英文)
  • Common Crawl:数万亿词的网页文本
  • Books corpus:数十亿词的书籍文本
  • GitHub、Reddit、新闻……

这些文本没有任何人工标注,但它们包含着丰富的语言知识:语法结构、词义关系、世界常识、推理模式。

关键问题变成了:能不能设计一种学习任务,让模型从无标注文本中自动学习?

迁移学习的思路

计算机视觉领域已经找到了答案:先在 ImageNet(130 万张标注图片)上预训练,学到通用的视觉特征(边缘、纹理、形状……),然后针对具体任务只需微调最后几层。

这就是**迁移学习(Transfer Learning)**的思路:

通用预训练少量任务数据任务微调\text{通用预训练} \xrightarrow{\text{少量任务数据}} \text{任务微调}

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,预测周围出现 quickfox 的概率。

两种方式都逼迫模型把语义相近的词映射到相近的向量空间。训练完成后,神奇的事情发生了:

kingman+womanqueen\vec{\text{king}} - \vec{\text{man}} + \vec{\text{woman}} \approx \vec{\text{queen}}

词向量空间里出现了语义算术

GloVe:全局共现统计

GloVe(Global Vectors,2014,Stanford) 从另一个角度切入:统计整个语料库中词与词的共现矩阵 XX,其中 XijX_{ij} 表示词 ii 在词 jj 的上下文中出现的次数。

GloVe 的目标函数:

J=i,j=1Vf(Xij)(wiwj+bi+bjlogXij)2J = \sum_{i,j=1}^{V} f(X_{ij}) \left( \vec{w}_i \cdot \vec{w}_j + b_i + b_j - \log X_{ij} \right)^2

其中 f(Xij)f(X_{ij}) 是权重函数,让高频共现对和低频共现对都有合理贡献。

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:从右到左,预测上一个词

ELMo(wk)=γj=0Lsjhk,j\text{ELMo}(w_k) = \gamma \sum_{j=0}^{L} s_j \mathbf{h}_{k,j}

其中 hk,j\mathbf{h}_{k,j} 是第 jj 层 LSTM 对第 kk 个词的隐层状态,sjs_j 是可学习的权重,γ\gamma 是缩放因子。

这样,同一个词 bank 在不同句子中,会因为前后文不同,得到不同的向量表示。

ELMo 的历史意义

ELMo 在 6 项 NLP 任务上取得了显著提升,首次大规模证明了:

大规模语言模型预训练 + 下游任务微调 这条路是行得通的。

:::info ELMo 命名的由来 ELMo 是《芝麻街》里的一个红色毛怪角色。后来的 BERT(《芝麻街》里的另一个角色)、ERNIE 也延续了这个传统——NLP 研究者们的幽默。 :::

然而,ELMo 基于 LSTM,速度慢、难以并行,也不够深。2018 年,Transformer 已经横扫机器翻译领域,自然而然地,下一步是把 Transformer 用于预训练。


5.4 BERT(2018,Google):理解路线的集大成者

问题:如何让 Transformer 做预训练?

自回归语言模型(预测下一个词)有天然的不对称性:为了预测第 tt 个词,只能看前面的词,不能"作弊"看后面——这是生成任务的合理限制,但对于理解任务(如判断情感、提取答案),我们希望模型能同时利用上下文两侧的信息。

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 的预训练目标:

LMLM=iMlogP(wiwM;θ)\mathcal{L}_{\text{MLM}} = -\sum_{i \in \mathcal{M}} \log P(w_i \mid \mathbf{w}_{\setminus \mathcal{M}}; \theta)

其中 M\mathcal{M} 是被遮住的位置集合,wM\mathbf{w}_{\setminus \mathcal{M}} 是其余未遮住的词。

BERT 还引入了第二个预训练任务——Next Sentence Prediction(NSP,下句预测):给模型两段文本,预测第二段是否是第一段的下一句,帮助模型理解句子间关系。

BERT 的规模与效果

BERT 有两个版本:

版本层数隐层维度注意力头数参数量
BERT-Base1276812110M
BERT-Large24102416340M

2018 年 10 月发布后,BERT 在 11 项 NLP 基准任务上同时刷新 SOTA,震惊了整个学界。

预训练-微调范式的确立

BERT 的使用方式非常统一:

  1. 预训练阶段:在 BooksCorpus + Wikipedia(33 亿词)上用 MLM 训练,学习通用语言表示
  2. 微调阶段:在具体任务的少量标注数据上,调整全部参数
[预训练 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,以自回归方式训练语言模型——给定前 t1t-1 个词,预测第 tt 个词:

LLM=tlogP(wtw1,w2,,wt1;θ)\mathcal{L}_{\text{LM}} = \sum_{t} \log P(w_t \mid w_1, w_2, \ldots, w_{t-1}; \theta)

这是最朴素的语言模型目标,无须任何特殊设计。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 的多步推理、类比能力、代码生成等,都呈现出类似的"阈值效应"。

研究者绘制出了能力与模型规模的关系曲线,许多能力曲线呈现出明显的折线形:在小模型上几乎随机,超过某个参数量后突然跳升。

能力{随机参数量<Nc显著提升参数量Nc\text{能力} \approx \begin{cases} \text{随机} & \text{参数量} < N_c \\ \text{显著提升} & \text{参数量} \geq N_c \end{cases}

能力强但"不听话"

GPT-3 暴露了自回归语言模型的根本矛盾:

语言模型的目标是预测下一个 token(完形填空),用户的目标是得到有用的回答。

这两者并不等价。

如果你问 GPT-3:"如何制作炸弹?",作为一个"完形填空机器",它可能真的把制作步骤补全出来——因为这在训练数据中是合理的续写。

同样,GPT-3 可能生成有毒内容、虚假信息,或者在对话中"跑题",因为它根本没有被训练去"回答问题",只是被训练去"续写文本"。

:::info 预训练 ≠ 对齐 GPT-3 这一阶段揭示了一个关键问题,后来被称为对齐问题(Alignment Problem):如何让模型的行为与人类的意图、价值观对齐?这正是后来 InstructGPT、RLHF、ChatGPT 要解决的问题——我们将在后续章节详细讨论。 :::


本章小结

里程碑时间核心创新局限
Word2Vec / GloVe2013–2014静态词向量,语义算术一词一义,静态
ELMo2018双向 LSTM,动态词向量LSTM 慢,不够深
BERT2018Transformer + MLM,双向理解Encoder-only,不擅长生成
GPT-1/22018–2019自回归预训练,Zero-shot 初现规模小,能力有限
GPT-32020175B 参数,In-context Learning,涌现能力能力强但不听话,对齐问题

两条技术路线的对比:

维度BERT(理解路线)GPT(生成路线)
架构Transformer EncoderTransformer Decoder
预训练目标掩码语言模型(MLM)自回归语言模型
编码方向双向单向(从左到右)
擅长任务分类、抽取、理解生成、续写、对话
使用方式预训练 + 微调预训练 + Few-shot

GPT-3 证明了规模即能力,但也留下了一个悬而未决的问题:一个只会"续写文本"的模型,如何变成真正有用的助手?

下一章,我们将看到 OpenAI 如何用**人类反馈强化学习(RLHF)**驯服 GPT,让它从"预测机器"进化为"对话助手"——这正是 ChatGPT 诞生的故事。