归一化:深度学习的"稳定器"

深度神经网络的训练面临一个根本性挑战:随着层数加深,激活值的分布会发生剧烈变化(Internal Covariate Shift)。这种分布偏移导致上层需要不断适应下层的输出分布变化,学习变得困难。归一化层通过将激活值"拉回"到稳定分布,有效缓解了这一问题。

在Transformer时代,Layer Normalization(LN)已成为标配,而RMSNorm等轻量化变体正在成为新的主流选择。

Batch Normalization的局限性

BN的工作原理

Batch Normalization对batch维度进行归一化:

def batch_norm(x, gamma, beta, eps=1e-5, momentum=0.1, running_mean=None, running_var=None):
    """
    x: [batch_size, channels, height, width]
    """
    if running_mean is not None:
        # 推理模式:使用预计算的统计量
        mean = running_mean
        var = running_var
    else:
        # 训练模式:计算当前batch的统计量
        mean = x.mean(dim=(0, 2, 3), keepdim=True)
        var = x.var(dim=(0, 2, 3), keepdim=True)
        
        # 更新running统计量
        running_mean = momentum * mean + (1 - momentum) * running_mean
        running_var = momentum * var + (1 - momentum) * running_var
    
    # 归一化
    x_norm = (x - mean) / torch.sqrt(var + eps)
    
    # 仿射变换
    return gamma.view(1, -1, 1, 1) * x_norm + beta.view(1, -1, 1, 1)

BN在LLM中的问题

BN在LLM训练中有几个致命缺陷:

  1. Batch Size依赖:LLM通常用很小的batch size(甚至batch_size=1),统计量不稳定
  2. RNN不兼容:RNN的时间步之间需要sequential处理,无法跨batch统计
  3. 分布式训练复杂:不同GPU上的batch统计量不一致,需要同步
  4. 序列长度变化:NLP任务中序列长度经常变化,padding影响统计

Layer Normalization

LN的工作原理

Layer Normalization对单个样本的所有特征进行归一化,独立于batch维度:

def layer_norm(x, gamma, beta, eps=1e-5):
    """
    x: [batch_size, seq_len, hidden_size]
    """
    # 对最后一个维度计算均值和方差
    mean = x.mean(dim=-1, keepdim=True)
    var = x.var(dim=-1, keepdim=True)
    
    # 归一化
    x_norm = (x - mean) / torch.sqrt(var + eps)
    
    # 仿射变换
    return gamma * x_norm + beta

LN的优势

  • Batch无关:每个样本独立归一化,不依赖batch size
  • 序列处理友好:NLP和RNN任务天然适用
  • 实现简单:无需维护running统计量
  • Transformer标配:Pre-LN Transformer几乎成为标准

Pre-LN vs Post-LN

原始Transformer使用Post-LN(归一化在残差连接之后),但训练不稳定。Pre-LN将归一化移到残差分支内部:

Post-LN: x = x + Sublayer(LN(x))
Pre-LN:  x = x + Sublayer(x), then LN(x) at layer output

Pre-LN的训练稳定性显著优于Post-LN,是2026年几乎所有LLM的选择。

RMSNorm

核心思想

RMSNorm(Root Mean Square Layer Normalization)发现:Layer Normalization中的均值平移(mean centering)对性能贡献甚微,反而是RMS(均方根)起着主导作用。

def rms_norm(x, gamma, eps=1e-5):
    """
    x: [batch_size, seq_len, hidden_size]
    RMSNorm的核心:只使用RMS,不计算均值
    """
    # 计算RMS而不是均值和方差
    rms = torch.sqrt(x.pow(2).mean(dim=-1, keepdim=True) + eps)
    
    # 归一化
    x_norm = x / rms
    
    # 仿射变换(仅使用gamma,无beta)
    return gamma * x_norm

RMSNorm vs LayerNorm

特性LayerNormRMSNorm
计算均值
计算方差✅(隐含在RMS中)
可学习参数gamma + betagamma
计算量略高约少10-15%
性能基准与LN相当甚至更好
稳定性良好良好

为什么RMSNorm有效?

直觉上,神经网络的激活值分布通常已经接近零均值——归一化层之前的操作(如残差连接)倾向于保持零均值。因此,显式减去均值可能只是"做了已经发生的事情",而RMS才是真正关键的统计量。

DeepNorm:Transformer的稳定归一化

微软提出的DeepNorm是专门为极深Transformer设计的归一化方法:

def deep_norm(x, sublayer_output, alpha, beta):
    """
    DeepNorm: 在残差连接后进行归一化,但使用缩放因子
    """
    return LN(beta * x + alpha * sublayer_output)

DeepNorm配合适当的参数初始化,可以稳定训练数百层的Transformer。

2026年的归一化演进

群归一化(Group Normalization)

GN将通道分成若干组,每组独立计算归一化统计量。当batch size很小时,GN比BN更稳定:

def group_norm(x, gamma, beta, n_groups=32, eps=1e-5):
    """
    x: [batch_size, channels, height, width]
    """
    # 将通道分成n_groups组
    G = n_groups
    C = x.shape[1]
    assert C % G == 0
    
    # 重排为 [batch, n_groups, C//G, H, W]
    x = x.view(x.shape[0], G, C // G, *x.shape[2:])
    
    # 在组内归一化
    mean = x.mean(dim=(2, 3, 4), keepdim=True)
    var = x.var(dim=(2, 3, 4), keepdim=True)
    
    x_norm = (x - mean) / torch.sqrt(var + eps)
    x_norm = x_norm.view(x.shape[0], C, *x.shape[3:])
    
    return gamma * x_norm + beta

权重归一化(Weight Normalization)

将权重向量分解为方向和大小:

def weight_norm(W, g, v):
    """
    W = g * (v / ||v||)
    """
    return g * (W / torch.norm(W, dim=-1, keepdim=True))

权重归一化将权重的学习率解耦,在某些任务(如RNN)中效果优于BN。

归一化层的放置策略

Transformer中归一化层的放置位置对训练动态有显著影响:

  1. Pre-LN:LN在注意力/FFN之前,最稳定
  2. Post-LN:LN在残差连接之后,性能可能更好但训练困难
  3. Bypass:在分支上分别归一化(如Pre-Norm变体)
  4. DeepNorm:带缩放的Post-LN,专为极深模型设计

工程实践建议

  1. Transformer首选Pre-LN:稳定性和性能的良好平衡
  2. 追求效率选RMSNorm:减少约10-15%的计算量,性能相当
  3. 极深模型考虑DeepNorm:数百层Transformer的唯一选择
  4. CV任务谨慎使用LN:在图像领域BN仍是主流,GN作为小batch备选
  5. 位置选择:LN vs RMSNorm:LLM中两者性能相当,优先选RMSNorm

结语

归一化技术从BN演进到LN再到RMSNorm,体现了深度学习工程化的持续优化——追求更少的计算、更稳定的训练、更好的性能。在AGI系统的构建中,选择合适的归一化方案是保证训练稳定性的基础之一。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。