1 为何要用BatchNormalization
为了让深层网络更容易训练,有两种方法:
使用更好的优化器:如 SDG+Momentun等;
改变网络结构,比如加入BN层,处理网络数据,让网络数据服从标准的高斯分布,均值为0,方差为1的分布;
2 使用BatchNormalization的优点
在每次NN的输入时,都要进行数据的预处理,一般是让数据是0均值和单位方差的,这样对于训练是有好处的;
但是当数据走过几层后,基本就不可能保持这个特性了,BN层要做的事情是在每一层的开始,加上这个操作,但是有的数据可能会因此丢失一些信息,所以要加上beta和gama来恢复原始数据,这里的beta和gamma是可学习的;
3 BatchNormalization处理数据过程
(1)求均值
mini-batch: ;
(2)求方差
(3)归一化
(4)计算输出(scale and shift)
和是两个关键超参数,对归一化后的分母进行缩放和平移,通过网络自己学习平移和缩放保留一定的特征;
方差和均值是可以动态调整的,可以通过momentum来调整(加入基于momentum的指数衰减,进行动态调整)