参考博客: 深度学习(二十九)Batch Normalization 学习笔记 谈谈Tensorflow的Batch Normalization 数据处理中白化Whitening的作用图解分析
原论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
(1)训练阶段
归一化(零均值,方差为1)
重构(保持数据值的范围不变,不损失信息)
其中 γ 和 β 是可学习的参数,每一个神经元有一对这样的参数。所以整个BN层就是在做以下的运算:
这个运算中的输入 x 是logits(即激活函数的输入)。
(2)测试阶段
模型训练好以后,参数固定不变,那么对于每一个输入的测试样本来说,归一化所用的均值 E 和方差 Var 都应该固定不变。所以,用训练阶段的批的均值的均值和方差的无偏估计来计算:(3)注意事项
原来神经元的偏置bias在增加了BN层以后就不再需要了。BN有一个作用就是可以使得激活函数的作用范围更大,所以在激活函数前操作。脑补一下卷积神经网络计算的过程,就知道一张特征图会有几十乘几十个神经元。由于是共享权值,所以可以求取所有样本所对应的一个特定特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化。
例如,一个batch里的128个图,经过一个64 kernels卷积层处理,得到了128×64个图,再针对每一个kernel所对应的128个图,求它们所有像素(相当于上一段提到的所有神经元)的mean和variance,因为总共有64个kernels,输出的结果就是一个一维长度64的数组啦!
新闻热点
疑难解答