NLP学习笔记3——Normalization


Normalization

我们最希望输入网络模型中的数据具有什么样的特点?

回答是:“独立同分布”。

独立同分布的数据可以简化常规机器学习模型的训练、提升机器学习模型的预测能力,已经是一个共识。因此,在把数据喂给机器学习模型之前,“白化(whitening)”是一个重要的数据预处理步骤

白化一般包含两个目的:

(1)去除特征之间的相关性 —> 独立(每次抽样之间是没有关系的,不会相互影响);

(2)使得所有特征具有相同的均值和方差 —> 同分布(每次抽样,样本都服从同样的一个分布)。

白化最典型的方法就是PCA。在传统的机器学习方法中,对数据进行预处理之后,由于模型深度太浅,故可以满足数据是独立同分布的特征。但是对于深度学习模型,就会出现一个问题:经过卷积层、池化层的层层叠加,层层改变,在高层网络中,数据就会失去原始数据的特征,其数据的分布特征也会相应的改变。此问题被google总结为Internal Covariate Shift。

那么ICS会对深度神经网络有什么影响呢?

其一,上层参数需要不断适应新的输入数据分布,降低学习速度

其二,下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止

其三,每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎。

Batch Normalization

Batch Normalization

针对单个神经元进行,利用网络训练时一个 mini-batch 的数据来计算该神经元 x_i的均值和方差,因而称为 Batch Normalization

适用的场景

每个 mini-batch 比较大,数据分布比较接近。在进行训练之前,要做好充分的 shuffle. 否则效果会差很多。

存在问题

  1. BN特别依赖Batch Size;当Batch size很小的时候,BN的效果就非常不理想了。在很多情况下,Batch size大不了,因为你GPU的显存不够。所以,通常会有其他比较麻烦的手段去解决这个问题,比如MegDet的CGBN等;
  2. BN对处理序列化数据的网络比如RNN是不太适用的。
  3. BN只在训练的时候用,inference的时候不会用到,因为inference的输入不是批量输入。

Layer Normalization

Layer Normalization

方式:综合考虑一层所有维度的输入,计算该层的平均输入值和输入方差,然后用同一个规范化操作来转换各个维度的输入。

适用的场景

LN 针对单个训练样本进行,不依赖于其他数据,因此可以避免 BN 中受 mini-batch 数据分布影响的问题,可以用于 小mini-batch场景、动态网络场景和 RNN,特别是自然语言处理领域。此外,LN 不需要保存 mini-batch 的均值和方差,节省了额外的存储空间。

BN vs LN

BN 的转换是针对单个神经元可训练的——不同神经元的输入经过再平移和再缩放后分布在不同的区间,而 LN 对于一整层的神经元训练得到同一个转换——所有的输入都在同一个区间范围内。如果不同输入特征不属于相似的类别(比如颜色和大小),那么 LN 的处理可能会降低模型的表达能力。


文章作者: Passerby-W
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Passerby-W !
评论
  目录