之前花费了比较长的时间在论文阅读上,导致最近的博客都没有产出~~
参考论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
可以理解为对深层神经网络每个隐层神经元的激活值做简化版本的白化操作
为什么要提出Batch Normation
1. 深度网络的训练速度慢,这是由于Internal Covariate Shift所导致的
Internal Convariate Shift:多层网络训练中,后面层次的神经网络接受到的节点受到前面层次的网络参数变化导致该层输入数据的分布发生了变化.泛指,在多层数据网络中各层之间参数变化引起的数据分布发生变化的现象, 发生在深层网络的隐层.
Internal Convariate Shift导致越到网络深处而导致梯度越小,且梯度下降的方向是东拐拐,西拐拐,从而导致到达最优点的时间越长,爬到山顶越慢。
2. 参数不好调, 其中一个参数就是学习率,我们可能要尝试很多次,才能找到合适的学习率,学习率太小,步子太小,训练速度会变慢,学习率过大,又会导致错过最优点。
而Batch Normation的出现就是为了解决1,2问题的,但是问题2出现的本质其实还是由于Internal Convariate Shift所导致的,所以Batch Normation的核心思想其实就是在每一个Layer都进行归一化,将其归一到标准正态分布上。
再说Batch Normation 之前,首先说一下问题1出现的前因后果。