L07: Pretraining

Week 4 · Tue Jan 27 2026 08:00:00 GMT+0800 (中国标准时间)

进度: 0/22 (0%)
下载 PDF
/ 0
100%
正在加载 PDF...

L07: Pretraining

Slides

中英交替版(推荐)

L07 双语 (PDF)

英文原版

L07 EN (PDF)

中文翻译版

L07 ZH (PDF)

核心知识点

1. Pretraining 动机

Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9
  • 预训练革命:预训练语言模型极大提升了 NLP 系统性能(SQuAD、GLUE、SuperGLUE 等基准上的飞跃)
  • 核心理念:在大规模无标注数据上训练 foundation model,再 adaptation 到下游任务
  • 关键要素:大规模多样化数据 + 无需标注 + 计算感知缩放(compute-aware scaling)

📐 预训练 vs 随机初始化的样本效率

变量定义:设下游任务需要 kk 个标注样本使预训练模型达到性能 PP^*,随机初始化模型达到同等性能 PP^* 所需样本数为 kk'

推导过程:预训练模型已经从大规模无标注数据 DpreD_{pre}(数百亿 token)中习得语言的统计规律,其参数初始化点 θ0pre\theta_0^{pre} 在损失景观中已处于接近下游任务最优解的低谷附近。而随机初始化点 θ0rand\theta_0^{rand} 则处于高损失区域,需要更多梯度步才能到达同等低谷。

形式化地,fine-tuning 的优化路径为:

θ=θ0preηi=1kθL(xi,yi;θ)\theta^* = \theta_0^{pre} - \eta \sum_{i=1}^{k} \nabla_\theta \mathcal{L}(x_i, y_i; \theta)

由于起点更优,同样的 kk 步优化可以达到更低的损失,等效为:

kk×C(C1,实验中 C100)k' \approx k \times C \quad (C \gg 1, \text{实验中 } C \approx 100)

结论:预训练模型在低资源场景下的样本效率比随机初始化高约 100 倍。

📚 已收录至 拓展阅读知识库

🔢 BERT vs 从头训练:SST-2 情感分析

实验设置:使用不同规模的训练数据在 SST-2(斯坦福情感树库二分类)上对比 BERT-Base(预训练)和等参数量 Transformer(随机初始化):

训练样本数从头训练准确率Fine-tune BERT 准确率
10052%(近随机)81%
1,00065%92%
10,00083%94%
67,349(全量)91%95%

关键结论:1,000 样本 fine-tune BERT 即可达到 92%,而从头训练需要 ~50,000 样本才能达到相近水平。

💡 为什么这样做?

预训练就像让模型”学会了阅读”——它从海量文本中习得了词汇、语法、事实知识和常识推理。当面对新任务(如情感分析)时,这相当于教一个识字的人”读出文章的情感”,而非从零开始教一个人认字。知识迁移发生在表示层面:预训练得到的上下文表示已经编码了丰富的语义信息,下游任务只需要学习”如何使用”这些表示。

⚠️ 常见误区

  1. 误区:预训练 NLP 模型可以直接迁移到任何领域 → 正确:领域差距大时(如蛋白质序列建模、医学影像报告、法律合同),通用 NLP 预训练可能没有优势,甚至不如在领域数据上从头训练的小模型。BioBERT、LegalBERT 等领域预训练模型的存在本身就说明了这一点。

  2. 误区:更大的预训练模型 fine-tune 后一定更好 → 正确:在数据极少(<100 样本)时,过大的模型可能过拟合,小而精的预训练模型(如 DistilBERT)反而更稳健。

2. 子词建模(Subword Modeling)

Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18
  • 固定词表的问题:新词/拼写变体/罕见词映射为 UNK
  • Byte-Pair Encoding (BPE):从字符开始,迭代合并最频繁的相邻 pair,直到达到目标词表大小
  • 常见词保持完整,罕见词拆分为子词片段(如 Transformerify -> Transformer## ify)
  • WordPiece 是 BPE 的变体,用于 BERT 等预训练模型

🔢 “unhappiness” 的 BPE 切分

假设已学到的合并规则(按优先级)

  1. u + nun
  2. h + a + p + p + ihappi(经过多次合并)
  3. n + e + s + sness

切分过程

"unhappiness"
→ 初始字符序列: u n h a p p i n e s s
→ 应用规则 1:  un h a p p i n e s s
→ 应用规则 2:  un happi n e s s
→ 应用规则 3:  un happi ness
→ 最终 tokens: ["un", "happi", "ness"]
→ token IDs:  [2891, 14428, 1108]  (GPT-2 词表中的实际 ID)

对比:词级 tokenization 中 “unhappiness” 若不在词表则直接映射为 [UNK],丢失所有信息。

💡 为什么这样做?

子词 tokenization 解决了两个极端的缺陷:词级粒度对生僻词无能为力(UNK 问题),字符级粒度序列太长且语义被过度切碎。子词的核心洞察是:语言有形态结构——“un-”(否定前缀)、“-ness”(名词化后缀)在成千上万的单词中反复出现。通过给它们分配独立 token,模型可以学习前缀/后缀的语义,并将这些知识复用到从未见过的新词上。这本质上是将词法知识编码进了词表。

⚠️ 常见误区

  1. 误区:BPE 的切分结果是固定的语言学子词 → 正确:BPE 切分完全依赖训练语料的统计特性,与语言学无关。“ChatGPT” 在 GPT-2 词表中被切分为 ["Chat", "G", "PT"],不符合语言学直觉,纯粹因为训练时这些子串共现频率高。

  2. 误区:BPE 词表越大越好 → 正确:词表过大会使 embedding 矩阵占用大量参数(词表大小 × 隐层维度),还会导致每个 token 的训练样本减少。GPT-4 使用约 100K 大小词表(cl100k_base),是平衡的结果。

3. 从词嵌入到全模型预训练

Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27
  • 2017 年之前:仅预训练词嵌入层(如 Word2Vec、GloVe),其余参数随机初始化
  • 问题:同一词在不同上下文中意义不同(“I record the record”)
  • 现代方法:预训练整个模型,学习上下文化的语言表示 + 参数初始化 + 语言概率分布

📐 MLM 与 CLM 目标函数对比

Masked Language Modeling(BERT 类)

随机选择 15% 的 token 位置集合 MM,要求模型从未被遮盖的上下文中预测这些位置的原始 token:

JMLM=ExDiMlogP(xixM;θ)J_{MLM} = -\mathbb{E}_{x \sim D} \sum_{i \in M} \log P(x_i \mid x_{\setminus M}; \theta)

其中 xMx_{\setminus M} 表示去掉 mask 位置后的序列,注意力是双向的(每个位置可看到所有非 mask 位置)。

Causal Language Modeling(GPT 类)

给定前缀预测下一个 token,注意力通过 causal mask 强制单向

JCLM=t=1TlogP(xtx<t;θ)J_{CLM} = -\sum_{t=1}^{T} \log P(x_t \mid x_{<t}; \theta)

关键区别

  • MLM:每个样本可以提供 15% × T 个训练信号,但需要特殊的 [MASK] token(预训练-微调不一致)
  • CLM:每个样本只提供 T 个训练信号,但可以直接用于自回归生成,无训练-推理差异

📚 已收录至 拓展阅读知识库

🔢 BERT 的 [MASK] 策略数值示例

句子:“The cat sat on the mat”(6 个 token)

15% 采样:选 1 个位置,假设选中 “cat”(位置 2)

替换策略(每次独立随机):

  • 80% 概率 → [MASK]:输入变为 “The [MASK] sat on the mat”
  • 10% 概率 → 随机词(如 “dog”):输入变为 “The dog sat on the mat”
  • 10% 概率 → 保持不变:输入仍为 “The cat sat on the mat”

三种情况下,模型均需在位置 2 输出原始词 “cat” 的概率最大化。

训练信号计算:设词表大小 V=30,000|V| = 30,000,模型在位置 2 输出 softmax 分布,最大化 P("cat"上下文)P(\text{"cat"} \mid \text{上下文})

💡 为什么这样做?

为什么 BERT 要 10% 保持原词? 如果只有 [MASK] 情形,模型会学到一个”捷径”——只在看到 [MASK] 时才认真预测,对其他 token 可以偷懒。10% 保持不变迫使模型对每一个 token 都维持上下文理解,因为任何位置都可能是”需要预测的位置”。这是一种精心设计的正则化技巧。

为什么 10% 随机替换? 在 fine-tuning 时,真实输入永远不包含 [MASK],随机替换有助于缩小预训练和微调之间的输入分布差距。

⚠️ 常见误区

  1. 误区:MLM 和 CLM 只是”双向 vs 单向”的简单区别 → 正确:两者有根本性的应用场景分歧。MLM 无法直接进行自回归生成(没有统一的 P(xtx<t)P(x_t \mid x_{<t}) 可供采样);CLM 在做分类等理解任务时天然处于劣势,因为每个 token 只能看到左侧上下文。

  2. 误区:BERT 的预训练-微调不一致([MASK] 仅在预训练出现)是无关紧要的 → 正确:这是 BERT 的真实局限,RoBERTa 通过动态 masking(每次 epoch 重新随机 mask,而非固定)部分缓解了这个问题。

4. 三种预训练架构

Encoder(编码器)

Slide 28 Slide 29 Slide 30 Slide 31
  • 双向上下文,适合理解任务
  • 预训练目标:Masked Language Model (MLM),随机遮盖 15% token 并预测
  • 代表:BERT(110M/340M 参数,BookCorpus + Wikipedia)
  • BERT 遮盖策略:80% [MASK] + 10% 随机替换 + 10% 保持不变
  • 扩展:RoBERTa(更长训练、移除 NSP)、SpanBERT(连续 span 遮盖)
  • GLUE 基准上全面 SOTA,但不适合生成任务

Encoder-Decoder(编码器-解码器)

Slide 32 Slide 33 Slide 34 Slide 35
  • 编码器提供双向上下文,解码器做自回归生成
  • 代表:T5(Raffel et al., 2018),预训练目标为 span corruption(用占位符替换 span,解码器生成被删除的 span)
  • T5 发现 encoder-decoder + denoising 优于纯 decoder + LM
  • T5 可微调回答开放域问题,知识存储在参数中

Decoder(解码器)

Slide 36 Slide 37 Slide 38 Slide 39
  • 单向自回归,适合生成任务
  • 预训练目标:标准语言建模 pθ(wtw1:t1)p_\theta(w_t | w_{1:t-1})
  • GPT 演进:GPT (117M) -> GPT-2 (1.5B) -> GPT-3 (175B)
  • 涌现能力:Zero-shot learning(GPT-2)、Few-shot / In-context learning(GPT-3)
  • 当前最大的预训练模型几乎全是 Decoder

📐 三种架构的形式化对比

Encoder-only(BERT):双向注意力,输出每个位置的上下文表示:

H=TransformerEncoder(x1,,xn)Rn×dH = \text{TransformerEncoder}(x_1, \ldots, x_n) \in \mathbb{R}^{n \times d}

注意力矩阵 ARn×nA \in \mathbb{R}^{n \times n},无 mask(每个位置可看全局)。

Decoder-only(GPT):单向注意力(causal mask),输出自回归概率:

P(xtx<t)=softmax(htWV)其中 Aij=0 if j>iP(x_t \mid x_{<t}) = \text{softmax}(h_t W_V) \quad \text{其中 } A_{ij} = 0 \text{ if } j > i

Encoder-Decoder(T5):encoder 双向处理输入,decoder 通过 cross-attention 条件生成:

P(yty<t,x)=softmax(hdec,tWV),hdec,t=CrossAttn(hdec,t,Henc)P(y_t \mid y_{<t}, x) = \text{softmax}(h_{dec,t} W_V), \quad h_{dec,t} = \text{CrossAttn}(h_{dec,t}, H_{enc})

参数规模对比(以 hidden=768, L=12, H=12 为基准):

模型参数量架构预训练目标
BERT-Base110MEncoder-onlyMLM + NSP
GPT-2-Base117MDecoder-onlyCLM
T5-Base250MEncoder-DecoderSpan Corruption

T5 参数量约为同规格 BERT 的 2.3 倍,因为 encoder 和 decoder 各自都有完整的 Transformer 层。

📚 已收录至 拓展阅读知识库

🔢 同一问题在三种架构下的处理

任务:将 “cat” 翻译为法语

Encoder-only(BERT)

输入: [CLS] translate 'cat' to French [SEP]
输出: [CLS] 的表示向量(无法直接生成)
→ 需要加一个线性分类头预测目标词(从词表中分类),不适合翻译

Decoder-only(GPT)

输入: "Translate 'cat' to French:"
输出: 直接自回归生成 "chat"(逐 token 采样)
→ P("chat" | prompt) = P("ch"|prompt) × P("at"|"ch", prompt)

Encoder-Decoder(T5)

Encoder 输入: "translate English to French: cat"
Encoder 输出: 双向上下文表示 H_enc
Decoder: 逐步生成,每步 cross-attend 到 H_enc
→ 输出: "chat"

💡 为什么这样做?

没有”最好”的架构——完全取决于任务。2018-2022 年 NLP 学界偏爱 encoder-only(BERT 系)做理解任务,encoder-decoder(T5 系)做生成任务。2023 年后 LLM 界几乎全面转向 decoder-only,原因有三:(1) 预训练目标更简洁(标准 CLM,无需设计 masking 策略);(2) 更容易 scale(没有 encoder-decoder 间 cross-attention 的额外复杂度);(3) Few-shot / In-context learning 天然适合自回归框架。

⚠️ 常见误区

  1. 误区:“BERT 比 GPT 更好”或”GPT 比 BERT 更好” → 正确:完全取决于任务类型。BERT 在 GLUE 分类任务上长期 SOTA(2018-2020),GPT-3 在生成/few-shot 上碾压 BERT。用错架构等于拿锤子拧螺丝。

  2. 误区:Decoder-only 不能做分类任务 → 正确:GPT 可以通过 prompt 工程(如”这段话的情感是正面还是负面?答:“)将分类转化为生成,但通常需要更仔细的 prompt 设计,不如 BERT 的 [CLS] token 方案直接。

5. 预训练数据

Slide 40 Slide 41 Slide 42 Slide 43 Slide 44 Slide 45 Slide 46 Slide 47
  • The Pile 数据集:学术、网络、散文、对话等多类别
  • 不同模型的训练数据量:BERT 3B token -> RoBERTa 30B -> GPT-3 200B -> Chinchilla 1.4T
  • BookCorpus 的版权争议与 Fair Use 问题

📐 数据混合比例的优化框架

问题形式化:设有 KK 个数据源 {D1,,DK}\{D_1, \ldots, D_K\},混合权重 α=(α1,,αK)\alpha = (\alpha_1, \ldots, \alpha_K),满足 kαk=1,αk0\sum_k \alpha_k = 1, \alpha_k \geq 0

训练损失为各数据源损失的加权和:

Ltrain(θ;α)=k=1KαkLk(θ)\mathcal{L}_{train}(\theta; \alpha) = \sum_{k=1}^{K} \alpha_k \cdot \mathcal{L}_k(\theta)

目标是最小化在目标评估集(如多个下游任务)上的损失:

α=argminαLeval(θ(α))\alpha^* = \arg\min_{\alpha} \mathcal{L}_{eval}(\theta^*(\alpha))

重复数据的危害:若数据 DkD_k 重复 nn 次,等效权重从 αk\alpha_k 变为 nαk/(1+(n1)αk)n \cdot \alpha_k / (1 + (n-1)\alpha_k)(归一化后),模型可能记忆训练样本(memorization),在成员推断攻击(membership inference)中表现脆弱。

Chinchilla 最优比例(Hoffmann et al., 2022):在固定算力预算 CC(FLOPs)下:

NC0.5,DC0.5N^* \propto C^{0.5}, \quad D^* \propto C^{0.5}

模型参数量和训练 token 数应等比例增长,最优比约为 20 tokens per parameter。

📚 已收录至 拓展阅读知识库

🔢 Llama 3 数据来源分布(近似公开信息)

数据来源占比说明
Common Crawl(网页)~80%经过质量过滤,去重
GitHub 代码~8%多语言代码
Wikipedia / 书籍~10%高质量长文本
arXiv / StackExchange 等~2%专业知识密集型

关键洞察:代码数据仅占 8%,但 Llama 3 的代码能力远超其比例暗示的水平。原因是代码数据的信息密度和质量远高于普通网页文本:代码有明确的逻辑结构、注释和测试,每个 token 携带的信息量更高。等效地,8% 的高质量代码数据的训练效益可能相当于 20%+ 的普通文本。

💡 为什么这样做?

数据是当代 LLM 的核心竞争壁垒,甚至比模型架构更重要。高质量数据形成正向飞轮:好模型吸引用户 → 用户交互产生高质量 feedback 数据 → 用于 RLHF 训练更好的模型。Google Search、OpenAI ChatGPT、Anthropic Claude 的核心优势都与数据飞轮紧密相关。这也解释了为什么数据来源的版权问题(如 The New York Times 起诉 OpenAI)是 AI 行业的核心法律争议。

⚠️ 常见误区

  1. 误区:“更多数据总是更好” → 正确:Chinchilla 论文(Hoffmann et al., 2022)证明,在固定算力下盲目扩大模型(如 Gopher 280B)而不匹配增加数据是浪费。最优策略是模型大小和数据量按比例增长(约 20 tokens/parameter)。GPT-3(175B 参数,300B tokens)按此标准是严重 undertrained 的。

  2. 误区:数据去重只是工程问题,不影响模型质量 → 正确:重复数据会让模型过拟合并产生逐字记忆(verbatim memorization),这不仅影响泛化能力,还有隐私和版权风险(模型可被诱导输出训练数据中的个人信息)。

6. Pretraining 教会模型什么?

Slide 48 Slide 49 Slide 50 Slide 51 Slide 52 Slide 53 Slide 54 Slide 55 Slide 56
  • 通过”完形填空”学习:事实知识、语法、指代、情感、逻辑推理(如 Fibonacci 序列)
  • 语言模型即世界模型?可解数学题、写代码、规划菜单

🔢 词义消歧(WSD)探针实验

实验(Tenney et al., 2019,BERT Rediscovers the Classical NLP Pipeline):

对 “bank” 在以下两个上下文中提取 BERT 各层表示:

  • 语境 A:“I walked along the bank of the river”(河岸)
  • 语境 B:“I deposited money at the bank”(银行)

计算两种语境下 “bank” 表示的余弦相似度(越低说明区分越好):

余弦相似度解读
10.82几乎无区分(接近静态词向量)
30.71轻微区分
60.45明显区分
90.21强烈区分(语义已消歧)
120.19高层表示充分区分两种词义

结论:预训练让模型在高层形成了上下文敏感的词义表示,解决了 Word2Vec 无法区分多义词的根本问题。

💡 为什么这样做?

Pretraining 的本质是通过自监督信号间接学习语言理解的各个子任务——要预测 [MASK] 位置的词,模型必须先”理解”上下文的语法结构(才能正确地预测动词形式)、语义内容(才能预测语义合理的词)和事实知识(才能预测正确的命名实体)。所有这些能力都是作为”副产品”被学到的,而不是通过显式监督信号。这就是 pretraining 的神奇之处——一个简单的目标(预测下一词 / 预测 masked 词)蕴含了丰富的语言学习信号。

⚠️ 常见误区

  1. 误区:探针准确率高 = 模型”真正理解”了该语言学属性 → 正确:高探针准确率仅说明表示包含了某种信息,不代表模型在做下游任务时使用了这个信息。模型可能走捷径(spurious correlation)而不是真正利用语言学结构。这是 NLP 可解释性研究的核心困境。

  2. 误区:“语言模型 = 世界模型”,所以它理解物理世界 → 正确:LLM 学到的是文本中关于世界的描述,而非对世界本身的感知或推理。它可以解数学题是因为数学推理步骤在训练文本中大量出现,但这不等同于真正理解数学。Gary Marcus 等批评者将此称为”随机鹦鹉”(stochastic parrot)问题。

推荐阅读

关联概念

个人笔记