在前面的文章中,我们已经讲过 Transformer Encoder、Transformer Decoder、以及位置编码等核心内容。
现在我们需要进一步补上一个非常关键的问题:
大语言模型到底是怎么训练出来的?
或者说:
不同模型为什么会形成不同能力?
例如:
BERT 更擅长文本理解、分类、匹配、抽取
GPT 更擅长文本生成、对话、续写、代码
T5 / BART 更擅长输入到输出的转换任务
这些差异不仅来自模型结构,也来自 训练目标。
在预训练语言模型中,最常见的训练目标主要有三类:
MLM:Masked Language Modeling,掩码语言模型
CLM:Causal Language Modeling,因果语言模型
Seq2Seq LM:Sequence-to-Sequence Language Modeling,序列到序列语言模型
它们分别对应三条重要路线:
BERT 路线:MLM
GPT 路线:CLM
T5 / BART 路线:Seq2Seq LM
这一篇我们就系统讲清楚:
1. 什么是 MLM?
2. 什么是 CLM?
3. 什么是 Seq2Seq LM?
4. 三者分别适合什么模型结构?
5. 为什么 BERT 使用 MLM,GPT 使用 CLM,T5/BART 使用 Seq2Seq LM?
6. 三种目标如何影响模型能力?
一、为什么训练目标很重要?
语言模型训练的本质是:
设计一个任务,让模型从大量文本中学习语言规律。
但是,不同训练任务会让模型学到不同能力。
例如,同样一句话:
我 今天 去 学校 上课
不同训练目标会提出不同问题。
MLM 会问:
我 今天 去 [MASK] 上课
请预测 [MASK] 是什么?
CLM 会问:
我 今天 去
请预测下一个 token 是什么?
Seq2Seq LM 会问:
输入:我今天去学校上课
输出:I went to school for class today
或者:
输入:一篇文章
输出:这篇文章的摘要
可以看到,虽然都在处理文本,但任务形式完全不同。
训练目标决定了模型学习时能看到什么信息,也决定了模型最终更擅长什么任务。
简单来说:
MLM:让模型学会双向理解
CLM:让模型学会从左到右生成
Seq2Seq LM:让模型学会根据输入生成输出
这也是 BERT、GPT、T5/BART 能力差异的根本来源之一。
二、MLM:Masked Language Modeling
MLM 的全称是:
Masked Language Modeling
中文可以叫:
掩码语言模型
它的核心思想是:
随机遮住输入句子中的一部分 token,让模型根据左右上下文预测被遮住的 token。
例如原始句子是:
我 今天 去 学校 上课
经过 mask 后变成:
我 今天 去 [MASK] 上课
模型要预测:
学校
这里最关键的是:模型可以同时看到左边和右边。
左边:我 今天 去
右边:上课
因此,MLM 非常适合训练双向语言表示。
三、MLM 的训练目标
假设输入序列为:
随机选择一部分位置作为 mask 集合:
模型看到的是被遮挡后的输入:
MLM 的训练目标是预测被遮住的 token:
其中:
-
:被 mask 的位置集合;
-
:第 i个位置的真实 token;
-
:遮挡后的输入序列;
-
模型只在被 mask 的位置上计算损失。
这点非常重要。MLM 不是对所有位置都计算损失,而是只对被选中的 mask 位置计算损失。
例如:
输入:我 今天 去 [MASK] 上课
标签:学校
模型只需要在 [MASK] 位置预测"学校"。
四、BERT 中的 MLM 如何构造?
BERT 原论文中,并不是把所有被选中的 token 都替换成 [MASK]。它会随机选择 15% 的 token 作为预测目标。对于这些被选中的 token:
80% 替换成 [MASK]
10% 替换成随机 token
10% 保持原 token 不变
例如原句:
我 今天 去 学校 上课
可能变成:
我 今天 去 [MASK] 上课
也可能变成:
我 今天 去 苹果 上课
也可能保持:
我 今天 去 学校 上课
但是无论输入如何变化,模型的目标都是预测原始 token:
学校
为什么不全部替换成 [MASK]?因为下游任务中通常不会出现 [MASK]。如果预训练时模型总是看到 [MASK],而下游微调时看不到 [MASK],就会产生预训练和微调之间的不一致。所以 BERT 使用了 80/10/10 的策略。
五、MLM 适合什么模型结构?
MLM 最适合:
Encoder-only 模型
典型代表是:
BERT
RoBERTa
ALBERT
DeBERTa
原因很简单:
MLM 需要模型同时利用左右上下文,而 Encoder 的 Self-Attention 正好是双向的。
在 Encoder 中,每个 token 可以看到整个输入序列:
左边 token
自己
右边 token
所以它非常适合做:
根据完整上下文预测被遮住 token
这也是 BERT 使用 Transformer Encoder 的根本原因。
六、MLM 的优势和局限
MLM 的优势是:
可以学习双向上下文表示
适合理解任务
适合分类、匹配、抽取、序列标注
例如:
情感分类
自然语言推理
语义匹配
命名实体识别
阅读理解
文本检索
这些任务通常需要理解完整输入,而不是从左到右生成文本。但是 MLM 也有局限。第一,MLM 不适合直接生成长文本。因为 BERT 不是自回归模型,它不是按照:
一个 token 一个 token 生成
的方式训练的。第二,MLM 存在 [MASK] 不一致问题。
预训练时有 [MASK],但下游任务中通常没有 [MASK]。
第三,MLM 只在部分 token 上计算损失。
例如只 mask 15% token,那么每次训练真正参与预测的 token 只占一部分,训练效率可能不如 CLM 直接对所有位置预测。
所以,MLM 强在理解,不强在生成。
七、CLM:Causal Language Modeling
CLM 的全称是:
Causal Language Modeling
中文可以叫:
因果语言模型
它的核心思想是:
给定前面的 token,预测下一个 token。
例如句子:
我 今天 去 学校 上课
CLM 的训练方式是:
给定:我
预测:今天
给定:我 今天
预测:去
给定:我 今天 去
预测:学校
给定:我 今天 去 学校
预测:上课
也就是说,CLM 是从左到右建模文本。这正是 GPT 系列模型的训练目标。
八、CLM 的训练目标
给定序列:
CLM 将联合概率分解为:
其中:
表示当前位置之前的所有 token。
训练损失可以写成:
这表示模型在每个位置都要预测当前 token。实际训练时,通常会进行右移一位:
输入:<bos> 我 今天 去 学校
目标:我 今天 去 学校 上课
也就是:
模型看到前面的 token,预测后面的 token
九、CLM 为什么需要 Causal Mask?
CLM 的关键要求是:
预测当前位置时不能看到未来 token。
例如要预测"学校":
我 今天 去 [学校]
模型只能看到:
我 今天 去
不能看到:
上课
否则模型就相当于偷看答案了。因此,GPT 这类 Decoder-only 模型必须使用 Causal Mask。Causal Mask 的形式是一个下三角矩阵:
1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1
含义是:
第 1 个 token 只能看第 1 个 token
第 2 个 token 可以看第 1、2 个 token
第 3 个 token 可以看第 1、2、3 个 token
第 4 个 token 可以看第 1、2、3、4 个 token
这保证了 CLM 的训练过程和生成过程一致:
训练时不能看未来
推理时也只能根据已生成内容继续生成
十、CLM 适合什么模型结构?
CLM 最适合:
Decoder-only 模型
典型代表是:
GPT
GPT-2
GPT-3
LLaMA
Qwen
DeepSeek
ChatGPT 类模型
原因是:
Decoder 的 Causal Self-Attention 天然适合从左到右生成文本。
Decoder-only 模型的基本流程是:
输入 token
↓
Causal Self-Attention
↓
预测下一个 token
↓
把预测 token 拼到输入后面
↓
继续预测下一个 token
这使得 CLM 非常适合:
文本续写
对话生成
代码生成
文章写作
数学推理
工具调用
Agent 任务
现代大语言模型大多采用 CLM 训练目标。
十一、CLM 的优势和局限
CLM 的优势是:
训练目标简单
所有 token 都能参与预测
训练和推理形式一致
天然适合生成任务
容易扩展到大规模预训练
CLM 的最大特点是统一性强。很多任务都可以变成:
给定前文,继续生成答案
例如:
问题:Transformer 是什么?
答案:
模型只需要继续生成:
Transformer 是一种基于注意力机制的神经网络结构......
翻译也可以写成:
English: I love machine learning.
Chinese:
摘要也可以写成:
Article: ...
Summary:
所以 CLM 非常适合 prompt-based 使用方式。但是 CLM 也有局限。
第一,它不能在当前位置直接看到右侧上下文。
这对一些纯理解任务不如 Encoder 自然。
第二,它生成时容易出现幻觉。
因为它本质上是在预测高概率文本,并不天然保证事实正确。
第三,长文本生成时可能出现重复、跑题、上下文遗忘等问题。
所以 CLM 强在生成,但理解和事实可靠性还需要通过指令微调、RAG、工具调用、偏好对齐等方法进一步增强。
十二、Seq2Seq LM:序列到序列语言模型
Seq2Seq LM 的全称是:
Sequence-to-Sequence Language Modeling
它的核心思想是:
给定一个输入序列,生成一个输出序列。
例如机器翻译:
输入:I love machine learning.
输出:我喜欢机器学习。
文本摘要:
输入:一篇长文章
输出:文章摘要
文本改写:
输入:一句表达不通顺的话
输出:改写后的句子
问答任务:
输入:问题 + 文档
输出:答案
Seq2Seq LM 通常使用 Encoder-Decoder 架构。
Encoder 负责理解输入,Decoder 负责生成输出。
十三、Seq2Seq LM 的训练目标
假设输入序列是:
输出序列是:
Seq2Seq LM 建模的是条件概率:
其中:
-
X:输入序列;
-
Y:输出序列;
-
:第 (t) 个目标 token;
-
:目标端当前 token 之前的 token。
训练损失是:
这和 CLM 很像,都是从左到右生成目标 token。但区别是:
Seq2Seq LM 的生成条件不仅包括目标端前文
,还包括输入序列 (X)。
也就是说,Decoder 每一步生成时,都可以通过 Cross-Attention 查看 Encoder 输出。
十四、Seq2Seq LM 为什么需要 Encoder-Decoder?
以翻译任务为例:
输入:A man is playing guitar.
输出:Ein Mann spielt Gitarre.
Encoder 先编码英文句子:
A man is playing guitar.
↓
Encoder
↓
memory
Decoder 生成德文时,每一步都利用两类信息:
1. 已经生成的德文 token
2. Encoder 编码后的英文信息
例如生成到:
Ein Mann spielt
下一步要预测:
Gitarre
Decoder 会通过 Cross-Attention 去关注英文中的:
guitar
所以 Seq2Seq LM 的核心结构是:
Encoder:理解输入序列
Decoder:根据输入序列和已生成内容生成输出序列
这和纯 GPT 的 CLM 不同。GPT 只有 Decoder,没有单独的 Encoder。它通常把输入和输出拼成一个长序列,让模型继续生成。而 Seq2Seq LM 更明确地区分:
输入端
输出端
十五、Seq2Seq LM 适合什么模型?
Seq2Seq LM 适合:
Encoder-Decoder 模型
典型代表是:
原始 Transformer
T5
BART
mT5
PEGASUS
MarianMT
这些模型特别适合输入输出结构明显的任务。
例如:
翻译:英文 → 中文
摘要:长文 → 摘要
纠错:错误句子 → 正确句子
改写:原句 → 改写句
问答:问题 + 文档 → 答案
代码生成:需求描述 → 代码
T5 的核心思想就是:
把所有 NLP 任务都统一成 text-to-text 格式。
例如:
translate English to German: A man is walking.
→ Ein Mann geht.
summarize: [article]
→ [summary]
question: ... context: ...
→ answer
这就是 Seq2Seq LM 的强大之处。
十六、Seq2Seq LM 的优势和局限
Seq2Seq LM 的优势是:
输入和输出分工清晰
适合条件生成任务
Encoder 可以充分理解输入
Decoder 可以逐步生成输出
适合翻译、摘要、改写等任务
它结合了 Encoder 和 Decoder 的优点。Encoder 负责双向理解输入。Decoder 负责自回归生成输出。但是它也有局限。
第一,结构比 Encoder-only 或 Decoder-only 更复杂。需要同时维护 Encoder、Decoder 和 Cross-Attention。
第二,在通用对话和开放生成任务中,现代大模型更多选择 Decoder-only。因为 Decoder-only 可以通过 prompt 把任务统一成续写形式,结构简单、扩展方便。
第三,Encoder-Decoder 在超大规模通用 LLM 中不如 Decoder-only 主流。但在翻译、摘要、文本改写等任务中,Seq2Seq 结构仍然非常重要。
十七、三种训练目标的代码直观理解
下面用非常简化的伪代码理解三种训练目标。
1. MLM 训练数据构造
tokens = ["我", "今天", "去", "学校", "上课"]
# mask 一个位置
input_tokens = ["我", "今天", "去", "[MASK]", "上课"]
target = "学校"
# 模型根据完整上下文预测 mask 位置
loss = CrossEntropy(
model(input_tokens)[mask_position],
target_id
)
MLM 的关键是:
输入中有 mask
模型看左右上下文
只在 mask 位置算 loss
2. CLM 训练数据构造
tokens = ["<bos>", "我", "今天", "去", "学校", "上课"]
input_tokens = ["<bos>", "我", "今天", "去", "学校"]
target_tokens = ["我", "今天", "去", "学校", "上课"]
logits = model(input_tokens)
loss = CrossEntropy(logits, target_tokens)
CLM 的关键是:
输入右移一位
目标是下一个 token
模型不能看到未来 token
所有位置都可以计算 loss
3. Seq2Seq LM 训练数据构造
src_tokens = ["A", "man", "is", "walking", "."]
tgt_tokens = ["<bos>", "Ein", "Mann", "geht", ".", "<eos>"]
tgt_input = ["<bos>", "Ein", "Mann", "geht", "."]
tgt_output = ["Ein", "Mann", "geht", ".", "<eos>"]
logits = model(src_tokens, tgt_input)
loss = CrossEntropy(logits, tgt_output)
Seq2Seq LM 的关键是:
Encoder 输入源序列
Decoder 输入目标端前文
目标是预测目标端下一个 token
Decoder 通过 Cross-Attention 读取 Encoder 输出
十八、MLM、CLM、Seq2Seq LM 对比
现在我们把三者放到一张表中。
| 对比维度 | MLM | CLM | Seq2Seq LM |
|---|---|---|---|
| 全称 | Masked Language Modeling | Causal Language Modeling | Sequence-to-Sequence LM |
| 代表模型 | BERT、RoBERTa | GPT、LLaMA、Qwen | T5、BART |
| 常见架构 | Encoder-only | Decoder-only | Encoder-Decoder |
| 可见上下文 | 双向上下文 | 只能看左侧上下文 | Encoder 看完整输入,Decoder 看目标端左侧 |
| 训练方式 | 遮住部分 token,预测被遮住 token | 给定前文,预测下一个 token | 给定输入序列,生成输出序列 |
| 是否需要 Causal Mask | 不需要 | 需要 | Decoder 需要 |
| 是否适合生成 | 不擅长长文本生成 | 非常擅长 | 擅长条件生成 |
| 是否适合理解 | 非常适合 | 可以,但不是最自然 | 适合输入理解 + 输出生成 |
| 典型任务 | 分类、匹配、抽取、NER | 对话、续写、代码、推理 | 翻译、摘要、改写、问答 |
十九、为什么 GPT 路线最终成为主流大语言模型路线?
从今天的大语言模型发展来看,Decoder-only + CLM 成为了最主流的路线。原因主要有几个。
第一,CLM 训练目标简单统一。只需要:
给定前文,预测下一个 token
就可以利用海量文本进行训练。
第二,训练和推理一致。训练时预测下一个 token,推理时也是生成下一个 token。
第三,任务可以通过 prompt 统一成文本续写。
例如:
请翻译:...
请总结:...
请解释:...
请写代码:...
模型都可以继续生成答案。
第四,Decoder-only 架构更容易扩展到超大规模。相比 Encoder-Decoder,Decoder-only 结构更简单,工程扩展更直接。所以 GPT、LLaMA、Qwen、DeepSeek 等现代大语言模型大多采用 CLM。但是,这并不代表 MLM 和 Seq2Seq LM 不重要。BERT 类模型在表示学习、检索、分类和匹配任务中仍然很重要。T5/BART 类模型在翻译、摘要、改写和条件生成任务中仍然很有价值。
二十、如何选择训练目标?
可以根据任务目标来选择。如果你的目标是:
学习句子表示
文本分类
语义匹配
命名实体识别
阅读理解抽取
那么 Encoder-only + MLM 是非常自然的选择。如果你的目标是:
文本生成
对话
代码生成
续写
开放问答
多任务 prompt 统一
那么 Decoder-only + CLM 更合适。如果你的目标是:
翻译
摘要
文本改写
纠错
输入到输出转换
那么 Encoder-Decoder + Seq2Seq LM 更合适。可以简单记成:
理解:MLM
生成:CLM
转换:Seq2Seq LM
当然,今天的模型边界已经越来越模糊。Decoder-only 模型也可以做理解任务。Seq2Seq 模型也可以做生成任务。Encoder 模型也可以通过特殊方式做填空和抽取。但从训练目标的天然适配性来看,这个划分仍然非常清晰。