BN的作用:
(1)加快训练速度,减少了对学习率的要求,可以使用很大的学习率或者较小的学习率,算法也能够快速训练。
(2)增加模型的稳定性,有效减少梯度消失/爆炸,提高训练精度。
(3)BN具有轻微的正则化效果,在某些情况下可以取消 dropout 和 L2 正则项参数,或者采取更小的 L2 正则项约束参数。
(4)减少了人为选择参数的过程(权重的初始化方式,正则化方式的超参数的选择,学习率等)。
BN的缺陷:
(1)无法使用小batch进行训练,小batch的均值和方差可能与整体训练样本偏差很大。
BN训练和测试时的参数是一样的嘛?
对于BN,在训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和方差。
而在测试时,比如进行一个样本的预测,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可以通过移动平均法求得。
对于BN,当一个模型训练完成之后,它的所有参数都确定了,包括均值和方差,gamma和bata。
BN训练时为什么不用全量训练集的均值和方差呢,BN为什么能缓解过拟合?
因为用全量训练集的均值和方差容易过拟合,对于BN,其实就是对每一批数据进行归一化到一个相同的分布,而每一批数据的均值和方差会有一定的差别,而不是用固定的值,这个差别实际上能够增加模型的鲁棒性,也会在一定程度上减少过拟合。
也正是因此,BN一般要求将训练集完全打乱,并用一个较大的batch值,否则,一个batch的数据无法较好得代表训练集的分布,会影响模型训练的效果