pytorch模型训练技巧-BN层的作用

BN,Batch Normalization,是批量样本的归一化。

1、BN 层对数据做了哪些处理?

如果没有 BN 层,深度神经网络中的每一层的输入数据或大或小、分布情况等都是不可控的。有了 BN 层之后,每层的数据分布都被转换在均值为零,方差为1 的状态,这样每层数据的分布大致是一样的,训练会比较容易收敛。

2、BN 层为什么能防止梯度消失和梯度爆炸?

  • 梯度消失

对于 Sigmoid 激活函数,其导数最大值为 0.25. 神经网络在反向传播更新参数时,执行链式求导。假如网络有 n 层,那么第一层的梯度将会小于 (0.25 * 权重)的 n 次方,学习速率相对较慢,而网络最后一层只需要对自身求导一次,梯度比较大,学习速率快。所以,后面的几层网络在学习,而前面的网络几乎停滞了,训练不动。

  • 梯度爆炸

第一层偏移量的梯度 = 激活层斜率1 * 权值1 * 激活层斜率2 * … 激活层斜率(n-1) * 权值(n-1) * 激活层斜率n,假如激活层斜率均为最大值 0.25,每层权重值大于 4,这样梯度就会呈指数增加。

而 BN 能够很好地控制权重值的更新幅度。

3、BN 为什么能够防止过拟合?

BN 的使用使得一个 minibatch 中所有样本都被关联在了一起,因此网络不会从某一个具体的训练样本中生成确定的结果。也就是说,即使输入同一个训练样本,每次的输出都是不同的,而且每次网络都是随机取 batch,这样就会使得整个网络不会朝某一个方向使劲学习,一定程度上避免了过拟合。

4、BN 层在网络中的位置

从上图可以看出:BN 层在线性层或卷积层之后,在非线性激活函数之前,这是为什么呢?首先,全连接和卷积层的输出一般是一个对称,非稀疏的一个分布,更加类似高斯分布,对它们进行归一化会产生更加稳定的分布。

其次,如果数据先经过 Relu 等激活函数,那么数据集的分布同样不可控,再对它进行 BN 处理,无法达到我们想要的稳定分布的效果。

5、BN 层的数据集均值怎么计算?

训练和推理时的计算方法是不一样的。

训练时的数据集是 minibatch,而推理时的数据集是所有的 minibatch,那是不是得记录训练过程中产生的所有 minibatch 的均值呢?答案是否定的,用滑动平均值就能解决该问题。

6、BN为什么能很好的控制权重层的更新幅度?

作者​当神经网络的输入值的分布不同时,我们可以理解为输入特征值的scale差异较大,与权重进行矩阵相乘后,会产生一些偏离较大的差异值;而深度学习网络需要通过训练不断更新完善,那么差异值产生的些许变化都会深深影响后层,偏离越大表现越为明显;因此,对于反向传播来说,这些现象都会导致梯度发散,从而需要更多的训练步骤来抵消scale不同带来的影响,也就是说,这种分布不一致将减缓训练速度。
而BN的作用就是将这些输入值进行标准化,降低scale的差异至同一个范围内。这样做的好处在于一方面提高梯度的收敛程度,加快模型的训练速度;另一方面使得每一层可以尽量面对同一特征分布的输入值,减少了变化带来的不确定性,也降低了对后层网络的影响,各层网络变得相对独立,缓解了训练中的梯度消失问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值