Batch Normalization的作用

链接:https://www.zhihu.com/question/38102762/answer/391649040

1. 不使用Batch Normalization

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

H_l = {W_l}^TH_{l-1}\\

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

\frac{\partial{H_l}}{\partial{H_{l-1}}} = W_{l}\\

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

\frac{\partial{H_l}}{\partial{H_{k}}} =\prod_{i=k+1}^{l}W_{i}\\

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

2. 使用Batch Normalization

1.带有BN的前向传播过程如下所示(其中 \mu_l 为列向量, \frac{1}{\sigma_l}diag(\frac{1}{​{\sigma_{l}}_1}, \frac{1}{​{\sigma_{l}}_2}, ..., \frac{1}{​{\sigma_{l}}_n}) ):

H_l = BN({W_l}^TH_{l-1}) = \frac{1}{\sigma_l}({​{W_l}^TH_{l-1}-\mu_l})\\

2.则其反向传播有:

\frac{\partial{H_l}}{\partial{H_{l-1}}} = \frac{\partial{H_l}}{\partial{​{W_l}^TH_{l-1}}}\frac{\partial{​{W_l}^TH_{l-1}}}{\partial{H_{l-1}}}=W_l\frac{1}{\sigma_l}\\

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

\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 较小,那必然 {W_i}^TH_{l-1} 较小,从而使得其标准差 \sigma_i 较小,相对的 \frac{1}{\sigma_i} 较大,所以 W_i\frac{1}{\sigma_i} 相对于原本的 W_i 就放大了,避免了梯度的衰减;同样的,如果权重 W_i 较大,可以很容易得到 W_i\frac{1}{\sigma_i} 相对于原本的 W_i 缩小了,避免了梯度的膨胀。于是,加入了BN的反向传播过程中,就不易出现梯度消失或梯度爆炸,梯度将始终保持在一个合理的范围内。而这样带来的好处就是,基于梯度的训练过程可以更加有效的进行,即加快收敛速度,减轻梯度消失或爆炸导致的无法训练的问题。

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

H_l = BN(\alpha{W_l}^TH_{l-1}) = \frac{1}{\alpha\sigma_l}({\alpha{W_l}^TH_{l-1}-\alpha\mu_l})\\ \frac{\partial{H_l}}{\partial{H_{l-1}}} = \frac{\partial{H_l}}{\partial{\alpha{W_l}^TH_{l-1}}}\frac{\partial{\alpha{W_l}^TH_{l-1}}}{\partial{H_{l-1}}}=\alpha{W_l}\frac{1}{\alpha\sigma_l}=W_l\frac{1}{\sigma_l}

3. 关于Batch Normalization

1.gamma与beta

正如文章中所说,使用gamma和beta是为了通过 "scale and shift" 操作来保证整个网络的capacity,毕竟,一直将feature限制在均值为0方差为1的分布下,明显是不那么明智的。尤其是在使用ReLU激活函时,将其输入限制在均值为0,相当于强制让其输出中总有一半为0,想想都觉得荒谬。

2.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的向量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值