Batch Normalization层
-
我们可以通过标准化输入来避免网络中局部数据十分大或十分小(不在同一个数值范围),同时我们也需要标准化激活函数的输出来保证网络的稳定。
-
所有网络中都应该使用BN层,他能使网络块10倍,因为学习率可以调大了,且由于不会出现某个值十分大或十分小的情况,曾经许多不能的网络也都可以训练了,
-
BN能够很好的预防过拟合,因此可以减少Dropout的使用量。
-
BN层事实上是对上一层的激活层的输出结果进行标准化,即减去均值并除以标准差。但SGD会在训练时Undo这个操作,因此BN采取了如下两种方法来解决:
(1)Add two more trainable parameters to each layer one to multiply all activations to set an arbitrary standard deviation, and one to add to all activations to set an arbitary mean.
(2)Incorporate both the normalization, and the learnt multiply/add parameters, into the gradient calculations during backprop.
举个例子,如果在一个全连接层后面加入BN,假设这个全连接层中有70个神经元,那么BN的参数就是280个,70(实际用于标准化的均值)+70(实际用于标准化的标准差)+70(用于Undo的标准差)+70(用于Undo的均值) -
如果想要在已经训练好的网络中加入BN,必须先计算出训练这个网络时所使用的数据集在网络中需要加入BN的前一层的激活值的均值和标准差,并将计算出的值赋到BN的所有参数上(包括实际用于标准化的参数)。