大家好,欢迎来到IT知识分享网。
提出BN层的目的
深度学习的一个重要假设是独立同分布假设(IID),这个假设不仅适用于训练集和测试集,也适用于同一网络的不同层之间,即假设每一层的输入在经过与权重相乘和非线性激活后,输出(即下一层的输入)与输入依然IID,这样在反向传播时各层的梯度都会在一个合理的区间内。
但是在实际训练时,随着每一层W的不断变化,每层的输出的分布也在不断变化,不能保证与输入的IID关系。BN层实际上就是对每层的输出,即每下一层的输入,做一个标准化。
BN层的参数量
BN层是对于每个神经元做归一化处理,甚至只需要对某一个神经元进行归一化,而不是对一整层网络的神经元进行归一化。既然BN是对单个神经元的运算,那么在CNN中卷积层上要怎么搞?假如某一层卷积层有6个特征图,每个特征图的大小是100×100,这样就相当于这一层网络有6×100×100个神经元,如果采用BN,就会有6×100×100个参数γ、β,这样岂不是太恐怖了。因此卷积层上的BN使用,其实也是使用了类似权值共享的策略,把一整张特征图(即一个channel)当做一个神经元进行处理。
卷积神经网络经过卷积后得到的是一系列的特征图,如果min-batch sizes为m,那么网络某一层输入数据可以表示为四维矩阵(m,f,p,q),m为min-batch sizes,f为特征图个数,p、q分别为特征图的宽高。在cnn中我们可以把每个特征图看成是一个特征处理(一个神经元),因此在使用Batch Normalization,mini-batch size 的大小就是:m×p×q,于是对于每个特征图都只有一对可学习参数:γ、β。其实这就是相当于求取所有样本所对应的一个特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化。
即在CNN中BN层的前向传播参数量(理论参数量)为channel数*2.
训练和Inference(测试)时的区别
训练时,BN层除了计算当前mini-batch的方差与均值并对该mini-batch进行逐channel归一化,还会存储这些mini-batch的方差与均值的方差无偏估计与滑动均值估计,并且逐mini-batch更新。当所有的mini-batch都训练过一遍之后,滑动均值就约等于整个训练集的均值,方差的无偏估计就约等于整个训练集的方法。又根据IID假设,它们就约等于测试时整个测试集的均值与方差。参数则直接使用学习到的γ、β。在实际实现时通常方差与均值都使用滑动平均估计。测试时BN层存储的实际前向传播参数量为channel数*(2+2)(每个channel都会存一个滑动平均的均值和方差)。
训练时计算反向传播还需要在前向传播时存储输入与归一化后的输入。
具体的前向与反向计算可以参见李理:卷积神经网络之Batch Normalization的原理及实现
BN层的实际作用
虽然说BN的提出动机是为了解决NN不同层输入的inter covariance shift(ICS)问题,但是根据论文How Does Batch Normalization Help Optimization, BN层在实际训练的过程中不仅不能减小层间ICS,反而会放大ICS。(分布的均值和方差相同不代表就是相同分布。)
那么BN层真正的作用是什么呢?
根据论文的理论和可视化分析,BN层的真是作用是使得神经网络的损失函数空间更加平滑,增加了系统的鲁棒性,这种系统性的改良使得:
1.梯度下降不容易陷入局部极值,不那么依赖权重初始化;
2.也使得参数更新时梯度的取值范围更小,梯度更新更具可预测性,不容易出现梯度爆炸和梯度消失。这使得网络可以随机初始化,并使用更大的学习率。
有其他方法能达到BN的作用吗?
实际上,论文的作者发现 L p − N o r m L_p-Norm Lp−Norm (p=1,2,∞)在训练中会起到和BN层相似的作用,甚至在DNN中 L 1 − N o r m L_1-Norm L1−Norm的效果比Batch Norm还要好。需要注意的是,这些Norm方法也会增大层间ICS。
为什么BN能使解空间的流形更加平滑?
BN层是对每一个神经元分别处理的实质是,对同一minibatch里的所有样本的每个特征维度分别处理,处理之后每个维度的特征都会被normalize到均值为0方差为1,再经历一次scale variant and shift。以两个特征维度的数据为例,BN前后的特征分布如下图:
对于BN前的情况(左图),由于特征 x 1 x_1 x1的scale要比特征 x 2 x_2 x2小很多,那么在函数拟合的过程中:
- 如果两种特征对数据分布的贡献差不多,则 w 1 w_1 w1的解集的scale也会倾向于比 w 2 w_2 w2大很多(否则 w 2 ∗ x 2 w_2*x_2 w2∗x2就会主导训练的方向),这时 w 1 w_1 w1和 w 2 w_2 w2的联合解空间的流形就会变得很不平滑。推广到多维特征的情况同理。
- 若两个参数设置的学习率相同,函数拟合的过程会收敛得很慢,因为 x 1 x_1 x1提供的更新步长要比 x 2 x_2 x2小很多。此时需要为不同的参数设置不同的学习率,或都设置较小的学习率(否则 w 2 w_2 w2容易梯度爆炸)。
BN则通过对数据的特征维度进行Normalize,约束了对应参数的搜参空间,使不同参数的搜参空间的scale相差不大。
为什么BN能保证梯度?
以全连接网络为例。
-
一层反传的情况。不使用BN的情况为 H l + 1 = W l H l + b l H_{l+1}=W_lH_l+b_l Hl+1=WlHl+bl,则对前一层的参数求导有 ∂ H l + 1 ∂ W l = H l \frac{\partial H_{l+1}}{\partial W_l}=H_l ∂Wl∂Hl+1=Hl,若 H l H_l Hl过大/多小,就可能导致前一层参数的更新太快/太慢。使用BN的话则有 ∂ H l + 1 ∂ W l = B N ( H l ) \frac{\partial H_{l+1}}{\partial W_l}=BN(H_l) ∂Wl∂Hl+1=BN(Hl),BN层使得每一层的输出都在一个合理的取值范围之内,所以梯度的更新范围也会比较合理。
-
多层反传的情况。不使用BN的话有:
∂ H k ∂ W n = ∂ H k ∂ H k − 1 ∂ H k − 1 ∂ H k − 2 . . . ∂ H n + 1 ∂ H n ∂ H n ∂ W n = W k − 1 W k − 2 . . . W n + 1 H n − 1 \frac{\partial H_k}{\partial W_n}=\frac{\partial H_k}{\partial H_{k-1}}\frac{\partial H_{k-1}}{\partial H_{k-2}}…\frac{\partial H_{n+1}}{\partial H_n}\frac{\partial H_n}{\partial W_n}=W_{k-1}W_{k-2}…W_{n+1}H_{n-1} ∂Wn∂Hk=∂Hk−1∂Hk∂Hk−2∂Hk−1...∂Hn∂Hn+1∂Wn∂Hn=Wk−1Wk−2...Wn+1Hn−1
则梯度的更新由中间每一层 W W W的Norm的scale共同决定,这就很容易出现梯度爆炸或者梯度消失。
加入BN后,可以证明反向传播的结果与 W W W的尺度无关。我们将 W l W_l Wl拆解为 a l W l 0 a_lW_{l_0} alWl0,其中 ∣ ∣ W l 0 ∣ ∣ = 1 ||W_{l_0}||=1 ∣∣Wl0∣∣=1为单位参数向量, a l = ∣ ∣ W l ∣ ∣ a_l=||W_l|| al=∣∣Wl∣∣为尺度标量;相应的, W l H l W_lH_l WlHl的方差 σ l \sigma_l σl就被拆成 a l σ l 0 a_l\sigma_{l_0} alσl0(由于 σ l \sigma_l σl还与 H l H_l Hl有关,所以 ∣ ∣ σ l 0 ∣ ∣ ||\sigma_{l_0}|| ∣∣σl0∣∣不一定等于1)。则: H l + 1 = B N ( a l W l 0 H l ) = γ a l σ l 0 ( a l W l 0 H l − a l μ l ) + β H_{l+1}=BN(a_lW_{l_0}H_{l})=\frac{\gamma}{a_l\sigma_{l_0}}(a_lW_{l_0}H_{l}-a_l\mu_l)+\beta Hl+1=BN(alWl0Hl)=alσl0γ(alWl0Hl−alμl)+β,可以推知 ∂ H l + 1 ∂ H l = a l W l 0 1 a l σ l 0 = 1 σ l 0 W l 0 \frac{\partial H_{l+1}}{\partial H_l}=a_lW_{l_0}\frac{1}{a_l\sigma_{l_0}}=\frac{1}{\sigma_{l_0}}W_{l_0} ∂Hl∂Hl+1=alWl0alσl01=σl01Wl0,累乘情况类推可知,反传结果与每一层参数的Norm的尺度均无关。
为什么BN能缓解过拟合?
BN的梯度更新不是由单个样本决定的,而是由整个minibatch决定的,由于每一轮训练时,minibatch的构成都和上一轮不同,计算得出的滑动均值和方差也不同,这就在训练中引入了一些随机性因素,这可以环节过拟合。同时,限制参数的搜参空间本身也降低了模型的复杂度,同样能缓解过拟合。但是BN并不能彻底解决过拟合问题。
BN结构的局限性
BN层降低了数据样本之间的绝对差异,从而使得数据的相对差异得到凸显。这使得BN结构在图像分类及相关任务上表现非常好。但是对于数据样本间的绝对差异也很重要的任务(如图像的超分辨率),去掉BN层反而能取得更好的结果。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23371.html