Batch Norm理解

BN怎么计算(训练过程)

设有BN层BN_{\gamma, \beta }(\cdot ),即一个BN层可学习的参数有\gamma\beta

对一个mini-batch,B=\{x_1,x_2,...,x_m\}

  • 第一步,计算当前batch的均值和方差(对同一层的所有节点):\mu _B=\frac{1}{m}\sum_{i=1}^{m}x_i  \sigma _B^2=\frac{1}{m}\sum_{i=i}^{m}(x_i-\mu _B)^2
  • 第二步,进行规范化:\widehat{x_i}=\frac{x_i-\mu _B}{\sqrt{\sigma _B^2+\varepsilon }}
  • 第三步,进行平移和缩放:y_i=\gamma \widehat{x_i}+\beta.

BN的推理过程(如何加速BN?)

采用在训练过程中收集的全局统计量来代替均值和方差:E[x]\leftarrow E_B[\mu _B]Var[x]\leftarrow \frac{m}{m-1}E_B[\sigma _B^2].

然后将上面两部分带入到y_i=\gamma \widehat{x_i}+\beta中,得到:


早期解释

《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》

将每一层的输入都归一化到N(0, 1)上,减少所谓的内部协方差漂移(Internal Covariate Shift).

但问题在于,不论是哪一层的输入都不可能是严格满足正态分布的,所以这种解释有些牵强。


新的解释

《How does batch normalization help optimization?》

BN使得整个非线性函数的landscape更为平滑,从而使得训练过程变得更加平稳。


一种易理解的推导思路

设有损失函数f(\theta ),由利普希茨条件,得存在常数L使得下式成立:

                                                                  \left \| \triangledown _\theta f(\theta+\Delta \theta) - \triangledown _\theta f(\theta) \right \|_2\leq L\left \| \Delta \theta \right \|_2

通过构建辅助函数(推导过程略),可以推出:

                                                       f(\theta+\Delta \theta) -f(\theta)\leqslant <\triangledown _\theta f(\theta), \Delta \theta> + \frac{1}{2}L\left \| \Delta \theta \right \|_2

因为训练过程讲究一个梯度下降,所以f(\theta+\Delta \theta) -f(\theta)< 0.

而显然\frac{1}{2}L\left \| \Delta \theta \right \|_2 \geqslant 0,故只能要求<\triangledown _\theta f(\theta), \Delta \theta>< 0.

现在问题转化成如何选择合适的\Delta \theta,一个自然的选择就是\Delta \theta=-\eta \triangledown _\theta f(\theta).

其中,\eta是一个大于0的标量,也就是我们常说的学习率

将其带入上述不等式,可以得到:

                                                        f(\theta + \Delta \theta)\leq f(\theta)+(\frac{1}{2}L\eta ^2-\eta)\left \| \triangledown _\theta f(\theta) \right \|_2^2

为了保证梯度下降,一个充分条件是:(\frac{1}{2}L\eta ^2-\eta) = \frac{1}{2}\eta(L\eta -2)< 0

可以得到两个结论:

(1)\eta足够小,换言之就是学习率足够小,但这样肯定是不可行的;

(2)L足够小,这是可行的,还可以间接地允许我们增大学习率。

问题在于,L是与f(\theta)相关的,要想改变L,只能通过改动f(\theta)实现。

最终得到的结论就是:BN有助于降低网络的L常数。从而使得网络更容易训练,比如允许增大学习率等。

定性讨论,因为L小了,根据利普希茨条件,也就表明在函数任一点及其邻域上函数值的变化程度不会太大,也就可以理解成函数的走势更平缓了,也就是所谓的landscape平滑了

虽然想要降低L,但不能以牺牲网络拟合能力为代价,不然直接给f(\cdot )乘个0就完事了。。。因此,想到了要对网络输入做文章。两点讨论证明BN的作用的确如此:

结论1:将网络各层输入减去该层所有样本的均值,有助于在不降低网络拟合能力的情况下降低L常数

结论2:将网络各层输入(减去均值后)除以所有样本的标准差,可以起到类似自适应学习率的作用。使得每一层参数的更新更为同步,减少在某一层过拟合的可能性。


最终结论

想要扩大学习率,提高训练速度,只需要在训练过程中,令每一层的输入都减去其均值,再除以去方差即可。

不过由于mini-batch只是样本整体的一个近似,故batch size还是越大越好,越大对均值和方差的估计更好,但同时对算力提出了一定要求。

此外,在训练过程中,需要维护一组变量将均值和方差保存下来,以便在推理的时候使用。

\beta\gamma只是锦上添花,可能作用并不大。

完整的解释BN很难,BN的作用更像是多种因素共同起作用的结果。


另一种定性的解释思路

对于我们常用的一些激活函数,[-1,1]一般都是非线性较强的区间。所以,将网络输入归一化到N(0,1)上,更有助于发挥激活函数的非线性,充分发挥网络的拟合能力。


参考链接:苏剑林. (2019, Oct 11). 《BN究竟起了什么作用?一个闭门造车的分析 》[Blog post]. Retrieved from https://kexue.fm/archives/6992

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值