Batch Normalization与Layer Normalization

batch normalization和layer normalization,顾名思义其实也就是对数据做归一化处理——也就是对数据以某个维度做0均值1方差的处理。 所不同的是,BN是在batch size维度针对数据的各个特征进行归一化处理;LN是针对单个样本在特征维度进行归一化处理。

在机器学习和深度学习中,有一个共识:独立同分布的数据可以简化模型的训练以及提升模型的预测能力——这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。

BN算法

Batch Normalization与Layer Normalization_第1张图片
公式的后面还有一个反向操作, 将 normalize 后的数据再扩展和平移. 这是为了让神经网络自己去学着使用和修改这个扩展参数 gamma, 和 平移参数 β, 这样神经网络就能自己慢慢琢磨出前面的 normalization 操作到底有没有起到优化的作用, 如果没有起到作用, 我就使用 gamma 和 belt 来抵消一些 normalization 的操作.

BN 添加位置

Batch normalization 的 batch 是批数据, 把数据分成小批小批进行 stochastic gradient descent. 而且在每批数据进行前向传递 forward propagation 的时候, 对每一层都进行 normalization 的处理
Batch Normalization与Layer Normalization_第2张图片

BN优点:

1.加快神经网络的训练时间。BN强行拉平了数据分布,它可以让收敛速度更快。使得总的训练时间更短。
2.容忍更高的学习率(learning rate)和初始化权重。对于深层网络来说,权重的初始化要求是很高的,而BN能够动态的调整数据分布,因此初始化的要求就不像以前那么严格了。

BN缺点:

1.BN对于batch_size的大小还是比较敏感的,batch_size很小的时候,其梯度不够稳定,效果反而不好。
2.BN对于序列网络,RNN、lstm等模型的效果并不好(在一个batch中,通常各个样本的长度都是不同的,当统计到比较靠后的时间片时,这时只有少数样本还有数据,基于这个样本的统计信息不能反映全局分布,所以这时BN的效果并不好。)

LN算法

LN是一个独立于batch size的算法,所以无论样本数多少都不会影响参与LN计算的数据量,从而解决BN的两个问题。LN的做法:根据样本的特征数做归一化。归一化方法同BN,不再赘述。
Bert中所使用的LN源码(在embedding层后接layer normalization):
Batch Normalization与Layer Normalization_第3张图片

BN与LN的区别

BN与LN经过归一化再输入激活函数,得到的值大部分会落入非线性函数的线性区,导数远离导数饱和区,避免了梯度消失,这样来加速训练收敛过程。

BN、LN可以看作横向和纵向的区别。BatchNorm就是通过对batch size这个维度归一化来让分布稳定下来。LayerNorm则是通过对Hidden size这个维度归一。

不完备的个人观点:Batch Normalization更适用于CV任务(CNN),Layer Normalization更适用于NLP任务 (RNN,transformer等序列化任务)

关于BN与LN的知识点网上有很多,本文以上内容大部分来自于下述的参考文献,并根据自己的理解对相应内容进行了整理和总结,大家想看详细内容可参考下述相关链接。

参考文献:
模型优化之Layer Normalization
什么是批标准化 (Batch Normalization)
关于batch normalization和layer normalization的理解
batchNormalization与layerNormalization的区别

你可能感兴趣的:(batchNorm,layerNorm,深度学习)