参考:

    https://www.youtube.com/watch?v=BZh1ltr5Rkg

    https://www.zhihu.com/question/38102762/answer/607815171

    作用:

    学习率可以设大一些,加速训练

    减轻梯度消失和梯度爆炸

    减小参数初始化的影响

    等于做了正则化,对抗过拟合

    缺点:

    BN的缺陷从上面可以看出,batch normalization依赖于batch的大小,当batch值很小时,计算的均值和方差不稳定。研究表明对于ResNet类模型在ImageNet数据集上,batch从16降低到8时开始有非常明显的性能下降,在训练过程中计算的均值和方差不准确,而在测试的时候使用的就是训练过程中保持下来的均值和方差。这一个特性,导致batch normalization不适合以下的几种场景。(1)batch非常小,比如训练资源有限无法应用较大的batch,也比如在线学习等使用单例进行模型参数更新的场景。(2)rnn,因为它是一个动态的网络结构,同一个batch中训练实例有长有短,导致每一个时间步长必须维持各自的统计量,这使得BN并不能正确的使用。在rnn中,对bn进行改进也非常的困难。不过,困难并不意味着没人做,事实上现在仍然可以使用的,不过这超出了咱们初学者的学习范围。