关于BN(Batch Normalization)的一些归纳和总结

写这篇的目的是因为,发现自己理解的BN不是很透彻,写一篇总结总结。

一、归一化(Normalization)的概念

Normalization是一个统计学中的概念,它并不是一个完全定义好的数学操作(如加减乘除)。它通过将数据进行偏移和尺度缩放调整。在数据预处理时是非常常见的操作,在网络的中间层如今也很频繁的被使用。

比如:

  • 线性归一化:最简单来说,归一化是指将数据约束到固定的分布范围,比如8位图像的0~255像素值,比如0~1。

  • 零均值归一化:也是一个常见的归一化方法,被称为标准化方法,即每一变量值与其平均值之差除以该变量的标准差(正态分布变为标准正态分布的公式)。

注:这里列举两种归一化,其实还有很多种归一化方法。

综上,归一化数据的目标,是为了让数据的分布变得更加符合期望,增强数据的表达能力。

在深度学习中,因为网络的层数非常多,如果数据分布在某一层开始有明显的偏移,随着网络的加深这一问题会加剧(这在BN的文章中被称之为internal covariate shift),进而导致模型优化的难度增加,甚至不能优化。所以,归一化就是要减缓这个问题。

(深度学习的本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。

对于深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。)

 

二、BN归纳总结

(1)BN的目标:防止“梯度弥散”

关于梯度弥散,比如:0.9^{30}\approx 0.04。在BN中,是通过将激活(activation)规范为均值和方差一致的手段使得原本会减小的激活(activation)的scale变大。可以说是一种更有效的局部响应归一化(local response normalization)方法。

(2)BN的适用情景:

  • 在神经网络训练时遇到收敛速度很慢。
  • 梯度爆炸等无法训练的状况时可以尝试BN来解决。
  • 在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。

(3)BN用在哪里:

BN可以应用于网络中任意的activation set。文中(Google在ICML发布)指出BN应作用在非线性映射前,即对x=Wu+b做规范化。另外对CNN的“权值共享”策略,BN还有其对应的做法(详见文中3.2节)。

(4)BN的地位:与激活函数层、卷积层、全连接层、池化层一样,BN(Batch Normalization)也属于网络的一层。

(5)BN的原理:

一般采用批梯度下降方法对深度学习进行优化,这种方法把数据分为若干组,按组来更新参数,一组中的数据共同决定了本次梯度的方向,下降时减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也下降了很多。

Batch Normalization(简称BN)中的batch就是批量数据,即每一次优化时的样本数目,通常BN网络层用在卷积层后,用于重新调整数据分布。假设神经网络某层一个batch的输入为X=[x1,x2,...,xn],其中xi代表一个样本,n为batch size。

首先,我们需要求得mini-batch里元素的均值:

接下来,求取mini-batch的方差:

这样我们就可以对每个元素进行归一化。

最后进行尺度缩放和偏移操作,这样可以变换回原始的分布,实现恒等变换,这样的目的是为了补偿网络的非线性表达能力,因为经过标准化之后,偏移量丢失。具体的表达如下,yi就是网络的最终输出。

假如gamma等于方差,beta等于均值,就实现了恒等变换。

从某种意义上来说,gamma和beta代表的其实是输入数据分布的方差和偏移。对于没有BN的网络,这两个值与前一层网络带来的非线性性质有关,而经过变换后,就跟前面一层无关,变成了当前层的一个学习参数,这更加有利于优化并且不会降低网络的能力。

对于CNN,BN的操作是在各个特征维度之间单独进行,也就是说各个通道是分别进行Batch Normalization操作的。

如果输出的blob大小为(N,C,H,W),那么在每一层normalization就是基于N*H*W个数值进行求平均以及方差的操作,记住这里我们后面会进行比较。

 

参考并感谢以下作者:

http://makaidong.com/shixiangwan/137429_9138294.html

https://www.zhihu.com/question/38102762/answer/85238569

https://www.zhihu.com/question/38102762/answer/607815171

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值