当前面层的权重变化时,下一层的输入也会随着变化,因此他们的分布也会随之变化,此时训练就会变得异常困难。这种现象称为internal covariate shift,处理这种问题的方法是对每层输入进行正则化。作者的方法将正则化作为模型的一部分,每次训练一个mini-batch进行以此正则化。这种方法也可以看作是一种正则化方法,在某种程度上甚至可以用来替代dropout方法。当运用到state-of-art分类模型上时,BN在仅仅使用1/14的训练步骤的情况下达到了完全相同的准确率。当使用集成模型的情况下,在ImageNet分类比赛上的准确率也有所提高。
使用mini-batch的好处是,一个mini-batch的损失函数的梯度是整个训练集损失梯度的估计,随着batch size增加,这个估计会越来越精确。第二,一次对一个mini-batch进行计算相比于每次对一个example进行计算,之后进行m次,前者显然更有效。
虽然SGD简单又有效,但是在使用这一优化方法时,需要小心调整超参数,尤其是优化过程中的学习率以及模型参数的初始值。
如果我们的激活函数是sigmoid函数,当输入值的绝对值很大时,神经元就会开始饱和,收敛会变得异常慢,随着网络加深,这种现象会越来越严重。我们选择的替代方法是更换激活函数(如ReLU),谨慎地对参数进行初始化以及选择较小的学习率。但是如果我们保证每层输入分布都是稳定的话,我们就可以实现。