BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,通过双向上下文建模在多项NLP任务中取得突破性进展。以下是对BERT架构的详细解析:
1. 核心架构
BERT基于Transformer编码器堆叠而成,主要特点包括: - 双向性:通过自注意力机制同时捕捉上下文信息。 - 多层堆叠:Base版(12层)和Large版(24层)分别包含不同规模的参数。 - 多头注意力:Base版12个头,Large版16个头,增强模型对不同语义子空间的关注能力。
2. 输入表示
BERT的输入由三部分嵌入相加组成: 1. 词嵌入(Token Embeddings):使用WordPiece分词,处理未登录词(如“playing”拆分为“play”+“##ing”)。 2. 段嵌入(Segment Embeddings):区分句子对(如[SEP]分隔,第一句用EA、第二句用EB)。 3. 位置嵌入(Position Embeddings):学习得到的位置编码(非Transformer的正弦/余弦函数),支持最长512个token。
输入格式示例:[CLS] Sentence A [SEP] Sentence B [SEP]
3. 预训练任务
3.1 Masked Language Model (MLM)
- 随机掩盖15%的token:80%替换为[MASK],10%随机替换,10%保持原词。
- 目的:迫使模型学习上下文推断,缓解微调时[MASK]缺失的问题。
3.2 Next Sentence Prediction (NSP)
- 判断句子B是否为A的下一句:正样本来自连续文本,负样本随机采样。
- 目的:增强模型对句子间关系的理解(后续研究如RoBERTa发现NSP可能非必要)。
4. 模型细节
- Transformer层结构:
- 自注意力层:计算序列内所有位置的关联权重。
- 前馈网络(FFN):两层全连接(激活函数为GELU)。
- 残差连接与层归一化:每子层后接残差和LayerNorm,公式为
LayerNorm(x + Sublayer(x))
。 - 参数量计算(以BERT-base为例):
- 词表嵌入:30,000×768 ≈ 23M。
- 编码器层:每层约7M参数(注意力+FFN),12层共84M。
- 总计约110M参数。
5. 微调策略
- 任务适配:在预训练模型上添加任务特定层(如[CLS]输出用于分类,各token输出用于序列标注)。
- 超参数调整:通常仅需调整学习率(如2e-5到5e-5),其他参数与预训练一致。
6. 优缺点分析
优点
- 双向上下文建模能力显著优于单向模型(如GPT)。
- 通用性强,可通过微调适配多种任务(分类、QA、NER等)。
缺点
- 预训练计算成本高,长文本处理受限(最大长度512)。
- MLM与微调任务输入分布不一致(通过替换策略缓解)。
- NSP任务效果受质疑(RoBERTa等模型移除此任务后表现更优)。
7. 后续改进
- RoBERTa:移除NSP、动态掩码、更大batch训练。
- ALBERT:参数共享与嵌入分解降低参数量。
- Longformer:稀疏注意力机制支持更长文本。
总结
BERT通过双向Transformer编码器和MLM+NSP预训练任务,实现了深层次上下文建模,成为NLP领域里程碑式工作。其成功启发了大量后续模型的优化,推动了预训练-微调范式的广泛应用。