1. Transformer架构中的归一化技术解析
在深度学习领域,Transformer架构已经成为自然语言处理、计算机视觉等任务的基础模型。这个架构中有一个看似简单却至关重要的组件——归一化层(Normalization)。今天我想结合自己在大模型训练中的实践经验,深入剖析LayerNorm和BatchNorm这两种主流归一化技术的原理差异、实现细节和适用场景。
1.1 为什么需要归一化?
在深度神经网络训练过程中,我们经常会遇到"内部协变量偏移"(Internal Covariate Shift)问题。简单来说,就是前面层的参数更新会导致后面层输入数据分布发生变化,使得网络需要不断适应新的数据分布,降低了训练效率。
举个例子,就像厨师做一道复杂的菜品,如果每次前一道工序的调味比例都随机变化,后续工序的厨师就不得不频繁调整自己的烹饪方式。归一化技术就是通过标准化每层的输入分布,让网络各层可以更稳定、高效地学习。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. BatchNorm与LayerNorm的数学原理对比
2.1 BatchNorm的计算过程
BatchNorm(批量归一化)的计算可以分解为以下步骤:
-
计算mini-batch的均值:
μ_B = 1/m * Σx_i -
计算mini-batch的方差:
σ²_B = 1/m * Σ(x_i - μ_B)² -
归一化:
x̂_i = (x_i - μ_B)/√(σ²_B + ε) -
缩放和平移:
y_i = γx̂_i + β
其中m是batch大小,ε是防止除零的小常数(通常1e-5),γ和β是可学习的参数。
注意:BatchNorm在训练和推理时的行为不同。训练时使用当前batch的统计量,推理时则使用移动平均统计量。
2.2 LayerNorm的计算过程
LayerNorm(层归一化)的计算公式看似相似,但统计量的计算维度完全不同:
-
计算单个样本在特征维度上的均值:
μ_L = 1/H * Σx_i -
计算方差:
σ²_L = 1/H * Σ(x_i - μ_L)² -
归一化:
x̂_i = (x_i - μ_L)/√(σ²_L + ε) -
缩放和平移:
y_i = γx̂_i +
