上一代的问题:Batch Normalization 依赖 batch size,小 batch 和 RNN 下表现差。
这代改了什么:不在 batch 维度归一化,改为在单条样本的隐藏层所有神经元上计算均值和方差(Layer Normalization)。
效果:成为 Transformer 的标准归一化方法,不受 batch size 影响,训练推理行为一致。
Batch Normalization (BN) 依赖 batch size,在小 batch 或在线学习时表现差;且不适用于 RNN(每个时间步统计量不同)。需要一种不依赖 batch、适用于变长序列的归一化方法。
不在 batch 维度上计算统计量,而是在单条样本的隐藏层所有神经元上计算均值和方差。每个样本有自己的 μ 和 σ,训练和推理时计算完全相同。
其中 H 是该隐藏层的神经元数量,gi 和 bi 是可学习的缩放和偏移参数。
LN 对单条样本的缩放具有不变性:对输入 ai 的所有隐藏单元同时乘以一个标量,归一化后输出不变。同时,LN 对整个权重矩阵的缩放和偏移具有不变性——权重矩阵等比例缩放不改变归一化输出。
LN 被 Transformer 采用为标准组件。Transformer 原文将 LN 放在残差连接之后(Post-LN),每个子层后都接 LN。这一设计后来被证明需要 warmup 才能稳定训练,推动了 Pre-LN 的出现。
LN 成为 Transformer 系列的标准归一化方法,几乎所有现代 NLP 模型都使用它。其不依赖 batch 的特性使其在序列模型中广泛使用。