参考:
基础 | batchnorm原理及代码详解 https://blog.csdn.net/qq_25737169/article/details/79048516
详解机器学习中的梯度消失、爆炸原因及其解决方法 https://blog.csdn.net/qq_25737169/article/details/78847691
Pytorch Batch Normalizatin layer的坑 https://zhuanlan.zhihu.com/p/65439075
1. Batch Norm 为什么有效?
深度学习的话尤其是在CV上都需要对数据做归一化,因为深度神经网络主要就是为了学习训练数据的分布,并在测试集上达到很好的泛化效果。
但是,如果我们每一个batch输入的数据都具有不同的分布,显然会给网络的训练带来困难。
另一方面,数据经过一层层网络计算后,其数据分布也在发生着变化,此现象称为Internal Covariate Shift(内部协变量偏移),接下来会详细解释,会给下一层的网络学习带来困难。
batchnorm 直译过来就是批规范化,就是为了解决这个分布变化问题。
补充两个知识点:
1.1 Internal Covariate Shift
Internal Covariate Shift :此术语是google小组在论文Batch Normalizatoin中提出来的,其主要描述的是:训练深度网络的时候经常发生训练困难的问题,因为,每一次参数迭代更新后,上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难(神经网络本来就是要学习数据的分布,要是分布一直在变,学习就很难了),此现象称之为Internal Covariate Shift。
Batch Normalizatoin 之前的解决方案就是使用较小的学习率,和小心的初始化参数,对数据做白化处理&