BERT论文阅读笔记

这是一篇我的学习记录,阅读了 Google 于 2018 年提出的经典工作 —— BERT(Bidirectional Encoder Representations from Transformers)的论文。

论文链接


一、从特征学习走向语言理解统一架构

在 BERT 出现之前,自然语言处理(NLP)中的预训练主要有两种策略:

  1. 基于特征(Feature-based)方法
    • 如ELMo,通过预训练语言模型提取上下文相关的词向量,将其作为“静态特征”输入下游任务;
    • 下游任务仍需大量定制的架构设计。
  2. 基于微调(Fine-tuning)方法
    • 如GPT,训练一个左到右的Transformer语言模型,在下游任务中加入少量参数并整体微调。

但这两者均有显著局限:它们只能从单向(左或右)捕获上下文,限制了语言理解能力。

因此,BERT的核心动机是:

构建一个深层双向的语言表示模型,充分融合左侧与右侧上下文,在不增加任务特定结构的前提下,实现对广泛NLP任务的统一建模。


二、BERT 模型结构

BERT 的核心结构为:

  • 多层 Transformer Encoder 堆叠,论文中介绍了两个版本:
    • :12 层,768 隐藏维度,12 个注意力头,参数量约110M
    • :24 层,1024 隐藏维度,16 个注意力头,参数量约340M

相较 GPT(仅能左向注意力),BERT每一层的自注意力是全双向的,从而具备更强的上下文建模能力。


三、BERT 输入表示(Input Representation)

BERT 的输入是 Token 序列,如:

1
[CLS] 他 去 了 商店 [SEP] 我 没 有 去 [SEP]

每个 Token 的最终输入嵌入(Embedding)由三部分组成:

类型 含义
Token Embedding 词向量(来自 WordPiece 分词)
Segment Embedding 表示属于句子 A 还是句子 B
Position Embedding 绝对位置编码,表示词在句子中的位置

整体结构为:

  • [CLS]:用于分类任务的特殊标记,最终输出为句向量
  • [SEP]:分隔两个句子

四、BERT 的两个预训练任务

1. Masked Language Model(MaskedLM)

为了实现双向建模,BERT不使用传统语言模型的从左/右预测策略,而是采用类似Cloze测试的方法:

  • 随机遮盖 15% 的 Token;
  • 模型需根据上下文预测被遮盖的词。

掩码策略如下:

  • 80% 用 [MASK] 替换
  • 10% 替换为随机 Token
  • 10% 保持原词(增强鲁棒性)

这种训练方式解决了“目标词泄漏”的问题,使得每层都能学习到完整上下文。


2. Next Sentence Prediction(NSP)

为了提升对句子间关系的理解能力(如自然语言推理、问答任务等),BERT 引入了句子预测任务:

  • 给定两个句子 A 和 B,
    • 50% 的情况:B 是 A 的下一句(IsNext)
    • 50% 的情况:B 是语料中的随机句(NotNext)

通过预测是否相邻,模型能学习“句与句之间的语义连贯性”。

论文实验证明 NSP 对于问答与自然语言推理等任务表现提升显著。


五、预训练 + 微调:BERT 的使用流程

Step 1: 预训练阶段

  • 数据集:BooksCorpus(8亿词)+ Wikipedia(25亿词)
  • 步骤:
    1. 使用 MaskedLM 和 NSP 对模型进行联合训练
    2. 序列长度:大多为 128(快),末期扩展至 512(适应长文本)

Step 2: 微调阶段

对于每个具体任务,只需:

  • 将输入转为 BERT 的格式(如分类用 [CLS] 输出);
  • 在输出层加入一层简单的分类器/回归器;
  • 对整个模型端到端微调(fine-tune)

这大大减少了任务特定结构的设计。


六、参数量计算

笔者对于大模型的参数计算方法还不是特别熟练(在课内只着重学习过CNN的参数计算),因此加了这一部分。

以下是 BERT 参数规模估算方法:

假设:

  • LL:Transformer 层数
  • HH:每层隐藏维度
  • AA:注意力头数量

每层主要包含:

  • 多头注意力子层(Q、K、V、O):
  • 前馈层:
  • LayerNorm、残差:可忽略
  • 总体参数量 ≈

以 BERTBASE 为例(L=12, H=768):

  • 总参数量 ≈ 110M

七、模型对比

模型 架构 输入方式 自注意力 输出表示 特点
ELMo BiLSTM 双向 静态特征 特征提取器,需额外结构
GPT Decoder 单向(左) 单向 句子级别 强生成能力,适合生成任务
BERT Encoder 双向 双向 Token级别 强理解能力,适合多种任务

八、实验结果与分析(论文数据)

BERT 取得多个 benchmark 最佳结果:

  • GLUE:BERTLARGE 平均准确率 82.1%
  • SQuAD v1.1:F1 达到 93.2,超过 GPT
  • SWAG(常识推理):准确率 86.3%,人类为 88%

此外,论文也做了消融实验:

  • 移除 NSP 或 MLM,性能显著下降;
  • 使用 LTR(左向)模型,理解能力大幅下降;
  • 模型越大(层数、宽度越大),效果越好(即便在小样本任务上也如此)。

九、结论与启发

  • BERT 提出了一个统一的语言理解预训练框架,显著提升 NLP 各类任务性能;
  • 核心贡献在于:双向建模能力 + 统一结构 + 预训练迁移机制
  • MaskedLM + NSP的预训练任务是构建语言表示的关键。