Skip to content

层归一化(LayerNorm)简介与推导

简介

层归一化(Layer Normalization,简称 LayerNorm) 是一种在深度学习模型中用于规范化神经网络层输入的方法。它通过对单个样本的所有激活值进行归一化处理,旨在加速训练过程、提高模型稳定性,并提升模型的泛化能力。LayerNorm 不依赖于批次大小,因此特别适用于小批次训练或序列模型,如循环神经网络(RNN)和 Transformer。

工作原理

层归一化的核心思想是在每个训练样本内部,对神经网络层的所有激活值进行归一化操作。具体步骤包括计算均值与方差、执行归一化以及应用可学习的缩放和平移参数。

归一化步骤

对于一个输入向量 $ \mathbf{x} = (x_1, x_2, \dots, x_H) $,LayerNorm 的计算过程如下:

  1. 计算均值 ($ \mu $): $ \mu = \frac{1}{H} \sum_{i=1}^{H} x_i $

  2. 计算方差 ($ \sigma^2 $): $ \sigma^2 = \frac{1}{H} \sum_{i=1}^{H} (x_i - \mu)^2 $

  3. 归一化: $ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} $ 其中,$ \epsilon $ 是一个极小的常数,防止分母为零。

  4. 缩放和平移: $ 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]]