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的推理过程是其名字中"自回归"的来源。生成文本时,模型采用以下步骤:

  1. 给定初始提示词序列
  2. 模型预测下一个词的概率分布
  3. 从分布中采样一个词(或选择概率最高的词)
  4. 将新词添加到序列末尾
  5. 重复步骤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_{其中$|V|$是词表大小,$y_{t,v}$是位置$t$的真实标签的one-hot编码。

关键点在于,CLM的损失是在每个位置$t$上计算的,且预测只依赖于$w_{

MLM的损失函数

MLM的损失函数只对被遮蔽的位置计算:

$$\mathcal{L}_{MLM} = -\frac{1}{|M|}\sum_{t \in M} \sum_{v=1}^{|V|} y_{t,v} \log P(w_t = v | w_{\setminus M})$$

这里的关键区别是预测依赖于$w_{\setminus M}$——所有未被遮蔽的词,包括被遮蔽位置之前和之后的词。

梯度流动的差异

两种损失函数导致完全不同的梯度流动模式:

CLM

  • 位置$t$的损失只影响位置$1$到$t$的参数
  • 梯度从右向左传播,逐步更新
  • 早期位置的参数被频繁更新

MLM

  • 位置$t$的损失影响所有位置的参数
  • 梯度在整个序列中传播
  • 所有位置受到均等的影响

应用场景对比

CLM擅长的任务

文本生成:这是CLM的天然主场。无论是续写故事、回答问题、还是编写代码,CLM都可以逐词生成流畅的输出。

对话系统:现代聊天机器人几乎都基于CLM架构。模型可以根据用户输入和历史对话,生成自然流畅的回复。

代码生成:编程语言具有严格的语法结构,CLM的顺序生成特性非常适合这种场景。

少样本学习:CLM架构天然支持in-context learning。通过在提示词中提供示例,模型可以快速适应新任务,无需更新参数。

MLM擅长的任务

文本分类:情感分析、主题分类、意图识别等任务。MLM可以利用完整上下文做出更准确的判断。

命名实体识别(NER):识别人名、地名、机构名等。双向上下文对于理解实体边界至关重要。

问答系统:从给定文本中提取答案。MLM可以同时考虑问题和文档,找到最相关的片段。

语义相似度:判断两段文本的语义是否相近。MLM可以为每段文本生成丰富的语义表示。

性能对比的实证研究

2024年的一项研究系统比较了CLM和MLM在不同任务上的表现:

任务类型 CLM表现 MLM表现 差异原因
文本生成 CLM天然支持自回归生成
文本分类 MLM的双向上下文更利于理解
命名实体识别 NER需要全局上下文判断实体边界
阅读理解 理解任务需要综合全文信息
对话生成 MLM无法逐词生成
代码补全 代码需要严格顺序生成

值得注意的是,这些性能差异并非绝对。随着模型规模的增大,CLM在理解类任务上的表现也在不断提升。这就是为什么现代大语言模型(如GPT-4)能够在文本分类和理解任务上展现出惊人的能力。

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架构?

观察近年来的大语言模型发展,一个明显的趋势是:几乎所有主流的生成式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各有优势,研究者们开始探索混合训练方法。

AntLM:交替训练的实验

2024年提出的AntLM(Ant Language Model)尝试在一个统一的框架中交替使用CLM和MLM训练目标。实验结果表明,混合训练可以在多个任务上取得比单一范式更好的性能。

AntLM的核心思想是:在训练过程中交替切换训练目标和注意力掩码。例如,先用CLM训练4个epoch,再用MLM训练16个epoch,最后用CLM训练4个epoch。

实验发现:

  • MLM在语法和语义理解任务上表现更好
  • CLM在生成和推理任务上收敛更快
  • 混合训练可以结合两者的优势

UniLM:统一的预训练框架

更早期的工作UniLM(Unified Language Model)通过控制注意力掩码,在同一个模型架构上实现多种训练目标:

  • 双向注意力:类似MLM,用于文本理解
  • 单向注意力:类似CLM,用于文本生成
  • 序列到序列注意力:用于翻译等任务

这种方法证明了不同训练范式可以在统一架构下共存。

前缀语言模型(Prefix LM)

前缀语言模型是一种介于CLM和MLM之间的方法。在输入的前缀部分使用双向注意力,在输出部分使用因果注意力。这种方法结合了MLM的理解能力和CLM的生成能力,被用于T5、GLM等模型。

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%是最佳选择吗?

BERT使用的15%遮蔽率长期以来被视为标准选择。但这个数值背后的依据是什么?

原始设计的考量

BERT论文中对15%遮蔽率的解释是:

  1. 遮蔽太少:模型学习压力不足,训练效率低
  2. 遮蔽太多:上下文信息不足,难以做出准确预测

15%被认为是这两者之间的平衡点。

后续研究的发现

2022年的研究"Should You Mask 15% in Masked Language Modeling?“对这个假设进行了系统检验。研究发现:

15%并非最优解:在特定条件下,40%的遮蔽率可以在GLUE和SQuAD等基准上取得更好的性能。

遮蔽率的影响是双重的

  • 增加遮蔽率会减少每个位置的上下文信息
  • 但也会增加训练信号的多样性

最优遮蔽率取决于

  • 模型规模
  • 训练数据量
  • 下游任务类型

这项研究表明,MLM训练中还有很大的优化空间,15%不应被视为不可改变的教条。

从架构选择到实际应用

理解CLM和MLM的差异,最终目的是做出正确的技术选择。以下是一些决策指南:

选择CLM/Decoder-Only的场景

  • 需要文本生成能力
  • 构建对话系统或聊天机器人
  • 代码生成或补全
  • 希望利用大规模预训练的few-shot能力
  • 有充足的计算资源进行大规模训练

选择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

技术演进的启示

从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技术的关键。无论是选择现成的预训练模型,还是设计自己的训练流程,这些知识都将帮助你做出更明智的决策。


参考资料

  1. Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS.
  2. Devlin, J., et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL.
  3. Radford, A., et al. (2018). Improving Language Understanding by Generative Pre-Training.
  4. Radford, A., et al. (2019). Language Models are Unsupervised Multitask Learners.
  5. Brown, T., et al. (2020). Language Models are Few-Shot Learners. NeurIPS.
  6. Wettig, A., et al. (2023). Should You Mask 15% in Masked Language Modeling? EACL.
  7. Yu, X., et al. (2024). AntLM: Bridging Causal and Masked Language Models. CoNLL.
  8. Dong, L., et al. (2019). Unified Language Model Pre-training for Natural Language Understanding and Generation. NeurIPS.
  9. Raffel, C., et al. (2020). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. JMLR.
  10. Touvron, H., et al. (2023). LLaMA: Open and Efficient Foundation Language Models.