基本概念

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%。