链接:https://www.zhihu.com/question/38102762/answer/391649040
1. 不使用Batch Normalization
1.首先,对某层的前向传播过程有:
2.针对该层的反向传播过程为(由于我们关心的是梯度的连续反向传播过程,故不关注权重的梯度):
3.进一步推导可得,连续多层的梯度反向传播过程为:
由此我们可以初步看出,在梯度的连续反向传播过程中,是通过权重 的连乘进行的。因此,如果权重 的值总是较小的(广义上与1相比),则在反向过程中,梯度呈指数级衰减,就出现了梯度消失的问题;反之,如果如果权重 总是较大,则相应的就会出现梯度爆炸的问题。结论就是,在反向传播过程中,权值 的大小会极大的影响梯度的有效传播,而在训练过程中,权重并不总是受人为控制的。因此,我们有必要在一定程度上限制甚至消除权值 对梯度反向传播的不良影响,于是乎,BN就登场了。
2. 使用Batch Normalization
1.带有BN的前向传播过程如下所示(其中 为列向量, 为 ):
2.则其反向传播有:
3.相应的,连续多层的梯度反向传播过程为:
可以看出,与不使用BN相比,每层的反向传播过程的,增加了一个基于标准差的矩阵 对权重 进行缩放。所用,重点来了,这样的缩放能够产生什么效果?方法让我们分析一下,如果权重 较小,那必然 较小,从而使得其标准差 较小,相对的 较大,所以 相对于原本的 就放大了,避免了梯度的衰减;同样的,如果权重 较大,可以很容易得到 相对于原本的 缩小了,避免了梯度的膨胀。于是,加入了BN的反向传播过程中,就不易出现梯度消失或梯度爆炸,梯度将始终保持在一个合理的范围内。而这样带来的好处就是,基于梯度的训练过程可以更加有效的进行,即加快收敛速度,减轻梯度消失或爆炸导致的无法训练的问题。
4.进一步的,我们可以证明,加入BN后的反向传播过程与权重 的尺度无关,证明如下( 为标量,表示任意尺度):
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的向量。