关于Normalization的一些学习

1.Batch Normalization 

首先,我们要清楚cnn的反向传播中更新参数用到的梯度下降,是基于mini-batch SGD。mini-batch就表示有一定的batch size(>1)。实验发现当batch size<8时神经网络的输出误差会显著增大。对于Batch Normalization的应用,举例来说:

一个feature map 为k*h*w大小,k表示通道数,h表示特征图的高,w表示特征图的宽,一个卷积层为m*k*f*f大小,m表示卷积核的个数,f表示卷积核的长或宽。对一个feature map 卷积处理后若尺寸不变就得到m*h*w, 而batch size中包含n个feature map,则对于一个mini-batch,卷积一次就会产生n个m*h*w,而Batch Normalization就是对一个集合S中所有数求平均值u和标准差\sigma,然后

通过t = \frac{x-\mu }{\sigma }标准化,x_{normal} = \gamma t+\beta,x_{normal}表示标准化后的像素点上的值,x表示未标准化的像素值。而这个集合S就表示n个feature map中每个的第i层通道的h*w的集合,i表示0、1、2...m。则经过一次Batch Normalization 就会得到标准化后的n个m*h*w。

2.Batch Normalization的优点和缺点:

优点:加快模型收敛速度,引入随机噪声增强模型泛化能力。

缺点:训练时和预测时的统计量不一致,即集合S不一致,训练时是mini-batch输入,预测时是一张一张输入。

3.解决方式:

(1)Layer Normalization

这种方式就是设置集合S为一个feature map的m个通道中所有层的h*w的像素值,当输入为一张图时,而且这种方式用在rnn中效果较好。但是在cnn下不如Batch Normalization和Group Normalization等模型。

(2)Instance Normalizatin

这种方式是设置集合S为m个通道中一个通道上h*w的像素值。这种方式仅适用于cnn,对于mlp(全连接网络)和rnn不适用,因为按照这种方式,就只剩下一个神经元了,无法形成集合S。

这种方式应用于图片生成类比如图片风格转换效果是明显优于BN的,但在图像分类任务上效果不如BN。

(3)Group Normalization

该种方式是Layer Normalization的变种,将一个feature map的m个通道分组,则集合S为一个组的所有像素值。

该种方式在要求Batch Size 比较小的场景下或物体检测/视频分类等场景下效果是优于BN的。

4.Normalization的Re-Scaling不变性

 

权重矩阵

Re-Scaling 

不变性

权重向量

Re-Scaling

不变性

数据

Re-Scaling

不变性

BN 不变 不变 不变
LN 不变 变化 不变
IN 不变 不变 不变
GN 不变 变化 不变

5.BN为何有效

张俊林老师认为:Normalization通过对激活值进行正态分布化的参数重整,产生参数Re-Scaling不变的效果,因此缓解梯度消失或梯度爆炸问题,与其对应的重整后的损失曲面及梯度也因此变得更平滑,更有利于SGD寻优找到问题好的解决方案。

 

 

 

张俊林老师的文章写的通俗易懂,我读完获益匪浅,遂立即做了笔记,再次感谢张俊林老师的分享!

 

 

 

 

 

 

 

 

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