关于深度学习中的Batch normalization的理解

BN的原理

批规范化(Batch normalization)是深度学习中经常见到的一种训练trick,指在采用梯度下降法训练DNN时,对网络层中每个mini-batch的数据进行归一化,使其均值变为0,方差变为1,其主要作用是缓解DNN训练中的梯度消失/爆炸现象,加快模型的训练速度。
下面是作者原论文中的算法介绍:
这里写图片描述

最后的scale and shift操作是为了让因训练需要而特意加入的BN操作有可能恢复原来的输入分布,从而保证整个网络的容量(BN即有很大可能改变原输入也有可能保持原输入),其中 γ \gamma γ β \beta β是可学习的超参数。

BN的好处和原因

  1. 允许较大的学习率,加快模型收敛速度
    BN通过固定网络层输入(也即前一层的响应)的分布(标准正态)使优化过程中的解空间更平滑,从而确保了梯度更具预测性和稳定性,因此可以使用更大范围的学习率并获得更快的收敛速度。(参考BatchNorm是如何在深度学习优化过程中发挥作用的
  2. 避免深层网络的梯度消失或爆炸问题
    BN通过固定网络层输入的均值和方差,即使网络较深层的响应或梯度过小或过大时,也可通过BN的规范化作用将其缩放到一个比较合理的取值范围,从而避免梯度消失或爆炸问题。参考“深度学习中 Batch Normalization为什么效果好? - 魏秀参的回答 - 知乎”
    https://www.zhihu.com/question/38102762/answer/85238569
  3. 减少对参数初始化方法的依赖
    Xavier等参数初始化的目的是为了使网络各层的输入输出具有相同的统计分布,而BN直接对网络层构造标准正态分布的响应,能够达到同样的目的。

BN使用的注意点

  1. 是沿着数据的batch size方向做规范化。对于二维张量形式的数据X(N,D),即沿着dim=0方向计算均值和方差;对于四维张量形式的图像数据X(N,C,H,W),把它reshape成X(NHW,C),再沿着dim=0方向计算均值和方差,计算完之后再reshape回去,此时叫做Spatial BN。
  2. 测试阶段BN的均值和方差不再是基于batch计算的,而是使用固定的统计参数(根据训练阶段各mini-batch计算出的均值和方差得到,详见原论文)

关于BN的具体介绍和讨论,可以看知乎上的两个问题
1.深度学习中 Batch Normalization为什么效果好?
2.请问batch_normalization做了normalization后为什么要变回来?

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值