Transformer 模型中,主要使用Layer Normalization!!!
在 Transformer 模型中,主要使用 Layer Normalization(层归一化) 作为正则化层,而不是 Batch Normalization(批归一化)。以下是详细说明:
1. Layer Normalization(层归一化)
Transformer 中所有核心子层(自注意力层和前馈神经网络)的输出都接 LayerNorm,其作用:
- 归一化方式:对单个样本的所有特征通道进行归一化(沿特征维度 $C$),而非批处理维度。
$$\mu = \frac{1}{C} \sum_{i=1}^C x_i, \quad \sigma = \sqrt{\frac{1}{C} \sum_{i=1}^C (x_i - \mu)^2}$$ - 结构位置:应用于 残差连接(Residual Connection)之后,形成 Add & Norm 模块:
$$\text{Output} = \text{LayerNorm}(x + \text{Sublayer}(x))$$
其中 $\text{Sublayer}$ 是自注意力或前馈网络。
为什么用 LayerNorm 而不是 BatchNorm?
特性 | LayerNorm | BatchNorm |
---|---|---|
序列长度敏感性 | ✅ 独立处理每个样本 | ❌ 依赖固定序列长度 |
小批量表现 | ✅ 稳定 | ❌ 小批量不稳定 |
推理一致性 | ✅ 无统计量依赖 | ❌ 需移动平均 |
2. Dropout(随机失活)
Transformer 中辅助使用的正则化技术:
- 应用位置:
- 自注意力的注意力权重计算后(Softmax 输出后)
- 前馈网络(FFN)的激活函数(如 ReLU)输出后
- 嵌入层(Embeddings)的输出
- 作用:随机丢弃部分神经元(默认比例 $p=0.1$),减轻过拟合。
Transformer 中的具体实现位置
以 Transformer 编码器层为例:
1 | class TransformerEncoderLayer(nn.Module): |
经典模型中的使用
模型 | 正则化方案 |
---|---|
原始 Transformer (2017) | LayerNorm + Dropout (p=0.1) |
BERT | LayerNorm + Dropout (p=0.1) |
GPT 系列 | LayerNorm (前置) + Dropout |
ViT (视觉 Transformer) | LayerNorm |
总结
- 核心正则化层:Layer Normalization(残差连接后使用)
- 辅助正则化:Dropout(应用于注意力、FFN 和嵌入层)
- 设计动机:解决序列数据变长问题,提升训练稳定性,避免过拟合。
📌 关键点:Transformer 摒弃了 CNN 中常用的 BatchNorm,因 LayerNorm 更适配序列数据的特性(可变长度、小批量敏感)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Min的博客!
评论