BN层总结与实际作用

提出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层总结与实际作用_第1张图片
那么BN层真正的作用是什么呢?
根据论文的理论和可视化分析,BN层的真是作用是使得神经网络的损失函数空间更加平滑,增加了系统的鲁棒性,这种系统性的改良使得:
1.梯度下降不容易陷入局部极值,不那么依赖权重初始化;
2.也使得参数更新时梯度的取值范围更小,梯度更新更具可预测性,不容易出现梯度爆炸和梯度消失。这使得网络可以随机初始化,并使用更大的学习率。
BN层总结与实际作用_第2张图片

有其他方法能达到BN的作用吗?

实际上,论文的作者发现 L p − N o r m L_p-Norm LpNorm (p=1,2,∞)在训练中会起到和BN层相似的作用,甚至在DNN中 L 1 − N o r m L_1-Norm L1Norm的效果比Batch Norm还要好。需要注意的是,这些Norm方法也会增大层间ICS。
BN层总结与实际作用_第3张图片

为什么BN能使解空间的流形更加平滑?

​ BN层是对每一个神经元分别处理的实质是,对同一minibatch里的所有样本的每个特征维度分别处理,处理之后每个维度的特征都会被normalize到均值为0方差为1,再经历一次scale variant and shift。以两个特征维度的数据为例,BN前后的特征分布如下图:

BN层总结与实际作用_第4张图片

对于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 w2x2就会主导训练的方向),这时 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能保证梯度?

以全连接网络为例。

  1. 一层反传的情况。不使用BN的情况为 H l + 1 = W l H l + b l H_{l+1}=W_lH_l+b_l Hl

你可能感兴趣的:(#,deep-learning)