Batch Normalization详解和momentum参数理解

论文:https://arxiv.org/pdf/1502.03167.pdf

以下博客对batch Normalization的原理,优点和代码解析做了非常清晰的讲解: http://blog.csdn.net/hjimce/article/details/50866313

batch Normalization公式

注意:上式中的γβ是两个可以学习的参数(μ是求出的均值,σ是求出的标准差,ε是人为设置的防止分母为0),实际上当γ取标准差、β取均值的时候,γβ对x标准化的操作提供了逆向的重构。加这个逆向操作的原因是,标准化操作可能会影响该层的表征,所以batch normalization应该有能表示identity transform的能力,所以使用了这两个可以学习的参数来重构让BN层有identity表达的能力

batch Normalization对梯度的影响证明

batch Normalization之所以有用,是对于梯度的影响, 解决了梯度消失,梯度爆炸问题,以至于dropout,L1 L2正则甚至都可以被舍弃.以下来自知乎答主.

加上BN之前的梯度传播:

1.首先,对某层的前向传播过程有:

2.针对该层的反向传播过程为(由于我们关心的是梯度的连续反向传播过程,故不关注权重的梯度):

3.进一步推导可得,连续多层的梯度反向传播过程为:

由此我们可以初步看出,在梯度的连续反向传播过程中,是通过权重 的连乘进行的。因此,如果权重 的值总是较小的(广义上与1相比),则在反向过程中,梯度呈指数级衰减,就出现了梯度消失的问题;反之,如果如果权重 总是较大,则相应的就会出现梯度爆炸的问题。结论就是,在反向传播过程中,权值 的大小会极大的影响梯度的有效传播,而在训练过程中,权重并不总是受人为控制的。因此,我们有必要在一定程度上限制甚至消除权值 对梯度反向传播的不良影响,于是乎,BN就登场了。

在加上BN之后梯度传播如下:

1.带有BN的前向传播过程如下所示(其中 为列向量, 为 ):

2.则其反向传播有:

3.相应的,连续多层的梯度反向传播过程为:

可以看出,与不使用BN相比,每层的反向传播过程的,增加了一个基于标准差的矩阵 对权重 进行缩放。所用,重点来了,这样的缩放能够产生什么效果?方法让我们分析一下,如果权重 较小,那必然 较小,从而使得其标准差 较小,相对的 较大,所以 相对于原本的 就放大了,避免了梯度的衰减;同样的,如果权重 较大,可以很容易得到 相对于原本的 缩小了,避免了梯度的膨胀。于是,加入了BN的反向传播过程中,就不易出现梯度消失或梯度爆炸,梯度将始终保持在一个合理的范围内。而这样带来的好处就是,基于梯度的训练过程可以更加有效的进行,即加快收敛速度,减轻梯度消失或爆炸导致的无法训练的问题。

4.进一步的,我们可以证明,加入BN后的反向传播过程与权重 的尺度无关,证明如下( 为标量,表示任意尺度):

[公式]


作者:我不坏
链接:https://www.zhihu.com/question/38102762/answer/391649040
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Batch Normalization的均值和方差对谁求?

  1. 对feature map的channel方向求均值和方差, 假设batch size=n, feature map的shape= (w, h, c), 其中c是channel个数, 则会对c个n*w*h的特征分别求出c个均值和方差
  2. 同样的,为了减少参数量, 一个channel(相当于一种卷积核提取的同一种特征)只对应一组可学习的参数γ、β, 所以对于一层BN层, 可学习的参数为2*c个.

补充:

  • Keras 现在的Batch Normalization里有一个momentum参数, 该参数作用于mean和variance的计算上, 这里保留了历史batch里的mean和variance值,即 moving_mean和moving_variance, 借鉴优化算法里的momentum算法将历史batch里的mean和variance的作用延续到当前batch. 一般momentum的值为0.9 , 0.99等. 多个batch后, 即多个0.9连乘后,最早的batch的影响会变弱.

你可能感兴趣的:(深度学习,算法)