Transformer 架构的兴起彻底改变了自然语言处理(NLP)领域。作为基于 Transformer 编码器构建的代表性模型,BERT(Bidirectional Encoder Representations from Transformers)在多项任务中取得了 SOTA 效果。然而,许多开发者对其内部工作机制、知识表示能力及优化策略仍缺乏深入理解。本文旨在系统梳理 BERT 的核心原理、预训练与微调策略、以及模型压缩技术,帮助读者建立完整的知识体系。
BERT 模型架构详解
BERT 由多层 Transformer 编码器堆叠而成。其核心在于双向自注意力机制(Self-Attention),这使得模型能够同时捕捉上下文中的依赖关系,而非像 RNN 那样单向处理序列。
1. 输入表示
输入序列首先经过 WordPiece 分词处理,将单词拆分为子词单元以解决未登录词问题。随后,三个嵌入层生成固定长度的向量表示:
- Token Embeddings:词汇表映射。
- Segment Embeddings:区分句子 A 和句子 B。
- Position Embeddings:标记 token 在序列中的位置。
特殊标记 [CLS] 置于序列开头,其最终输出向量通常用于分类任务的聚合表示;[SEP] 用于分隔不同的输入段。
2. 自注意力机制
在每一层中,每个 token 计算查询(Query)、键(Key)和值(Value)向量。通过缩放点积注意力公式计算权重: $$ Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V $$ 多头注意力(Multi-Head Attention)允许模型在不同表示子空间中关注不同位置的信息。所有头的输出经线性变换后拼接,再通过前馈神经网络(FFN)处理,最后加入残差连接和层归一化。
原始 BERT 有两个主要版本:Base 和 Large。Base 包含 12 层,隐藏层维度 768,12 个注意力头;Large 则增加至 24 层,1024 维度和 16 个头,参数量更大,精度更高但推理成本显著增加。
BERT 的知识表示能力
研究表明,BERT 的表示是分层的,深层网络编码了更抽象的语义信息。
语法知识
BERT 隐式学习了句法结构。虽然自注意力权重不直接对应句法树,但通过分析 token 的表示可以恢复出类似依存关系的结构。例如,动词与其宾语之间的注意力权重通常较高。值得注意的是,BERT 对格式错误的输入具有一定的鲁棒性,即使打乱词序或截断句子,预测结果往往变化不大,这反映了其对局部上下文的强依赖性。
语义知识
BERT 能够准确完成掩码语言建模(MLM)任务,不仅仅是填补单词,还能捕获实体类型、关系及角色信息。然而,BERT 在处理数值时表现较弱,因为 WordPiece 会将数字拆分,导致数值泛化能力不足。此外,BERT 难以进行复杂的逻辑推理,它更多是基于统计相关性而非因果逻辑进行预测。
预训练与微调策略
预训练任务
原始 BERT 采用两个自监督任务:
- 掩码语言模型(MLM):随机屏蔽部分输入 token,要求模型根据上下文预测被屏蔽的词。这强制模型学习双向上下文。
- 下一句预测(NSP):判断两个句子是否相邻。尽管后续研究(如 RoBERTa)表明移除 NSP 能提升性能,但在原始 BERT 中它有助于学习篇章级连贯性。
改进方向包括:
- Masking 策略:使用动态掩码(每次 epoch 重新选择 mask 位置)、掩码短语而非单个 token、或将 MASK 替换为 [UNK] 以增加噪声鲁棒性。
- 替代任务:尝试删除、填充、句子排列等任务,甚至预测单词顺序概率。
微调技术
预训练提供通用知识,微调则适配特定任务。常用优化手段包括:
- 分层微调:冻结底层参数,仅更新高层参数,减少过拟合风险。
- 两阶段微调:先在小数据集上热身,再在大任务上训练。
- 对抗正则化:引入扰动增强模型鲁棒性。
- Mixout 正则化:通过随机丢弃权重防止共适应。


