Batch Normalization
虽然这是在将BN
,而且后面有个V2
。但是是goole
团队的
研究背景
数据分布发生变化,导致模型训练困难,对深度卷积神经网络影响极大
针对这个问题:
相关研究
白化:去除输入数据的冗余信息使得数据之间的特征相关性降低,所有特征具有相同的方差
将数据变成0均值,1标准差的形式,实现白化
但是这样操作就会出现一个问题:训练缓慢、效果不佳
因此针对这个问题,提出了BN
方法
注:白化对输入数据做预处理,BN
是对模型中网络层的输出做预处理
Batch Normalization
采用这种方法,存在一定的问题:使神经元输出值在sigmoid线性区,削弱了网络的表达能力,容易使模型出现退化。
针对问题,才用如下方法解决
其中γ
和β
是可以学习的参数
正是采用这种方法能够有效的增加线性变换,提升网络表达能力。同时也提供了恒等映射的可能
但是这么去做,又出现一个问题:minibatc
的统计信息充当总体是不准确的
解决方法:采用指数滑动平均,即离当前值越远,那么最后的权重影响越小
优点
- 可以采用较大学习率
针对类似sigmoid
的饱和激活函数,加上BN
层之后,可以采用较大的学习率
- 充当正则项,顶替
dropout
加入BN
层以后,将当前样本与以前样本通过统计信息联系起来,相当于某种约束。经实验表明:可以减轻dropout
的使用
注意事项
-
BN
层前一层不需要加偏置(bias)
,该偏置可被BN
层中的shift(Beta)
抵消 -
卷积神经网络时,是针对特征图为单位进行
BN
层,即是2D
的BN
操作