Batch Normalization学习笔记

2018-09-02  本文已影响0人  早起的birder

来源:2015年的论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》阐述了BN算法


一.何为internal covariate shift?

在神经网络的训练过程中(SGD下降算法),由于前一层的参数在变化,后一层的输入的分布同时会发生变化,因此我们需要降低学习率并且选择合适的初始化参数,并且由于梯度消失(弥散)带来的训练会变慢,这种问题称之为internal covariate shift。

二.何为Batch Normalization?
1.BN算法的advantage:

(1)可以适应更大的learning rate并且不必care参数的初始化;
(2)一定程度上起到regularization的作用,可以代替dropout的作用;
(3)BN本身是一个归一化的网络层,加速训练速度。

2.BN算法:

(1)algri1:


image.png

(2)algori2:


image.png
3.BN算法的interpretation:

(1)训练过程:
采用的batch的GSD算法,其中\mu_{\beta}表示输入的mini-batch的均值,\sigma_{\beta}^{2}表示输入的mini-batch的方差,\hat{x_i}表示normalization后的输入值。BN变换置于activation function之前,是一个如同激活函数层一样的层,并且BN变换是针对每一个神经元而言。
其中\gamma\hat{x_i}+\beta表示变换重构:原因在于单纯的normalization会使得前一层学习到的特征破坏,因此引入\gamma\beta两个可学习参数。

(2)测试过程:
E[x]=E_\beta[\mu_\beta]
Var[x]=\frac{m}{m-1}E_\beta[\sigma_\beta^2]
每一个神经元对应的均值采用所有batch的\mu的均值,对应的方差采用所有batch的\sigma^2的均值。
因此预测阶段BN变换为:
y=\frac{\gamma}{\sqrt{Var[x]+\varepsilon}}x+(\beta-\frac{\gamma E[x]}{\sqrt{Var[x]+\varepsilon}})

4.BN在卷积神经网络的使用:

根据卷积网络的参数共享,针对每一个feature map进行BN变换,而不是针对每一个神经元。

5.几个常见问题:

BN到底为什么可以加速收敛:


image.png

如图,右上角未经过BN变换,左下角经过BN变换,显然经过变换的更容易快速找到一个穿过数据的超平面进行分割(任意的初始值\omega)。个人理解最主要的点在于normalization解决梯度弥散,位于0附近的值,对于sigmoid函数来说,梯度值更大,收敛速度更快。

上一篇 下一篇

猜你喜欢

热点阅读