基本概念
Pre Norm 是 Transformer 架构中 Layer Normalization 的一种改进方案
与传统 Post Norm(后归一化)的区别:
-
Post Norm:LayerNorm(x + Sublayer(x))
-
Pre Norm:x + Sublayer(LayerNorm(x))
核心优势
-
缓解梯度消失:深层网络训练更稳定
-
加速收敛:比传统结构快30%-50%
-
支持更深网络:可扩展到1000+层
-
参数初始化更鲁棒:对初始化敏感度降低
实现示例(PyTorch伪代码)
# Pre Norm 实现
class PreNormBlock(nn.Module):
def __init__(self, dim):
super().__init__()
self.norm = nn.LayerNorm(dim)
self.attn = Attention(dim) # 自注意力模块
self.ffn = FeedForward(dim) # 前馈网络
def forward(self, x):
x = x + self.attn(self.norm(x)) # 注意力前归一化
x = x + self.ffn(self.norm(x)) # 前馈前归一化
return x
典型应用场景
-
Vision Transformer (ViT) 图像分类
-
GPT-3 等大型语言模型
-
深度强化学习网络
-
需要训练超过12层的Transformer架构
实验数据对比
当网络深度为24层时:
指标 | Pre Norm | Post Norm |
---|---|---|
收敛速度 | 18 epochs | 32 epochs |
最终准确率 | 82.3% | 79.1% |
梯度范数 | 1.2e-3 | 8.7e-6 |
使用建议
- 当网络深度 > 6 层时推荐使用
- 配合适当的学习率衰减策略(如cosine衰减)
- 可与Weight Standardization等技巧结合使用
- 注意残差连接需要保持维度匹配
建议在实际应用中通过 ablation study 验证效果,对于小型网络(<=6层),Post Norm 可能仍有优势。最新研究(2024)表明,Pre Norm 结合动态权重调整可进一步提升性能约15%。