归一化详解

#deepLearning/normalization

LayerNorm

Layer Normalization 是对每个样本在每一层的激活值进行标准化的技术。

操作过程:

  • 对每个样本(而非每个批次)进行归一化。
  • 对于神经网络层的输出 \(\mathbf{x} = (x_1, x_2, ..., x_d)\),计算均值 \(\mu\) 和方差 \(\sigma^2\)\[ \mu = \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 = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} \] 其中 \(\epsilon\) 是小常数,用于防止除零错误。
  • 最后,应用可学习的缩放参数 \(\gamma\) 和偏移参数 \(\beta\)\[ y_i = \gamma \hat{x}_i + \beta \]

应用场景:

  • 适用于处理变长输入和序列数据,特别是 NLP 和 RNN。
  • 提高训练稳定性,并减少对批量大小的依赖。

RMSNorm

RMSNorm 是 Layer Normalization 的一种简化版本,仅使用均方根(RMS)来进行归一化,而不计算均值。

操作过程:

  • 对于输入向量 \(\mathbf{x} = (x_1, x_2, ..., x_d)\),计算均方根: \[ \text{RMS} = \sqrt{\frac{1}{d} \sum_{i=1}^{d} x_i^2} \]
  • 然后,使用均方根进行归一化: \[ \hat{x}_i = \frac{x_i}{\text{RMS} + \epsilon} \]
  • 最后,应用可学习的缩放参数 \(\gamma\) 和偏移参数 \(\beta\)\[ y_i = \gamma \hat{x}_i + \beta \]

区别:

  • Layer Normalization 使用均值和方差进行归一化,而 RMSNorm 只使用均方根。
  • RMSNorm 更为简洁,没有均值计算,适合输入数据分布较为平稳的任务。

应用场景:

  • 通常在需要更轻量级归一化的任务中使用,特别是在 Transformer 等架构中。

总结:

  • Layer Normalization 适用于需要强烈中心化的数据分布任务,尤其在序列建模中效果较好。
  • RMSNorm 则是一个简化的归一化方法,计算上更为高效,适合不需要严格中心化的任务。