第21章 预训练:先学习世界中的规律

如果把一句话遮住一部分,“水在标准大气压下达到 100 摄氏度会____”,多数读者会想到“沸腾”。如果只给前文,“会议推迟到下周,因为”,我们也会预测后面更可能出现原因,而不是一串无关菜名。

这些答案没有由标注员逐条填写。文字本身已经提供了训练目标:遮住的内容原本就在句子里,下一个 Token 也紧跟在前缀之后。只要拥有大量文本,就能自动构造大量“输入和答案”。

这类方法叫作自监督学习(self-supervised learning)。它不是没有监督信号,而是监督信号由数据本身产生。模型先在广泛数据上完成这种大规模预训练(pretraining),再通过微调、提示或其他适配方式用于具体任务。

第 20 章已经给出 Transformer 怎样预测 Token。本章要回答更大的问题:一个看似简单的预测目标,为什么能成为许多语言任务的共同起点?

手工标签是稀缺的,原始数据不是

传统监督学习常需要人为准备输入和标签:图片对应类别,邮件对应垃圾或正常,病例对应诊断结果。高质量标签昂贵、缓慢,而且定义会限制任务范围。

互联网上和各种机构中已经存在大量没有任务标签的文本、图像和声音。自监督学习先对数据做可控变换,再要求模型恢复被隐藏的信息或预测相邻部分。例如:

原始数据 自动构造的输入 自动构造的目标
一段文字 遮住若干 Token 被遮住的 Token
一段文字 \(t\) 个 Token \(t+1\) 个 Token
一张图像 遮住部分图块 原图块或其表示
一段语音 遮住时间片段 缺失声学表示

这里的任务常被称为代理任务(pretext task)。最终目的不一定是把填空做成产品,而是让模型为了完成填空,形成可以迁移的内部表示和计算能力。

预训练与微调是两个阶段

预训练面对的是宽广数据和通用目标。模型可能见到新闻、百科、小说、代码和对话,但不会自动知道未来产品希望它做情感分类、搜索排序还是客服问答。

完成预训练后,可以用较小的任务数据继续更新参数,这叫作微调(fine-tuning)。也可以冻结大部分参数,只训练一个小型任务头或参数高效适配模块。

大规模原始数据
      |
      v
自监督预训练 -> 通用参数
                    |
          +---------+---------+
          |         |         |
        分类微调   检索微调   指令微调

迁移有效的前提,是预训练中形成的表示和计算对下游任务有用。文本情感、问答和信息抽取都依赖词义、语法、指代与主题,因此可以共享很多基础结构。若下游数据与预训练分布相差很远,迁移也可能有限甚至产生负面影响。

核心机制:用数据自身制造训练信号

预训练从原始数据中自动构造输入和目标,让同一模型在大量样本上反复预测缺失或后续内容。为了降低预测误差,参数会压缩可重复的词语关系、结构和世界规律。之后,较少的任务数据或提示可以重新组合这些能力,但不能保证模型学到的规律真实、完整或适合所有部署环境。

BERT 路线:根据左右文恢复缺失内容

掩码语言模型(masked language model, MLM)随机遮住输入中的一些 Token,再要求模型根据其余位置恢复它们:

原句:巴黎是法国的首都
输入:巴黎是 [MASK] 的首都
目标:法国

由于被遮位置两侧的文字都可见,编码器能够学习双向上下文表示。BERT 把这种目标与 Transformer 编码器结合,预训练后在每个具体任务上加入小型输出层并联合微调。(Devlin 等 2019年)

这条路线尤其适合输入在预测时完整可见的任务,例如分类、抽取和句子匹配。它的训练输入中出现人工遮盖符,而真实使用时通常没有这个符号;遮盖比例和替换策略需要避免让预训练与使用条件差异过大。

“双向”也不等于模型能直接从左到右生成长文本。编码器在每个位置都可能看见右侧内容,而自回归生成时未来尚不存在。要生成完整序列,必须设计相应的解码过程或使用另一种目标。

GPT 路线:只根据前文预测下一个 Token

因果语言模型(causal language model)把每个位置的下一个 Token 当作目标:

输入:<BOS> | 人工智能 | 正在 | 改变
目标:人工智能 | 正在 | 改变 | 世界

模型通过因果掩码只能读取当前位置及以前的 Token。生成式预训练工作显示,先用大规模文本训练语言模型,再对具体任务微调,可以获得广泛迁移能力。(Radford 等 2018年) 随着模型、数据和计算扩展,GPT-3 进一步展示了只在提示中给出任务说明或少量示例、不更新参数也能完成多类任务的现象。(Brown 等 2020年)

因果目标与开放式生成的数据流一致:训练和生成都只依赖左侧前缀。代价是预测某个位置时不能利用其右侧上下文,并且模型会把很大一部分容量用于学习流畅续写,不保证每项知识都能被可靠调用。

技术深潜:掩码目标与因果目标

设原始序列为 \(x_{1:T}\),被遮位置集合为 \(M\)。掩码语言模型只在这些位置计算负对数似然:

\[ \mathcal{L}_{\mathrm{MLM}}= -\sum_{t\in M}\log p_\theta(x_t\mid x_{\setminus M}) \]

\(x_{\setminus M}\) 表示模型看到的未遮内容。一个训练样本只为部分位置提供损失,但每个被遮位置可以同时利用左右文。

因果语言模型对每个可预测位置计算:

\[ \mathcal{L}_{\mathrm{CLM}}= -\sum_{t=1}^{T}\log p_\theta(x_t\mid x_{<t}) \]

同一段长度为 \(T\) 的文本可以提供接近 \(T\) 个目标,训练时利用因果掩码并行计算。模型仍不是一次预测整段未来;每个位置的条件信息只包含真实前缀。

两种目标都最大化训练数据的条件似然,却施加不同信息约束。MLM 擅长形成双向表示,CLM 天然对应自回归生成。T5 等工作把多种任务统一写成“文本输入到文本输出”,展示了预训练目标和下游接口还可以有其他组合。(Raffel 等 2020年)

预测 Token 为什么会学到更多结构

要稳定预测文本,模型不能只记住相邻词频。它需要利用许多尺度的规律:

  • 字符和子词怎样组成词语;
  • 哪些词在语法上可以接在一起;
  • 代词更可能指向哪个实体;
  • 文档主题怎样限制后续内容;
  • 常见事实、格式、代码模式和推理模板怎样出现。

例如,要补全“她把杯子放在桌边,杯子随后掉到了”,局部搭配提示“地上”,物理经验也提供约束。预测任务不会告诉模型“请建立物体支撑的概念”,但能利用这种规律的参数会得到更低损失。

这并不证明模型获得了与人相同的世界理解。文本中存在大量可利用的表面模式,训练目标也不区分真实陈述、小说、谣言和讽刺。模型形成的是对训练分布有用的内部结构,其中可能混合语言规律、世界知识、记忆片段和虚假相关。

微调、提示与上下文学习

预训练模型适配任务至少有三种常见方式:

方式 参数是否更新 任务信息放在哪里
完整微调 任务训练集与损失
参数高效微调 少量参数 小型适配参数与任务数据
提示或上下文学习 当前输入中的说明和示例
图 1: 预训练和微调会更新全部或部分参数;上下文学习和检索不更新参数,而是在当前请求中分别加入示例说明或外部证据。

上下文学习(in-context learning)是指模型仅根据提示中的说明或示例改变当前输出行为。推理期间,模型参数通常没有被梯度更新。示例作为上下文 Token 进入注意力层,改变后续 Token 的条件分布。

这很像临时学习,但与训练阶段的参数学习不同。关闭会话或移除示例后,这次上下文不会自动写回模型权重。模型能否利用示例,本身是预训练产生的能力,并受提示格式、示例顺序、上下文长度和任务分布影响。

数据混合决定模型看见什么世界

“训练数据越多越好”缺少重要前提。重复网页会浪费计算并增加记忆风险;低质量文本可能教会模型错误格式;某类语言、地区或专业资料不足,会使能力分布不均。

实际数据流水线会涉及来源选择、去重、质量过滤、语言配比、敏感信息处理、许可与版本记录。不同来源还可能被赋予不同采样权重。一个高质量小数据集可能被重复抽样,一个巨大但噪声多的来源可能被降权。

过滤也不是中立操作。用什么分类器定义“高质量”,会改变被保留的表达和观点。过强过滤可能去掉少数语言或非标准写作;过滤不足则会保留垃圾内容、隐私和危险材料。

训练 Token 数也不等于独立信息量。复制同一段文字一百次会产生一百倍 Token,却没有增加一百倍知识。

技术深潜:规模定律与计算最优

在一定实验范围内,语言模型测试损失常随参数量 \(N\)、训练 Token 数 \(D\) 或计算量 \(C\) 增加而呈近似幂律下降。简化地写,可以表示为:

\[ L(N)\approx L_\infty+aN^{-\alpha} \]

\(L_\infty\) 是无法靠该尺度继续消除的部分,\(a\)\(\alpha\) 由数据与实验拟合。Kaplan 等人的工作系统研究了模型、数据和计算之间的经验缩放关系。(Kaplan 等 2020年)

幂律不是“参数翻倍,所有能力按固定比例增加”的自然定律。它描述特定架构、优化方法、数据和尺度区间内的平均损失趋势。下游能力可能有噪声、阈值和评测误差。

训练计算粗略受参数量和处理 Token 数共同影响:

\[ C\propto N\times D \]

预算固定时,模型过大而数据不足,会让许多参数训练不充分;模型过小而重复过多数据,又会限制容量。Hoffmann 等人的计算最优研究表明,在给定训练计算下,应比早期一些方案使用更多数据、相对更小的模型。(Hoffmann 等 2022年)

因此,“规模”至少包含参数、有效数据、训练计算、内存与通信。比较模型时只报参数量,会漏掉训练 Token、数据质量、是否稀疏激活和推理成本。

为什么称为基础模型

当一个模型在广泛数据上训练,并成为许多下游系统的共同底座时,可以称为基础模型(foundation model)。这一概念强调的不只是模型大,而是“一次训练,多处适配”的结构性作用。(Bommasani 等 2021年)

同一底座可以被用于搜索、写作、编程、分类或多模态系统。能力可以迁移,缺陷也会迁移:训练数据偏差、隐私风险、脆弱性和难以追溯的错误可能同时进入许多下游应用。

基础模型也不是完整产品。真实系统还需要输入输出接口、检索、工具、权限、监控、安全策略和领域评估。第 23 章将进一步解释语言模型如何被训练成更愿意遵循指令的助手。

预训练不会自动得到可靠知识库

模型参数以分布式方式压缩训练规律,不像数据库那样为每条事实保存来源、时间和真值标记。于是会出现几类根本限制:

  • 训练数据互相矛盾时,模型可能混合多个版本;
  • 低频事实可能记不牢,高频错误也可能被强化;
  • 知识有时间边界,训练结束后不会自动更新;
  • 概率最高的续写可能语言流畅但事实错误;
  • 记住训练片段与抽象泛化可能同时发生;
  • 更低的平均损失不保证每个关键任务都更可靠。

预训练目标奖励“像数据中的后续”,并不直接奖励承认不知道、引用来源或服从用户意图。要把语言模型变成对话助手,还需要新的训练阶段和系统约束。

学习路径:从小模型观察迁移

实践继续后置。具备编程基础的读者可以在 P08 之上按以下顺序观察预训练,而不追求大模型规模:

  1. 用同一小语料训练字符级因果模型,保存预训练检查点;
  2. 构造一个很小的文本分类任务,比较随机初始化与预训练初始化;
  3. 分别冻结骨干、只训练分类头,以及微调全部参数;
  4. 记录训练样本数量、验证损失与分布外样本表现;
  5. 用重复数据和去重数据各训练一次,观察训练损失与泛化差异。

这个实验不能复现大模型能力,却能验证迁移学习最重要的对照:相同下游数据下,预训练初始化究竟带来了什么。

本章小结

  • 自监督学习从数据自身构造目标,不等于没有监督信号。
  • 预训练先学习广泛规律,微调、参数高效适配或提示再把能力用于具体任务。
  • BERT 风格掩码目标利用左右文恢复缺失 Token;GPT 风格因果目标只根据前文预测下一个 Token。
  • Token 预测会迫使模型利用语法、主题、事实和格式等规律,但也可能依赖表面模式与错误相关。
  • 上下文学习在推理时改变条件输入,通常不更新模型参数。
  • 参数、有效数据和计算预算需要共同扩展;参数量不是规模与能力的唯一指标。
  • 基础模型把一次预训练的能力与风险迁移到许多下游系统,但本身不是可靠助手或完整产品。

思考问题

  1. 为什么说自监督学习仍然有“标签”,只是标签不由标注员逐条创建?
  2. 掩码语言模型和因果语言模型分别允许每个预测位置看见哪些信息?
  3. 为什么上下文学习看起来像学习,却通常不会永久改变模型参数?
  4. 在训练计算固定时,一味增加参数而不增加有效数据可能发生什么?

延伸阅读

参考文献

Bommasani, Rishi, Drew A. Hudson, Ehsan Adeli, 等. 2021年. 《On the Opportunities and Risks of Foundation Models》. arXiv preprint arXiv:2108.07258, 网络首发. https://doi.org/10.48550/arXiv.2108.07258.
Brown, Tom B., Benjamin Mann, Nick Ryder, 等. 2020年. 《Language Models are Few-Shot Learners》. Advances in Neural Information Processing Systems 33, 1877~901.
Devlin, Jacob, Ming-Wei Chang, Kenton Lee, 和 Kristina Toutanova. 2019年. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》. Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics, 4171~86. https://doi.org/10.18653/v1/N19-1423.
Hoffmann, Jordan, Sebastian Borgeaud, Arthur Mensch, 等. 2022年. 《Training Compute-Optimal Large Language Models》. Advances in Neural Information Processing Systems 35, 30016~30.
Kaplan, Jared, Sam McCandlish, Tom Henighan, 等. 2020年. 《Scaling Laws for Neural Language Models》. arXiv preprint arXiv:2001.08361, 网络首发. https://doi.org/10.48550/arXiv.2001.08361.
Radford, Alec, Karthik Narasimhan, Tim Salimans, 和 Ilya Sutskever. 2018年. Improving Language Understanding by Generative Pre-Training. OpenAI. https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf.
Raffel, Colin, Noam Shazeer, Adam Roberts, 等. 2020年. 《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》. Journal of Machine Learning Research 21 (140): 1~67. https://jmlr.org/papers/v21/20-074.html.