2017年,《Attention Is All You Need》论文提出了Transformer架构,彻底改变了自然语言处理的范式。然而,这个架构很快分化为两条截然不同的发展路径:一条以BERT为代表的编码器路线,通过掩码语言模型(Masked Language Modeling, MLM)学习双向上下文表示;另一条以GPT为代表的解码器路线,通过因果语言模型(Causal Language Modeling, CLM)实现自回归文本生成。
这两条路线的差异远不止"预测下一个词"与"填空题"那么简单。它们代表了两种不同的建模哲学、两种不同的注意力机制设计、以及两种不同的应用假设。理解这两种范式的本质差异,是深入理解现代大语言模型的基石。
从一个问题说起:为什么GPT不能直接做文本分类?
假设你有一个情感分类任务,需要判断一段电影评论是正面还是负面。如果你直接把评论输入GPT,让它输出"正面"或"负面",效果往往不如BERT——即使GPT的参数量是BERT的几十倍。
这不是偶然。GPT和BERT从一开始就被设计来解决不同类型的问题。GPT的核心能力是"根据前文生成后文",而BERT的核心能力是"根据上下文理解当前位置"。这种根本性的差异,源于它们训练时所采用的语言建模范式。
让我们从最基础的原理开始,逐步深入到这两种范式的每一个技术细节。
graph TD
subgraph Transformer架构分支
A[Transformer 2017] --> B[Encoder路线]
A --> C[Decoder路线]
B --> D[BERT 2018]
B --> E[RoBERTa 2019]
B --> F[ALBERT 2019]
C --> G[GPT-1 2018]
C --> H[GPT-2 2019]
C --> I[GPT-3 2020]
C --> J[LLaMA 2023]
end
style A fill:#fff9c4
style B fill:#e3f2fd
style C fill:#e8f5e9
style D fill:#bbdefb
style E fill:#bbdefb
style F fill:#bbdefb
style G fill:#c8e6c9
style H fill:#c8e6c9
style I fill:#c8e6c9
style J fill:#c8e6c9
因果语言模型:自回归的序列预测
核心思想:预测下一个词
因果语言模型(Causal Language Model, CLM)的训练目标可以用一句话概括:给定前面的所有词,预测下一个词。
数学上,对于一个词序列 $w_1, w_2, ..., w_T$,CLM的训练目标是最大化以下对数似然:
$$\mathcal{L}_{CLM} = \sum_{t=1}^{T} \log P(w_t | w_1, w_2, ..., w_{t-1})$$这个目标函数的直觉非常清晰:模型在每个位置$t$,只能看到位置$1$到$t-1$的词,然后预测位置$t$的词。这正是人类阅读和写作的方式——我们从左到右阅读,永远不知道下一个字是什么,但我们可以根据前文做出猜测。
因果掩码:强制单向信息流
CLM的实现依赖于一个关键技术:因果注意力掩码(Causal Attention Mask)。
在标准的自注意力机制中,每个位置都可以关注序列中的所有其他位置。但在CLM中,我们需要强制执行"只看过去"的约束。这通过一个下三角注意力掩码矩阵实现:
$$M_{ij} = \begin{cases} 0 & \text{if } i \geq j \\ -\infty & \text{if } i < j \end{cases}$$当$M_{ij} = -\infty$时,经过softmax后,位置$i$对位置$j$的注意力权重变为0。这意味着:
- 位置1只能关注自己
- 位置2可以关注位置1和自己
- 位置3可以关注位置1、2和自己
- 以此类推…
graph TD
subgraph 因果注意力掩码机制
A[Token 1] --> A
B[Token 2] --> A
B --> B
C[Token 3] --> A
C --> B
C --> C
D[Token 4] --> A
D --> B
D --> C
D --> D
end
style A fill:#e1f5fe
style B fill:#e1f5fe
style C fill:#e1f5fe
style D fill:#e1f5fe
这种掩码设计确保了模型在训练时不会"作弊"——它永远无法看到未来的信息。
训练效率:每个Token都是训练样本
CLM的一个巨大优势是训练效率。在一个长度为$T$的序列中,CLM可以产生$T$个训练样本:
- 给定$w_1$,预测$w_2$
- 给定$w_1, w_2$,预测$w_3$
- …
- 给定$w_1, ..., w_{T-1}$,预测$w_T$
这意味着训练数据得到了充分利用。对于一个包含100万词的语料库,CLM可以产生接近100万个训练样本(取决于上下文长度限制)。
graph LR
subgraph CLM训练样本生成
A["[BOS]"] --> B["预测 →"]
B --> C["我"]
C --> D["预测 →"]
D --> E["爱"]
E --> F["预测 →"]
F --> G["编程"]
G --> H["预测 →"]
H --> I["[EOS]"]
end
style A fill:#ffebee
style C fill:#e3f2fd
style E fill:#e3f2fd
style G fill:#e3f2fd
style I fill:#e8f5e9
推理过程:自回归生成
CLM的推理过程是其名字中"自回归"的来源。生成文本时,模型采用以下步骤:
- 给定初始提示词序列
- 模型预测下一个词的概率分布
- 从分布中采样一个词(或选择概率最高的词)
- 将新词添加到序列末尾
- 重复步骤2-4
这个过程的核心特点是:每生成一个新词,都需要重新计算整个序列的注意力。这是CLM推理速度较慢的主要原因之一。
掩码语言模型:双向上下文的填空游戏
核心思想:根据上下文预测被遮蔽的词
掩码语言模型(Masked Language Model, MLM)的训练目标完全不同:随机遮蔽序列中的一些词,然后根据上下文预测这些被遮蔽的原始词。
BERT采用的经典策略是:随机选择15%的Token进行处理,其中:
- 80%替换为特殊Token ``
- 10%替换为随机词
- 10%保持不变
这个"80-10-10"策略的设计有其深层考量。如果所有被遮蔽的位置都用替换,模型在微调阶段(没有)时会遇到分布不匹配的问题。保留一小部分原始词和随机词,可以帮助模型学习处理各种情况。
MLM的训练目标可以表示为:
$$\mathcal{L}_{MLM} = \sum_{t \in M} \log P(w_t | w_{\setminus M})$$其中$M$是被遮蔽的位置集合,$w_{\setminus M}$表示未被遮蔽的所有词。
graph LR
subgraph "MLM 80-10-10策略"
A["原始文本"] --> B{"15%位置"}
B --> C["80% → [MASK]"]
B --> D["10% → 随机词"]
B --> E["10% → 保持不变"]
end
style A fill:#fff9c4
style B fill:#e3f2fd
style C fill:#ffcdd2
style D fill:#c8e6c9
style E fill:#bbdefb
双向注意力:看见全局上下文
MLM的核心优势在于双向注意力机制。与CLM的下三角掩码不同,MLM的注意力掩码允许每个位置看到所有其他位置:
graph TD
subgraph 双向注意力机制
A[Token 1] --> A
A --> B[Token 2]
A --> C[Token 3]
A --> D[Token 4]
B --> A
B --> B
B --> C
B --> D
C --> A
C --> B
C --> C
C --> D
D --> A
D --> B
D --> C
D --> D
end
style A fill:#fff3e0
style B fill:#fff3e0
style C fill:#fff3e0
style D fill:#fff3e0
这种设计让模型能够同时利用左侧和右侧的上下文信息。例如,在预测句子"我苹果"中被遮蔽的词时,模型可以同时利用"我"和"苹果"的信息,大大提高了预测的准确性。
训练效率:只对被遮蔽位置计算损失
MLM的训练效率与CLM存在显著差异。在一个长度为$T$的序列中,MLM只对大约$0.15 \times T$个位置计算损失(假设遮蔽率为15%)。这意味着:
- 对于相同长度的序列,MLM的有效训练信号比CLM少
- 但MLM的每个训练信号可能包含更丰富的信息(因为利用了双向上下文)
推理过程:单次前向传播
MLM的一大优势是推理效率。对于文本理解任务(如分类、命名实体识别),MLM只需要一次前向传播就可以获得整个序列的表示。这与CLM的自回归生成过程形成鲜明对比。
两种注意力的本质差异
让我们深入比较两种注意力机制的实际运作方式。
信息流向对比
CLM(因果注意力):
- 信息只能从左向右流动
- 位置$t$的表示只依赖于位置$1$到$t$
- 位置$t$的表示不会影响位置$1$到$t-1$的任何表示
MLM(双向注意力):
- 信息可以在任意两个位置之间流动
- 每个位置的表示都依赖于所有其他位置
- 所有位置的表示相互影响
graph TD
subgraph 信息流对比
subgraph CLM因果流
C1[位置1] --> C2[位置2]
C2 --> C3[位置3]
C3 --> C4[位置4]
end
subgraph MLM双向流
M1[位置1] <--> M2[位置2]
M1 <--> M3[位置3]
M1 <--> M4[位置4]
M2 <--> M3
M2 <--> M4
M3 <--> M4
end
end
style C1 fill:#e3f2fd
style C2 fill:#e3f2fd
style C3 fill:#e3f2fd
style C4 fill:#e3f2fd
style M1 fill:#fff3e0
style M2 fill:#fff3e0
style M3 fill:#fff3e0
style M4 fill:#fff3e0
表示能力
CLM学到的表示天然编码了"生成顺序"的信息。位置$t$的表示是"基于前文的摘要",天然适合预测下一个词。
MLM学到的表示则是"基于全局上下文的摘要"。位置$t$的表示融合了来自前后文的全部信息,更适合需要理解完整语义的任务。
实际影响
考虑一个具体例子:句子"苹果公司发布了一款新"。
CLM看到的是:
- “苹果公司发布了一款新” → 预测下一个词
- 模型知道前面提到"苹果公司",但不知道后面是什么
- 可能的预测:产品、手机、设备…
MLM看到的是:
- “苹果公司发布了一款新” + (空格/后续内容)
- 如果后面是"iPhone",模型可以更准确地预测
- 可以推断出是产品名称
训练目标的数学深入
CLM的损失函数
CLM使用的交叉熵损失可以展开为:
$$\mathcal{L}_{CLM} = -\frac{1}{T}\sum_{t=1}^{T} \sum_{v=1}^{|V|} y_{t,v} \log P(w_t = v | w_{关键点在于,CLM的损失是在每个位置$t$上计算的,且预测只依赖于$w_{ MLM的损失函数只对被遮蔽的位置计算: 这里的关键区别是预测依赖于$w_{\setminus M}$——所有未被遮蔽的词,包括被遮蔽位置之前和之后的词。 两种损失函数导致完全不同的梯度流动模式: CLM: MLM: 文本生成:这是CLM的天然主场。无论是续写故事、回答问题、还是编写代码,CLM都可以逐词生成流畅的输出。 对话系统:现代聊天机器人几乎都基于CLM架构。模型可以根据用户输入和历史对话,生成自然流畅的回复。 代码生成:编程语言具有严格的语法结构,CLM的顺序生成特性非常适合这种场景。 少样本学习:CLM架构天然支持in-context learning。通过在提示词中提供示例,模型可以快速适应新任务,无需更新参数。 文本分类:情感分析、主题分类、意图识别等任务。MLM可以利用完整上下文做出更准确的判断。 命名实体识别(NER):识别人名、地名、机构名等。双向上下文对于理解实体边界至关重要。 问答系统:从给定文本中提取答案。MLM可以同时考虑问题和文档,找到最相关的片段。 语义相似度:判断两段文本的语义是否相近。MLM可以为每段文本生成丰富的语义表示。 2024年的一项研究系统比较了CLM和MLM在不同任务上的表现: 值得注意的是,这些性能差异并非绝对。随着模型规模的增大,CLM在理解类任务上的表现也在不断提升。这就是为什么现代大语言模型(如GPT-4)能够在文本分类和理解任务上展现出惊人的能力。 观察近年来的大语言模型发展,一个明显的趋势是:几乎所有主流的生成式LLM都采用了decoder-only架构(即CLM范式)。GPT系列、LLaMA、Mistral、Claude等都是如此。为什么MLM架构在生成式AI领域逐渐式微? CLM的一个关键优势是训练效率。在一个长度为$T$的序列中,CLM可以产生$T$个训练信号,而MLM只产生$0.15 \times T$个(假设15%遮蔽率)。 对于大规模预训练(数万亿Token),这意味着CLM可以从同样的数据中学习更多的模式。虽然MLM的每个训练信号可能包含更丰富的信息,但在数据量足够大的情况下,CLM的训练效率优势变得更加明显。 Decoder-only架构的简洁性带来了多方面的好处: 参数效率:只需要一个Transformer堆叠,无需编码器和解码器之间的交叉注意力。 推理优化:KV-Cache等推理优化技术专门为自回归生成设计,可以显著加速推理过程。 实现简单:代码库更简洁,更容易进行大规模分布式训练。 随着模型规模的增大,CLM展现出了惊人的few-shot学习能力。模型可以通过简单的提示词工程,在未见过的任务上表现出色。这种能力被认为是大规模CLM训练的"涌现特性"。 研究表明,这种in-context learning能力与CLM的自回归训练方式密切相关。模型在预测下一个词的过程中,学会了根据上下文调整预测策略——这本质上就是一种适应新任务的能力。 当前大模型最引人注目的应用场景——对话、写作、编程——本质上都是生成任务。CLM天然适合这些任务,而MLM需要复杂的改造才能支持生成。 考虑到生成任务的商业价值和用户需求,选择CLM范式成为了一个自然的决策。 认识到CLM和MLM各有优势,研究者们开始探索混合训练方法。 2024年提出的AntLM(Ant Language Model)尝试在一个统一的框架中交替使用CLM和MLM训练目标。实验结果表明,混合训练可以在多个任务上取得比单一范式更好的性能。 AntLM的核心思想是:在训练过程中交替切换训练目标和注意力掩码。例如,先用CLM训练4个epoch,再用MLM训练16个epoch,最后用CLM训练4个epoch。 实验发现: 更早期的工作UniLM(Unified Language Model)通过控制注意力掩码,在同一个模型架构上实现多种训练目标: 这种方法证明了不同训练范式可以在统一架构下共存。 前缀语言模型是一种介于CLM和MLM之间的方法。在输入的前缀部分使用双向注意力,在输出部分使用因果注意力。这种方法结合了MLM的理解能力和CLM的生成能力,被用于T5、GLM等模型。 BERT使用的15%遮蔽率长期以来被视为标准选择。但这个数值背后的依据是什么? BERT论文中对15%遮蔽率的解释是: 15%被认为是这两者之间的平衡点。 2022年的研究"Should You Mask 15% in Masked Language Modeling?“对这个假设进行了系统检验。研究发现: 15%并非最优解:在特定条件下,40%的遮蔽率可以在GLUE和SQuAD等基准上取得更好的性能。 遮蔽率的影响是双重的: 最优遮蔽率取决于: 这项研究表明,MLM训练中还有很大的优化空间,15%不应被视为不可改变的教条。 理解CLM和MLM的差异,最终目的是做出正确的技术选择。以下是一些决策指南: 从CLM和MLM的发展历程中,我们可以得到一些启示: Decoder-only架构的简洁性是其成功的关键因素之一。更简单的架构意味着更容易训练、更容易优化、更容易部署。在工程实践中,简洁往往比理论上的"最优"更重要。 CLM和MLM的设计都源于它们要解决的核心问题。CLM面向生成,MLM面向理解。没有放之四海而皆准的架构,只有最适合特定任务的解决方案。 随着模型规模的增大,一些传统上的性能差距正在缩小。大规模CLM在理解任务上表现出色,这在几年前是不可想象的。这提醒我们,某些"本质差异"可能只是规模不足时的表现。 从UniLM到AntLM,研究者们一直在尝试融合不同范式的优势。未来的突破可能不来自"选择A还是B”,而是"如何最好地结合A和B"。 因果语言模型和掩码语言模型代表了Transformer架构的两条发展路径,它们在注意力机制、训练目标、应用场景上存在根本差异。 CLM通过因果注意力强制单向信息流动,实现了高效的自回归生成。这种设计天然适合文本生成、对话系统、代码补全等任务,并随着规模增长展现出惊人的few-shot学习能力。 MLM通过双向注意力捕获全局上下文,在文本理解任务上具有天然优势。文本分类、命名实体识别、问答系统等理解类任务是MLM的传统强项。 现代大语言模型普遍选择decoder-only架构,是训练效率、架构简洁性、生成能力需求等多重因素综合作用的结果。但这并不意味着MLM范式已经过时——在特定任务上,MLM仍然保持着竞争力。 理解这两种范式的本质差异,是深入理解现代NLP技术的关键。无论是选择现成的预训练模型,还是设计自己的训练流程,这些知识都将帮助你做出更明智的决策。MLM的损失函数
梯度流动的差异
应用场景对比
CLM擅长的任务
MLM擅长的任务
性能对比的实证研究
任务类型
CLM表现
MLM表现
差异原因
文本生成
优
中
CLM天然支持自回归生成
文本分类
中
优
MLM的双向上下文更利于理解
命名实体识别
中
优
NER需要全局上下文判断实体边界
阅读理解
中
优
理解任务需要综合全文信息
对话生成
优
差
MLM无法逐词生成
代码补全
优
差
代码需要严格顺序生成
graph TD
subgraph 任务适用性对比
subgraph CLM优势任务
C1[文本生成]
C2[对话系统]
C3[代码生成]
C4[少样本学习]
end
subgraph MLM优势任务
M1[文本分类]
M2[命名实体识别]
M3[问答系统]
M4[语义相似度]
end
end
style C1 fill:#c8e6c9
style C2 fill:#c8e6c9
style C3 fill:#c8e6c9
style C4 fill:#c8e6c9
style M1 fill:#bbdefb
style M2 fill:#bbdefb
style M3 fill:#bbdefb
style M4 fill:#bbdefb
为什么现代LLM普遍选择Decoder-Only架构?
训练数据的充分利用
架构简洁性
少样本学习能力的涌现
生成任务的统治地位
混合训练:融合两种范式的尝试
AntLM:交替训练的实验
UniLM:统一的预训练框架
前缀语言模型(Prefix LM)
graph LR
subgraph 前缀语言模型架构
A[前缀 Token 1] <--> B[前缀 Token 2]
A --> C[输出 Token 1]
B --> C
B --> C
C --> D[输出 Token 2]
D --> C
end
style A fill:#e8f5e9
style B fill:#e8f5e9
style C fill:#e3f2fd
style D fill:#e3f2fd
遮蔽率的优化:15%是最佳选择吗?
原始设计的考量
后续研究的发现
从架构选择到实际应用
选择CLM/Decoder-Only的场景
选择MLM/Encoder-Only的场景
考虑Encoder-Decoder架构的场景
graph TD
A[任务需求] --> B{需要生成?}
B -->|是| C{需要理解输入?}
B -->|否| D[MLM/Encoder]
C -->|是| E[Encoder-Decoder]
C -->|否| F[CLM/Decoder]
style A fill:#fff9c4
style B fill:#e3f2fd
style C fill:#e3f2fd
style D fill:#bbdefb
style E fill:#c8e6c9
style F fill:#c8e6c9
技术演进的启示
简洁往往胜出
任务导向的设计
规模效应
融合是趋势
结语
参考资料