BN操作主要是用来解决 internal covariate shift现象。
那么什么是internal covariate shift现象呢?
Google在《Batch Normalization:Accelerating Deep Network Tradining by Reducing Internal Covariate shift》论文中曾提到过:
深度神经网络涉及到多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化, 通过层层叠加,高层的输入分布变化会非常的剧烈,这就使得高层需要不断地重新适应底层 的参数更新,所以为了训练好模型,我们需要非常谨慎的去设定 lr、dropout 等参数,从而 能够优化参数更新的策略。
所以, internal covariate shift现象产生的实质就是:将每一层的输入作为一个分布来看,由于底层的参数随着训练的更新,从而导致了相同的输入分布得到的输出分布就变了,如果细化到神经网络中的每一层,每轮训练时分布都是不一致的,那么相对的训练结果就得不到保障。
因此, internal covariate shift现象会导致以下几个问题:
- 上层网络需要不断的适应新的输入数据分布,降低了学习的速度
- 下层输入的变化可能趋近于变大或变小,导致上层落入饱和层,使得学习的过程中过早的停止
- 每层的更