参考:
https://zhuanlan.zhihu.com/p/27938792
做法
设,每个batch输入是 (其中每个 都是一个样本, 是batch size) 假如在第一层后加入Batch normalization layer后, 的计算就倍替换为下图所示的那样。
- 矩阵 先经过 的线性变换后得到
- 注:因为减去batch的平均值 后, 的作用会被抵消掉,所以没必要加入 (红色删除线)。
- 将 再减去batch的平均值 ,并除以batch的标准差 得到 。 是为了避免除数为0的情况所使用的微小正数。
- 注:但 基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,引入两个新的parameters: 和 。 和 是在训练时网络自己学习得到的。
- 将 乘以 调整数值大小,再加上 增加偏移后得到 。
- 为加入非线性能力, 也会跟随着ReLU等激活函数。
- 最终得到的 会被送到下一层作为输入。
需要注意的是,上述的计算方法用于在训练。因为测试时常会只预测一个新样本,也就是说batch size为1。若还用相同的方法计算 , 就会是这个新样本自身, 就会成为0。
所以在测试时,所使用的 和 是整个训练集的均值 和方差 。
而整个训练集的均值和方差 的值通常也是在训练的同时用移动平均法来计算