做法
设,每个batch输入是 (其中每个
都是一个样本,
是batch size) 假如在第一层后加入Batch normalization layer后,
的计算就倍替换为下图所示的那样。

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