为什么加入Batchnormalization?
机器学习领域有个重要的假设:IID独立同分布假设,即假设训练数据和测试数据是满足相同分布的,独立同分布假设是通过训练数据获得的模型能够在测试集获得好的效果的基本保障。其次,研究表明在图像处理中对输入图像进行白化(whiten)操作。就是对输入数据变换到0均值,单位方差的正态分布。那么神经网络会较快收敛。但是深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动。所以数据经过深层神经网络后,函数值落在了激活函数的梯度饱和区,也就意味着,在这个区域里梯度变化很慢。激活函数对数据的反应不敏感。所以加入BN后,使大部分Activation的值落入非线性函数的线性区内,其对应的导数,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以就导致反向传播时低层神经网络的梯度消失,这是训练神经网络收敛越来越慢的本质原因。而Batchnormalization就是通过一定的规范化手段,加入到全连接层和激活函数之间,把每个神经网络任意神经元这个输入值强行拉回到比较敏感的区域,使得每一层神经网络的输入保持相同分布,这样的小变化就会导致损失函数较大的变化,从而避免梯度消失问题。
BN为了保证非线性的获得,对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale * x +shift),每个神经元增加了两个参数,这两个参数通过训练学习得到。意思是通过scale和shift把这个值从标准正态分布左移或者右移,等价于非线性函数的值从正中心周围的线性区往左动了动。核心思想应该是想找到一个线性和非线性的较好平衡点,即能享受非线性较强表达力的好处,又避免太靠非线性区两头使得收敛速度太慢。

浙公网安备 33010602011771号