batch normalization(BN)
面试前一定要看原论文
目录:
- 提出原因
- 作用
- 前向传播白化操作
- BN原理
- 细节(两个参数和卷积层BN)
- bn缺点
- 源码解读
- reference
正文
-
提出原因(易错,bn提出不是为了解决梯度问题!!是为了解决Internal Covariate Shift)
训练的本质是学习数据分布。如果训练数据与测试数据的分布不同会降低模型的泛化能力。因此,应该在开始训练前对所有输入数据做归一化处理。
而在神经网络中,因为每个隐层的参数不同,会使下一层的输入发生变化,从而导致每一批数据的分布也发生改变;致使网络在每次迭代中都需要拟合不同的数据分布,增大了网络的训练难度(需要调小学习率和小心的初始化)与过拟合的风险。 -
作用:(要会详细解释为什么)
BN 是一种正则化方法(减少泛化误差),主要作用有:
1). 加速网络的训练(缓解梯度消失,支持更大的学习率)
2). 防止过拟合
3). 降低参数初始化要求,打乱样本顺序
4). 移除或使用较低的dropout。 dropout是常用的防止overfitting的方法,而导致overfit的位置往往在数据边界处,如果初始化权重就已经落在数据内部,overfit现象就可以得到一定的缓解。论文中最后的模型分别使用10%、5%和0%的dropout训练模型,与之前的40%-50%相比,可以大大提高训练速度。
5). 降低L2权重衰减系数。 还是一样的问题,边界处的局部最优往往有几维的权重(斜率)较大,使用L2衰减可以缓解这一问题,现在用了Batch Normalization,就可以把这个值降低了,论文中降低为原来的5倍
6). 取消Local Response Normalization层。 由于使用了一种Normalization,再使用LRN就显得没那么必要了。而且LRN实际上也没那么work。具体解释:
1). 加速网络的训练(缓解梯度消失,支持更大的学习率)
指较少的学习步骤获得相同的精度。
a)较大的学习率往往导致反向传播时造成梯度问题,困在最小处,batchnorm可以避免神经网络层中很小的参数变动在层数加深的过程中会积聚造成很大的影响;比如,在饱和激活函数,可以避免输入数据分布在饱和区域,而使得其尽量分布在线性区域;
b)另外,BN对参数scale有很强的适应性,在学习率很大时,可能使得参数的scale很大,在梯度下降时会放大梯度值,这可能使得模型爆炸;对于一个scaler a,

所以,大的权值会导致小的梯度,BN会使参数的变化更为稳定。- 防止过拟合
同样一个样本的输出不再仅仅取决于样本本身,也取决于跟这个样本属于同一个mini-batch的其它样本。同一个样本跟不同的样本组成一个mini-batch,它们的输出是不同的(仅限于训练阶段,在inference阶段是没有这种情况的)。我把这个理解成一种数据增强:同样一个样本在超平面上被拉扯,每次拉扯的方向的大小均有不同。不同于数据增强的是,这种拉扯是贯穿数据流过神经网络的整个过程的,意味着神经网络每一层的输入都被数据增强处理了。
- 防止过拟合
-
前向传播减小Internal Covariate Shift:
之前的研究表明如果在图像处理中对输入图像进行白化(Whiten)操作的话——所谓白化,就是对输入数据分布变换到0均值,单位方差的正态分布——那么神经网络会较快收敛,那么BN作者就开始推论了:图像是深度神经网络的输入层,做白化能加快收敛,那么其实对于深度网络来说,其中某个隐层的神经元是下一层的输入,意思是其实深度神经网络的每一个隐层都是输入层,不过是相对下一层来说而已,那么能不能对每个隐层都做白化呢?这就是启发BN产生的原初想法,而BN也确实就是这么做的,可以理解为对深层神经网络每个隐层神经元的激活值做简化版本的白化操作。
那么能不能只在在前向过程应用这些normalization,而在反向传播忽视它呢,答案是否定的。论文中给出了一个例子:


本文深入探讨BatchNormalization(BN)在深度学习中的作用,包括解决InternalCovariateShift问题,加速训练,防止过拟合等。文章详细解释了BN的原理,如何在训练和测试阶段应用,以及在卷积神经网络中的实施细节。
最低0.47元/天 解锁文章
5767

被折叠的 条评论
为什么被折叠?



