土法炼钢兴趣小组的算法知识备份

【Transformer 与注意力机制】37|BERT:双向编码器为什么适合理解任务

文章导航

分类入口
transformer
标签入口
#transformer#bert#encoder-only#masked-language-model#nlp

目录

今天很多人第一次接触大模型,是从 GPT、ChatGPT、Claude 这类聊天模型开始的。于是很容易形成一个错觉:Transformer 的主流形态似乎天然就是 Decoder-only、自回归生成、next-token prediction。这个印象放在 2020 年以后大体成立,但如果回到 2018 年,最能代表 Transformer 预训练革命的模型不是 GPT,而是 BERT。

BERT 的重要性不在于它“比后来的大模型更强”。它的历史位置在于:它把 Transformer Encoder、双向上下文表示和大规模预训练结合起来,证明了一个模型可以先在海量文本上学通用语言表示,再通过很小的任务头迁移到分类、匹配、抽取、问答等下游任务。它让 NLP 从“每个任务设计一套特征和模型”,转向“预训练模型 + fine-tuning”的范式。

本篇要回答的问题是:为什么同样基于 Transformer,BERT 选择 Encoder-only,而 GPT 选择 Decoder-only? 这个问题不是架构名字之争,而是训练目标、信息流方向和下游任务形态共同决定的结果。

本篇能让你学会三件事:

  1. Encoder-only 架构和 Decoder-only 架构的根本差异;
  2. Masked Language Modeling 为什么更像“补洞理解”,而不是从左到右续写;
  3. 为什么 BERT 适合理解任务,却不适合作为通用生成模型。

一、BERT 之前的 NLP 为什么需要“通用表示”

在 BERT 之前,NLP 已经经历过一轮表示学习革命。word2vec 和 GloVe 让词不再只是离散 ID,而是向量空间里的点;ELMo 引入上下文相关表示,同一个词在不同句子里可以有不同向量;ULMFiT 证明了语言模型预训练再迁移到下游任务的路线是可行的。

但这些工作仍然没有完全解决一个问题:下游任务太多了。情感分类、自然语言推断、命名实体识别、抽取式问答、句子相似度、文本匹配,它们看起来都属于“理解语言”,但传统做法往往需要不同特征、不同模型头、不同训练方式。工程上成本高,研究上也很难判断改进来自语言理解本身,还是来自任务特定技巧。

BERT 的突破在于,它把问题改写成:能不能先训练一个强大的通用文本编码器,让它为每个 token 和整段文本产生上下文表示,然后在不同任务上只加很轻的任务头?如果可以,NLP 的中心就从“手工设计任务模型”转向“构造更好的预训练表示”。

这也是 BERT 全名里的关键词:Bidirectional Encoder Representations from Transformers。它强调的不是生成,而是 representation;不是 decoder,而是 encoder;不是从左到右,而是 bidirectional。


二、Encoder-only 架构意味着什么

在原始 Transformer 里,Encoder 和 Decoder 是成对出现的。Encoder 读完整个输入句子,Decoder 一边看已经生成的目标词,一边 cross-attend 到 Encoder 输出。BERT 只保留 Encoder 堆叠,去掉 Decoder。这一选择决定了它的信息流方式。

Encoder self-attention 没有 causal mask。一个位置的 token 可以同时看左边和右边的 token。比如句子“银行提高了贷款利率”,当模型为“银行”构造表示时,它可以看见后面的“贷款利率”;如果句子是“河边的银行长满青草”,它也能看见后面的“河边”“青草”。这种双向上下文对消歧非常重要。

Decoder-only 模型则不同。为了自回归生成,它必须遵守 causal mask:当前位置只能看过去,不能看未来。这样模型才能被训练成“根据前文预测下一个 token”。这对生成很自然,但对理解任务来说,它不是最直接的信息流。

所以 BERT 和 GPT 的差异,不是“谁更高级”,而是任务目标不同。BERT 的目标是给完整输入做深度编码;GPT 的目标是在前缀条件下继续生成。前者天然适合理解,后者天然适合生成。


三、Masked Language Modeling 到底在学什么

BERT 的核心预训练目标是 Masked Language Modeling(MLM)。做法是从输入句子中选出一部分 token,把它们替换成 [MASK]、随机 token 或保持原样,然后让模型根据上下文预测原始 token。

这和传统从左到右语言模型很不一样。自回归模型看到的是:

The cat sat on the ___

它要根据左侧前缀预测下一个词。BERT 看到的更像:

The cat [MASK] on the mat

它要同时利用左右上下文推断中间缺失的词。这个任务逼迫模型学习双向语义关系:主语和谓语如何匹配,名词和修饰语如何对应,句子内部哪些词互相约束。

MLM 的一个微妙之处是,预训练时出现 [MASK],下游任务时通常没有 [MASK]。这会造成 pretrain-finetune mismatch。BERT 原论文用 80/10/10 策略缓解这个问题:被选中的 token 中,80% 替换成 [MASK],10% 替换成随机 token,10% 保持原样。这样模型不能只学会处理 [MASK] 符号,也要对真实 token 位置做预测。

MLM 的优势是双向表示,代价是它不是自然生成过程。BERT 不是一步一步写出句子的模型,而是对已有句子进行编码和补洞。这就是为什么它在理解任务上非常强,但不能像 GPT 那样直接做长文本续写。


四、Next Sentence Prediction 的历史位置

BERT 原论文除了 MLM,还加入了 Next Sentence Prediction(NSP)。NSP 的任务是给模型两段文本 A 和 B,让它判断 B 是否真的是 A 的下一句。设计动机很明确:很多下游任务不是单句理解,而是句子对关系,比如自然语言推断、问答、文本匹配。

NSP 在历史上很重要,因为它体现了 BERT 作者对“句间关系”的关注。但后续 RoBERTa 工作对它提出了质疑。RoBERTa 通过更大 batch、更多数据、更长训练和移除 NSP,取得了更强结果。这说明 BERT 原始配方里的 NSP 未必是性能提升的必要条件。

这里要谨慎:不能简单说“NSP 没用”。更准确的说法是,在 BERT 原始训练条件下,NSP 是一种尝试建模句间关系的目标;后续更强训练配方表明,移除 NSP 并配合更充分的 MLM 训练也能取得更好效果。问题不只是 NSP 本身,而是整个预训练数据、batch、训练步数和任务构造的组合。

这也是阅读模型演化史时常见的陷阱:一个组件在某篇论文里有用,不等于它永远必要;一个组件在后续工作里被移除,也不等于它当初完全错误。


五、为什么 BERT 适合分类、匹配、抽取

BERT 的输出有两类常用表示:一个是每个 token 的上下文表示,另一个是特殊 token [CLS] 对应的整体表示。分类任务通常把 [CLS] 输出接到一个线性层上;序列标注任务使用每个 token 的输出;抽取式问答则预测答案 span 的起点和终点。

这套接口非常自然。情感分类需要理解整句话,[CLS] 可以作为全局摘要;命名实体识别需要判断每个 token 的标签,token-level 表示正合适;SQuAD 这类抽取式问答需要从文章中找一段连续答案,预测 start/end position 就能完成。

GLUE 和 SQuAD 的流行,让这种 fine-tuning 范式变得非常有影响力。过去一个任务可能需要专门模型,BERT 之后许多任务变成:拿同一个预训练模型,加一个轻量头,整体微调。这个变化对 NLP 工程影响很大。

当然,[CLS] 不是魔法。它能否成为好的整体表示,取决于预训练目标、下游任务和 fine-tuning 数据。BERT 的成功不是因为 [CLS] 这个符号本身,而是因为整个 encoder 在预训练中学到了丰富的上下文表示。


六、BERT fine-tuning 范式

BERT 的 fine-tuning 看起来很简单:把预训练模型加载进来,在下游任务上加一个小任务头,然后端到端训练。真正重要的是,这个简单流程让同一个模型可以迁移到大量任务。

对分类任务,输入通常是:

[CLS] sentence A [SEP] sentence B [SEP]

然后取 [CLS] 表示做分类。对 token classification,直接在每个 token 表示上预测标签。对 question answering,则把 question 和 passage 拼接起来,在 passage token 上预测答案 span。

这种统一接口带来的工程价值很大。模型服务、训练脚本、数据处理、评估流程都可以复用。研究者也能更直接地比较预训练模型本身,而不是每个任务重新发明一套架构。

但 fine-tuning 也带来敏感性。学习率、batch size、训练 epoch、随机种子都会影响结果。早期 BERT 论文和后续经验都表明,小数据集上 fine-tuning 可能不稳定。这和上一篇训练稳定性形成了呼应:预训练模型虽然强,但微调仍然是优化问题。


七、BERT 的局限

BERT 的第一类局限是生成能力。由于它不是自回归模型,不能天然按从左到右方式生成长文本。可以用各种技巧让 BERT 做填空、重排序或辅助生成,但那不是它最自然的工作方式。

第二类局限是预训练目标和下游输入之间的不一致。MLM 需要 [MASK],而真实任务输入通常没有 [MASK]。虽然 80/10/10 策略缓解了这个问题,但 mismatch 仍然存在。这也是后来 ELECTRA、T5、RoBERTa 等工作继续探索预训练目标的原因之一。

第三类局限是长度和效率。BERT 仍然使用标准 self-attention,长序列成本随长度平方增长。对很多理解任务,句子或段落长度有限,这不是最大问题;但对长文档理解,它仍然会遇到上下文窗口和计算成本限制。

第四类局限是任务形态。BERT 擅长“给定文本,输出判断或抽取结果”。它不擅长把所有任务统一成自然语言生成接口。大模型时代最终更偏向 GPT 路线,一个重要原因就是生成接口更通用:分类可以写成生成标签,问答可以写成生成答案,工具调用也可以写成生成结构化文本。


八、从 BERT 到 RoBERTa / ALBERT / DeBERTa

BERT 之后,很多工作沿着它的路线改进。RoBERTa 的核心信息是:BERT 原始模型还没有被充分训练。更大数据、更大 batch、更长训练、动态 masking、移除 NSP,可以显著提升效果。这提醒我们,架构创新之外,训练配方同样重要。

ALBERT 关注参数效率。它使用 factorized embedding parameterization 和跨层参数共享,试图降低参数量并改善训练。它说明 BERT 路线不是只能通过简单变大来提升,也可以通过结构约束重新分配参数。

DeBERTa 则从 attention 表示出发,把内容和位置解耦,改进相对位置建模。它代表另一类思路:BERT 的 encoder 框架保留,但 attention 内部的表示方式仍然可以继续优化。

这些后继模型的细节很多,本篇不逐一展开。重要的是看清主线:BERT 开创的是 Encoder-only 预训练表示路线,后续改进主要围绕训练数据、训练目标、参数效率、位置表示和 attention 机制展开。


九、BERT 和 GPT 的真正分界

把 BERT 和 GPT 放在一起看,最清楚的分界不是模型大小,而是信息流方向和任务接口。

BERT 看完整输入,构造双向表示,然后对输入做判断、匹配或抽取。GPT 只看前缀,预测下一个 token,然后通过连续预测生成文本。前者像阅读理解器,后者像续写机器。后来 GPT 通过指令微调和 RLHF 变成了聊天助手,但底层训练目标仍然是自回归预测。

这也解释了为什么 BERT 在很多企业 NLP 场景里长期有价值。搜索排序、文本匹配、意图识别、分类审核、抽取式问答,并不总需要一个会长篇生成的模型。一个稳定、可控、延迟低的 encoder 模型,往往更适合这些任务。

所以 BERT 不是被 GPT “淘汰”的旧模型,而是另一条任务路线的代表。大语言模型时代当然把生成推到了中心,但理解型 encoder 仍然是很多系统里的基础部件。


十、关键概念回顾


十一、常见误解

11.1 “BERT 是过时模型所以不重要”

BERT 不是今天最强的通用生成模型,但它代表的 Encoder-only 表示路线仍然重要。很多理解、匹配、分类和抽取任务并不需要 Decoder-only 大模型。

11.2 “双向一定比单向强”

不成立。双向适合理解完整输入,自回归适合生成未来 token。谁更合适取决于任务,不是单纯比较“看得多不多”。

11.3 “BERT 不能生成所以不算大模型”

BERT 当然是大规模预训练模型,只是它的目标不是自回归生成。把“大模型”等同于“聊天生成模型”,会误解预训练模型的发展史。

11.4 “RoBERTa 移除 NSP 说明 BERT 原论文错了”

更准确地说,RoBERTa 表明在更充分训练和不同配方下,NSP 不是必要组件。这是经验结论的修正,不是简单否定原始工作的历史价值。


十二、下一步

BERT 让我们看清了 Encoder-only 路线:双向、理解、表示、fine-tuning。下一篇转向另一条路线:GPT 为什么选择 Decoder-only,为什么从 GPT-1 到 GPT-4,next-token prediction 这件看似简单的事最终变成了大语言模型时代的主线。


十三、参考文献

  1. Devlin, J. et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.” NAACL 2019. BERT 原始论文。
  2. Peters, M. et al. “Deep contextualized word representations.” NAACL 2018. ELMo,上下文表示的重要前置工作。
  3. Howard, J. and Ruder, S. “Universal Language Model Fine-tuning for Text Classification.” ACL 2018. ULMFiT,预训练语言模型迁移到下游任务的代表工作。
  4. Liu, Y. et al. “RoBERTa: A Robustly Optimized BERT Pretraining Approach.” arXiv:1907.11692, 2019. 对 BERT 训练配方和 NSP 的重要修正。
  5. Lan, Z. et al. “ALBERT: A Lite BERT for Self-supervised Learning of Language Representations.” ICLR 2020. 参数效率方向的 BERT 改进。
  6. He, P. et al. “DeBERTa: Decoding-enhanced BERT with Disentangled Attention.” ICLR 2021. 解耦 attention 与相对位置建模方向的改进。
  7. Wang, A. et al. “GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding.” ICLR 2019. BERT 时代常用理解任务基准。
  8. Rajpurkar, P. et al. “SQuAD: 100,000+ Questions for Machine Comprehension of Text.” EMNLP 2016. 抽取式问答代表基准。

← 上一篇:36|训练稳定性 | 下一篇:38|GPT 系列

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-04-15 · transformer

【Transformer 与注意力机制】22|Encoder 详解:6 层堆叠到底在做什么

把 Transformer encoder 从“左半边”这个模糊概念拆成可操作的结构:单层里 self-attention、FFN、残差、LayerNorm 各做什么;6 层堆叠为什么不是重复劳动;encoder 输出为什么适合理解任务而不直接擅长生成;以及它和 decoder-only、encoder-decoder 两条路线到底差在哪。

2026-04-15 · transformer

【Transformer 与注意力机制】30|预训练目标:BERT、GPT、T5 其实在学三种不同的事

预训练不只是“拿海量文本先训一下”这么笼统,而是先决定模型到底要预测什么。本文把三条主线拆开:GPT 的自回归语言建模、BERT 的掩码语言建模、T5/BART 的序列到序列去噪。它们分别擅长什么、牺牲什么,为什么最后大模型主航道几乎都走向了 decoder-only 的 next-token prediction。


By .