[paper] Batch Normalization
Batch Normalization
论文地址:https://arxiv.org/abs/1502.03167
Abstract
深度网络训练时,每一层的输入都是前一层的输出
所以的梯度严重收到分布的影响,如果一会这样一会那样就会很难收敛
我们将这种现象称为内部协变量转移(internal covariate shift),解决方法是对每层输入进行归一化。
批标准化使我们能够使用更高的学习率,并且不用太注意初始化。它也作为一个正则化项,在某些情况下不需要Dropout。
将BN应用到最先进的图像分类模型上,它取得了相同精度的前提下,减少了14倍的训练步骤,并以显著的差距击败了原始模型。
使用批标准化网络的组合,我们改进了在ImageNet分类上公布的最佳结果:达到了4.9% top-5的验证误差(和4.8%测试误差),超过了人类评估者的准确性。
Introduction
虽然SGD十分简单且高效,但是它需要小心的调整模型的超参数,尤其是学习率和参数初始化值。
由于每层都要受到上一层参数的影响,随着网络变深,网络参数的微小变化会被放大,需要不断去适应新的分布。
训练集的样本分布和测试集的样本分布不一致,训练的模型就很难有较好的泛化能力,这叫做 covariate shift (Shimodaira, 2000),解决办法是domain adaptation (Jiang, 2008).和迁移学习。
BN想把输入的均值方差规范化,使输入分布一致,但是仅均值、方差一样的分布就一定一样吗?但是思路是这样,而且效果好。
也可以不只关注学习系统整体,而关注它的内部,如一个subnetwork或 a layer
Towards Reducing Internal Covariate Shift
白化会加快收敛
-
规范化与某个样本的各层输入及所有样本的各层输入都有关(对某个规范化时用到了所有样本)
在反向传播时,求导数需要考虑以下两项:
这样基于整个训练集的白化是非常耗时的,因为白化需要计算 x 的协方差矩阵及白化部分,还需计算BP算法中的求导。
但是基于某个或者部分样本进行规范化又会changes the representation ability of a network
所以本文在minibatch内归一化,再用可以学习的 γ 和 β 来拟合minibatch的统计量与整个训练集统计量之间的关系。
Normalization via Mini-Batch Statistics
优化方案:
1. 把 x 向量中每个元素当成独立随机变量单独进行规范化,向量中各变量独立了,也没有什么协方差矩阵了。这种规范化在各变量相关的情况下依然能加速收敛,(LeCun et al., 1998b),此外,如果看成向量中变量的联合概率,需要计算协方差矩阵,如果变量个数大于minibatch中样本数,协方差矩阵不可逆!!
2. 在每个mini-batch中计算得到mini-batch mean和variance来替代整体训练集的mean和variance.
simply normalizing each input of a layer may change what the layer can represent.normalizing the inputs of a sigmoid would constrain them to the linear regime of the nonlinearity
单一的normalization可能会改变一个层代表的含义,例如标准化sigmoid的输入会将他们约束到非线性的状态,我们要保证插入到网络的变化可以表示恒等变换。
为了解决这个问题,we make sure that the transformation inserted in the network can represent the identity transform.也就是用用可以学习的 γ 和 β 去拟合出与原先等价的变换。
其中,