深度学习中Batch Normalization和Layer Normalization区别

BatchNorm:batch方向做归一化,计算NHW的均值
LayerNorm:channel方向做归一化,计算CHW的均值
深度学习中Batch Normalization和Layer Normalization区别_第1张图片
Why use Normalization?
 神经网络学习过程的本质就是为了学习数据分布,如果我们没有做归一化处理,那么每一批次训练数据的分布不一样,从大的方向上看,神经网络则需要在这多个分布中找到平衡点,从小的方向上看,由于每层网络输入数据分布在不断变化,这也会导致每层网络在找平衡点,显然,神经网络就很难收敛了。当然,如果我们只是对输入的数据进行归一化处理(比如将输入的图像除以255,将其归到0到1之间),只能保证输入层数据分布是一样的,并不能保证每层网络输入数据分布是一样的,所以也需要在神经网络的中间层加入归一化处理。


BN:

 BN是在一个batch中计算均值和方差,BN可以简化并优化使得非常深的网络能够收敛。但是BN却很受batch大小的影响,BN需要一个足够大的批量,小的批量大小会导致对批统计数据的不准确率提高,显著增加模型的错误率。
深度学习中Batch Normalization和Layer Normalization区别_第2张图片
 后面增加的一个线性变换,可以看成一个变化重构操作,用来恢复出这一层网络所要学到的分布。考虑到简单地对每一层使用归一化,可能会影响层所要表达的内容。所以使用一个线性变换对归一化的结果进行缩放和偏移。(γ和β是训练的参数)
 针对每个channel我们都有一组γ,β,所以可学习的参数为2*C
 当batch size越小,BN的表现效果也越不好,因为计算过程中所得到的均值和方差不能代表全局。

小小补充
神经网络目的就是通过训练模型,可以让模型能够最好的拟合数据的真实分布。在训练时,训练数据经过层间操作,会出现数据分布的微小偏移,随着网络层数的加深,这种偏移量与label的差别逐渐扩大,导致模型需要学习调整样本的分布,训练效率低下。BN将每层的数据进行标准化,并通过可学习参数γ和β两个学习参数来调整这种分布。这样会缓解内部协变量偏移的问题,大大增加了训练速度。
 BN可以起到和dropout一样的正则化效果,在正则化方面,一般全连接层用dropout,卷积层用BN。



LN:

 1.LN的计算就是把每个CHW单独拿出来归一化处理,不受batchsize 的影响
 2.常用在RNN网络,但如果输入的特征区别很大,那么就不建议使用它做归一化处理





其他的Normalization操作遇到了再补充…

参考:
【1】深度学习之9——逐层归一化(BN,LN)
【2】深度学习中的五种归一化(BN、LN、IN、GN和SN)方法简介

你可能感兴趣的:(机器学习理论知识,人工智能,深度学习)