Normalization
概要
参考资料1:五种归一化的原理与PyTorch逐行手写实现讲解
参考资料2:Normalization归一化
N (Batch size):批量大小,H (Height):高度,W (Width):宽度,C (Channels):通道数
直观的来说,Batch Norm: 在每个批次内对批数据的每个通道进行归一化的方法。一般用于图像领域,而自然语言处理领域不适用,原因是每个样本的长度不同。Layer Norm: 在单个数据样本的所有通道上进行操作的。对于每个数据样本,它计算所有通道的均值和方差,并进行归一化。
Motivation
Internal Covariate shift:在深度网络中,每层的输入依赖于前一层的参数。在训练过程中,由于每层参数的更新,前一层的输出(即后一层的输入)分布会发生变化。这种现象称为内部协变量偏移,它可能导致网络的收敛变慢,因为每层都必须不断适应其输入分布的变化。
通过在每次训练迭代中对每一层的输入进行归一化处理,使得其具有固定的均值和方差,这样可以减少输入分布的变化,从而减少内部协变量偏移。
Pre-Norm & Post-Norm
Pre-Norm配置被发现更适合训练深层网络,因为它可以防止梯度消失问题,使得梯度能够更稳定地流过网络。相比之下,Post-Norm可能导致训练初期不稳定,因为网络需要适应归一化层对梯度的影响。但是效果Post-Norm更好,只是训练更难。
Batch Norm & Layer Norm & Instance Norm
参考资料:Pytorch: BATCHNORM
参考资料:Pytorch: LAYERNORM
Batch Normalization (Batch Norm): 批量归一化是一种在每个批次内对小批数据的每个通道进行归一化的方法。它计算一个批次中所有数据样本的均值和方差,然后用这些统计信息来归一化相同通道的像素。这种方法可以减少内部协变量偏移,加速训练过程,并使模型对初始化参数的选择不那么敏感。Batch Norm通常在卷积层之后和激活函数之前进行。
Layer Normalization (Layer Norm): 层归一化和批量归一化类似,但它是在单个数据样本的所有通道上进行操作的。对于每个数据样本,它计算所有通道的均值和方差,并进行归一化。层归一化与批量大小无关,适用于批量大小变化的情况,以及不适合使用批量归一化的循环网络。
Instance Normalization (Instance Norm): 实例归一化通常用于风格转换任务。它在每个数据样本的每个通道上独立进行归一化,即对单个数据样本的每个通道独立计算均值和方差。这种方法适用于那些批次内每个数据样本之间的统计信息差异较大的任务,如图像的风格转换。
Batch Norm | Layer Norm | Instance Norm |
---|---|---|
全连接层和卷积层 | 循环神经网络和递归神经网络 | 图像生成任务,如图像风格迁移、超分辨率和图像分割 |
递归神经网络通常用于自然语言解析、语义分析等任务。RNTN 是一种经典的递归神经网络结构,用于处理树形结构的数据。它递归地应用 LSTM 来处理树的节点,从而计算整个树的表示。
RMSNorm
RMSNorm发现LayerNorm的中心偏移没什么用。将其去掉之后,效果几乎不变,但是速度提升了40%,注意除了没有减均值,加偏置以外,分母上求的RMS而不是方差。公式如下所示: