Transformer结构中的规范化层(层归一化)
一、规范化层(层归一化)介绍
-
概念
层归一化(Layer Normalization) 是一种用于提高深度神经网络训练稳定性和加速收敛的技术,广泛应用于现代深度学习模型中,尤其是在Transformer等序列建模网络中。它通过对每一层的输出进行归一化处理,来缓解梯度消失或爆炸的问题,并有助于模型在训练过程中更加稳定。
-
核心思想
层归一化的核心思想是对每个输入样本在每一层内部进行标准化。具体来说,它会将输入的特征按层(即按样本维度的层面)进行归一化,而不是像批归一化(Batch Normalization)那样按批次(即样本的层面)进行归一化。
层归一化的目标是确保每个神经网络层的输入分布具有一致的均值和方差,这样可以防止激活值过大或过小,导致梯度在反向传播时出现不稳定的情况。
-
公式
假设某一层的输入为一个向量\(x=[x_1, x_2, ..., x_d]\),其中\(d\)是该层的特征维度。层归一化对该层的输入进行标准化的过程如下:
-
计算均值和方差
对输入向量\(x\)中的每个元素,计算其均值和方差:
- 均值: \(u = \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\):
\(\hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2} + \epsilon}\)
其中,\(\epsilon\)\(是一个小的常数(通常是 \)\(10^{-5}\) 或 \(10^{-6}\)),用于避免除零错误。
-
缩放与平移
在标准化的基础上,层归一化通常会引入两个可学习的参数:缩放因子(gamma)和平移因子(beta),用于调整标准化后的输出,以便网络能够学习到合适的表示。
- 缩放因子:\(\gamma \in \mathbb{R}^d\)
- 平移因子:\(\beta \in \mathbb{R}^d\)
-
最终输出为
\(y_i = \gamma \hat{x}_i + \beta\)
这里,\(y_i\)就是经过层归一化处理后的输出。
-
-
作用
它是所有深层网络模型都需要的标准网络层,因为随着网络层数的增加,通过多层的计算后参数可能开始出现过大或过小的情况,这样可能会导致学习过程出现异常,模型可能收敛非常的慢. 因此都会在一定层数后接规范化层进行数值的规范化,使其特征数值在合理范围内.
- 稳定训练过程:层归一化可以确保每一层的输入分布更加稳定,避免激活值过大或过小,防止梯度消失或爆炸。
- 不依赖批次大小:层归一化与 批归一化(Batch Normalization) 不同,它不依赖于批次大小,而是针对单个样本的特征进行归一化。这意味着层归一化在RNN和Transformer等处理变长输入的模型中更加有效,因为这些模型的批次大小可能变化。
- 适