深度学习中BN(Batch Normalization)的原理详解

深度学习


前言

Batch Normalization的概念在2015年提出,发表于论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
从论文标题可以理解,Batch Normalization要解决的问题是:通过减少内部协变量偏移来加速深度网络训练。
这个偏移是由于使用mini-batch梯度下降法导致的,所以Batch normalization中的batch和mini-batch 中的batch是同一个意思

一、BN提出的背景

  1. Internal Covariate Shift(ICS)的原文描述: the distribution of each layer’s inputs changes during training, as the parameters of the previous layers change. This slows down the training by requiring lower learning rates and careful parameter initialization, and makes it notoriously hard to train models with saturating nonlinearities. 大致解释为:当上一层网络中参数发生微弱变化时,下一层的输入数据的分布就会发生变化,由于每一层中的线性变换与非线性激活映射,这些微弱变化随着网络层数的加深而被放大,使得我们的模型训练变得困难,这一现象叫做Internal Covariate Shift。
  2. 解决方法的原文描述:By fixing the distribution of the layer inputs x as the training progresses, we expect to improve the training speed. 即通过对每层进行归一化可以解决该问题
  3. 文章提到whitening(白化)可以解决ICS,但是单纯的白化会降低网络的表达能力,(Note that simply normalizing each input of a layer may change what the layer can represent. For instance, normalizing the inputs of a sigmoid would constrain them to the linear regime of the nonlinearity. )
  4. 因此诞生了最终的BN,确保 the transformation inserted in the network can represent the identity transform,即保留神经元的表达能力。

二、BN原理

算法步骤

首先我们需要清楚,这个引起ICS的是变化的训练数据是以mini-batch为单位,也就是说输入不同batch的数据会导致ICS,因此需要对每个batch的数据进行BN,接下来以一个batch为例介绍。

假设我们当前batch有m个激活值 B = { x 1... m } B=\{x_{1...m}\} B={x1...m},用 x ^ 1... m \hat{x}_{1...m} x^1...m代表标准化之后的值,背景中提到,为了保留神经元的表达能力,在标准化之后,还需要对该结果进行线性转换, y 1... m y_{1...m} y1...m表示经过线性转换的值。 B N γ , β ( x i ) BN_{\gamma,\beta}(x_i) BNγ,β(xi)表示Batch Normalizing Transform。
B N γ , β ( x i ) BN_{\gamma,\beta}(x_i) BNγ,β(xi)的过程如下图,其中 γ \gamma γ β \beta β是需要学习的参数:

图片名称
步骤总结如下:

  1. 计算当前batch的均值
  2. 计算当前batch的方差
  3. 计算标准化结果
  4. 将标准化结果乘以 γ \gamma γ ,加上 β \beta β以提高神经元的表达能力

其中 ϵ \epsilon ϵ 是为了防止方差为0产生无效计算,从以上步骤可以看出, B N γ , β BN_{\gamma,\beta} BNγ,β 既依赖于当前训练样本本身,也依赖于当前batch中的其他样本。

测试阶段使用BN

测试阶段使用整个样本的无偏估计来对Test数据进行归一化,整个样本的统计量在训练过程中进行保存。
BN在训练过程中保留了每组mini-batch训练数据在网络中每一层的 μ B \mu_B μB σ B 2 \sigma^2_B σB2

图片名称
最后在测试阶段,对测试数据使用 E [ x ] E[x] E[x] V a r [ x ] Var[x] Var[x]进行标准化,然后将标准化结果乘以 γ \gamma γ ,加上 β \beta β

三、Batch Normalization的优点

这一段参考 深度学习中的Batch Normalization
(1)在训练阶段可以设置更高的学习率,因为BN有快速收敛的特性。我们在网络中加入Batch Normalization时,可以采用初始化很大的学习率,然后学习率衰减速度也很大,因此这个算法收敛很快。

(2)模型中BN可以代替dropout或者使用较低的dropout。dropout是经常用来防止过拟合的方法,但是模型中加入BN减少dropout,可以大大提高模型训练速度,提高网络泛化性能。

(3)减少L2权重衰减系数。用了Batch Normalization后,可以把L2权重衰减系数降低,论文中降低为原来的5倍。

(4)解决了反向传播过程中梯度消失的问题。BN算法对Sigmoid激活函数的提升非常明显,解决了困扰学术界十几年的sigmoid过饱和造成梯度消失的问题。在深度神经网络中,靠近输入的网络层在梯度下降的时候,得到梯度值太小,导致深层神经网络只有靠近输出层的那几层网络在学习。因为数据使用BN后,归一化的数据仅使用了sigmoid线性的部分。

(5)可以把训练数据彻底打乱。防止了每批训练的时候,某一个样本经常被挑选到。论文中指出这个操作可以提高1%的精度。

reference
[1] Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[J]. arXiv preprint arXiv:1502.03167, 2015.
[2] 深度学习中的Batch Normalization

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值