BN(Batch normalization)原理

发布时间:2022-08-19 14:03

Batch normalization: Accelerating deep network training by reducing internal covariate shift

BN层的优点

1)加快训练速度,防止过拟合。

2)可以避免激活函数进入非线性饱和区,从而造成梯度弥散问题。

不用理会拟合中的droupout、L2正则化项的参数选择,采用BN算法可以省去这两项或者只需要小的L2正则化约束。原因,BN算法后,参数进行了归一化,原本经过激活函数没有太大影响的神经元分布变得明显,经过一个激活函数以后,神经元会自动削弱或者去除一些神经元,就不用再对其进行dropout。另外就是L2正则化,由于每次训练都进行了归一化,就很少发生由于数据分布不同导致的参数变动过大,带来的参数不断增大。

3)BN层本质上是一个归一化网络层,可以替代局部响应归一化层(LRN层)。

4)可以打乱样本训练顺序(这样就不可能出现同一张照片被多次选择用来训练)论文中提到可以提高1%的精度。

为什么引入BN层

在数据处理的时候,我们一般都对输入样本进行零均值化,降低输入样本之间的差异性,加速网络的训练。但是在网络的训练过程中,每层的数据分布不一样,导致参数不断的适应新的分布。这将网络的训练更加困难。

有些人首先提出在每层增加PCA白化(先对数据进行去相关然后再进行归一化),这样基本满足了数据的0均值、单位方差、弱相关性。但是这样是不可取的,因为在白化过程中会计算协方差矩阵、求逆等操作,计算量会很大,另外,在反向传播时,白化的操作不一定可微。因此,在此背景下BN算法开始出现。

BN层的具体操作

BN(Batch normalization)原理_第1张图片

\gamma\beta  是可以学习的参数,用来增加 鲁棒性,可以恢复原始的数据分布。

pytorch中调用

nn.BatchNorm2d(self, num_features, eps=1e-5, momentum=0.1, affine=True, track_running_stats=True)

num_features,输入数据的通道数,归一化时需要的均值和方差是在每个通道中计算的
eps,用来防止归一化时除以0
momentum,滑动平均的参数,用来计算running_mean和running_var
affine,是否进行仿射变换,即缩放操作
track_running_stats,是否记录训练阶段的均值和方差,即running_mean和running_var

参考文献:

BN算法(Batch Normalization)的原理和作用_我是天才很好的博客-CSDN博客_bn算法

一文搞懂BN的原理及其实现过程(Batch Normalization)_jhsignal的博客-CSDN博客_bn的原理

Pytorch-BN层详细解读_Nicetomeetu-的博客-CSDN博客_bn层 pytorch

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号