总结整理《Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift》

来源:互联网 发布:centos防火墙关闭端口 编辑:程序博客网 时间:2024/06/01 07:58

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

1. Introduction

随机梯度下降(Stochastic Gradient Descent, SGD)是训练深度网络的有效方法,其变体包括momentum,Adagrad。其训练目标是通过最小化损失函数找到最优的网络参数:



SGD训练多次迭代进行,每次只使用一个mini-batch,即从训练集中随机挑选m的训练样本组成一个mini-batch。优点有二:

(1)mini-batch损失函数的梯度是对整个训练集梯度的估计,m越大,估计越准确;

(2)相比m次独立计算单个训练样本,mini-batch的计算更高效。

SGD虽然简单有效,但是对学习率和参数初始值的要求较高。若选择不当,在调整参数的过程中,即使参数仅产生微小的变化,但向网络的深层传播时该变化会逐级放大。同时还会影响到网络各层输入分布的变化,那么网络就要重新学习来适应新的输入分布,该现象称为Covariate Shift。

Covariate Shift是相对整个学习系统而言的,若仅考虑某层或者某个子网络,例如在网络中,令,则可看做其子网络。若输入x的分布不变,就无需重新调整来补偿输入x分布的变化。

解释子网络输入分布固定的另一个例子:,采用sigmoid函数。下图为sigmoid函数的导数,随着|x|的增大,g‘(x)逼近0,陷入饱和状态。而g'(x)的最大值在x=0时取得1/4,在梯度反向传播时,多个g'(x)的连乘最终可能导致梯度的消失。(梯度消失的详细解释可参考点击打开链接)。避免梯度消失的有效手段是用ReLU函数来取代sigmoid函数。本文提出的Batch Normalize方法也可以有效解决该问题。



Covariate Shift 是对整个网络而言,当网络的中间某个结点(某层或者某个子网络)因为参数的变化而引起输入分布的变化,称之为Internal Covariate Shift。文章提出了Batch Normalization来消除Internal Covariate Shift,可获得多方面的增益:(1)加速网络的训练(2)减小参数的比例因子或初始值对梯度的影响(3)增大学习率也不会造成发散(4)可去掉Dropout(5)避免网络陷入饱和状态。


2.Towards Reducing Internal Covariate Shift

白化也是加速网络训练收敛的一种行之有效的方式,例如通过线性变化使输入具有零均值、单位方差。

当归一化过程和参数优化过程交替进行时,则每当执行完梯度下降步骤,更新参数后,再执行归一化,可能会抹掉梯度的作用。

例如,对训练集计算均值:

归一化:,更新参数:,其中

归一化:。注意到被减掉,因此上一次计算的梯度根本没有起到作用。

归一化可看做某种变化:,后向传播时,不仅要计算,还要计算,若忽略了后者,就会导致上述现象。

白化是解决该问题的方式之一,但是要计算,复杂度过高。


3.Normalization via Mini-Batch Statistics

针对白化计算量答的缺点,本文提出两项简化方式:

(1)对每一维特征分别独立归一化:

但是这种简单的归一化方式改变了网络的表征性能。为此,又引入变换:


其中,参数均通过学习得到。若令,可还原出

(2)使用mini-batch,计算每一维度的方差而不是在整个训练集上计算互相关矩阵。

设mini-batch有m个样本,由于归一化是对每个每一维独立操作,因此忽略表示维度的上标k,mini-batch样本的第k维可表示为。将变换:称为Batch Normalization(BN)变换。

由于网络中加入了新的变换,在反向传播时,需要对变换中涉及到的参数计算梯度:



BN变换的归一化操作消除了Internal Covariate Shift,同时仿射变换又保证了网络的表征性能不受影响。

3.1 Training and Inference with Batch-Normalized Networks

训练过程中,归一化操作要用到mini-batch中的所有样本,但在推断时是没有必要的,可以使用固定的均值及方差



3.2 Batch-Normalized Convolutional Networks

考虑一个卷积网络,每一层由一个仿射变换和一个非线性变换组成。对u归一化不能消除Covariate Shift,故这里只对x进行归一化。前面已提到,b的变化会在提取均值时被减掉,对最后的结果不起作用,故对归一化,输出重新表示为:。需要注意的是,对于卷积网络,不再是对每个维度k分别学习一对,而是对每个feature map学习一对。


3.3 Batch Normalization enables higher learning rate

BN变换可以帮助解决传统深度网络中学习率过大引起的梯度爆炸或梯度消失的问题。因为BN变换可以防止微小的参数变化在逐级传播的过程中不断方法,从而避免sigmoid函数陷入饱和状态。另外,BN变换不会受参数的比例因子的影响。由于,权重W越大,梯度就越小,在更新W时,不会导致W过的激增。


0 0