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和标准差,然后
通过标准化,,表示标准化后的像素点上的值,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寻优找到问题好的解决方案。
张俊林老师的文章写的通俗易懂,我读完获益匪浅,遂立即做了笔记,再次感谢张俊林老师的分享!