第一部分:BERT 模型的完整架构与底层机制
BERT(Bidirectional Encoder Representations from Transformers)的核心突破在于其真正的双向上下文表示能力。它完全抛弃了传统的 RNN/LSTM 架构,采用了纯 Transformer 的编码器(Encoder)堆叠。
1. 数据的输入表示 (Input Representation)
当一段自然语言进入 BERT 时,它首先被 WordPiece 分词器切分为 Subword 词元(Tokens)。序列的首位会被强制插入分类标记 [CLS],句与句之间插入分隔标记 [SEP]。
输入到第一层神经网络的最终向量,是由三个等维度的嵌入向量严格相加而成的:
- 词元嵌入 (Token Embeddings) :将离散的词汇映射为稠密的实数向量(维度通常为 d=768d = 768d=768)。
- 段落嵌入 (Segment Embeddings):用于区分当前词元属于输入序列中的第一个句子还是第二个句子(处理问答或推理任务时必需)。
- 位置嵌入 (Position Embeddings):由于 Transformer 没有循环结构,必须引入绝对位置编码,让模型感知词语在句子中的物理序列顺序。
数学表达 :对于输入序列中的第 iii 个词元 xix_ixi,其初始综合表示 EiE_iEi 为:
Ei=TokenEmbed(xi)+SegmentEmbed(xi)+PositionEmbed(i)E_i = \text{TokenEmbed}(x_i) + \text{SegmentEmbed}(x_i) + \text{PositionEmbed}(i)Ei=TokenEmbed(xi)+SegmentEmbed(xi)+PositionEmbed(i)
2. 核心网络架构 (Transformer Encoder)
以 BERT-Base 为例,它由 12 层(Blocks)完全相同的 Transformer 编码器串联组成。每一层内部包含两个极为关键的子层:
A. 多头自注意力机制 (Multi-Head Self-Attention, MHSA)
这是 BERT 理解"上下文"的核心数学操作。序列中的每一个词都与序列中的其他所有词进行内积运算,计算相关性权重。
对于给定的输入矩阵 XXX,通过与三个可学习的权重矩阵 WQW^QWQ、WKW^KWK、WVW^VWV 相乘,生成查询(Query)、键(Key)和值(Value):
Q=XWQ,K=XWK,V=XWVQ = XW^Q, \quad K = XW^K, \quad V = XW^VQ=XWQ,K=XWK,V=XWV
注意力权重的计算过程为缩放点积(Scaled Dot-Product):
Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dk QKT)V
多头机制意味着上述操作在不同的子空间中被并行执行 hhh 次(BERT-Base 中 h=12h=12h=12),从而捕捉不同维度的语义关系(例如句法依赖、指代消解)。
B. 前馈神经网络 (Feed-Forward Network, FFN)
自注意力层之后,向量会穿过一个两层的全连接网络。BERT 在这里使用了 GELU (Gaussian Error Linear Unit) 激活函数,这比传统的 ReLU 具备更平滑的非线性特性:
FFN(x)=GELU(xW1+b1)W2+b2\text{FFN}(x) = \text{GELU}(xW_1 + b_1)W_2 + b_2FFN(x)=GELU(xW1+b1)W2+b2
其中,中间层的维度会被放大 4 倍(768×4=3072768 \times 4 = 3072768×4=3072),随后再降维回 768。
C. 残差连接与层归一化 (Add & Norm)
上述每个子层的输出都会进行残差连接(Residual Connection)和层归一化(Layer Normalization),以防止深度网络的梯度消失:
Xout=LayerNorm(Xin+Sublayer(Xin))X_{\text{out}} = \text{LayerNorm}(X_{\text{in}} + \text{Sublayer}(X_{\text{in}}))Xout=LayerNorm(Xin+Sublayer(Xin))
3. 预训练任务 (Pre-training Objectives)
BERT 之所以强大,是因为它在海量无标注文本上完成了两个极其苛刻的无监督预训练任务:
- 掩码语言模型 (Masked Language Modeling, MLM) :
随机遮盖输入序列中 15% 的词元。在这 15% 中,80% 被替换为[MASK],10% 替换为随机词元,10% 保持不变。模型的任务是通过双向的上下文特征去预测这些被遮盖的真实词汇。这迫使模型建立极其深度的双向语义表示。 - 下一句预测 (Next Sentence Prediction, NSP) :
输入两个句子 A 和 B。有 50% 的概率 B 是 A 在原文中真正的下一句,50% 的概率 B 是语料库中随机抽取的不相关句子。模型需要通过[CLS]词元的最终输出特征,进行二元分类。这迫使模型理解句子级别的宏观逻辑关系。
第二部分:从 BERT 延伸到 DistilBERT 的蒸馏过程
BERT-Base 拥有 1.1 亿参数,在实际工业部署(如边缘设备或高并发搜索引擎)时,其极高的计算延迟和显存开销成为了致命瓶颈。DistilBERT 的目标是在保持绝大部分精度的前提下,对架构进行极致压缩。
这绝不是简单地"砍掉几层网络",而是基于知识蒸馏(Knowledge Distillation)的严密数学逼近过程。
1. 架构的物理精简 (Architecture Reduction)
在物理结构上,DistilBERT(学生)对原始 BERT(教师)进行了以下外科手术式的裁剪:
- 层数减半:将 12 层 Encoder 减少到 6 层。作者发现,直接用教师模型中每隔一层(第 2、4、6...层)的权重来初始化学生模型,能极大加速收敛。
- 移除部分输入层 :彻底移除了段落嵌入 (Segment Embeddings)(因为后续研究证明 NSP 任务的收益有限)。
- 保留隐藏维度 :没有降低特征的维度大小(依旧保持 d=768d=768d=768),而是专注于减少计算图的深度。
2. 知识蒸馏的数学本质 (The Mathematics of Distillation)
普通的模型训练使用"硬标签"(Hard Labels,例如目标词是"狗",概率向量就是 [0, 0, 1, 0...])。但在蒸馏过程中,DistilBERT 学习的是教师模型输出的"软标签"(Soft Targets)。
教师模型 BERT 在预测词汇时,不仅给出最高概率的词,还会给出整个词表的概率分布(例如"狗"的概率是 0.85,"猫"是 0.10,"汽车"是 0.001)。这种概率分布包含了极其丰富的"暗知识(Dark Knowledge)",揭示了词汇之间的语义相似性。
为了放大这些暗知识,蒸馏过程会在 Softmax 函数中引入温度参数 (Temperature, TTT):
pi=exp(zi/T)∑jexp(zj/T)p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}pi=∑jexp(zj/T)exp(zi/T)
当 T→1T \rightarrow 1T→1 时,分布接近原始输出;当 T>1T > 1T>1(如 T=8T=8T=8)时,概率分布变得更平滑,使得原本接近于 0 的概率(如"猫"和"汽车"的差异)被放大,供学生模型学习。
3. 严格的多目标损失函数 (Multi-objective Loss Function)
在预训练 DistilBERT 时,它的反向传播是由三个损失函数的线性组合驱动的,这也是它能完美复刻 BERT 能力的核心机密:
Ltotal=αLmlm+βLce+γLcosL_{\text{total}} = \alpha L_{mlm} + \beta L_{ce} + \gamma L_{cos}Ltotal=αLmlm+βLce+γLcos
- LmlmL_{mlm}Lmlm (掩码语言建模损失):与标准 BERT 相同,学生模型需要自己去预测被遮盖的真实词汇。
- LceL_{ce}Lce (交叉熵蒸馏损失) :强迫学生模型的 Softmax 概率分布(在温度 TTT 下)尽可能去拟合教师模型 BERT 的概率分布。
- LcosL_{cos}Lcos (余弦嵌入损失):这是特征空间层面的对齐。不仅要求最终预测结果一致,还强迫学生模型内部最后一层的隐藏状态特征向量(Hidden States),在方向上必须与教师模型对应的特征向量高度一致(余弦相似度最大化)。
通过上述严苛的物理结构压缩与数学目标蒸馏,最终诞生的 DistilBERT 保留了原始 BERT 97% 的语言理解能力 ,但参数量减少了 40% (降至约 6600 万),推理速度提升了整整 60%。