关于BN层的一点理解

一直以来对BN层两个学习参数belta和gamma不太理解,今天又在知乎问题上看到了“请问batch_normalization做了normalization后为什么要变回来?”这个问题,题主好像跟我之前想的一样(笑)。于是认真查阅了相关资料,得到以下一点见解:

 Internal Covariate Shift(ICS)[1]:对 DNN 某一层,随着 GD 训练的过程中参数的改变,该层的输出数据的分布可能会改变;此时,对于下一层,相当于输入数据的分布改变了,这就类似于 Covariate Shift。这种输入数据分布的改变,可能会使 DNN 的难以学习到好的参数,从而影响 DNN 的效果。

比如在训练阶段的t1时刻,第i层输出范围(分布)在0~1之间,随着训练的推移,t2时刻第i层的输出范围变化到4~10,这个现象对与第i+1层的学习是不利的,造成了其学习困难,缓慢甚至无法收敛到最优(具体缺点[1]中说的比较详细)。其实0~1的范围已经“够用”了,毕竟0~1之间存在了无穷多个有理数,因此我们希望第i层能保持这个输出分布,故有了bn层,先将其输出归一化到0均值1方差,再通过可学习参数将其分布调整至某一合适的位置。

这样不仅预防了梯度消失/爆炸等问题,还不用关心非线性层的权重初始化,学习率也可以设置大一点。

同时,因为“batch”,而不是所有数据的Normalization,Batch的分布会带一些误差,起到了Regulation的作用,因此可以少用dropout等正则化手段了。

[1]https://zhuanlan.zhihu.com/p/26682707

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值