Batch Normalization论文解读+详细面经

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

batch normalization(BN)

面试前一定要看原论文

目录:

  1. 提出原因
  2. 作用
  3. 前向传播白化操作
  4. BN原理
  5. 细节(两个参数和卷积层BN)
  6. bn缺点
  7. 源码解读
  8. reference

正文

  1. 提出原因(易错,bn提出不是为了解决梯度问题!!是为了解决Internal Covariate Shift)
    训练的本质是学习数据分布。如果训练数据与测试数据的分布不同会降低模型的泛化能力。因此,应该在开始训练前对所有输入数据做归一化处理。
    而在神经网络中,因为每个隐层的参数不同,会使下一层的输入发生变化,从而导致每一批数据的分布也发生改变;致使网络在每次迭代中都需要拟合不同的数据分布,增大了网络的训练难度(需要调小学习率和小心的初始化)与过拟合的风险。

  2. 作用:(要会详细解释为什么)
    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会使参数的变化更为稳定。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值