归一化 Normalization
date
Jan 9, 2024
slug
normalization_summary
status
Published
tags
Deep Learning
summary
type
Post
BatchNorm 的特点
BatchNorm 针对批数据进行归一化,针对对当批数据的每个特征通道
Batch Normalization(批量归一化)是一种在深度学习中常用的归一化方法,由 Sergey Ioffe 和 Christian Szegedy 在 2015 年提出。Batch Normalization 的主要目标是解决深度神经网络训练过程中的内部协变量偏移问题。
Batch Normalization 的基本思想是对每个特征在一个小批量样本上进行归一化。具体来说,假设我们有一个小批量的输入 ,其中 是批量大小, 是特征的维度。Batch Normalization 的计算过程如下:
- 计算输入 在批量维度上的均值 和方差 :这里, 是输入 的第 个样本。
- 使用均值 和方差 对输入 进行归一化:其中, 是一个很小的数,防止分母为零。
- 最后,将归一化的 线性变换到另一个空间,这是通过学习两个参数 来完成的:这里, 和 是可学习的参数, 负责调整归一化后的比例 (scale), 负责调整偏移 (shift)。
值得注意的是,在测试阶段,我们通常不能计算出完整的批量统计量,因此我们需要在训练阶段保存下来这些统计量的移动平均值,然后在测试阶段使用这些移动平均值来进行归一化。这就是所谓的 "population statistics"。
Batch Normalization 的主要优点是,它可以使深度神经网络的训练更加稳定,加快训练速度,同时还可以起到一定的正则化效果。
LayerNorm 的特点
LayerNorm 针对单个样本进行归一化,针对当前样本的所有特征通道
Layer Normalization(层归一化)是一种在深度学习中常用的归一化方法,它是由 Jimmy Ba 和 Geoffrey Hinton 在 2016 年提出的。Layer Normalization 主要用于处理深度神经网络训练过程中的内部协变量偏移问题。
Layer Normalization 的基本思想是在一个样本内部对各个特征进行归一化。具体来说,假设我们有一个输入 ,其中 是特征的维度。Layer Normalization 的计算过程如下:
- 计算输入 在所有特征维度上的均值 和方差 :
- 使用均值 和方差 对输入 进行归一化: 是一个很小的数,用于防止分母为零。
- 最后,将归一化的 线性变换到另一个空间,这是通过学习两个参数 来完成的:其中, 和 是可学习的参数, 负责调整归一化后的比例 (scale), 负责调整偏移 (shift)。
Layer Normalization 的主要优点是,它的归一化操作是在单个样本内部进行的,因此它对于批量大小不敏感,这使得它在训练 RNNs 和 Transformer 等模型时特别有用。
LayerNorm 与 BatchNorm 的区别
Batch Normalization(批量归一化)和 Layer Normalization(层归一化)都是深度学习中常用的归一化方法,它们都是为了解决深度神经网络训练过程中的内部协变量偏移问题。然而,它们在操作方式和使用场景上有一些主要的区别。
- 操作方式的区别:
- Batch Normalization 是在一个小批量样本上对每个特征进行归一化,即在批量维度进行归一化。具体来说,对于每个特征,它会计算这个小批量样本上该特征的均值和方差,并使用这些统计量来进行归一化。
- Layer Normalization 是在一个样本内部对所有特征进行归一化,即在特征维度进行归一化。具体来说,对于每个样本,它会计算这个样本上所有特征的均值和方差,并使用这些统计量来进行归一化。
- 使用场景的区别:
- Batch Normalization 通常在卷积神经网络(CNNs)中使用,因为在这些网络中,每个特征通常对应一个特定的空间位置,因此在一个小批量样本上对每个特征进行归一化是有意义的。
- Layer Normalization 通常在循环神经网络(RNNs)和 Transformer 中使用,因为在这些网络中,每个特征不再对应一个特定的空间位置,而且对于不同的时间步,同一个特征可能有不同的含义。因此,在一个样本内部对所有特征进行归一化更为合理。
- 对批量大小的敏感性:
- Batch Normalization 对批量大小敏感,因为它是在一个小批量样本上进行归一化的。如果批量大小太小,那么计算出的均值和方差可能会有较大的噪声。
- Layer Normalization 对批量大小不敏感,因为它是在一个样本内部进行归一化的。这使得 Layer Normalization 在批量大小变化较大或者批量大小较小的情况下,比如在训练 RNNs 和 Transformer 时,特别有用。
- 对输入分布的敏感性:
- Batch Normalization 对输入分布敏感,因为它是在一个小批量样本上进行归一化的。如果在训练和测试阶段,输入分布有较大的变化,那么 Batch Normalization 的效果可能会受到影响。
- Layer Normalization 对输入分布不敏感,因为它是在一个样本内部进行归一化的。这使得 Layer Normalization 在处理具有动态长度或者不同分布的输入时,比如在处理自然语言处理任务时,特别有用。