文章提出了将批处理作为模型本身的一部分。
批处理的平均损失是对整个数据集的估计;批处理可以利用数据并行提高训练速度。深度学习需要谨慎调整模型参数,并且网络的初始化参数也很重要。
为什么要用Normalization,文中提到,考虑一个经过sigmoid函数的网络层:
,其中。当增大时,趋向于0.这会使得对参数的求导也趋向于0,使得训练速度变慢。
然而,由于受,和下面所有层的参数的影响,在训练期间对这些参数的改变可能将的许多维度移动到非线性的饱和状态并且减慢收敛。随着网络深度的增加,这种效应会得到放大(这一块儿不是很理解)。在实际操作中,饱和问题和梯度消失问题都用线性修正单元(ReLU)、慎重初始化模型参数、较小的学习率来解决的。
Batch Normalization旨在减少内在协方差位移,可以使用较大的学习率,可以提高训练速度。Batch Normalization还可以规范化模型以及减少Dropout的必要性(?)
作者在ImageNet上使用Batch Normalization训练,只用了7%的训练步骤就完成了效果,并且可以进一步提升准确率。
Internal Covariate Shift 是指在训练过程中由于网络参数的改变导致网络激活函数的分布改变。如果网络的输入是均值为0,单元方差的化(即白化),则网络的训练将会收敛得更快。