Files
2026-05-16 17:16:51 +08:00

184 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 02-BERT
draft: false
tags:
- BERT
- 大语言模型
- Transformer
- 深度学习
---
## 一、 BERT 的深度解析 (The Foundation)
### 1. Scaled Dot-Product Attention 的维度约束与方差偏移
注意力机制的本质是特征空间的相似度加权。在给定的 Query、Key 和 Value 矩阵 $Q, K, V \in \mathbb{R}^{L \times d_k}$ 下,计算过程如下:
$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right)V $$
**为什么必须引入缩放因子 $\sqrt{d_k}$**
假设 $q$ 和 $k$ 是均值为 $0$、方差为 $1$ 的独立随机变量向量(即 $E[q_i]=0, Var(q_i)=1$)。其点积为 $q \cdot k = \sum_{i=1}^{d_k} q_i k_i$。
根据概率论,点积的均值和方差分别为:
$$ E[q \cdot k] = \sum_{i=1}^{d_k} E[q_i]E[k_i] = 0 $$
$$ Var(q \cdot k) = \sum_{i=1}^{d_k} Var(q_i k_i) = \sum_{i=1}^{d_k} (E[q_i^2]E[k_i^2] - E[q_i]^2 E[k_i]^2) = d_k $$
**工程结论****点积结果的方差随维度 $d_k$ 的增加而线性放大。** 在输入 Softmax 函数时,极大的方差会导致分布两极分化(趋近于 One-hot使得极大值处的 Softmax 梯度区域平坦($\nabla \text{softmax} \approx 0$)。除以 $\sqrt{d_k}$ 可严格将点积结果的方差强行缩放回 $1$,避免梯度消失,保证训练早期的稳定性。
### 2. 多头注意力 (MHA) 的物理意义
多头注意力的数学表达为:
$$ \text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O $$
$$ \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) $$
其中 $W_i^Q, W_i^K, W_i^V \in \mathbb{R}^{d_{model} \times d_k}$ 是投影矩阵。
物理意义上,线性投影将原始高维输入隐式映射到 $h$ 个**相互正交的特征子空间**中。每个 Head 能够独立关注不同的语言学特征(如句法依赖、语义指代等),最后通过 Concat 与 $W^O$ 进行高维流形的特征融合,极大提升了模型的表达能力。
### 3. 输入层细化:$E_{total}$ 的构建与局限
BERT 的输入表征是三个相同维度 Embedding 的严格加和:
$$ E_{total} = E_{token} + E_{pos} + E_{seg} $$
其中,$E_{pos}$ 采用的是**绝对位置编码 (Learned Positional Embedding)**。
**局限性分析**Learned Positional Embedding 是通过反向传播更新的参数矩阵 $P \in \mathbb{R}^{L_{max} \times d_{model}}$。这种设计的致命弱点在于**零外推性 (Zero Extrapolation)**:当推理时的序列长度超过预训练时设定的最大长度 $L_{max}$(如 512模型无法查找到对应的位置向量直接导致系统性崩溃。这也是后续模型向旋转位置编码 (RoPE) 演进的根本原因。
---
## 二、 演进至 GPT (The Transition & Architecture)
### 1. Masked Self-Attention 与因果视图
GPT 的核心是自回归生成,必须阻断信息从未来流向现在。数学上通过引入下三角 Mask 矩阵 $M \in \mathbb{R}^{T \times T}$ 实现:
$$ M_{ij} = \begin{cases} 0, & i \ge j \\ -\infty, & i < j \end{cases} $$
在计算 Softmax 之前,将 $M$ 直接叠加到注意力分数上:
$$ \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}} + M\right)V $$
当 $M_{ij} = -\infty$ 时,$\exp(-\infty) = 0$,确保第 $i$ 个 Token 只能对 $\le i$ 的 Token 产生非零概率权重。这构成了 Decoder 的**因果视图 (Causal View)**,而 BERT 则是没有 Mask $M$ 的**全局视图 (Global View)**。
### 2. 层归一化的深层抉择 (Pre-LN vs Post-LN)
Transformer 结构的成败高度依赖 Layer Normalization 的位置设置:
- **Post-LN (BERT)**: $x_{t+1} = \text{LayerNorm}(x_t + \text{SubLayer}(x_t))$
- **Pre-LN (GPT)**: $x_{t+1} = x_t + \text{SubLayer}(\text{LayerNorm}(x_t))$
**梯度动力学分析**:在 Post-LN 中,残差分支的输出直接被 LayerNorm 重新标准化。随着网络层数 $L$ 的加深,反向传播到达底层的梯度会发生严重的衰减,导致极难初始化且必须依赖 Warm-up 策略。
而在 Pre-LN 中,主干网络始终保留一条纯净的恒等映射 (Identity Mapping)路径:$x_L = x_0 + \sum_{i=1}^L \text{SubLayer}(\dots)$。
**工程结论****Pre-LN 使得各个 SubLayer 的梯度可以直接且无损地流向底层网络,从根本上缓解了深层网络的梯度消失/爆炸问题,是极深(如 96 层 GPT-3模型能够稳定启动训练的必决条件。**
### 3. 前馈神经网络 (FFN):从 ReLU 到 GeLU
FFN 负责非线性映射:$FFN(x) = \text{Act}(xW_1 + b_1)W_2 + b_2$。
GPT 彻底摒弃了 ReLU ($max(0, x)$),采用高斯误差线性单元 **GELU**
$$ \text{GELU}(x) = x \Phi(x) = x \cdot \frac{1}{2}\left[1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right] $$
相比 ReLU 在 $x=0$ 处的不可导和硬截断GELU 是一种概率平滑激活。它实际上等价于将输入 $x$ 乘以一个服从 $\mathcal{N}(0,1)$ 的 Dropout 门控变量。在零点附近的平滑过渡保证了更丰富的曲率信息,对优化器评估 Loss 景观非常有益。
---
## 三、 训练过程的硬核细节 (The Engineering)
### 1. 损失函数 (Loss Functions)
- **BERT 联合目标**
$$ \mathcal{L}_{BERT} = \mathcal{L}_{MLM} + \mathcal{L}_{NSP} = -\sum_{i \in \mathrm{KL}} \log P(x_i | \hat{X}) - \log P(\text{IsNext} | X_A, X_B) $$
- **GPT 标准自回归似然估计 (NLL Loss)**
$$ \mathcal{L}_{GPT} = -\sum_{i=1}^T \log P(x_i | x_1, x_2, \dots, x_{i-1}) $$
### 2. 优化器与学习率策略
**AdamW 的权重衰减逻辑**:标准 Adam 在处理 L2 正则化时梯度更新表达式会将权重衰减项和动量项耦合导致正则化效果在遇到自适应学习率时被削弱。AdamW 强制将权重衰减解耦到梯度更新之外:
$$ \theta_t = \theta_{t-1} - \eta_t \left( \frac{\alpha \hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_{t-1} \right) $$
**Linear Warmup + Cosine Decay**
初始极高的方差需要极小的学习率启动。
1. 预热期 ($t < T_w$)$lr_t = lr_{max} \frac{t}{T_w}$。**作用:保护随机初始化的权重在第一个 Epoch 内免遭巨大且方差极高的梯度破坏(俗称“梯度洗牌”)。**
2. 余弦退火 ($t \ge T_w$)$lr_t = lr_{min} + \frac{1}{2}(lr_{max} - lr_{min})(1 + \cos(\pi \frac{t - T_w}{T_{total} - T_w}))$。平滑逼近局部最优解。
### 3. 初始化与梯度控制
**深度残差缩放**为了控制残差网络累积方差在深层的爆炸GPT 要求针对残差路径前的权重(例如自注意力的投影矩阵 $W^O$ 和 FFN 的第二层 $W_2$)执行额外的缩放初始化:
$$ W \sim \mathcal{N}\left(0, \frac{\sigma}{\sqrt{2L}}\right) $$
其中 $L$ 为层数。这确保了在初始化阶段,深层方差仍保持在 $\mathcal{O}(1)$ 量级。
**Gradient Clipping**:在大规模预训练(如 Batch Size = 2048Loss 景观充满“悬崖”。当 $\|g\|_2 > \gamma$ 时,执行 $g \leftarrow g \frac{\gamma}{\|g\|_2}$。**工程结论梯度裁剪是防御预训练“Loss 突刺 (Spike)”的最后防线,通常阈值 $\gamma$ 设为 1.0。**
### 4. BPE (Byte Pair Encoding) 编码方案
BPE 是一种基于数据统计的子词压缩算法。通过计算连续字节对的频率,将最高频的组合不断合并,从而构建词表。
**平衡 OOV 逻辑**:它结合了 Character-level 的全覆盖特性(完全消除 OOV 问题)和 Word-level 的语义丰富特性。对于罕见词OOVBPE 会将其自然降解为更短的子词序列(或最终的字符/字节),从而保证了对未知词汇的鲁棒泛化。
---
## 四、 故障排除与架构对比 (Troubleshooting & Comparison)
### 1. KV Cache 推理加速与显存边界
在自回归生成第 $t$ 个 Token 时,无需重新计算前 $t-1$ 个 Token 的表征。只需将新计算的 $k_t, v_t$ 拼接到缓存矩阵中:
$$ K_{\le t} = [K_{<t}; k_t], \quad V_{\le t} = [V_{<t}; v_t] $$
**内存占用数学推导**:以 FP16每参数 2 字节)为例,单个 Token 在每一层的注意力机制中需存储 Key 和 Value。对于单个 Batch
$$ \text{Memory/Token} = 2 (\text{K and V}) \times L (\text{layers}) \times h (\text{heads}) \times d_{head} (\text{dim}) \times 2 \text{ bytes} $$
**工程结论****KV Cache 会随序列长度呈线性暴涨,极易导致 OOM这也是后续 PagedAttention 等内存分页技术被提出的直接推手。**
### 2. 训练崩溃与 Loss Spike
在几十 B 规模的模型训练中Loss Spike从正常值瞬间飙升至数百甚至 NaN极度常见。
**原因**:通常由半精度 (FP16/BF16) 溢出引发。在注意力权重或 FFN 放大器中,某些异常 Token 导致中间特征激活值突破了 65504 (FP16 的最大表示阈值)。
**应对方案**:除了梯度裁剪和调整混合精度策略(如主权重保持 FP32监控 $\text{Norm}(\text{Gradient})$ 是关键。若某一步梯度范数异于移动平均值过多,直接 Skip 该 Batch。
### 3. Softmax 饱和与 Temperature 控制
在 GPT 采样解码时,预测下一个 Token 的概率分布由带温度标量 $T$ 的 Softmax 控制:
$$ P(x_i) = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)} $$
- **$T \to 0$ (Greedy)**:分布变得极其尖锐,相当于 $\text{argmax}$,导致文本极其死板且容易陷入循环重复。
- **$T > 1$ (Smoothing)**:概率分布变得平缓(接近均匀分布),使得长尾低频词被选中的概率增加,提升了生成的多样性和创造力,但过高会导致逻辑崩坏。
---
### 附录BERT 与 GPT 核心数学差异对比表
|**对比维度**|**BERT (Encoder)**|**GPT (Decoder)**|**核心数学/结构差异点**|
|---|---|---|---|
|**掩码机制 (Masking)**|全局无 Mask (Padding 除外)|下三角 Causal Mask $M$|Softmax 输入存在 $-\infty$ 的硬截断|
|**计算复杂度 (Self-Attn)**|$\mathcal{O}(T^2 \cdot d_{model})$|$\mathcal{O}(T^2 \cdot d_{model})$|复杂度相同,但 GPT 矩阵运算由于 Mask 为下三角矩阵,可作特定优化|
|**训练/推理并行度**|训练:极高 / 推理:单次计算|训练:极高 / 推理:**极低**|GPT 推理受限于自回归本质,时间复杂度为 $\mathcal{O}(T)$ 步向后展开|
|**特征感受野 (Receptive)**|$100\%$ 深度双向上下文|严格单向 (仅见历史 Token)|联合概率分解定律的架构具象化表示|
|**LayerNorm 拓扑**|Post-LN|Pre-LN|决定深层梯度反传是衰减还是完美继承 (Identity mapping)|