深度学习-Normalization layers

发布 : 2019-05-28 浏览 :

Normalization 层主要解决的问题是希望输入数据能大致分布在相同的空间内,从而让训练更好更快的收敛。 最先提出的Batch normalization 层对于深度网络的收敛起到了很大的促进作用,于是后续又有多种normalization层提出,这里总结下normlization的相关知识。

为什么会用到BN层?

深度网络中,对数据多次线性和非线性变换,所以可能刚开始处于相同空间内的样本,比如图像数据,经过若干层后的输出差距非常大,那么这些差距较大的数据可能处于不同的数据空间,继而导致更高层需要不断的更新参数去适应每一种分布,使得训练比较难收敛。

Google称这种现象为Internal Covariate Shift, 即网络中间层的输入数据空间分布发生变化, 这种变化带来的问题:

  • 高层的参数需要较大的迭代更新以适应新的数据分布, 使得模型收敛较慢
  • 每层的参数更新对其它层参数影响较大,而且这种影响是累积的
  • 可能导致低层输入较小变化不会反映到最后输出中,导致上层的激活函数处于饱和区,学习过早停止。

而BN层的提出是希望将每一层的输出通过归一化的形式缩放移动到相同的空间分布中,从而使得模型更快的收敛。 这种思想其实对应于传统方法中的白化操作

BN层的数学形式

这个操作可以分成两步来看。

  • 通过中心化和标准化将上一层输出数据$x$ 转换成标准正态分布, 即在这次normalization过程中,参与运算的样本都能处于相同的分布空间
  • 将标准正态分布再进行适当的缩放和平移形成新的数据分布空间,毕竟标准正态分布的约束过于强硬,很多情形下并不能保证成立。

第二次变换的目的在于构建更好地依赖数据的分布空间而不是简单粗暴地全部设定为标准分布,另外还有一点重要的意义在于,如果只是将数据分布映射到标准分布,那么其大多数数据都处于激活函数的的线性区,比如sigmoid函数中心点附近的区域。而第二次变换则可能将数据映射到非线性区域,进而保留模型非线性的建模能力。

BN层实际作用

标准白化操作的目的是希望训练样本能‘独立同分布’, 但BN层并不能严格保证样本同分布,只能说分布在一个相同的较大的空间中。BN真正发挥作用的原因在于其能够在网络训练过程中,让优化空间变得更加平滑。

How Does Batch Normalization Help Optimization?

BN能在一定程度上防止梯度消失或者梯度爆炸,提高训练时模型对于不同超参的鲁棒性。

另外值得注意的是: BN对于小批次的训练效果并不好。 这个主要原因在于batch内的数据太少的话,很难刻画总体样本的大致分布。 另外BN使用时需要将样本随机打乱,这样才能更好地刻画整体分布。

Batch Normalization: Accelerating Deep Network Training by Reducing

主流的Normalization方法

normalization

假设上一层的输出数据大小是$N\times C\times H\times W$, 那么

Batch Norm: 在batch方向上做归一化,计算的是$NHW$的归一化

Layer Norm: 在channel方向做归一化,即每个样本输出元素做归一化处理, 算的是$CHW$的归一化

Instance Norm: 在每一层feature map上归一化, 即每个样本的每一层的$H*W$元素进行归一化

GroupNorm: 这个是Layer Norm的更泛化的方法,将通道划分成多个group, 每个group内进行单独的LayerNorm, 当group数目等于channel数目时等价于Instance norm, 当group=1时就是Layer Norm。

不同应用场景

BN

BN适用于batchsize较大, 且每个batch数据分布比较接近的场景。 BN采用的是平均滑动均值和方差。

LN

LN针对于单个样本进行归一化,避免了BN中batch分布于整体分布差距较大的情形, 适用于小batchsize的场景、动态网络场景和RNN, NLP领域。 LN不需要保存动态的均值和方差,节省空间。

BN归一化是对每一层的featuremap操作的, 而LN是对所有层的featmaps操作的,LN会让所有的通道都处于一个分布空间,BN不同通道可以处于不同空间。 BN相对于LN而言有更强的表征能力。

IN

IN 规范化在GAN和style transfer任务中要由于BN, IN和LN一样操作目标是单个样本,另外上面我们也说到LN是所有的通道规范化到相同空间,降低了模型表征能力, 而IN不同,他和BN一样对每一个通道单独操作。

为什么IN对于GAN和style transfer更有效的呢?https://www.cnblogs.com/hellcat/p/9735041.html

BN的计算是要受其他样本影响的,由于每个batch的均值和标准差不稳定,对于单个数据而言,相对于是引入了噪声,但在分类这种问题上,结果和数据的整体分布有关系,因此需要通过BN获得数据的整体分布。而instance norm的信息都是来自于自身的图片,相当于对全局信息做了一次整合和调整,在图像转换这种问题上,BN获得的整体信息不会带来任何收益,带来的噪声反而会弱化实例之间的独立性:这类生成式方法,每张图片自己的风格比较独立不应该与batch中其他的样本产生太大联系

GN

GN相当于与对IN和LN进行了泛化,是对BN的改善。能够处理BN针对于小batch表现不好的情形。

BN vs GN

本文作者 : zhouzongwei
原文链接 : http://yoursite.com/2019/05/28/normalization-layers/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 赏或者不赏,我都在这,不声不响

微信扫一扫, 以资鼓励

微信扫一扫, 以资鼓励

支付宝扫一扫, 再接再厉

支付宝扫一扫, 再接再厉

留下足迹