Batchnorm想要解决的问题:
深度神经网络随着网络加深,网络收敛越来越慢,在训练过程中会出现梯度消失。(总结为网络收敛慢,梯度消失问题)
以上问题出现的原因:
随着网络加深,训练过程中每一层的输出分布逐渐发生偏移,一般整体会逐渐向非线性函数的上下限两端靠近。比如sigmoid激活函数,越往两端走,梯度越小,甚至消失。梯度太小使得训练慢,消失使得无法训练。
BatchNorm如何解决:
通过归一化将数据分布拉回标准正态分布,使得梯度一直处于比较大的状态;同时如果直接归一化为标准正太分布,就抹掉了前面学习的非线性表达能力,因此在batchnorm的实现过程中,增加了平移和缩放参数。保留了非线性。
BatchNorm具体实现:
1.先求本次batch的均值;
2.求本个batch的方差
3.最输入做归一化
4.引入缩放和平移变量gama和beta,最后计算输出。
BatchNorm的好处:
1.使得调参更容易,初始化要求也没那么高,可以使用更大的学习率;
2.降低了数据之间的绝对差异,有去相关的作用,更多考虑相对差异,有利于分类;
3.BN一种正则,可以代替dropout。