Batch Normalization

一、不使用Batch Normalization

  • 对某层的前向传播过程有:
  • 针对该层的反向传播过程为:
  • 连续多层的梯度反向传播过程为:

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

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

二、使用Batch Normalization

  • 带有BN的前向传播如下所示:

  • 则其反向传播有:
  • 相应的,连续多层的梯度反向传播过程为:

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

这样的缩放能够产生什么效果?如果权重较小,那必然较小,从而使得其标准差较小,相对的较大,所以相对于原本的就放大了,避免了梯度的衰减;同样的,如果权重较大,可以很容易得到缩小,避免了梯度的膨胀。

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

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


四、关于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为什么效果好?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值