Batch Normalization中,如何更快地训练深度神经网络?

郭-小-妖


什么是Batch Normalization

Batch Normalization就是对数据进行批量规范化,使得其成为均值为0,方差为1的分布。当然整体数据的期望和方差是难以获得的,在实际使用中,用Batch数据的均值和方差替代,这就要求Batch Size不能太小,否则与整体数据的期望和方差就可能有较大偏差。


但是如果仅仅进行归一化操作,会降低整个网络的Capity,所以引入"Scale And Shift"操作增强网络的表达能力。举个例子,当激活函数采用的是sigmoid函数并且当输入数据满足均值为0,单位方差的分布时,由于sigmoid函数的曲线特性,在0附近的范围内,整个sigmoid曲线接近线性,激励函数的非线性特性就得不到体现,这样整个网络的表达能力会降低,


为什么Batch Normalization可以获得不错的效果

首先说说ICS(Internal Covariate Shift),在统计机器学习中有一个经典假设,要求源空间和目标空间的数据分布是一致的。对于深度神经网络而言,深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新,使得训练收敛速度缓慢。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。

通过对每层数据做Batch Normalization,则可以降低对初始化权重,学习率等的依赖,加快神经网络的收敛速度。

什么时候可以用BN

当神经网络训练时遇到收敛速度很慢,或者梯度弥散无法训练时,都可以尝试用BN来解决。


分享到:


相關文章: