第08回 预训练的两条路——掩码语言模型与自回归
同炉炼火分两派,一派遮眼练真功。
一派循字续长剑,步步因果不容空。
上回我们搭起了 Transformer 的骨架:注意力、前馈、残差、归一化,一层层堆成城池。
可看官心里必有一问:
“同样是 Transformer,为何有的更会‘理解’,有的更会‘生成’?”
答案在“练功方式”——也就是预训练目标。
本回讲两条主路:
- 掩码语言模型(Masked Language Modeling, MLM):遮住一部分,让模型补全
- 自回归语言模型(Autoregressive, AR):从左到右,一步一步预测下一个
你把这两条路看明白,后面第10回的扩展定律、第17回的对齐流水线,都会更顺。
一、先说“预训练”是啥:先练内功,再上擂台
预训练就像闭关:
先在海量文本上做一个“自监督任务”(不需要人工标签),把语言的规律、常识的碎片、格式的套路学进参数里。
之后再做“下游任务”:
- 分类、检索、问答、对话
- 或直接继续训练成聊天模型
江湖上常说的“基座模型”,就是预训练练出来的那身内功。
二、第一条路:MLM——遮住几眼,逼你学会通读
MLM 的直觉很像“补字谜”:
给你一句话,把几个词盖住:
我 今天 去 了 [MASK]
你要猜 [MASK] 是什么。
训练时,模型会同时看见左右上下文(双向),因此擅长:
- 抓全局语义
- 做理解任务(分类、匹配、抽取)
- 在短中等长度文本上表现稳健
它的典型代表是 BERT 一系(本书不细讲历史细节,只抓方法本质)。
MLM 的“性格”可以总结为一句话:
通读全篇,猜缺口。
但 MLM 也有局限:
- 训练时见的是“挖空的句子”,生成时却要“从头续写”,训练‑推理形态不完全一致
- [MASK] 这种符号在真实文本里不存在,需要设计技巧
因此后来又出现“跨度腐蚀(span corruption)”等变体:不遮一个词,而遮一段,让目标更贴近真实缺失片段的恢复。
三、第二条路:AR——从左到右,练出因果之剑
自回归目标最像“续写”:
给你前缀:
我 今天 去 了
你预测下一个词。写出来后,再把它当作新的前缀继续预测。
这条路有三大特点:
- 训练‑推理形态一致:训练时就是“预测下一个”,推理时也一样
- 天然适合生成:写文章、写代码、写对话都顺
- 必须因果遮罩:只能看过去,不能偷看未来(第06回的 mask 规矩)
当今大多数“能聊能写的大模型”,底子多半是解码器式(decoder-only)的自回归 Transformer。
例如 2024 的 Phi‑3 技术报告就明确其是 transformer decoder 架构,并在大规模 token 上训练。1
同年 Meta 的 Llama 3 报告也系统描述了 Llama 3 这一组基础模型的训练与评测。2
AR 的“性格”也一句话:
顺着因果走,步步续长文。
四、两条路谁更好:看你要“读”还是要“写”
这事不能一句“谁更强”糊弄过去。更贴近现实的说法是:
- 你要做理解(分类、匹配、抽取):MLM 更像“读书人”
- 你要做生成(对话、写作、代码):AR 更像“说书人”
当然,2024–2026 的工业事实是:
很多系统直接用 AR 基座,通过指令微调与对齐,把“读”和“写”都拉上去。
于是你会看到“全能模型”越来越多。
但它们并非天生全能,而是:
- 目标函数(预训练 + 后训练)
- 数据混合(网页、书籍、代码、合成数据)
- 训练配方(上下文长度、去重、过滤、课程学习)
共同塑造了它的性格。
五、极简代码:同一句话,MLM 与 AR 怎么“出题”
下面给一个很小的“出题器”示意:
同一句话,MLM 会挖空,AR 会做前缀‑下一个的样本对。
import random
def make_mlm_example(tokens, mask_token="[MASK]", p=0.3, seed=0):
rnd = random.Random(seed)
x = tokens[:]
y = ["_"] * len(tokens)
for i in range(len(tokens)):
if rnd.random() < p:
y[i] = tokens[i]
x[i] = mask_token
return x, y
def make_ar_examples(tokens):
out = []
for t in range(1, len(tokens)):
prefix = tokens[:t]
next_token = tokens[t]
out.append((prefix, next_token))
return out
if __name__ == "__main__":
sent = "我 今天 去 了 公园 玩".split()
x_mlm, y_mlm = make_mlm_example(sent, p=0.35, seed=1)
print("MLM input :", x_mlm)
print("MLM label :", y_mlm)
print()
for prefix, nxt in make_ar_examples(sent)[:4]:
print("AR prefix:", prefix, "->", nxt)
你跑一下就会发现:
- MLM 的标签是“只在被遮的地方要答题”
- AR 的标签是“每一步都要答题(下一个词)”
这就是两条路最本质的区别。
六、把伏笔埋到第10回:为什么“更大、更久”常常更强
你现在已经能理解第10回要讲的扩展定律(scaling laws)的一半要义:
当目标固定、数据足够、优化配方稳时,模型规模与训练算力往往能持续换来性能。
而 AR 目标因为训练‑推理一致、工程实现成熟,在大规模训练时代格外吃香。
这也解释了为什么许多“能写长文能写代码”的模型路线,最终都偏向 AR 的解码器式架构。
七、小结:本回分清“练法”,下回要“照妖镜”
本回我们把预训练分成两条主路:
- MLM:遮住一部分,让模型通读全篇补缺口
- AR:从左到右续写,训练与推理形态一致
下一回(第09回)要端上“照妖镜”:
我们不满足于“模型能做”,还要学会“看它怎么做”。
注意力可视化、探针与表示分析,将带你第一次窥见 Transformer 城池里的交通流向。
欲知后事如何,且听下回分解。
引用与溯源
Footnotes
-
Abdin, M., et al. Phi-3 Technical Report: A Highly Capable Language Model Locally on Your Phone arXiv:2404.14219(2024-04)https://arxiv.org/abs/2404.14219 ↩
-
Grattafiori, A., et al. The Llama 3 Herd of Models arXiv:2407.21783(2024-07)https://arxiv.org/abs/2407.21783 ↩