首先,我们将说明为什么需要它,它是如何工作的,然后如何将其包含在经过预训练的网络中。
为什么要使用批处理规范化?
我们通过调整和缩放激活函数来标准化输入层。例如,当我们具有从0到1以及从1到1000的特征时,我们应该对其进行归一化以加快学习速度。如果输入层可以这样做,那为什么不对隐藏层中的值也做同样的事情,这些值一直在变化,并且训练速度提高了10倍甚至更多倍。
批量归一化减少了隐藏单位值的偏移量(协方差偏移)。为了解释协方差变化,让我们深入了解猫检测。我们仅在黑猫的图像上训练数据。因此,如果我们现在尝试将此网络应用于有色猫的数据,那是显而易见的我们做得不好。即使训练集和预测集都是猫的图像,但略有不同。换句话说,如果算法学习了X到Y的映射关系,但是X的分布发生了变化,那么我们可能需要通过尝试来重新训练学习算法。
同样,批处理归一化允许网络的每个层自己独立于其他层进行学习。
我们可以使用较高的学习率,因为批量归一化可确保没有激活过高或过低。 这样一来,以前无法训练的事物就会开始训练。另外由于它具有轻微的正则化效果,因此减少了过度拟合。
与辍dropout类似,它为每个隐藏层的激活添加了一些噪音。 因此,如果我们使用批处理规范化,我们将使用更少的dropout,这是一件好事,因为我们不会丢失很多信息。 但是,我们不应该仅依靠批处理归一化来进行正则化。 我们最好将它与dropout结合使用。
如何工作?
为了提高神经网络的稳定性,batch归一化通过减去批次batch平均值并除以batch标准偏差来归一化先前激活层(隐藏层)的输出。 但是,在通过一些随机初始化的参数进行激活输出的这种移位/缩放之后,下一层的权重不再是最佳的。
因此,batch归一化将两个可训练的参数添加到每一层,因此归一化的输出将乘以“标准差”参数(gamma)并添加“均值”参数(beta)。 换句话说,batch理归一化允许SGD(随机梯度下降)通过为每次激活仅更改这两个权重来进行非归一化,而不是通过更改所有权重来失去网络的稳定性。