1 基本概念

1.1 定义

层归一化是一种针对神经网络中单个样本进行特征标准化的技术。它在同一输入样本的特征维度上计算均值与方差,然后将各特征值变换到统一的尺度,再通过可学习参数恢复模型所需的表达能力。由于它不需要依赖整个批次的数据分布,因此在批量较小或输入长度变化较大的场景中较为稳定。

1.2 归一化目标

层归一化的主要目标是缓解训练过程中激活值分布不断变化带来的不稳定现象,从而提升优化效率。通过控制中间表示的尺度,模型在更新参数时更容易保持梯度传播的平衡,减少训练初期发散收敛缓慢的问题。它通常也有助于提高模型对不同输入样本的适应性。

1.3 与其他归一化方法的区别

层归一化与其他归一化方法的核心差异,在于统计量的计算对象不同。它关注的是“单个样本内部”的特征分布,而不是多个样本组成的批次分布,因此在使用方式和适用场景上与常见方法存在明显区别。

1.3.1 与批归一化的区别

批归一化通常基于一个批次中所有样本的均值和方差进行标准化,因此在训练时会受到批大小影响。层归一化则只使用当前样本自身的特征统计量,不依赖其他样本。前者更适合卷积网络等批量训练稳定的场景,后者则更适合序列模型、在线推理或小批量训练。

1.3.2 与实例归一化的区别

实例归一化一般也不依赖批次信息,但它通常针对每个样本的每个通道或特征图单独处理,更常见于图像风格迁移等任务。层归一化则往往在一个样本的全部特征维度上统一计算统计量,因此更适合处理向量序列或隐藏状态表示。

1.3.3 与组归一化的区别

组归一化介于批归一化和实例归一化之间,它将通道划分为若干组,并在组内计算统计量。层归一化不进行分组,而是直接对指定维度整体归一化,因此实现方式更简洁,尤其适合以向量为核心表示的模型结构。

2 数学原理

2.1 计算公式

设某一输入样本的特征向量为 \(x = (x_1, x_2, \dots, x_d)\),则层归一化先计算该样本在特征维度上的均值与方差:

\[ \mu = \frac{1}{d} \sum_{i=1}^{d} x_i \]

\[ \sigma^2 = \frac{1}{d} \sum_{i=1}^{d} (x_i - \mu)^2 \]

随后进行标准化:

\[ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} \]

最后应用缩放和平移:

\[ y_i = \gamma \hat{x}_i + \beta \]

其中 \(\gamma\) 与 \(\beta\) 为可学习参数,\(\epsilon\) 为防止除零的常数项。

2.2 均值与方差的求取方式

层归一化的均值与方差通常沿着特征维度计算,而不是沿批次维度计算。对于一条序列的隐藏状态,统计量可能针对每个时间步单独求取;对于全连接层输出,则通常对每个样本的最后一个维度求均值与方差。具体维度的选择取决于模型结构和实现约定。

2.3 缩放与平移参数

标准化会削弱原始表示的幅度信息,因此层归一化引入可学习的缩放与平移参数,以便模型在需要时恢复或调整特征分布。这一设计使归一化既能稳定训练,又不会过度限制表达能力。

2.3.1 可学习参数 gamma

\(\gamma\) 用于控制标准化后各特征的尺度。它允许模型根据任务需要重新放大或缩小某些维度的重要性。通常初始化为 1,使初始状态下归一化结果不被额外压缩。

2.3.2 可学习参数 beta

\(\beta\) 用于调整标准化后的平移偏置。它使得模型可以在零均值标准化之后重新引入偏移量,从而提高对特征分布的灵活建模能力。常见初始化为 0。

2.4 数值稳定性设计

层归一化在实际实现中通常会加入数值稳定措施,以避免在方差接近零或梯度传播时出现不稳定情况。这些设计对深层网络尤为重要。

2.4.1 epsilon 的作用

\(\epsilon\) 是加在方差项中的一个极小常数,主要用于防止分母为零或过小导致数值爆炸。它也能减轻浮点精度有限时的舍入误差影响。不同框架会给出略有差异的默认值。

2.4.2 反向传播中的稳定性

在反向传播过程中,层归一化的梯度会经过均值与方差相关的运算链路,因此实现上通常需要采用稳定的求导形式。现代深度学习框架一般都对这一过程做了优化,以减少精度损失并提高运行效率。

3 工作机制

3.1 按样本归一化

层归一化的核心机制是对每个样本独立处理。无论批次中包含多少条样本,每条样本都会基于自身的特征分布完成标准化,因此不同样本之间不会相互影响。这一点使它在动态输入环境中具有较强适应性。

3.2 按特征维度归一化

该方法通常沿特征维度计算统计量,也就是把同一时刻或同一层中的多个特征视为一个整体进行处理。这样做能够平衡特征之间的尺度差异,减少某些维度过大或过小对后续层输出的干扰。

3.3 训练与推理阶段的一致性

层归一化在训练和推理阶段通常采用相同的计算方式,不需要像批归一化那样维护运行均值和运行方差。这种一致性简化了部署流程,也避免了训练和推理时行为不一致的问题。

4 常见应用

4.1 自然语言处理

层归一化在自然语言处理领域应用极为广泛,尤其适合处理序列长度不固定、批量组织复杂的任务。它能较好地支持词向量上下文表示和隐藏状态的稳定更新。

4.1.1 Transformer 架构

在 Transformer 中,层归一化几乎是标准配置之一,常用于多头注意力模块和前馈网络模块前后。它有助于稳定深层堆叠结构中的信息流,减少训练困难,并提升模型在大规模语料上的收敛表现。

4.1.2 序列建模任务

机器翻译文本生成语音识别对话系统等序列建模任务中,层归一化有助于处理变长输入和不规则批次。由于这些任务中样本长度差异明显,基于批次统计的归一化方法往往不如层归一化灵活。

4.2 生成式模型

生成式模型通常需要在长链路或逐步生成过程中保持数值稳定,层归一化因此成为常见组件之一。它可用于缓解深层网络在采样、递归或逐步去噪时出现的震荡。

4.2.1 自回归模型

在自回归语言模型和其他逐步生成模型中,层归一化能够帮助模型在每一步预测时维持较稳定的隐藏状态分布。尤其在长上下文生成中,这种稳定性对输出质量具有重要意义。

4.2.2 扩散模型

在扩散模型中,层归一化常用于去噪网络和条件编码模块。它可以改善不同时间步特征幅度的协调性,使模型更容易学习逐步恢复数据分布的过程。

4.3 计算机视觉

层归一化最初并非主要面向视觉任务,但随着视觉 Transformer 和小批量训练场景的发展,它在图像建模中的使用逐渐增多。对于某些非卷积或混合结构,层归一化可以带来更一致的优化行为。

4.3.1 视觉 Transformer

视觉 Transformer 处理图像块序列时,输入形式与自然语言中的 token 序列相近,因此层归一化可以直接应用在隐藏表示上。它常用于保持注意力模块的训练稳定,并改善深层视觉模型的可训练性。

4.3.2 小批量训练场景

在显存受限或高分辨率输入下,视觉模型往往只能使用较小批量。此时依赖批次统计量的方法效果会受影响,而层归一化由于不依赖批大小,通常更具优势。

5 变体与改进

5.1 Pre-LN 与 Post-LN

Pre-LN 和 Post-LN 描述的是层归一化在网络模块中的放置位置。Pre-LN 是先归一化再进入子层计算,Post-LN 则是在子层输出后再做归一化。两者在梯度传播稳定性和训练深度方面表现不同,前者在深层网络中往往更易优化。

5.2 RMSNorm

RMSNorm 是一种简化的归一化方式,通常只使用均方根而不显式减去均值。它在保留尺度控制能力的同时,减少了部分计算,因而在一些大模型中被采用。其目标与层归一化相近,但实现形式更轻量。

5.3 ScaleNorm

ScaleNorm 通过对向量整体范数进行约束来实现归一化效果,强调控制表示的总尺度。与层归一化相比,它不一定对每个维度分别进行均值中心化,而更关注整体长度,从而在某些结构中具有简洁优势。

5.4 AdaNorm 与自适应归一化方法

AdaNorm 及其他自适应归一化方法会根据输入内容、任务状态或上下文信息动态调整归一化强度。它们试图在固定归一化和任务适配之间取得平衡,常见于需要额外条件控制的网络结构中。

6 实现细节

6.1 伪代码表示

层归一化的基本过程可概括为以下步骤:

  1. 输入样本 \(x\)
  2. 沿指定特征维度计算均值 \(\mu\)
  3. 计算方差 \(\sigma^2\)
  4. 对输入进行标准化
  5. 乘以 \(\gamma\),再加上 \(\beta\)
  6. 输出结果

这一流程在实际代码中通常以张量运算形式完成,并可直接由底层库加速。

6.2 主流深度学习框架支持

层归一化已被几乎所有主流深度学习框架原生支持,通常作为标准层直接调用。由于其使用频率高,相关接口一般较为成熟,且支持不同精度和不同数据布局。

6.2.1 PyTorch 实现

PyTorch 提供了直接的层归一化模块,便于在模型定义中插入。用户通常只需指定归一化维度、\(\epsilon\) 值以及是否使用仿射变换参数即可。

6.2.2 TensorFlow 实现

TensorFlow 及其高层接口中同样包含层归一化组件,常用于 Keras 模型。其调用方式与其他标准层类似,适合快速搭建序列模型和注意力网络。

6.2.3 JAX 实现

JAX 生态中的层归一化通常与函数式编程风格结合紧密,便于在研究和高性能训练中使用。相关实现常与自动微分和编译加速机制配合,以提升整体效率。

6.3 参数初始化与超参数设置

层归一化中的 \(\gamma\) 一般初始化为 1,\(\beta\) 一般初始化为 0,以保证初始时近似保持输入分布结构。超参数方面,\(\epsilon\) 的选择会影响稳定性与数值精度,常需结合模型规模和数据类型进行调整。对于混合精度训练,相关设置通常更需谨慎。

7 优点与局限

7.1 优点

层归一化之所以被广泛采用,主要在于它能在多种训练设置下提供稳定、统一的归一化效果,并且实现方式与序列建模天然契合。

7.1.1 不依赖批大小

由于统计量来自单个样本,层归一化不会受到批大小波动的直接影响。这使它在小批量训练、单样本推理或在线处理场景中尤为实用。

7.1.2 适用于变长输入

对于长度不一致的序列,层归一化通常比依赖批次统计的方案更自然。它能在不强制统一样本长度的情况下,对每个位置的表示进行稳定处理。

7.1.3 训练稳定性较好

在深层网络中,层归一化往往有助于缓解梯度不稳定和激活尺度漂移问题,从而提升整体训练稳定性。对于 Transformer 类结构,这一优势尤其明显。

7.2 局限

尽管应用广泛,层归一化也并非在所有场景中都占优,其性能与计算特征会受到任务结构影响。

7.2.1 对某些任务效果有限

在某些高度依赖局部空间统计或通道结构的视觉任务中,层归一化未必比专门设计的归一化方法更合适。不同任务往往需要结合模型结构进行选择。

7.2.2 计算开销与实现复杂度

层归一化需要在每个样本上计算均值和方差,并进行额外的标准化操作。虽然现代硬件和框架已大幅优化这一过程,但在极大规模训练中,其实现仍可能带来一定开销。

8 发展历程

8.1 提出背景

层归一化的提出,源于深度网络训练中对稳定化技术的需求。早期归一化方法更多面向批次训练,而序列模型、递归网络和小批量训练场景则需要一种不依赖批统计的替代方案。

8.2 在深度学习中的普及

随着循环神经网络、注意力机制和 Transformer 的发展,层归一化逐渐成为常用基础模块。它在自然语言处理中的成功应用,推动了其在更多模型结构中的普及。

8.3 在大模型中的应用演进

在大规模模型中,层归一化的使用方式不断演进,从早期的标准后置位置逐步发展出 Pre-LN、RMSNorm 等多种变体。随着模型深度和参数规模提升,围绕归一化位置和计算形式的改进也成为结构设计的重要方向。

9 相关概念

9.1 归一化

归一化是指将数据或特征调整到更适合计算的尺度范围内的一类方法。层归一化属于神经网络中的归一化技术之一,重点在于平衡中间表示的分布。

9.2 标准化

标准化通常指减去均值并除以标准差,使数据具有零均值和单位方差。层归一化的核心步骤即属于这一范畴,只是其统计对象限定在单个样本内部。

9.3 内部协变量偏移

内部协变量偏移是深度学习中常用于解释训练不稳定现象的概念,指网络内部层输入分布在训练过程中持续变化。层归一化被认为有助于减轻这类问题,从而改善优化过程。

9.4 注意力机制中的归一化位置

在注意力机制中,归一化可以放置在子层之前或之后,不同位置会影响信息流和梯度传播。层归一化的具体放置方式,常与模型整体架构和训练策略密切相关。