层归一化(LayerNorm)简介与推导¶
简介¶
层归一化(Layer Normalization,简称 LayerNorm) 是一种在深度学习模型中用于规范化神经网络层输入的方法。它通过对单个样本的所有激活值进行归一化处理,旨在加速训练过程、提高模型稳定性,并提升模型的泛化能力。LayerNorm 不依赖于批次大小,因此特别适用于小批次训练或序列模型,如循环神经网络(RNN)和 Transformer。
工作原理¶
层归一化的核心思想是在每个训练样本内部,对神经网络层的所有激活值进行归一化操作。具体步骤包括计算均值与方差、执行归一化以及应用可学习的缩放和平移参数。
归一化步骤¶
对于一个输入向量 $ \mathbf{x} = (x_1, x_2, \dots, x_H) $,LayerNorm 的计算过程如下:
-
计算均值 ($ \mu $): $ \mu = \frac{1}{H} \sum_{i=1}^{H} x_i $
-
计算方差 ($ \sigma^2 $): $ \sigma^2 = \frac{1}{H} \sum_{i=1}^{H} (x_i - \mu)^2 $
-
归一化: $ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} $ 其中,$ \epsilon $ 是一个极小的常数,防止分母为零。
-
缩放和平移: $ y_i = \gamma \cdot \hat{x}_i + \beta $ 这里,$ \gamma $ 和 $ \beta $ 是可学习的参数,用于调整归一化后的输出。
最终公式¶
将上述步骤综合起来,LayerNorm 的数学表达式为:
$ \text{LayerNorm}(\mathbf{x}) = \gamma \cdot \frac{\mathbf{x} - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta $
常用符号¶
符号 | 含义 |
---|---|
$ \mathbf{x} $ | 输入向量 |
$ \mu $ | 均值 |
$ \sigma^2 $ | 方差 |
$ \gamma $ | 缩放参数 |
$ \beta $ | 平移参数 |
$ \epsilon $ | 稳定常数 |
一个具体的例子:¶
假设我们有一个 2x4 的矩阵作为输入,即一个批次包含 2 个样本,每个样本的特征维度是 4:
X = [[ 1.0, 2.0, 3.0, 4.0],
[-1.0, -2.0, -3.0, -4.0]]
为了简化计算,我们先不考虑 \(\epsilon\) (设为0),并且假设缩放参数 \(\gamma\) 为全1向量,平移参数 \(\beta\) 为全0向量。
步骤 1: 计算每个样本的均值 (\(\mu\))
-
对于第一个样本
[1.0, 2.0, 3.0, 4.0]
: $ \mu_1 = \frac{1.0 + 2.0 + 3.0 + 4.0}{4} = 2.5 $ -
对于第二个样本
[-1.0, -2.0, -3.0, -4.0]
: $ \mu_2 = \frac{-1.0 + (-2.0) + (-3.0) + (-4.0)}{4} = -2.5 $
步骤 2: 计算每个样本的方差 (\(\sigma^2\))
-
对于第一个样本: $ \sigma^2_1 = \frac{(1.0 - 2.5)^2 + (2.0 - 2.5)^2 + (3.0 - 2.5)^2 + (4.0 - 2.5)^2}{4} = \frac{2.25 + 0.25 + 0.25 + 2.25}{4} = 1.25 $
-
对于第二个样本: $ \sigma^2_2 = \frac{(-1.0 - (-2.5))^2 + (-2.0 - (-2.5))^2 + (-3.0 - (-2.5))^2 + (-4.0 - (-2.5))^2}{4} = \frac{2.25 + 0.25 + 0.25 + 2.25}{4} = 1.25 $
步骤 3: 计算每个样本的标准差 (\(\sigma\))
-
对于第一个样本: $ \sigma_1 = \sqrt{1.25} \approx 1.118 $
-
对于第二个样本: $ \sigma_2 = \sqrt{1.25} \approx 1.118 $
步骤 4: 对每个样本进行归一化
-
对于第一个样本: $ \hat{x}{11} = \frac{1.0 - 2.5}{1.118} \approx -1.342 $ $ \hat{x} \approx -0.447 $ $ \hat{x}} = \frac{2.0 - 2.5}{1.118{13} = \frac{3.0 - 2.5}{1.118} \approx 0.447 $ $ \hat{x} \approx 1.342 $} = \frac{4.0 - 2.5}{1.118
-
对于第二个样本: $ \hat{x}{21} = \frac{-1.0 - (-2.5)}{1.118} \approx 1.342 $ $ \hat{x} \approx 0.447 $ $ \hat{x}} = \frac{-2.0 - (-2.5)}{1.118{23} = \frac{-3.0 - (-2.5)}{1.118} \approx -0.447 $ $ \hat{x} \approx -1.342 $} = \frac{-4.0 - (-2.5)}{1.118
步骤 5: 应用缩放和平移 (这里 \(\gamma\) 为全1, \(\beta\) 为全0,所以结果不变)
由于我们假设 \(\gamma\) 为全1向量,\(\beta\) 为全0向量,所以最终的 LayerNorm 输出与归一化后的结果相同。
最终结果
LayerNorm 后的矩阵为:
LayerNorm(X) ≈ [[-1.342, -0.447, 0.447, 1.342],
[ 1.342, 0.447, -0.447, -1.342]]