BatchNorm解决梯度消失/爆炸
协变量偏移(Covarite Shift):在机器学习中,指训练数据的分布和测试数据的分布不一致。模型在一种分布上学习,却要在另一种分布上预测,效果自然会变差。
内部协变量偏移(Internal Covarite Shift):在深度神经网络中,对于网络中的任何一层,它的输入是前面所有层的输出。在训练过程中,训练参数在不断改变,这导致这一层的输入分布也在不断改变。
这就会导致网络层需要不断适应数据的分布,就会极大的拖慢网络学习的速度。
同时对于像sigmoid,tanhsigmoid,tanhsigmoid,tanh这样的激活函数,如果当前层的输入整体偏移到数值很大或很小的区域,激活函数的输出就会进入’饱和区’。在这些区域中,激活函数的值趋近于0,从而导致出现梯度消失。Internal covarite shift很容易使得数据分布漂移到饱和区内。
故BatchNrom的核心思想就是:在每一层网络的输入处,强行将数据的分布稳定下来,使其保持在一个固定的、表现较好的分布上(比如均值为0,方差为1)。
但是强迫把数据都变成标准正态分布可能会破坏网络学习到的特征分布。例如对于sigmoidsigmoidsigmoid函数,如果输入总是在0附近,那么它基本等同于一个线性函数,大大降低了网络的表达能力。
为了解决这个问题,BatchNrom引入了两个可学习的参数:缩放因子γ\gammaγ和平移因子β\betaβ:yi=γxi+βiy_i=\gamma x_i+\beta_iyi=γxi+βi
它们允许网络学习适合该输出的最佳分布