美文网首页
Batch Normalization

Batch Normalization

作者: 一个想当大佬的菜鸡 | 来源:发表于2019-08-05 15:37 被阅读0次

    一、不使用Batch Normalization

    • 对某层的前向传播过程有:
      H_{l}=W_{l}^{T}H_{l-1}
    • 针对该层的反向传播过程为:
      \frac{\partial H_{l}}{\partial H_{l-1}}=W_{l}
    • 连续多层的梯度反向传播过程为:
      \frac{\partial H_{l}}{\partial H_{k}}=\prod_{i=k+1}^{l}W_{i}

    在梯度的连续反向传播过程中,是通过权重的连乘进行的。如果权重总是较小,则在反向过程中,梯度呈指数级衰减,就出现了梯度消失的问题;反之,则相应的就会出现梯度爆炸的问题。

    结论:在反向传播过程中,权值的大小会极大的影响梯度的有效传播。因此,有必要在一定程度上限制甚至消除权值对梯度反向传播的不良影响。

    二、使用Batch Normalization

    • 带有BN的前向传播如下所示:
      \frac{1}{\sigma _{l}}=diag(\frac{1}{\sigma _{l1}},\frac{1}{\sigma _{l2}},...,\frac{1}{\sigma _{l3}})
      H_{l}=BN(W_{l}^{T}H_{l-1})=\frac{1}{\sigma }(W_{l}^{T}H_{l-1}-\mu _{l})
    • 则其反向传播有:
      \frac{\partial H_{l}}{\partial H_{l-1}}=\frac{\partial H_{l}}{\partial W_{l}^{T}H_{l-1}}\frac{\partial W_{l}^{T}H_{l-1}}{\partial H_{l-1}}=W_{l}\frac{1}{\sigma _{l}}
    • 相应的,连续多层的梯度反向传播过程为:
      \frac{\partial H_{l}}{\partial H_{k}}=\prod_{i=k+1}^{l}W_{i}\frac{1}{\sigma _{i}}

    与不使用BN相比,每层的反向传播过程增加了一个基于标准差的矩阵\frac{1}{\sigma _{i}}对权重W_{i}进行缩放。

    这样的缩放能够产生什么效果?如果权重W_{i}较小,那\partial W_{i}^{T}H_{l-1}必然较小,从而使得其标准差\sigma _{i}较小,相对的\frac{1}{\sigma _{i}}较大,所以相对于原本的W_{i}就放大了,避免了梯度的衰减;同样的,如果权重较大,可以很容易得到W_{i}缩小,避免了梯度的膨胀。

    加入了BN的反向传播过程中,不易出现梯度消失或梯度爆炸,梯度将始终保持在一个合理的范围内。好处:基于梯度的训练过程可以更加有效的进行,即加快收敛速度,减轻梯度消失或爆炸导致的无法训练的问题。

    三、加入BN后的反向传播与权重尺度无关

    H_{l}=BN(\alpha W_{l}^{T}H_{l-1})=\frac{1}{\sigma }(\alpha W_{l}^{T}H_{l-1}-\alpha \mu _{l})
    \frac{\partial H_{l}}{\partial H_{l-1}}=\frac{\partial H_{l}}{\partial \alpha W_{l}^{T}H_{l-1}}\frac{\partial \alpha W_{l}^{T}H_{l-1}}{\partial H_{l-1}}= \alpha W_{l}\frac{1}{ \alpha \sigma _{l}}=W_{l}\frac{1}{\sigma _{l}}

    四、关于Batch Normalization

    • gamma与beta
      正如文章中所说,使用gamma和beta是为了通过 "scale and shift" 操作来保证整个网络的capacity,毕竟,一直将feature限制在均值为0方差为1的分布下,明显是不那么明智的。尤其是在使用ReLU激活函时,将其输入限制在均值为0,相当于强制让其输出中总有一半为0,想想都觉得荒谬。
    • Batch Normalization的具体操作
      首先,一般性的,我们可以先假设输入数据的维度为 (N, C, D),其中D在MLP中就是1,在2D CNN中就是(H, W)。而BN之所以称之为batch,就是因为normalization只沿batchsize维度进行,即N维。具体而言,就是针对每一个channel(也可以认为是对每一个神经元的输出),对batchsize求均值方差,对MLP而言,均值方差的求解是显而易见的;对2D CNN而言,就是将该channel对应的batchsize个维度为(H, W)的tensor求解出一对均值方差,对这batchsize个(H, W)的tensor,其每一个pixel value减去该均值并除以该方差。总而言之,就是normalization只在batch维进行,相应的gamma和beta也都是长度为channel_num的向量。

    参考资料

    深度学习中 Batch Normalization为什么效果好?

    相关文章

      网友评论

          本文标题:Batch Normalization

          本文链接:https://www.haomeiwen.com/subject/vzscrctx.html