BatchNormalization 与 LayerNormalization 区别讲解

BN

BatchNormalization于2015年被谷歌提出,简称BN。

计算方式如下:
BatchNormalization 与 LayerNormalization 区别讲解_第1张图片
就是对每个batch_size 的数据进行标准化,变成均值为0,标准差为1的数据,消除特征间的量纲差别。
同事还引入了两个可学习的参数: β 和 γ
分别为 scala 和shift,让模型学习适应的分布。

值得注意的是,BN是对不同batch内样本的同一个特征进行归一化,例如有身高体重和年龄三个特征。

BatchNormalization 与 LayerNormalization 区别讲解_第2张图片

是一种“列缩放”。

BN能够解决梯度弥散。通过将输出进行适当的缩放,可以缓解梯度消失的状况。

拿sigmoid激活函数距离,从图中,我们很容易知道,数据值越靠近0梯度越大,越远离0梯度越接近0,我们通过BN改变数据分布到0附近,从而解决梯度消失问题。

BatchNormalization 与 LayerNormalization 区别讲解_第3张图片

LN

LayerNormalization则是在Transformer被所有人广泛熟知的。从而广泛用于NLP中。

其是针对样本的不同维度特征进行归一化。
在nlp中,我们输入为(batch_size, seq_len,dim)

LN是在句子内部的每个token的embedding进行归一化,
BatchNormalization 与 LayerNormalization 区别讲解_第4张图片

BN 感觉是对样本内部特征的缩放,LN 是样本直接之间所有特征的缩放。

因为NLP中不同句子长度大小不同,用BN会导致 均值不同batch间方差非常大,并且在预测时需要计算全局均值方差,这样会更加不准,而LN则不需要计算全局,只需要内部计算即可。

为啥BN不适合NLP ?

是因为NLP模型训练里的每次输入的句子都是多个句子,并且长度不一,那么 针对每一句的缩放才更加合理,才能表达每个句子之间代表不同的语义表示,这样让模型更加能捕捉句子之间的上下语义关系。如果要用BN,它首先要面临的长度不一的问题。有时候batch size 越小的bn 效果更不好。

参考文献:

https://zhuanlan.zhihu.com/p/74516930

https://mp.weixin.qq.com/s/QFpolIXvOQjUsPAngqvqmg

你可能感兴趣的:(深度学习,NLP,scala,spark,big,data)