关于Batch Normalization(批归一化)的理解

近期将Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift读了两遍,参考了几篇博客,现将自己的理解总结如下。

它的好处:
最主要的减少梯度消失,加快收敛速度。
然后允许更大的学习率、不需要dropout、减少L2正则、减少扭转图像(其实都是第一个好处带来的)。

阅读后难理解的点在两个:
1、为什么通过每层的归一化,减少内部协变量转移(Internal Covariate Shift)就可以加速训练?
2、归一化后又引入两个参数,而这两个参数的极端情况是又会将分布拉回原先状态。这是什么道理?

对于第一点,大牛们发现内部协变量转移(激活值的分布随着网络训练时参数的变化而变化)会导致激活值的分布趋于非线性饱和区,就是sigmod函数两头梯度几乎为0的趋于,这就会导致梯度消失。LeCun在文章Gradientbased learning applied to document recognition中提出过如果输入数据白化可加速网络训练。所以BN的提出者就想能否将每层的激活值都进行归一化,将它们拉到均值为0方差为1的区域,这样大部分数据都从梯度趋于0的区域变换至激活函数中间梯度较大的区域,从而解决了梯度消失的问题。这样梯度变大了,网络更新快,训练变快了。具体表现就是达到相同的正确率迭代次数更少,迭代相同次数时正确率会高(论文中使用MNIST做的实验)。

对于第二点,论文中提出进行归一化以后会改变原始数据的分布,这样的话网络每层的输出会不能得到很好的表达,因此引入两个参数进行调整,而且这两个参数是网络自己训练学习。读了两篇博客(有转载),觉得有一种解释比较易接受。就是在归一化后大部分数据被拉直激活函数中间的线性区域,但对于深层网络来说多层线性激活等价于一层没有意义,所以我们并不希望激活是线性的。所以我们需要在非线性和梯度较大这两点之间做个权衡,认为去设定可能不好,所以出现了两个训练学习的参数,让网络自己权衡利弊,自己去找准激活值的位置。
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值