Batch Normalization、Layer Normalization、Weight Normalization

Batch Normalization 

原理

Batch Norm的思路是调整各层的激活值分布使其拥有适当的广度

原理:(在反向传播的过程中乘了上一层的输出,当每层的输出都小于1时就会造成梯度消失,大于1时会造成梯度爆炸)BN对每一层的输出都做了标准化使得原本会减小的activationscale变大。

在训练中,BN的使用使得一个mini-batch中的所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果。这句话什么意思呢?意思就是同样一个样本的输出不再仅仅取决于样本本身,也取决于跟这个样本属于同一个mini-batch的其它样本。同一个样本跟不同的样本组成一个mini-batch,它们的输出是不同的(仅限于训练阶段,在inference阶段是没有这种情况的)。我把这个理解成一种数据增强:同样一个样本在超平面上被拉扯,每次拉扯的方向的大小均有不同。不同于数据增强的是,这种拉扯是贯穿数据流过神经网络的整个过程的,意味着神经网络每一层的输入都被数据增强处理了。

在测试阶段的均值和方差采用训练阶段所有batch的均值和方差的均值。

BN中线性层的作用:使BN既能改变样本的分布,又能保持分布不变,增加了模型的容量。

作用

(1)加速收敛:我们在做数据预处理时一般会对输入数据做归一化,但是归一化的数据前向传播过程中分布会发生改变变得不再是归一化的数据,bn的作 用就是把这个改变的分布重新拉回来变成归一化数据。

(2)减少少梯度消失(不那么依赖初始权重):由于我们在训练神经网络时采用的是小批量梯度下降法,BN在当前层会对这批数据通过激活函数前的输出作归一化,归一化后的数据接近正太分布,大部分数据都分布0附近,而一般激活函数的输入在0附近有比较大的梯度(所以BN一般放在激活函数前)。

(3)降低过拟合:由于BN对这小批量的数据作了归一化,所以一个样本的输出不再仅仅取决于样本本身,也取决于跟这个样本属于同一个mini-batch的其它样本,可以降低异常样本的干扰。

缺点

1. BN更适用于CNN,不适合用于RNN,transform

2. BN要求不同batch样本分布尽可能相似且batch比较大,对于样本分布不断变化的流式训练场景,BN不适用

3. 由于BN serving时用的是global mean 和 var,存在训练和预测不一致的问题

 

Layer Normalization

原理

BN时在一个mini batch内同个权重做归一化,而LN是对一个样本不同权重做归一化

作用

1. 直观理解来BN的做法更有效,但是在NLP的RNN、transform中LN更适合,主要原因是NLP中如:“我是中国人”这个样本,不同词之间存在内在联系,BN会跑坏这种内在联系,而LN不会

 

Weight Normalization

原理

作用

1. 提高训练稳定性

缺点

1. 会拖慢训练速度

 

参考博客

https://www.cnblogs.com/guoyaohua/p/8724433.html

https://www.jianshu.com/p/888d38fb6a86

https://www.cnblogs.com/gczr/p/12731920.html

https://blog.csdn.net/pipisorry/article/details/95906888/

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

 

posted @ 2019-06-24 21:25  AI_Engineer  阅读(387)  评论(0)    收藏  举报