LLM 预训练完全指南

面向 NLP 研究生的深度教材 · 改编自 Stanford CS224N Winter 2026 Lecture 7 (Diyi Yang)
覆盖:subword 分词 · BPE · 完形填空式监督 · BERT/RoBERTa/SpanBERT · T5 · GPT 系列 · in-context learning · scaling laws (Kaplan/Chinchilla) · 数据伦理
版本 1.0 · 2026 春 · 配套姊妹篇 Post-training · Evaluation

引论:预训练革命与基础模型范式

"Pretraining has had a major, tangible impact on how well NLP systems work." — Diyi Yang, CS224N 2026

2018 年 BERT 的发布是 NLP 史上的哥白尼时刻。在此之前,NLP 研究者面对每一个新任务都要: 设计专门的模型架构、收集任务特定的标注数据、训一个从随机权重开始的模型。 BERT 之后,这套流程被彻底改写为"先在海量无标签文本上预训练一个通用模型,然后在每个下游任务上微调"

这场革命的可视化最清楚的来自 Kiela et al. (2021) 的"基准饱和"曲线。 看 GLUE / SuperGLUE / SQuAD 这些曾经"难得离谱"的基准—— 在 BERT 出现之前几年都在 70% 附近徘徊,BERT 之后短短两年就被顶到接近人类水平:

50 70 80 90 100 人类水平 Jan'18 Jan'19 Jan'20 Jan'21 Jan'22 SQuAD EM 分数 SAN nlnet BERT 📈 BERT 跃迁 BERT+MTL ALBERT FPNet
SQuAD EM 分数随时间演化:2017-2018 年模型在 70-75% 徘徊(SAN/nlnet)。2018 年 10 月 BERT 一举跃升到 87%,开启 fine-tuning 时代。后续 ALBERT、ROBERTA、ELECTRA 等持续逼近人类水平 92%。

基础模型范式

"基础模型"(Foundation Models, Bommasani et al., 2021)这个术语精准刻画了这一新范式: 用海量、异质数据训一个超大模型,然后通过 adaptation 适配到无数下游任务

flowchart LR D1["Text"] --> M["Foundation Model
(BERT/T5/GPT)"] D2["Images"] --> M D3["Speech"] --> M D4["Structured
Data"] --> M D5["3D Signals"] --> M M --> T1["Question
Answering"] M --> T2["Sentiment
Analysis"] M --> T3["Information
Extraction"] M --> T4["Image
Captioning"] M --> T5["Object
Recognition"] M --> T6["Instruction
Following"] style M fill:#a8c5dd

预训练范式的三个核心信念:

本教材沿着 Diyi Yang 的讲座结构,分四大板块带你深入:

  1. Subword 分词——所有预训练模型的最底层接口
  2. 从 word2vec 到 BERT 的动机演化——为什么"预训练整个模型"是必然
  3. 三种架构的预训练——Encoders(BERT 家族)/ Encoder-Decoders(T5)/ Decoders(GPT 家族)
  4. Scaling Laws——Kaplan 2020 → Chinchilla 2022 的修正
  5. 预训练教会了什么 + 不该学的——能力涌现 vs 偏见/版权/隐私风险

第一部分:Subword 分词模型

1.1 固定词表 + UNK 的崩塌

深度学习早期,NLP 默认的词表假设是这样的:

"构建一个数万词的固定词表,源于训练集。测试时所有未见过的词都映射到一个 UNK token。"

来看这种方案在面对真实文本时的崩塌:

类别wordvocab mappingembedding
常用词hathat (id)
常用词learnlearn (id)
变体拉长taaaastyUNK
拼写错误laernUNK
新造词TransformerifyUNK

三个主要痛点:

  1. 词形变体:拉长、重复("taaaasty"、"sooooo")在社交媒体满天飞,但都成了 UNK
  2. 拼写错误:"laern"、"recieve" 这些常见错拼也全部丢失
  3. 新造词 / 复合词:技术词汇、品牌名、合成词层出不穷。"Transformerify"、"COVID-19"、"GPT-3" 都没有 embedding

更深层的问题:词表无法 scale。如果想覆盖所有可能的变形,词表必然爆炸(百万级以上), embedding table 占用的内存超过模型本身。

1.2 Byte-Pair Encoding 算法

解决方案是 subword 分词——把单词拆成更小的"已知碎片"。 Byte-Pair Encoding (BPE)(Sennrich et al., 2016;最早源自 1994 年的数据压缩算法) 是最成功也最常用的算法。

BPE 算法(伪代码)
1. 初始化词表 = {所有字符} ∪ {</w> 词尾符号}
2. 把语料中每个单词写成 char 序列 + </w>
   例如 "low" → l o w </w>
3. for i in range(num_merges):
     - 统计语料中所有相邻 token 对的频率
     - 找出最高频对 (a, b)
     - 把 "a b" 合并为新 token "ab",加入词表
     - 在语料里把所有 (a, b) 替换为 ab
4. 训练结束 → 词表 = chars + 所有 merge 出的 subword

BPE 算法的直观演示

假设语料只有 5 个单词:"low low low lower newest widest":

步骤语料最高频对新 token
初始l o w </w> · l o w </w> · l o w </w> · l o w e r </w> · n e w e s t </w> · w i d e s t </w>(e, s) 出现 2 次es
合并 1... n e w es t </w> · w i d es t </w>(es, t) 出现 2 次est
合并 2... n e w est </w> · w i d est </w>(l, o) 出现 4 次lo
合并 3lo w </w> ...(lo, w) 出现 4 次low

经过足够多次合并,常用词("low"、"est")成为单一 token,罕见词被拆成多个 subword。 最终词表大小通常 30k - 50k(BERT 用 30k,GPT-3 用 ~50k,LLaMA 用 32k)。

结果:未见词也能被分解

wordsubword tokens说明
hathat常用词,作为单一 token
learnlearn常用词
taaaastytaa## aaa## sty拆成 3 个 subword
laernla## ern##拆成 2 个 subword
TransformerifyTransformer## ify主词根 + 后缀

## 是 WordPiece 风格的"中段 subword"标记。最坏情况下每个 char 都是单独的 subword,但绝不会出现 UNK

1.3 WordPiece / SentencePiece

BPE 有几个有影响力的变体:

算法核心差异代表模型
BPE (Sennrich 2016)选择"最高频"的相邻对合并GPT-2/3, RoBERTa
WordPiece (Wu 2016)选择能最大化"语言模型似然"的对合并;带 ## 前缀标识 subwordBERT, DistilBERT
SentencePiece + Unigram (Kudo 2018)把空格当普通字符;用 EM 算法做概率化分词,可输出多种切分方案T5, ALBERT, XLNet, LLaMA
byte-level BPE (GPT-2)从 UTF-8 bytes 开始合并而非 chars;适合多语言GPT-2/3, RoBERTa
为什么 GPT-2 用 byte-level BPE?
传统 BPE 从 Unicode 字符开始,那么中文、emoji、日文每个都是一个起始字符——基础词表会膨胀到几万。 GPT-2 改用 256 个 byte 起始,所有语言都能被覆盖,词表完全可控。 代价是:单个中文字符通常需要 2-3 个 token 表示(这就是为什么 ChatGPT 对中文计费比英文贵)。

1.4 现代 tokenizer 实务对照

看一段中英混合文本被不同 tokenizer 切分的差异:

Model"I love 自然语言处理 NLP!"Token 数
BERT (WordPiece)['I', 'love', '自', '然', '语', '言', '处', '理', 'N', '##L', '##P', '!']12
GPT-2 (byte-BPE)['I', ' love', ' 自', '然', '语', '言', '处', '理', ' N', 'LP', '!']11
LLaMA (SentencePiece)['▁I', '▁love', '▁', '自', '然', '语', '言', '处', '理', '▁NLP', '!']11
Qwen / cl100k_base['I', ' love', ' 自然', '语言', '处理', ' NLP', '!']7

注意 Qwen / GPT-4 用的 cl100k_base 词表特别照顾了中文—— "自然"、"语言"、"处理"都是单个 token。这是因为它们在中文语料上专门做了 BPE 训练。

tokenizer 不是中立的
不同模型的 tokenizer 直接影响:
  • 序列长度:中文在 BERT 下比英文长 2-3 倍 → context window 实际容量缩小
  • API 成本:按 token 计费 → 中文 input 比英文贵
  • 语言公平:低资源语言(如斯瓦希里语、藏语)的 token 数膨胀,模型在它们上的表现因此打折
  • 训练效率:subword 数量直接决定 sequence length,进而决定 attention 的 $O(n^2)$ 开销

第二部分:从 word2vec 到"整模型预训练"

2.1 distributional semantics 的两次升级

"You shall know a word by the company it keeps." — J. R. Firth (1957)

这是 NLP 整个分布式语义学(distributional semantics)的奠基性论断。 2013 年的 word2vec(Mikolov et al.)把它工程化为算法: 通过预测词的上下文(或反过来),学到一个 词向量 $v_w \in \mathbb{R}^d$。

但 Firth 还有另一句更深的话:

"... the complete meaning of a word is always contextual, and no study of meaning apart from a complete context can be taken seriously." — J. R. Firth (1935)

这句话指出了 word2vec 的根本局限:一个词在不同语境中意义不同。看经典例子:

"I record the record."
两个 "record" 词形相同,但词性和意义完全不同(动词 vs 名词)。word2vec 给它们同一个向量。

这就是为什么 NLP 必须从 静态词向量(word2vec, GloVe, FastText) 升级到 上下文相关词向量(contextual representations)。 后者由 LSTM / Transformer 在具体句子中动态计算,从而对"the bank of a river" vs "the Bank of America" 给出不同 embedding。

2.2 2017 的 ELMo 中间态

2017 年左右,主流范式是"半预训练"

ŷ Not pretrained (随机初始化) Pretrained (word embeddings) … the movie was … (只有词向量是预训练的;其他随机初始化)
2017 范式:把 word2vec/GloVe 等预训练词向量作为模型最底层输入,其上的 LSTM/Transformer 全部随机初始化,在下游任务上从头训练。

代表性工作:ELMo(Peters et al., 2018)用预训练 BiLSTM 提供 contextual embeddings, 但下游模型本体仍需要任务自己训练。

这个范式的两个根本问题

问题 1
下游任务的训练数据必须足够大,才能教会模型所有的"上下文相关"知识——从语法到指代到推理。
问题 2
网络中大部分参数都是随机初始化的,预训练词向量带来的优势被稀释。

2018 年的转折:"为什么不把整个模型都预训练?"

ŷ Pretrained jointly … the movie was … 所有参数都预训练 → 学到整句话的表示
2018+ 范式:整个网络(embedding + LSTM/Transformer + 输出层)一起预训练。这就是 BERT、GPT、T5 全家的核心思路。

2.3 完形填空:重建输入能学到什么?

预训练的关键 trick 是把输入的一部分藏起来,让模型重建。这种"完形填空式"的自监督学习 让模型自动学到关于语言的一切。让我们看几个具体例子,每个填空背后藏着不同的语言知识:

Stanford University is located in ___, California.
考的是 百科知识 / 事实记忆 (trivia) → "Palo Alto" / "Stanford"
I put ___ fork down on the table.
考的是 句法 (syntax) → "my" / "the" / "a"(必须是限定词)
The woman walked across the street, checking for traffic over ___ shoulder.
考的是 指代消解 (coreference) → "her"(与前面 "The woman" 共指)
I went to the ocean to see the fish, turtles, seals, and ___.
考的是 词汇语义 / 主题 (lexical semantics / topic) → "dolphins" / "whales" / "sharks"
Overall, the value I got from the two hours watching it was
the sum total of the popcorn and the drink.
The movie was ___.
考的是 情感分析 (sentiment) + 复杂推理 → "bad" / "terrible"(因为暗示"只值爆米花和饮料的钱")
I was thinking about the sequence that goes
1, 1, 2, 3, 5, 8, 13, 21, ___
考的是 基础算术 / 模式识别 → "34"(不过 LM 通常学不到 Fibonacci 规则!)

这就是预训练的核心威力:一个"重建被遮住的部分"的任务,迫使模型学习语言所有层级的知识—— 从词形、句法、语义到世界知识、推理。 不需要给模型任何显式标注,海量纯文本就足以教会它一切。

为什么这个 trick 如此有效?
  • 自监督:标签从输入本身派生,不需要人工标注,因此可以无限 scaling
  • 密集监督:每个 token 都是一个训练信号——一篇 1000 词的文章产生 1000 个监督信号
  • 任务多样性:填空覆盖语法、语义、知识、推理等所有维度
  • 预测分布:模型不仅学到"对"的答案,还学到"可能的"答案分布——这就是 sample 的能力来源

2.4 Pretrain/Finetune 范式公式化

形式化地说,预训练 + 微调可以写成两个阶段的优化:

Stage 1: Pretrain(无监督,大规模文本)
$$\hat{\theta} = \arg\min_\theta\; \mathbb{E}_{x \sim \mathcal{D}_{\text{pretrain}}}\left[\mathcal{L}_{\text{PT}}(x; \theta)\right]$$ 其中 $\mathcal{L}_{\text{PT}}$ 是预训练目标(如 masked LM 损失、自回归 LM 损失、span corruption 等)。 得到 初始化权重 $\hat{\theta}$。
Stage 2: Finetune(有监督,下游任务)
$$\theta^* = \arg\min_\theta\; \mathbb{E}_{(x, y) \sim \mathcal{D}_{\text{task}}}\left[\mathcal{L}_{\text{task}}(x, y; \theta)\right]\quad\text{初始化于 } \hat{\theta}$$ 关键点:初始化从 $\hat{\theta}$ 出发而不是随机——这就是预训练的"红利"。
Step 1: Pretrain (on language modeling) Lots of text; learn general things! Transformer / LSTM Iroh goes to make tasty tea goes to make tasty tea END Step 2: Finetune (on your task) Few labels; adapt to the task! Transformer / LSTM … the movie was … 😊 / 😞
预训练 → 微调的两阶段范式。Step 1 在海量无标签文本上学语言建模;Step 2 用预训练权重初始化,在下游任务的小标注集上微调。"Pretrain once, finetune many times."

2.5 预训练数据从哪里来:Pile / BookCorpus

所有这套范式都依赖海量、多样化、质量过得去的文本数据。各模型的训练语料:

ModelTraining Data
BERTBookCorpus (800M words) + English Wikipedia (2.5B words)
GPT-1BookCorpus (~7000 books)
GPT-3CommonCrawl + WebText + Wikipedia + Books1 + Books2 (~300B tokens)
GPT-3.5+Undisclosed(OpenAI 不再公开)
LLaMACommonCrawl, C4, GitHub, Wikipedia, Books, ArXiv, StackExchange (~1.4T tokens)
Pile (开源)22 个 dataset 混合:PubMed Central, ArXiv, FreeLaw, USPTO, GitHub, StackExchange, Wikipedia, OpenWebText2, ...

来看 The Pile(Gao et al., 2020)的成分组成图:

PubMed Central FreeLaw USPTO NIH ArXiv Pile-CC OpenWebText2 StackExchange Wikipedia Github Bibliotik PG-19 BC2 IRC, EP, HN, YT ■ Academic ■ Internet ■ Prose ■ Dialogue ■ Misc
The Pile (Gao et al., 2020) 的成分构成。包含学术(PubMed/ArXiv/FreeLaw)、互联网(CC/OpenWebText2/Wikipedia/StackExchange)、散文(PG-19、BookCorpus2、Bibliotik)等。Bibliotik 是非法上传电子书库——已成为后续法律纠纷焦点。

2.6 数据伦理:版权 / Fair Use

预训练数据规模到了 TB-PB 级,几乎不可能 hand-pick——多数都是互联网爬虫 + 已有数据集混合。 但其中相当部分内容是受版权保护的。这引发了 2023-2026 年一系列重大法律纠纷:

真实案例
  • Google swallows 11,000 novels to improve AI's conversation(The Guardian, 2016)—— 早期 BookCorpus 来源于 Smashwords 平台上 11k 部小说,未经作者许可
  • The Times Sues OpenAI and Microsoft Over A.I. Use of Copyrighted Work(NYT, 2023.12)—— 《纽约时报》起诉 OpenAI 用百万篇文章训练 ChatGPT,要求 billions of dollars 赔偿
  • Anthropic vs music publishers(2024.01)——音乐版权方诉 Anthropic 用歌词训练 Claude
  • Getty Images v. Stability AI(2023)——图像生成 AI 公司被起诉训练时使用了 12M+ Getty 图片
  • GitHub Copilot Class Action(2023)——程序员集体起诉 Copilot 输出了与 GPL 代码完全一致的片段

核心法律争议:Fair Use 在 AI 时代成立吗?

美国版权法的 fair use 原则有四个判断因素:使用目的、原作性质、使用量、对原作市场的影响。 AI 训练能否归入 fair use 目前完全是开放问题。

这场争论会长期影响 LLM 行业。未来可能出现: 许可证型数据集成为主流(如 AI2 的 Dolma、Apple 的 OpenELM 训练集都强调 "permissively licensed"); 更严格的opt-out 机制(robots.txt 之类的标记 AI 训练禁用);甚至按 token 付费给原作者。

研究者实务建议
  • 如果做开源/学术研究,优先用 The Pile、RedPajama、Dolma、SlimPajama 等 license 清晰的数据集
  • 训练自己的模型时,记录每条数据的来源和 license,便于事后审计
  • 商业部署前必须做"逐字记忆"测试(用训练样本前缀让模型补全,看是否能复现训练数据)
  • 多语言/小语种社区应主动建设 license 友好的本地数据集(如台湾 Project TAIDE、中国清华 ChatGLM 都在做)

第三部分:三种架构的预训练

3.1 总览:Encoders / Encoder-Decoders / Decoders

"The neural architecture influences the type of pretraining, and natural use cases." Transformer 家族其实是三种不同的注意力机制配置

flowchart TB subgraph EncOnly["Encoder-only (双向 attention)"] E1["BERT / RoBERTa / ELECTRA"] end subgraph EncDec["Encoder-Decoder (encoder 双向 + decoder 因果)"] ED1["T5 / BART / mT5 / Flan-T5"] end subgraph DecOnly["Decoder-only (因果 mask, 仅看过去)"] D1["GPT / LLaMA / Mistral / Qwen"] end style EncOnly fill:#bcdde9 style EncDec fill:#d4e5d4 style DecOnly fill:#f4b6a8
架构注意力预训练目标典型用途
Encoders双向 (bidirectional)Masked LM分类、序列标注、相似度、QA span 抽取
Encoder-Decodersencoder 双向 + decoder 因果 + cross-attnSpan corruption / Prefix LM翻译、摘要、seq2seq 改写、闭书 QA
Decoders因果 (causal, 仅看过去)Autoregressive LM开放生成、对话、in-context learning、所有"LLM 应用"

2018-2020 年是 BERT / Encoder 的时代,2020-2022 是 T5 / Encoder-Decoder 的时代, 2022 之后是 Decoder-only 的天下(GPT-3.5/4、Claude、Gemini、LLaMA 全是 decoder-only)。 为什么?我们逐个讲完后再回答。

3.2 Encoders:BERT 与 Masked LM

BERT(Bidirectional Encoder Representations from Transformers, Devlin et al., 2018)的核心创新是 解决一个矛盾:encoder 是双向的,所以不能直接做 language modeling

回忆 LM 目标 $p_\theta(w_t \mid w_{1:t-1})$——它要求模型只看过去预测未来。 但 encoder 中每个位置都能看到所有其他位置(包括未来),如果直接做 LM 任务,模型会"作弊": 直接从输入复制答案而无需建模。

Devlin 的天才解法:Masked Language Modeling

Masked LM (MLM)
把输入的 15% token 随机替换为 [MASK],让模型预测被遮住的原始 token。
这样既保留了双向 attention 的优势,又让模型必须真正"学习"而非"复制"。
Masked LM 目标
$$h_1, \ldots, h_T = \text{Encoder}(w_1, \ldots, w_T)$$ $$y_i \sim Aw_i + b$$ 若 $\tilde{x}$ 是 $x$ 的 masked 版本,则学习 $p_\theta(x \mid \tilde{x})$。
损失只在被 mask 的 token 上累加: $$\mathcal{L}_{\text{MLM}}(\theta) = -\mathbb{E}_{x \sim \mathcal{D}} \sum_{i \in M} \log p_\theta(x_i \mid \tilde{x})$$ 其中 $M$ 是被 mask 的位置集合。
went store Transformer Encoder I [M] to the [M] ↑ encoder 内每个位置都能 attend 到所有其他位置(双向) 仅在 [M] 位置计算 loss,预测原始 token went store
BERT 的 Masked LM 训练:原句 "I went to the store" 随机 mask 两个 token 变成 "I [M] to the [M]";模型必须用双向上下文恢复原 token。

3.3 BERT 的 80/10/10 mask 策略

朴素的 mask 方案有一个微妙问题:训练时输入里有 [MASK] token,但微调时永远不会出现 [MASK]。 这会造成 train/test 分布不一致。Devlin 设计了一个精巧的三种扰动混合

80% [MASK]
替换为特殊 [MASK] token:I [MASK] to the store → 主要的训练信号
10% random
替换为随机词:I pizza to the store → 强迫模型对每个 token 建立强表示,不能依赖"这位置 mask 了就重点关注"的捷径
10% unchanged
保留原 token:I went to the store → 缓解 train/test mismatch,让模型在看到原词时也能"预测"它
为什么不全部 [MASK]?
如果总是 [MASK],模型在微调(看到无 mask 的真实文本)时会困惑——因为它从未见过这种输入。 80/10/10 让模型对任意 token 位置都能产生有意义的预测。这种 "complacency 防御"是 BERT 设计中常被低估的细节。

所有 token 中只有 15% 被选中参与上述扰动;其余 85% 保持原样且不参与 loss 计算。 这意味着 BERT 每个 batch 的有效监督信号只有 15%——这也是它比 GPT 训练成本高的部分原因 (GPT 自回归 LM 每个 token 都是监督信号)。

3.4 BERT 的输入构造 + NSP

BERT 的输入是两段连续文本的拼接,加上特殊 token:

BERT 输入:3 种 embedding 相加 [CLS] my dog is cute [SEP] he likes play ##ing [SEP] Tokens (WordPiece) + + + + + + + + + + + E_A E_A E_A E_A E_A E_A E_B E_B E_B E_B E_B Segment (A or B) + + + + + + + + + + + E_0 E_1 E_2 E_3 E_4 E_5 E_6 E_7 E_8 E_9 E_10 Position (0, 1, 2, ...) ↓ 三个 embedding 相加得到每个 token 的最终输入向量 Input = Token_emb + Segment_emb + Position_emb,再送入 Transformer Encoder
BERT 输入构造的"三位一体":token embedding + segment embedding(区分句子 A/B)+ position embedding(位置编码)逐位相加。

Next Sentence Prediction (NSP) — 后被证明并不必要

BERT 原版同时训练两个目标:

NSP 的设计动机是让模型学习跨句子关系,有助于 QA、NLI 等任务。 但RoBERTa(Liu et al., 2019)后来证明 NSP 反而是噪声—— 去掉 NSP,只用更大的 batch 训更久,BERT 反而更强。

3.5 BERT 的实证表现

BERT 发布时公开了两个尺寸的模型:

模型LayersHiddenHeadsParams训练资源
BERT-base1276812110M64 TPU × 4 天
BERT-large24102416340M

训练数据:BookCorpus (800M 词) + English Wikipedia (2,500M 词)。 "Pretrain once, finetune many times" 成为新范式:预训练贵但只跑一次,微调便宜可在单 GPU 上完成。

GLUE 上的 BERT 横扫

SystemMNLIQQPQNLISST-2CoLASTS-BMRPCRTEAvg
Pre-OpenAI SOTA80.666.182.393.235.081.086.061.774.0
BiLSTM+ELMo+Attn76.464.879.890.436.073.384.956.871.0
OpenAI GPT82.170.387.491.345.480.082.356.075.1
BERT-base84.671.290.593.552.185.888.966.479.6
BERT-large86.772.192.794.960.586.589.370.182.1

BERT-large 在 GLUE 上平均比之前 SOTA 高 7 个点——这在 NLP 学界几乎是地震级的提升。 2018-2019 整年的 NLP 顶会论文,绝大多数都是 "X + BERT" 的某种组合。

3.6 Encoder 的局限性 + RoBERTa / SpanBERT

Encoder 不擅长生成

BERT 这类双向 encoder 训练时没有 "left-to-right" 因果约束,所以不能自然地做 autoregressive 生成。 它适合的下游任务格式是:

不适合的:开放式文本生成、对话、翻译、摘要——这些都需要 1-word-at-a-time 的自回归生成能力。

RoBERTa:训得更久、去掉 NSP、动态 mask

RoBERTa(Robustly Optimized BERT, Liu et al., 2019)做了几个"简单但有效"的改进:

ModeldatabszstepsSQuADMNLI-mSST-2
BERT-large + Books+Wiki13GB2561M90.9 / 81.886.693.7
RoBERTa + Books+Wiki16GB8K100K93.6 / 87.389.095.3
+ additional data160GB8K100K94.0 / 87.789.395.6
+ pretrain longer160GB8K300K94.4 / 88.790.096.1
+ pretrain even longer160GB8K500K94.6 / 89.490.296.4
RoBERTa 的核心教训
"不动架构,光给 BERT 更多算力 + 更多数据 + 更大 batch,就能持续涨点。" 这预示了后来的"scaling is all you need"哲学。

SpanBERT:masked span 比 masked token 更难、更有用

SpanBERT(Joshi et al., 2020)把"随机 mask 单个 token"改为"mask 连续的 span"。 直觉:连续多个 token 一起被 mask 后,模型必须用"远距离"上下文重建,学到的表示更强。

BERT 风格 maskSpanBERT 风格 mask
原句It's irresistibly goodIt's irresistibly good
mask 模式[MASK] irr## [MASK] sti## [MASK] goodIt' [MASK] [MASK] [MASK] [MASK] good
要预测It's, esi##, blyirr##, esi##, sti##, bly

SpanBERT 在 SQuAD、coreference、relation extraction 上都比 BERT 更强—— mask span 这个简单改动后来被 T5 的 span corruption 进一步发扬光大。

3.7 Encoder-Decoders:T5 与 span corruption

T5(Text-to-Text Transfer Transformer, Raffel et al., 2020)的设计哲学是 "所有 NLP 任务都是 text-to-text"——把任何任务(分类、翻译、QA、摘要) 都包装成"输入文本 → 输出文本"格式,由 encoder-decoder 架构统一处理。

Prefix LM:先尝试的 baseline

对 encoder-decoder,最朴素的想法是 prefix language modeling

Prefix LM 目标
$$h_1, \ldots, h_T = \text{Encoder}(w_1, \ldots, w_T)$$ $$h_{T+1}, \ldots, h_{2T} = \text{Decoder}(w_1, \ldots, w_T, h_1, \ldots, h_T)$$ $$y_i \sim Ah_i + b, \quad i > T$$ 前一半句子给 encoder(不预测,纯输入),后一半给 decoder 来预测。
encoder 部分可以双向 attend;decoder 部分是常规因果 LM。

Span Corruption:T5 真正用的目标

Raffel et al. 实验后发现,span corruption 比 Prefix LM 效果更好:

原文: Thank you for inviting me to your party last week.
Encoder 输入: Thank you <X> me to your party <Y> week.
Decoder 输出: <X> for inviting <Y> last <Z>
(<X>、<Y>、<Z> 是 sentinel token,标记 span 的位置和顺序)

Span corruption 的关键点:

  1. 把输入中不同长度的连续 span 替换为唯一占位符
  2. decoder 顺序生成所有被替换的 span,用 sentinel 隔开
  3. 本质上仍是"language modeling on decoder side"——但 encoder 看完整句话

实证:encoder-decoder + span corruption > 一切

ArchitectureObjectiveParamsGLUESQuADEnDe (翻译)
★ Encoder-decoderDenoising (span corruption)2P83.2880.8826.98
Enc-dec sharedDenoisingP82.8180.6326.72
Language model (decoder)DenoisingP74.7061.1425.09
Prefix LMDenoisingP81.8278.9426.43
Encoder-decoderStandard LM2P79.5676.0226.27
Language model (decoder)Standard LMP73.7853.8125.23

两个清晰结论:

Plot twist:那为什么 LLM 时代是 decoder-only 的天下?
T5 时代的 benchmark(GLUE/SQuAD)主要是分类span 抽取。 2022 年之后 LLM 的"用户场景"变成了开放对话、长文生成、in-context learning—— 这些任务上 decoder-only 反而更自然(每个 token 都能条件于所有先前生成的 token,包括 prompt 和 reasoning chain)。 加上 decoder-only 的简洁性(无需 cross-attention、kv-cache 容易实现),生态最终选择了 decoder-only

3.8 T5 闭书 QA:参数即知识

T5 还有一个引人入胜的发现:它可以做 "closed-book QA"—— 不给任何参考文档,直接问问题,让模型从参数里检索知识:

Pre-training: [模型看过] "President Franklin D. Roosevelt was born in January 1882."
Fine-tuning / Inference: Q: "When was Franklin D. Roosevelt born?" → A: "1882"

且随着模型规模增长,闭书 QA 准确率单调上升:

ModelParamsNQWQTQA devTQA test
Karpukhin et al. (2020)
(open-book + retrieval)
41.542.457.9
T5.1.1-Base220M25.728.224.230.6
T5.1.1-Large770M27.329.528.537.2
T5.1.1-XL3B29.532.436.045.1
T5.1.1-XXL11B32.835.642.952.5
T5.1.1-XXL + SSM11B35.242.851.961.6

T5-XXL + SSM (Salient Span Masking) 11B 在 TriviaQA 上达到 61.6%,超过了带检索的 open-book 系统! 这证明足够大的 LM 把训练数据中的事实知识"压缩"到了参数里—— 这是 GPT-3 之后所有 LLM"涌现知识"现象的先声。

3.9 Decoders:GPT-1/2/3 三代演化

Decoder-only 模型只能看过去(因果 mask),天然适合 autoregressive LM:

Decoder LM 目标
$$\mathcal{L}_{\text{LM}}(\theta) = -\sum_{t=1}^{T} \log p_\theta(w_t \mid w_{1:t-1})$$ 即给定前 $t-1$ 个 token,预测第 $t$ 个。每个位置都是监督信号——非常密集。

Decoder 的两种用法

用法 1:作为分类器(GPT-1 风格)

😊/😞 Linear (A, b) ← 随机初始化 h_1 h_2 h_3 h_4 h_T ★ w_1 w_2 w_3 w_4 w_T finetune:在最后 token 的 hidden state 上加个线性层做分类
用法 1:把 decoder 当分类器。只取最后 token 的 hidden state $h_T$ 接一个新初始化的线性头 $y = Ah_T + b$。注意 A, b 没有预训练,必须从零学。

用法 2:作为生成器(GPT-2/3 风格)

w_2 w_3 w_4 w_5 w_6 w_1 w_2 w_3 w_4 w_5 finetune:仍然做 LM 任务;输出头 A,b 也是预训练过的
用法 2:把 decoder 当生成器。仍然做 $p_\theta(w_t \mid w_{1:t-1})$。输出头是预训练过的 embedding(通常是 tied weights)。适合对话、摘要等任务。

GPT-1 (2018, Radford et al.): 117M Decoder

GPT 在 NLI 上的输入格式

NLI 任务需要判断 (premise, hypothesis) 是 entailment / contradiction / neutral。 GPT 把它包装成一段连续 token 序列:

[START] The man is in the doorway [DELIM] The person is near the door [EXTRACT]

然后在 [EXTRACT] token 的最终 hidden state 上接一个线性分类器输出 3 个类别 logit。
MethodMNLI-mMNLI-mmSNLISciTailQNLIRTE
ESIM + ELMo (5x ensemble)89.3
CAFE (5x)80.279.089.3
Multi-task BiLSTM + Attn72.272.182.161.7
Finetuned Transformer LM (GPT)82.181.489.988.388.156.0

GPT-1 在 5/6 个 NLI 数据集上击败之前的 SOTA(其中很多是 ensemble),且不需要任何任务特定架构

GPT-2 (2019): 1.5B 参数,生成质量令人震惊

GPT-2 是 GPT-1 的10× 放大版(117M → 1.5B),训练数据扩展到 WebText(40GB 文本)。 它最著名的演示是这段"瑞士独角兽"补全:

Context (human-written): In a shocking finding, scientist discovered a herd of unicorns living in a remote, previously unexplored valley, in the Andes Mountains. Even more surprising to the researchers was the fact that the unicorns spoke perfect English.

GPT-2: The scientist named the population, after their distinctive horn, Ovid's Unicorn. These four-horned, silver-white unicorns were previously unknown to science.

Now, after almost two centuries, the mystery of what sparked this odd phenomenon is finally solved.

Dr. Jorge Pérez, an evolutionary biologist from the University of La Paz, and several companions, were exploring the Andes Mountains when they found a small valley, with no other animals or humans...

当时这段生成震动了 NLP 社区——它语法完美、逻辑连贯、风格类似新闻稿、还能保持人物名字一致性。 OpenAI 因此一度延迟发布完整 1.5B 权重,称"担心被滥用"(后来还是发布了)。

3.10 GPT-3 与 in-context learning 的涌现

GPT-3(Brown et al., 2020)的尺寸又是 GPT-2 的100×—— 175B 参数,比当时最大的 T5-XXL(11B)大一个量级。 但 GPT-3 真正的革命不在于尺寸,而在于一种全新的使用方式

"Very large language models seem to perform some kind of learning without gradient steps simply from examples you provide within their contexts."

这就是 in-context learning (ICL)——也叫 few-shot prompting。

ICL 的工作方式

不再需要 fine-tune,直接在 prompt 里给几个示例就能"教会"模型做新任务:

Input (single Transformer context):
thanks -> merci
hello -> bonjour
mint -> menthe
otter ->


Output (conditional generation):
loutre

GPT-3 从 3 个例子中"领悟到"任务是"英语 → 法语单词翻译",然后给出正确答案。 关键是:没有任何梯度更新——模型参数完全没变,所谓"学习"只发生在 forward pass 的 attention 中。

"涌现"现象

ICL 能力在小模型上几乎不存在,超过某个临界规模(~10B)才突然出现。这就是 emergent capabilities 的典型:

flowchart LR A["1. SGD 在预训练阶段
慢慢学习语言统计规律"] --> B["2. 模型规模超过临界点
(~10B+)"] B --> C["3. 涌现:模型在
forward pass 中
'模拟'学习行为"] C --> D["4. 用户给 few-shot examples
就能即时适配新任务"] style C fill:#fff7e6 style D fill:#eafaf0

ICL 的机制至今仍是开放研究问题。最有影响力的解释之一(Akyürek et al., 2023; von Oswald et al., 2023)是: Transformer attention 在 forward pass 中近似实现了一步梯度下降或岭回归。也就是说,模型"学会了在 forward pass 里做学习算法"。

ICL 的实务影响
  • 消除微调需求:很多场景下 prompt engineering 就够用,不需要 GPU 跑 finetune
  • 开启 prompt engineering 时代:如何写 prompt 成为新职业、新研究方向
  • 降低 NLP 入门门槛:会写英文 = 会用 LLM;不需要任何 ML 知识
  • 催生 OpenAI API 商业模式:GPT-3 作为通用 NLP API,每个 token 收费
  • 启动 reasoning 研究:Chain-of-Thought (Wei et al., 2022) 用 ICL 让模型"先想后答"

第四部分:Scaling Laws

GPT-3 175B 的"涌现"现象让一个核心问题浮上台面: 给定算力预算,如何在"模型大小"和"训练数据量"之间分配,才能拿到最低的 test loss? 这就是 scaling laws 研究的核心。

4.1 Kaplan scaling laws (2020)

Kaplan et al. (2020, OpenAI) 的开创性工作"Scaling Laws for Neural Language Models" 通过在大量不同尺寸的 Transformer 上做实验,发现:test loss 随 compute、dataset size、parameters 三者 分别呈现幂律关系(power-law)

Kaplan scaling laws (2020)
$$L(C) = \left(\frac{C_{\min}}{2.3 \times 10^8}\right)^{-0.050}$$ $$L(D) = \left(\frac{D}{5.4 \times 10^{13}}\right)^{-0.095}$$ $$L(N) = \left(\frac{N}{8.8 \times 10^{13}}\right)^{-0.076}$$ 其中 $L$ 是 test loss(cross-entropy), $C$ 是 compute (PF-days), $D$ 是 dataset size (tokens), $N$ 是参数量。

这些幂律意味着:

Compute (PF-days, non-embedding) 2 3 5 7 10⁻⁹ 10⁻³ 10¹ Compute (log) L=(C/2.3e8)^-0.050 Dataset Size (tokens) 3.0 3.6 4.2 10⁶ 10⁸ 10⁹ Dataset (log) L=(D/5.4e13)^-0.095 Parameters (non-embedding) 3.0 4.8 5.6 10⁵ 10⁷ 10⁹ Params (log) L=(N/8.8e13)^-0.076
Kaplan et al. (2020) 的三个幂律:在 log-log 空间里 test loss 对 compute / dataset / parameters 都是直线。斜率反映"投资回报率"——dataset 斜率最陡 (-0.095) 表示数据是最敏感的杠杆。

实务推论:训一个"还没完全收敛"的大模型

Kaplan 的另一个关键发现:在固定 compute 预算下,最佳策略是训一个比"完全收敛"更大的模型,但训得不完全。 也就是说,与其让一个 1B 模型见完所有数据,不如让一个 10B 模型只见 1/10 的数据——后者的最终 loss 更低。

1.5 2 3 4 5 Validation Loss 10⁻⁶ 10⁻² 10⁰ 10⁴ Compute (PetaFLOP/s-days) L=2.57·C^-0.048 (frontier) 10⁵ 10⁶ 10⁷ 10⁸ 10⁹ 10¹⁰ 10¹¹ 每条线 = 一个固定大小的模型在训练过程中的 loss 虚线 = 不同大小模型的 best loss 包络
"Kaplan 包络图":颜色表示模型大小(10⁵ ~ 10¹¹ 参数)。每条彩线是一个尺寸模型在训练过程中的 validation loss 随 compute 的变化。虚线 frontier 是不同尺寸模型在每个 compute 预算下能达到的最低 loss。结论:沿 frontier 走意味着每个 compute 预算选不同尺寸的模型——但都不需要"训到收敛"

4.2 Chinchilla 的修正 (2022)

Kaplan 论文之后两年,DeepMind 的 Chinchilla 论文(Hoffmann et al., 2022, "Training Compute-Optimal Large Language Models") 重做了 scaling law 实验,得出了截然不同的结论: Kaplan 严重低估了数据的重要性,"模型大小:训练 token 数"的最优比应是 1:20,而不是 GPT-3 实际的 1:1.7。

ModelSize (Params)Training Tokenstokens/param
LaMDA137B168B~1.2
GPT-3175B300B~1.7
Jurassic178B300B~1.7
Gopher280B300B~1.1
MT-NLG 530B530B270B~0.5
Chinchilla70B1.4T~20

关键实验:DeepMind 给 Chinchilla 和 Gopher (280B) 同等 compute 预算,但 Chinchilla 只有 70B 参数 + 4× 训练数据。 结果:Chinchilla 在几乎所有评测上都击败了 4 倍大的 Gopher

Chinchilla 启示("Chinchilla-optimal")
对当前主流的 dense Transformer,每个参数应当训 ~20 个 token。 这意味着:
  • GPT-3 175B 应当训 ~3.5T 而非 0.3T tokens——它训练严重不足
  • 训一个 70B 模型 + 1.4T tokens > 训一个 280B 模型 + 300B tokens(同算力)
  • 这就是为什么 LLaMA-2 7B 训 2T tokens、LLaMA-3 8B 训 15T tokens——往 Chinchilla-optimal 的方向走甚至超额数据

为什么 Kaplan 错了?

后续研究表明 Kaplan 的主要问题是learning rate schedule—— 他用固定 cosine schedule,而该 schedule 对大模型小数据更友好。 Chinchilla 调整 LR 后,最优配比从 1:1 变成 1:20。

更新更细致的研究(Sardana & Frankle, 2024, "Beyond Chinchilla-Optimal")指出: 如果考虑推理成本,应当训得比 Chinchilla 还要小、更多数据。 这就是 LLaMA-3 8B 用 15T tokens(远超 Chinchilla 的 160B)的合理性—— 因为它要部署给亿级用户用,推理算力是训练算力的几十倍。

4.3 架构敏感性:Transformer vs LSTM

Kaplan 等还研究了不同架构的 scaling 行为:

Transformer 层数对比 2 3 5 7 10³ 10⁶ 10⁹ Parameters (log) Test loss 1 Layer 2 Layers 3 Layers 6+ Layers Transformer vs LSTM 2.4 3.0 4.2 4.8 10⁵ 10⁷ 10⁹ Parameters (log) Transformer LSTM ← LSTM plateaus 早
左:Transformer 加层数能持续涨——但超过 6 层后基本饱和。右:相同参数量下,Transformer 比 LSTM 的 scaling 曲线更陡且没有 plateau。这就是为什么后 BERT 时代 LSTM 全军覆没。

核心结论:

4.4 实务:compute-optimal 训练配方

预算推荐配方 (基于 Chinchilla + 2026 经验)
1 张 A100 / H100 (~100 GPU-hours)SFT/LoRA 微调 7-8B 现成预训练模型,不要从零训
~1000 GPU-hours训一个 ~1B 模型 + 20B tokens(如 TinyLlama)
~10k GPU-hours训一个 ~7B 模型 + 140-300B tokens(如 LLaMA-1 7B、Mistral 7B)
~100k GPU-hours训一个 ~30B 模型 + 600B-1T tokens(如 LLaMA-2 30B)
~1M GPU-hours训一个 70B 模型 + 1.4T+ tokens(Chinchilla, LLaMA-2 70B),或 Mixture-of-Experts
~10M+ GPU-hoursfrontier LLM 训练(GPT-4, Claude Opus, Gemini Ultra);通常是 MoE + 多轮 post-training
2026 年的额外考量
  • MoE 改变了 scaling 曲线:DeepSeek V3 (671B total / 37B active) 证明 MoE 在同 compute 下能比 dense 大 ~5× 有效参数
  • 数据质量 > 数据数量:Phi-3、FineWeb-Edu 证明精心过滤的"教科书级"数据可以让小模型超过大模型
  • 多模态影响 token 经济学:图像/视频/音频 tokens 比文本贵 10-1000×,需要重新考虑配比
  • 推理 compute 主导:o1/R1 把推理时算力提升 10-100×,训练 scaling law 在"测试时 scaling"面前可能成为次要

第五部分:预训练到底教会了模型什么?

5.1 语言知识的多个层次

回顾我们前面看过的完形填空例子,可以系统地总结预训练让模型学到的语言知识层次

例子正确填空需要的能力
"Stanford University is located in ___, California."Palo Alto / Stanford百科 / Trivia
"I put ___ fork down on the table."my / the句法 / Syntax
"The woman walked across the street, checking for traffic over ___ shoulder."her指代 / Coreference
"I went to the ocean to see the fish, turtles, seals, and ___."dolphins / whales词汇语义 / Topic
"... the popcorn and the drink. The movie was ___."bad / terrible情感 / Sentiment + 推理
"Iroh went to the kitchen to make some tea. Standing next to Iroh, Zuko pondered his destiny. Zuko left the ___"kitchen多步推理 / Reasoning
"1, 1, 2, 3, 5, 8, 13, 21, ___"34算术 (LM 通常学不到 Fibonacci!)

预训练在前 5 类能力上表现出色——这些是语言统计规律能编码的知识。 但对真正的算法性推理(如 Fibonacci 序列、长除法、长公式求值)则力不从心—— 这就是 chain-of-thought、tool use、code execution 等后续技术想填补的空缺。

5.2 涌现能力:哪些不是 scaling 来的

许多能力呈现"涌现"(emergence)行为——在小模型上几乎为零,超过某个临界规模才突然出现:

能力涌现规模 (近似)典型基准
3-digit 加法~13Barithmetic in BIG-Bench
Few-shot in-context learning~10BGPT-3 paper, various tasks
Chain-of-thought reasoning~60BWei et al. 2022 (GSM8K)
Following complex instructions~70B + SFTFLAN-T5, InstructGPT
Theory of mind~175BKosinski 2023 (有争议)
Code self-debugging~GPT-4 级SWE-Bench
"涌现"是真的吗?争议
Schaeffer et al. (2023, NeurIPS Outstanding Paper)"Are Emergent Abilities of LLMs a Mirage?" 论文质疑:所谓的"涌现"很多时候是评估指标的非线性导致的视觉错觉—— 如果用 token-level log-prob 而非二值 accuracy,能力其实是平滑增长的。 但即使如此,跨规模的相对加速仍是真实现象。

5.3 不该学的:偏见、版权、隐私

预训练是双刃剑——它从互联网数据中无差别学习,因此互联网中的偏见、错误、隐私信息全部被吸收

偏见

Bender et al. (2021, "On the Dangers of Stochastic Parrots") 系统论证了 LLM 会 学习并放大训练数据中的偏见:

版权材料的逐字记忆

2023-2024 年的法律纠纷揭示了:大模型会逐字记忆训练数据中频繁出现的段落。 The New York Times 在起诉 OpenAI 的诉状中展示了 100 多段 GPT-4 输出与 NYT 文章几乎完全一致的例子。

隐私泄露:membership inference

Carlini et al. (2021, USENIX) 演示了从 GPT-2 中提取训练数据片段的攻击:

Prefix(攻击者提供) "East Stroudsburg Stroudsburg..." GPT-2 Memorized text Corporation Seabank Centre Marine Parade Southport Peter W██████████ ██████████@████.com +██ 7 5████ 40██ Fax: +██ 7 5████ 0███ (真实姓名、地址、电话、邮箱)
从 GPT-2 提取记忆的训练数据:给一段无害的 prefix,模型会输出训练集里出现过的真实姓名、电话、邮箱、地址。这种"半私密"信息从互联网爬来后被模型逐字背下。

这种 membership inference(成员推断)攻击的实务影响:

研究者实务:如何评估自己模型的"该学的 vs 不该学的"
  1. 能力评估:HELM、MMLU、BIG-Bench Hard 测知识、推理
  2. 偏见评估:StereoSet、BBQ、CrowS-Pairs 测各维度刻板印象
  3. 毒性评估:RealToxicityPrompts、ToxiGen 测有害生成
  4. 记忆评估:用训练集 prefix 让模型补全,统计逐字命中率
  5. 隐私评估:用 canary string + membership inference attacks 测试