第08回 预训练的两条路——掩码语言模型与自回归

同炉炼火分两派,一派遮眼练真功。
一派循字续长剑,步步因果不容空。

上回我们搭起了 Transformer 的骨架:注意力、前馈、残差、归一化,一层层堆成城池。
可看官心里必有一问:

“同样是 Transformer,为何有的更会‘理解’,有的更会‘生成’?”

答案在“练功方式”——也就是预训练目标。
本回讲两条主路:

  • 掩码语言模型(Masked Language Modeling, MLM):遮住一部分,让模型补全
  • 自回归语言模型(Autoregressive, AR):从左到右,一步一步预测下一个

你把这两条路看明白,后面第10回的扩展定律、第17回的对齐流水线,都会更顺。


一、先说“预训练”是啥:先练内功,再上擂台

预训练就像闭关:
先在海量文本上做一个“自监督任务”(不需要人工标签),把语言的规律、常识的碎片、格式的套路学进参数里。

之后再做“下游任务”:

  • 分类、检索、问答、对话
  • 或直接继续训练成聊天模型

江湖上常说的“基座模型”,就是预训练练出来的那身内功。


二、第一条路:MLM——遮住几眼,逼你学会通读

MLM 的直觉很像“补字谜”:

给你一句话,把几个词盖住:

我 今天 去 了 [MASK]

你要猜 [MASK] 是什么。

训练时,模型会同时看见左右上下文(双向),因此擅长:

  • 抓全局语义
  • 做理解任务(分类、匹配、抽取)
  • 在短中等长度文本上表现稳健

它的典型代表是 BERT 一系(本书不细讲历史细节,只抓方法本质)。

MLM 的“性格”可以总结为一句话:
通读全篇,猜缺口。

但 MLM 也有局限:

  • 训练时见的是“挖空的句子”,生成时却要“从头续写”,训练‑推理形态不完全一致
  • [MASK] 这种符号在真实文本里不存在,需要设计技巧

因此后来又出现“跨度腐蚀(span corruption)”等变体:不遮一个词,而遮一段,让目标更贴近真实缺失片段的恢复。


三、第二条路:AR——从左到右,练出因果之剑

自回归目标最像“续写”:

给你前缀:

我 今天 去 了

你预测下一个词。写出来后,再把它当作新的前缀继续预测。

这条路有三大特点:

  1. 训练‑推理形态一致:训练时就是“预测下一个”,推理时也一样
  2. 天然适合生成:写文章、写代码、写对话都顺
  3. 必须因果遮罩:只能看过去,不能偷看未来(第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

  1. 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

  2. Grattafiori, A., et al. The Llama 3 Herd of Models arXiv:2407.21783(2024-07)https://arxiv.org/abs/2407.21783