> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/llm_internals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/llm_internals/di-si-bu-fen-mo-xing-yu-qian-yan-pian/12_encoder_models/12.1_bert.md).

# 12.1 BERT：双向理解的突破

BERT（Bidirectional Encoder Representations from Transformers）是 Google 在 2018 年提出的模型，开创了基于 Transformer 编码器的双向预训练范式，在自然语言理解任务上实现了革命性的突破。

## 12.1.1 BERT 的核心创新

BERT 的核心创新在于将 Transformer 编码器用于**双向预训练**。与 GPT 只能从左到右看文本不同，BERT 的自注意力没有因果掩码，每个位置都可以同时关注前后文——这正是编码器架构的核心优势。下图用同一句话直观对比两种注意力的可见范围：

```mermaid
graph TB
    subgraph bert["BERT：双向自注意力（完形填空式 MLM）"]
        direction LR
        b1["今天"] --> bm["[MASK]"]
        b3["真"] --> bm
        b4["好"] --> bm
        bm --> bo["预测：天气"]
    end
    subgraph gpt["GPT：因果自注意力（自回归续写）"]
        direction LR
        g1["今天"] --> go["预测下一词：好"]
        g2["天气"] --> go
        g3["真"] --> go
    end
```

图 12-1：同一句话下，BERT 的被遮位置可同时利用左右上下文，GPT 预测下一词只能利用左侧上下文

BERT 提供了两种规格：

| 配置         | 层数 | 隐藏维度 | 注意力头 | 参数量  |
| ---------- | -- | ---- | ---- | ---- |
| BERT-Base  | 12 | 768  | 12   | 110M |
| BERT-Large | 24 | 1024 | 16   | 340M |

## 12.1.2 预训练任务

BERT 使用两个预训练任务（详见 [5.2 节](/llm_internals/di-er-bu-fen-xun-lian-pian/05_pretraining/5.2_masked_lm.md)）：

**掩码语言模型（MLM）**：随机遮盖 15% 的词元，让模型预测被遮盖的内容。通过双向上下文进行预测，使每个位置的表示都融合了完整的句子信息。

**下一句预测（NSP）**：给定两个句子，判断是否是原文中相邻的上下文。旨在帮助模型理解句子间的语义关系。但后续研究（RoBERTa）发现 NSP 的实际贡献极为有限。

## 12.1.3 微调范式

BERT 引入了影响深远的\*\*“预训练-微调”\*\*范式：先在大规模无标注数据上预训练，然后在特定任务的少量标注数据上微调。微调时只需添加一个任务相关的输出层（如分类层），调整所有参数即可。

这种范式使得 BERT 在发布时一举刷新了 11 项 NLP 基准的最佳记录，包括 GLUE、SQuAD 等。其成功证明了双向 Transformer 编码器在理解型任务上的强大能力。

## 12.1.4 BERT 的适用场景与局限

**适用场景**：文本分类、命名实体识别、关系抽取、阅读理解、语义相似度等理解型任务。

**局限**：BERT 不适合文本生成任务（它不是自回归模型），最大序列长度限制为 512（受可学习位置编码的固定长度限制），且 MLM 的 15% 遮盖率导致训练效率低于自回归方式。
