批归一化(Batch Normalization)因其可以加速神经网络训练、使网络训练更稳定,而且还有一定的正则化效果,所以得到了非常广泛的应用。但是,在推理阶段,BN层一般是可以完全融合到前面的卷积层的,而且丝毫不影响性能。
本文首发:AIZOO
Batch Normalization是谷歌研究员于2015年提出的一种归一化方法,其思想非常简单,一句话概括就是,对一个神经元(或者一个卷积核)的输出减去统计得到的均值,除以标准差,然后乘以一个可学习的系数,再加上一个偏置,这个过程就完成了。
下面我们简单介绍一下BN训练时怎么做,推理的时候为什么可以融合,以及怎么样融合。
一. BN训练时如何做
训练过程中BN层的运算,用公式表达也很简单,对于一个Batch内的第
个样本,假设某个神经元的输出是
, 则经过 BN 层后的输出 也就是:
其中
为一个Batch内 的均值,
为一个Batch内的 的标准差,
为一个非常小的常数,例如 0.001, 主要是为了避免除零错误,均值和方差的计算方法分别为:
而