动机
深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化。另一方面,深度神经网络一般都是很多层的叠加,每一层的参数更新都会导致上层的输入数据在输出时分布规律发生了变化,并且这个差异会随着网络深度增大而增大。
原理
BN把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布。这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。经过BN后,目前大部分Activation的值落入非线性函数的线性区内,其对应的导数远离导数饱和区,这样来加速训练收敛过程。
优缺点
BN优点?
a、加快神经网络的训练时间。BN强行拉平了数据分布,它可以让收敛速度更快。使得总的训练时间更短。
b、容忍更高的学习率(learning rate)和初始化权重更容易。对于深层网络来说,权重的初始化要求是很高的,而BN能够动态的调整数据分布,因此初始化的要求就不像以前那么严格了。
c、可以支持更多的损失函数。有些损失函数在一定的业务场景下表现的很差,就是因为输入落入了激活函数的死亡区域——饱和区域。而BN的本质作用就是可以重新拉正数据分布,避免输入落入饱和区域,从而减缓梯度消失的问题。
d、提供了一点正则化的作用,可能使得结果更好。BN在一定的程度上起到了dropout的作用,因此在适用BN的网络中可以不用dropout来实现。
BN不足
a、BN对于batch_size的大小还是比较敏感的,batch_size很小的时候,其梯度不够稳定,效果反而不好。如果batchsize太小,则计算的均值、方差不足以代表整个数据分布;
b、BN对于序列网络,RNN、lstm等模型的效果并不好。对于RNN来说,sequence的长度是不一致的,换句话说RNN的深度不是固定的,不同的time-step需要保存不同的statics特征,可能存在一个特殊sequence比其他sequence长很多,这样training时,计算很麻烦 BN不适用于RNN等动态网络,适用于CNN
针对以上BN的不足,主要是BN应用到RNN、LSTM等网络上效果不好的缺点,研究人员提出了LN。在继承了BN的优点上,还有另外2个优点:
1、LN能够很好的应用在RNN、lstm等类似的网络上。
2、LN是针对一层网络所有的神经元做数据归一化,因此对batch_size的大小并不敏感。
区别
Batch Normalization 的处理对象是对一批样本, Layer Normalization 的处理对象是单个样本。Batch Normalization 是对这批样本的同一维度特征做归一化,因此有多少维度就有多少个均值和方差;Layer Normalization 是对这单个样本的所有维度特征做归一化,因此一个batch中就有batch_size个均值和方差。
参考: https://blog.csdn.net/HUSTHY/article/details/106665809 https://zhuanlan.zhihu.com/p/311165133 https://zhuanlan.zhihu.com/p/113233908
|