Batch Norm,Layer Norm,Group Norm

Normalization

在深度学习中我们通常会使用 Normalization 来对数据进行前处理,让数据在经过处理后可以满足某种特定的分布,大体上落入一定的数值范围,从而消除对数据的范围区间对建模的影响。经过归一化的数据得以让网络可以快速的进行收敛。
所以在深度学习中,由于上面归一化的特性,我们希望输入能够满足某一分布,于是这里说的并不是某一个特征图能够满足某一分布,而是整个训练样本所对应的特征图都需要慢满足分布规律,接下来我们来介绍三种归一化:Batch Normalization,Layer Normalization 以及 Group Normalization。

Batch Normalization

Batch Normalization 顾名思义就是批量归一化,我们在图像预处理的过程中一批量为单位对图像的某一维度进行归一化处理,使得神经网络可以更加快的进行收敛。而 Batch Normalization 的目的是让特征图满足均值为0,方差为1的分布。
以一张正常的 RGB 三通道的标准图像进行分析,对它使用 Batch Normalization 就是对 R 通道,G 通道以及 B 通道分别做归一化处理,当然理论上是需要对所有的数据集做 Normalization,但是这样是不实际的,因为算法所面对的都是未知的数据,他的预测才是有效的,所以 Batch Normalization 就是对这个数据集的 Batch 层面做归一化,当 batch size 够大的话就越接近整个数据集的分布,然后再将所有 Batch 得到的值取平均,然后在预测和验证中就能使用这个近似的平均值来进行标准化处理。

Layer Normalization

Layout Normalization 顾名思义就是层归一化,他通常使用在 NLP 领域,这是为什么呢?在语义模型中每个 Batch 中的序列长度是不一致的,具体划分批量和层是怎么样去做的,我们可以看到下面的两张图:
Batch Norm,Layer Norm,Group Norm_第1张图片
我理解的情况是:在 Batch Normalization 的情况下,我们截取下来的范围实际真正的数据范围是参差不齐的,然后我们根据这一系列数据去计算这一小批量的均值和方差的时候抖动就会较大,并且当预测时遇到了很长的序列,但是我们训练的时候序列都很短,那这时候全局的均值和方差就没有实际的意义了,而在 Layer Normalization 的情况下,我们每次计算的均值方差都是基于每个样本去做的,所以结果相对稳定,不会大程度受序列长度的影响。

Group Normalization

Group Normalization 顾名思义就是组归一化,讲解他之前,我们先来看一下 Batch Normalization 的缺点:Batch Normalization 他需要较大的 batch size,如果当前的 batch size 较小的话他的效果就没有那么好了。
Batch Norm,Layer Norm,Group Norm_第2张图片

具体的效果如上图所示,Batch Normalization 随着 batch size 的缩小,它所对应的 error 是不断增加的,而 Group Normalization 的 error 并没有随着 batch size 的变化而变化。并且我们可以发现 Batch Normalization 在 batch size 小于 16 的时候 error 是大于 Group Normalization 的。所以当我们的 batch size 由于一些原因无法设置较大的值时,我们就可以选择 Group Normalization 来代替 Batch Normalization。
而 Group Normalization 是如何进行实现的呢?它是将图片的最后一个维度 channel 将它均分为 num_group 份,然后对这 num_group 份数据求均值和方差。

总结

其实不管是 Batch Normalization,Layer Normalization 还是 Group Normalization 最后的本质都是想让样本处于某一个分布规律,所以说当我们得知一个 Batch 中每个样本的长度是不一致的,我们就可以使用 Layer Normalization;如果当前的 batch size 较小的话,我们就可以使用 Group Normalization;反之较大我们就可以使用 Batch Normalization。

你可能感兴趣的:(深度学习,batch,深度学习,机器学习)