【论文阅读笔记】Batch Normalization_Accelerating Deep Network Training by Reducing Internal Covariate Shift

前提知识:
  covariate shift, 协向量变化,即输入变量x自身的变化【对于一个可学习系统的输入分布在改变。通俗的说,就是一个网络在训练过程中每层子网络的输入在不断变化】
  Batch-Normalization,使得网络层输入的分布呈现标准正态分布【均值为0,方差为1】,其可使网络的训练加快【每一层网络的分布不一样,所需的学习率lr不一样,网络系统需要使用最低的那个lr来保证模型在收敛】,亦可部分解决梯度爆炸现象的问题【通过减少梯度对于参数初始值的依赖性】。
  数据初始化,以图像为例,其每个channel的数字都在0~255,即在二维笛卡尔坐标中,数据都分布在第一象限,且附近像素点之间具有强相关性,这使得数据分布显得狭长。这就使得随机分界面出现在第一象限的概率为1/4(在二维的情况下),且狭长的分布形状使得随机分界面出现在数据分布周边的概率更低,这就需要多次迭代模型才能收敛,而且大量数据外的分割面迭代可能会进入局部最优解。如果使用PCA和ZCA白化使得数据分布不再狭长,其随机分布界面靠近数据分布的几率就大了些;如果在每个维度都减去均值,则在每个维度上都增加了 2 2 倍几率的扩散,总共增加了2n的分布几率。

为什么模型训练前要对输入数据做归一化处理?

  学习过程的本质就是为了学习数据分布,一旦训练数据和测试数据的分布不同,那么模型的泛化能力也大大降低。况且如果每批(Batch)训练数据的分布各不相同,那么模型在每次迭代都要去学习适应不同的分布,这会降低模型的收敛速度。因此,我们需要对输入数据进行归一化处理。

概要

  训练深层神经网络是复杂的,因为每一层的输入在训练的过程中都在不断的变化(前一层的参数在不断的变化)。这使得我们训练模型的时候需要应用低学习率、谨慎地初始化参数,以及使得非线性饱和模型的训练变得十分困难,这些现象的结果就是降低了训练的速度。我们把这个现象称为【internal covariate shift,内部协变量变化】,并通过规范化层输入来解决这个问题。【Batch-Normalization,批处理】允许我们使用更高的学习率,允许我们不用那么在意初始化,并且在一些情况下不需要使用【Dropout】。使用Batch-Normalization能提升数倍的训练速度,并大幅度提高准确度【刷新了当年(2015年)ImageNet分类的top-5准确值】。

内部协向量变化

由于神经网络每层的输入都受到前面所有层的参数的影响,因此随着网络变得更深,网络参数的微小变化就会放大,这使得深层神经网络的训练变得困难[complicated]。已知如果输入经过了白化操作【均值为0,方差为1】,网络收敛的速度就会加快,所以本文借鉴了这种想法,将每层网络的分布都进行这种操作作为下一层的输入。

在Mini-Batch上的Normalization

  如果每层都使用白化操作,那么计算协相关矩阵要耗费大量时间,且不一定可逆,所以在实际操作中,作者借鉴了其中最重要的一点:在输入变量的每个维度上都使它0均值和单位方差,

x(k)1=x(k)E[x(k)]Var[x(k)] x 1 ( k ) = x ( k ) − E [ x ( k ) ] V a r [ x ( k ) ]
由于每次 Normalization 都是在一个Mini-Batch上操作的【即计算均值的时候,在一个batch上(比如5)进行均值运算】,所以该操作称为 Batch-Normalization。但如果简单的直接正规化每一层的输入,那么会破坏其正常的分布(如将Sigmoid函数的input进行正规化,则会将非线性编程线性的【这是因为Sigmoid函数在0附近时基本呈线性】),所以使用两个参数来学习原来正常的分布
y(k)=γ(k)x(k)1+β(k) y ( k ) = γ ( k ) x 1 ( k ) + β ( k )
值得一提的是,如果令 γ(k)=Var[x(k)]β(k)=E[x(k)] γ ( k ) = V a r [ x ( k ) ] 且 β ( k ) = E [ x ( k ) ] ,我们将恢复原始的函数。 需要之后详细了解的一点是,在ReLU这种分段函数上是不存在Sigmoid那种小范围内呈线性的特点的,且在ReLU函数后,函数值又重回了第一象限,这个情况下的归一化是不是更应该在 ReLU 激活函数之后,而不是在 Wx+b 上?

实验

  作者说将 Normalization 放在激活函数前(如ReLU和Sigmoid)会比较好,因为训练刚开始的时候,参数变化幅度大,即参数不稳定,在激活函数下趋于饱和的神经元容易被破坏分布,不如退而在 Wx+b W x + b 上进行 Batch Normalization,因为初始的W是从标准高斯分布中采样得到的,而W中元素的数量远大于x,Wx+b每维的均值本身就接近0、方差接近1,所以在 Wx+b W x + b 后使用 Batch Normalization 能得到更稳定的结果。
  使用 Batch Normalization 后,可以移除或使用较低的 dropout,与以前使用 40%~50%相比,文中分别使用了10%,5%,0%的 dropout 训练模型,结果大大加快了训练速度。类似的,使用 Batch Normalization 后,可以降低 L2 L 2 权重衰减系数。因为 L2 L 2 正则化的作用在于处理局部最优解导致的部分权重系数较大,而使用 Batch Normalization后,随机分界面就更接近数据内部,可以在一定程度下减缓局部最优解的问题,因而可以减小 L2 L 2 权重衰减系数。

猜想

  使用 Batch Normalization,初始权重会更接近数据内部,这就在一定程度上避免了过拟合现象,而 dropout 的作用在于使部分神经元失活从而避免过拟合,这与 Batch Normalization 作为一个整体避免过拟合的作用冲突,所以使用 Batch Normalization 时需要减少 dropout 的使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值