Layer Normalization的可学习参数:为什么gamma和beta正在从大模型中消失

2016年,Jimmy Lei Ba、Jamie Ryan Kiros和Geoffrey Hinton在论文《Layer Normalization》中提出了一个看似简单的设计:在归一化操作后添加两个可学习参数gamma和beta。九年后的今天,LLaMA、Mistral、Gemma等主流大模型都在悄悄移除这些参数——或者至少移除其中一部分。这个趋势背后隐藏着怎样的技术逻辑?

一个被忽视的设计细节

Layer Normalization的计算公式在几乎所有教科书中都被写成:

$$y = \frac{x - \mu}{\sigma} \cdot \gamma + \beta$$

其中$\mu$和$\sigma$是输入的均值和标准差,$\gamma$是缩放参数,$\beta$是偏移参数。大多数初学者的直觉是:归一化把数据变成均值为0、方差为1的分布,那为什么还要加回缩放和偏移?

这个问题的答案揭示了深度学习中最容易被误解的设计之一。

为什么不是"撤销归一化"

一个常见的误解是gamma和beta会"撤销"归一化的效果。实际上,它们的作用恰恰相反——它们让归一化操作变得有意义。

考虑一个简单的问题:如果所有层的激活值都被强制归一化为均值为0、方差为1,会发生什么?答案是模型的表达能力会被严重限制。某些特征可能天然地需要更大的尺度,某些位置可能需要非零的偏移。强制归一化会抹杀这些差异。

Batch Normalization的原始论文(Ioffe和Szegedy, 2015)给出了一个关键洞察:

“The learned affine transform applied to these normalized activations allows the BN transform to represent the identity transformation.”

这句话的深层含义是:通过学习gamma和beta,归一化层可以在必要时"退回到"不进行任何变换的状态。这是一种安全网机制——如果归一化对某些特征是有害的,网络可以通过学习让gamma接近$\sigma$、beta接近$\mu$,从而近似恢复原始分布。

graph LR
    A[输入x] --> B[归一化<br/>均值0方差1]
    B --> C[仿射变换<br/>γ缩放 β偏移]
    C --> D[输出y]
    
    E[训练中学习] --> C
    
    style C fill:#e1f5fe
    style E fill:#fff3e0

恒等初始化的智慧

为什么PyTorch、TensorFlow和JAX都默认将gamma初始化为1、beta初始化为0?这不是随意的选择。

当$\gamma=1, \beta=0$时,LayerNorm在训练初期表现为"纯归一化"——输出是标准的均值0、方差1分布。这是一种中性起点:既没有完全抹杀归一化的效果,也没有过度干预。网络可以根据需要,在训练过程中逐步调整这两个参数。

这个设计体现了深度学习中的一个重要原则:让模型自己决定是否需要某种变换。如果某个特征确实需要保持较大的尺度,网络会在训练中学会增大对应的gamma值。

graph TD
    A["初始化: γ=1, β=0"] --> B{训练过程中}
    B --> C["γ→σ: 恢复原始尺度"]
    B --> D["γ保持≈1: 维持归一化"]
    B --> E["β→μ: 恢复原始偏移"]
    B --> F["β保持≈0: 零中心输出"]
    
    C --> G[模型自动选择最优策略]
    D --> G
    E --> G
    F --> G
    
    style A fill:#e8f5e9
    style G fill:#c8e6c9

梯度流:gamma和beta如何影响学习

理解gamma和beta的作用,需要深入到反向传播的数学细节。设$L$为损失函数,LayerNorm的输出为$y_{bh}$(batch维度$b$,hidden维度$h$),则gamma和beta的梯度为:

$$\frac{\partial L}{\partial \gamma_q} = \frac{\partial L}{\partial y_{bq}} \cdot \frac{\mu_{bq}}{\sigma_b}$$$$\frac{\partial L}{\partial \beta_q} = \frac{\partial L}{\partial y_{bq}} \cdot \mathbf{1}_b$$

这里的$\mu_{bq} = x_{bq} - m_b$是中心化后的输入,$\sigma_b = \sqrt{v_b + \epsilon}$是标准差。关键观察是:

  • gamma的梯度与归一化后的激活值成正比。如果某个特征在归一化后仍然表现"异常"(值较大),它会产生更大的梯度来调整gamma。
  • beta的梯度直接来自上游梯度的和。任何输出位置的误差都会直接影响beta的更新。

更复杂的是输入$x$的梯度,它涉及到gamma:

$$\frac{\partial L}{\partial x_{pq}} = \frac{\partial L}{\partial y_{pq}} \cdot \frac{\gamma_q}{\sigma_p} - \frac{\partial L}{\partial y_{ph}} \cdot \frac{\gamma_h}{H} \cdot \left(\frac{\mathbf{1}_q}{\sigma_p} + \frac{\mu_{ph}\mu_{pq}}{\sigma_p^3}\right)$$

这个公式揭示了一个重要事实:gamma不仅影响缩放操作本身,还影响梯度回传的分布。较大的gamma会放大梯度信号,可能导致训练不稳定。

graph TD
    subgraph "前向传播"
        A1[输入 x] --> B1[计算均值μ]
        A1 --> C1[计算方差σ²]
        B1 --> D1[中心化 x-μ]
        C1 --> E1[标准化 /σ]
        D1 --> E1
        E1 --> F1[缩放 ×γ]
        F1 --> G1[偏移 +β]
        G1 --> H1[输出 y]
    end
    
    subgraph "反向传播"
        H2[∂L/∂y] --> G2[∂L/∂β]
        H2 --> F2[∂L/∂γ]
        H2 --> E2[∂L/∂x]
        F2 --> E2
    end
    
    style F1 fill:#ffcdd2
    style G1 fill:#c8e6c9
    style F2 fill:#ffcdd2
    style G2 fill:#c8e6c9

T5的"叛逆":移除beta参数

2020年,Google发布的T5模型做了一个看似违反直觉的设计选择:LayerNorm层中不使用beta参数,甚至不进行均值中心化。具体来说,T5使用的归一化公式是:

$$y = \frac{x}{\sqrt{\frac{1}{H}\sum x^2 + \epsilon}} \cdot \gamma$$

这正是后来被称为RMSNorm的形式。为什么T5敢这样做?

T5论文给出的解释是:“removing bias and centering simplifies the implementation and has negligible impact on performance.” 但这只是表面原因。

深入分析可以发现,T5的每个Transformer层都包含一个Feed-Forward Network (FFN),这个FFN本身就有偏置参数。如果FFN的偏置已经足够表达所需的"偏移",那么LayerNorm中的beta就变得冗余。这类似于为什么现代大模型中线性层也移除了偏置——残差连接和归一化层已经在做"偏移"的工作。

RMSNorm的崛起

T5之后,LLaMA、Mistral、Gemma等模型都采用了RMSNorm。RMSNorm的设计哲学是:只做幅度归一化,不做均值中心化

为什么这在大模型中行得通?Sebastian Raschka在分析中指出:

“RMSNorm preserves the useful magnitude-normalization behavior while removing the mean-centering step, which makes the transformer block slightly simpler and better aligned with efficiency-focused large-scale model design.”

这里的"效率"不仅指计算速度(少一次均值计算约节省15%的时间),更指训练稳定性。在大规模预训练中,均值中心化可能引入不必要的复杂性:

  1. 残差流的干扰:Transformer的残差连接要求各层的输出能够直接相加。如果每层都强制均值为0,会破坏残差流中的信息累积。
  2. Pre-LN架构的特殊性:现代大模型普遍采用Pre-LN(归一化在子层之前),此时输入的分布已经被上一层调整过,强制中心化可能矫枉过正。
graph TD
    subgraph "Post-LN (原始Transformer)"
        A1[输入] --> B1[子层计算]
        B1 --> C1[残差连接]
        C1 --> D1[LayerNorm]
        D1 --> E1[输出]
    end
    
    subgraph "Pre-LN (现代大模型)"
        A2[输入] --> D2[LayerNorm]
        D2 --> B2[子层计算]
        B2 --> C2[残差连接]
        C2 --> E2[输出]
    end
    
    style D1 fill:#ffcdd2
    style D2 fill:#c8e6c9
graph LR
    subgraph "LayerNorm"
        A1[输入] --> B1[减均值]
        B1 --> C1[除标准差]
        C1 --> D1[乘γ]
        D1 --> E1[加β]
        E1 --> F1[输出]
    end
    
    subgraph "RMSNorm"
        A2[输入] --> C2[除RMS]
        C2 --> D2[乘γ]
        D2 --> F2[输出]
    end
    
    style B1 fill:#ffcdd2
    style E1 fill:#ffcdd2
    style C2 fill:#c8e6c9
    style F2 fill:#c8e6c9

Pre-LN vs Post-LN:参数的重要性差异

2025年11月的一篇论文《Impact of Layer Norm on Memorization and Generalization in Transformers》揭示了一个关键发现:

“Eliminating LayerNorm parameters in Pre-LayerNorm models exacerbates memorization and destabilizes learning, while in Post-LayerNorm models, the impact is less severe.”

这解释了为什么在Post-LN时代(如BERT、GPT-2),gamma和beta被视为必不可少;而在Pre-LN时代(如LLaMA),它们可以被简化甚至移除。

Pre-LN架构中,归一化层位于子层之前,输入尚未经过该层的变换。此时如果移除可学习参数,网络就完全依赖于子层自身的参数来调整激活分布——这可能导致表达能力不足梯度流不稳定

Post-LN架构中,归一化层位于残差连接之后,输入已经融合了当前层和之前所有层的信息。此时即使移除可学习参数,残差路径本身也能提供足够的"偏移"能力。

graph TD
    A["Pre-LN移除参数"] --> B[记忆化加剧]
    A --> C[学习不稳定]
    A --> D[梯度流异常]
    
    E["Post-LN移除参数"] --> F[影响较小]
    E --> G[残差路径补偿]
    
    H[原因分析] --> I[输入分布差异]
    H --> J[梯度传播路径]
    H --> K[残差累积效果]
    
    I --> B
    J --> C
    K --> G
    
    style B fill:#ffcdd2
    style C fill:#ffcdd2
    style D fill:#ffcdd2
    style F fill:#c8e6c9
    style G fill:#c8e6c9

当gamma=1、beta=0不够用时

尽管初始化为gamma=1、beta=0是标准做法,但这并不意味着它是唯一选择。在某些场景下,不同的初始化策略可能更有优势。

零中心化重参数化

2025年的一项研究提出了"Zero-centered Re-parameterization of LayerNorm",建议将gamma和beta存储为零附近的值,而不是传统的1和0。原因在于:

  • 权重衰减兼容性:如果gamma初始化为1,应用权重衰减会将其拉向0,可能导致归一化效果被削弱。如果gamma初始化为0附近,权重衰减会将其保持在"适度归一化"的范围内。
  • 量化精度:在模型量化中,零附近的值通常能获得更高的精度表示。

上下文学习的影响

2024年的一项研究发现,LayerNorm的参数对**上下文学习(In-Context Learning)**有显著影响。当gamma的分布更加"锐利"(方差较大)时,模型在few-shot任务上表现更好。这提示我们:LayerNorm的参数可能不仅仅是"技术细节",而是模型推理能力的重要组成部分。

graph TD
    A["γ初始化策略"] --> B["γ=1 (标准)"]
    A --> C["γ≈0 (零中心化)"]
    A --> D["γ高方差 (上下文学习)"]
    
    B --> E[兼容传统训练]
    B --> F[权重衰减拉向0]
    
    C --> G[权重衰减友好]
    C --> H[量化精度更高]
    
    D --> I[Few-shot性能提升]
    D --> J[推理能力增强]
    
    style E fill:#e1f5fe
    style G fill:#e8f5e9
    style I fill:#fff3e0

Dynamic Tanh:归一化的终结?

2025年CVPR的一篇论文《Transformers without Normalization》提出了一个令人惊讶的发现:可以用一个简单的函数完全替代归一化层:

$$\text{DyT}(x) = \tanh(\alpha x)$$

其中$\alpha$是可学习的标量参数。作者观察到,LayerNorm的输入-输出映射往往呈现S形曲线,类似于tanh函数。通过直接使用tanh,可以在不计算均值和方差的情况下实现类似的"激活值压缩"效果。

graph LR
    A[输入x] --> B["tanh(αx)"]
    B --> C[输出y]
    
    D["可学习参数α"] --> B
    
    style B fill:#e8f5e9
    style D fill:#fff3e0

更关键的是,实验表明:移除DyT中的可学习参数α会导致性能下降。这似乎暗示:即使不需要完整的归一化操作,某种形式的"可学习缩放"仍然是必要的。

这为gamma和beta的必要性提供了新的视角:它们可能不是为了"撤销归一化",而是为了提供一种轻量级的激活值调节机制。这种机制在大模型中可能比我们想象的更重要。

graph TD
    A[LayerNorm] --> B["计算均值μ"]
    A --> C["计算方差σ²"]
    A --> D["归一化"]
    A --> E["γ缩放"]
    A --> F["β偏移"]
    
    G["Dynamic Tanh"] --> H["直接tanh变换"]
    G --> I["α缩放参数"]
    
    J["共同特征"] --> K[可学习缩放]
    K --> E
    K --> I
    
    style E fill:#ffcdd2
    style I fill:#c8e6c9
    style K fill:#e1f5fe

实践中的权衡

对于模型设计者,gamma和beta的选择取决于多个因素:

模型规模

  • 小型模型(<1B参数):建议保留完整的gamma和beta。小模型的表达能力有限,需要归一化层的完整功能来弥补。
  • 中型模型(1B-10B):可以尝试移除beta,只保留gamma。这个规模下,残差连接已经提供了足够的偏移能力。
  • 大型模型(>10B):RMSNorm(只有gamma,无均值中心化)是主流选择。计算效率的提升在大规模训练中更加显著。

架构选择

  • Post-LN:必须保留gamma和beta。Post-LN对归一化层的依赖更强。
  • Pre-LN:可以简化参数,但完全移除可能导致训练不稳定(2025年研究已证实)。

训练稳定性需求

如果训练中出现以下问题,可能需要调整gamma和beta的策略:

  • 梯度爆炸:检查gamma的分布。如果gamma普遍较大(>2),可能需要添加权重衰减或使用零中心化初始化。
  • 训练震荡:尝试冻结gamma和beta一段时间,让网络的其他部分先稳定下来。
  • 泛化性能差:考虑增加gamma的方差初始化,这可能在few-shot任务上有帮助。
graph TD
    A[模型设计决策] --> B{模型规模}
    B -->|小型<1B| C[保留完整γ和β]
    B -->|中型1B-10B| D[移除β保留γ]
    B -->|大型>10B| E[使用RMSNorm]
    
    A --> F{架构类型}
    F -->|Post-LN| G[必须保留γ和β]
    F -->|Pre-LN| H[可简化参数]
    
    A --> I{训练问题}
    I -->|梯度爆炸| J[权重衰减+零中心化]
    I -->|训练震荡| K[冻结参数]
    I -->|泛化差| L[增加γ方差初始化]
    
    style C fill:#ffcdd2
    style E fill:#c8e6c9
    style G fill:#ffcdd2
    style H fill:#c8e6c9

代码实现:手动LayerNorm

理解gamma和beta的最佳方式是实现一个自定义的LayerNorm:

import torch

class LayerNormManual(torch.autograd.Function):
    @staticmethod
    def forward(ctx, x, gamma, beta, eps=1e-5):
        # 计算均值和方差
        mean = x.mean(dim=-1, keepdim=True)
        var = x.var(dim=-1, keepdim=True, unbiased=False)
        
        # 归一化
        x_norm = (x - mean) / torch.sqrt(var + eps)
        
        # 仿射变换
        y = x_norm * gamma + beta
        
        # 保存反向传播需要的中间变量
        ctx.save_for_backward(x_norm, gamma, torch.sqrt(var + eps))
        
        return y
    
    @staticmethod
    def backward(ctx, grad_output):
        x_norm, gamma, std = ctx.saved_tensors
        H = x_norm.shape[-1]
        
        # gamma和beta的梯度
        grad_gamma = (grad_output * x_norm).sum(dim=tuple(range(grad_output.dim() - 1)))
        grad_beta = grad_output.sum(dim=tuple(range(grad_output.dim() - 1)))
        
        # 输入的梯度(简化版)
        grad_x = grad_output * gamma / std
        
        return grad_x, grad_gamma, grad_beta, None

# 使用示例
x = torch.randn(32, 512, requires_grad=True)
gamma = torch.ones(512, requires_grad=True)
beta = torch.zeros(512, requires_grad=True)

y = LayerNormManual.apply(x, gamma, beta)

这个实现展示了gamma和beta在反向传播中的核心作用:gamma参与输入梯度的缩放,beta直接吸收输出梯度。

结语:简化不是消除

gamma和beta从现代大模型中的"消失",并非意味着它们不重要。相反,这反映了深度学习架构设计的成熟:

  1. 从Post-LN到Pre-LN:架构的演进让归一化层的负担减轻了。
  2. 从LayerNorm到RMSNorm:去除了冗余操作,保留了核心功能。
  3. 从固定设计到动态调整:Dynamic Tanh等工作提示我们,归一化的本质可能比传统公式更简单。

gamma和beta的故事是深度学习发展的缩影:重要的设计不会被抛弃,只会以更优雅的形式存在。当我们在2025年回顾LayerNorm的九年历程,会发现这个看似简单的层,承载着深度学习中最深刻的权衡——稳定性与表达力、效率与效果、简化与保留。

下一次当你在模型代码中看到nn.LayerNorm(hidden_size)或者nn.RMSNorm(hidden_size)时,想一想这行代码背后的九年演进。gamma=1、beta=0的初始化,不是历史的偶然,而是无数研究者不断简化的结果。

timeline
    title Layer Normalization九年演进史
    2016 : LayerNorm提出<br/>γ和β作为标准设计
    2019 : RMSNorm论文发表<br/>移除均值中心化
    2020 : T5模型发布<br/>简化LayerNorm参数
    2022 : LLaMA采用RMSNorm<br/>成为大模型标配
    2025 : Dynamic Tanh提出<br/>挑战归一化必要性
    2025 : Pre-LN参数研究<br/>揭示记忆化机制

参考文献

  1. Ba, J. L., Kiros, J. R., & Hinton, G. E. (2016). Layer Normalization. arXiv:1607.06450.
  2. Ioffe, S., & Szegedy, C. (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. ICML 2015.
  3. Raffel, C., et al. (2020). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. JMLR.
  4. Zhang, B., & Sennrich, R. (2019). Root Mean Square Layer Normalization. NeurIPS 2019.
  5. Raschka, S. (2024). Why do many modern LLMs use RMSNorm instead of LayerNorm? sebastianraschka.com
  6. Raschka, S. (2024). Why do some LLMs remove bias terms from linear layers? sebastianraschka.com
  7. Zhu, X., et al. (2025). Transformers without Normalization. CVPR 2025.
  8. Research on Layer Norm’s Impact on Memorization and Generalization (2025). arXiv:2511.10566.
  9. Xiong, R., et al. (2020). On Layer Normalization in the Transformer Architecture. ICML 2020.
  10. Understanding Batch Normalization - Cornell CS Technical Report (2018).