Batch Normalization:
Accelerating Deep Network Training by Reducing Internal Covariate Shift
由于前一层的参数更新,所以这一层的输入(前一层的输出)的分布会发生变化,这种现象被称之为ICS。同样,这篇文章的观点认为BN work的真正原因,在与其将数据的分布都归一化到均值为0,方差为1的分布上。因此,每一层的输入(上一层输出经过BN后)分布的稳定性都提高了,故而整体减小了网络的ICS。
BN本质也是一种白化处理(白化处理:a、降低特征之间的相关性,相当于pca;b、每一维特征均值为0,标准差为1)
由于PCA计算量较大,故使用近似白化处理:
但实际经过该处理后,模型学习的特征会被破坏掉(分布都被改了),因此又引入γ、β(可学习参数)
如果
那就是y = x,即恢复到学习到的原始特征。
BN可以作为神经网络的一层,放在激活函数(如Relu)之前。BN的算法流程如下图:
Layer Normalization
BN是取不同样本的同一个通道的特征做归一化;LN则是取的是同一个样本的不同通道做归一化。
BN的缺点:
1. batchsize 较小的时候,少量样本的均值和方差便不能反映全局的统计分布息,所以基于少量样本的BN的效果会变得很差。
2. RNN可以展开成一个隐藏层共享参数的MLP,随着时间片(即样本长度)的增多,样本还有有效数据的会越来越少(即长度越长的样本会越来越少),这样也会出现少量样本的统计信息不能反映全局分布的情况
因此LN是一个独立于batch size的算法,是根据样本的特征数做归一化的。