Batch Normalization (BN) 论文阅读笔记

以前偷懒没有看BN的论文,现在找工作,每个面试官必问BN,必须花时间弄清BN的原理。奉劝找算法工程师的人一定要熟练掌握BN,不能只知道它在做标准化这么简单。


Batch Normalization(BN)解决的是Internal Covariate Shift (ICS)的问题。

Internal Covariate Shift在文中定义为
The change in the distribution of network activations due to the change in network parameters during training.

也就是在训练的过程中因为网络参数改变引起网络各层输出的分布改变。

Internal Covariate Shift分为两个部分,Internal和Covariate Shift。

  1. Covariate Shift。Covariate Shift 指在有监督学习中,对训练数据集Batch Normalization (BN) 论文阅读笔记和测试数据集Batch Normalization (BN) 论文阅读笔记,边际分布不一致,即Batch Normalization (BN) 论文阅读笔记,但条件分布一致Batch Normalization (BN) 论文阅读笔记。通过domain adaptation的方法解决。参考 https://www.quora.com/What-is-Covariate-shift
  2. Internal。注意在网络中前一层的输出是下一层的输入。对某一中间层而言,在训练的过程中,因为前面层的参数不断变化,输出分布变化,对该层的输入分布也不断变化。

对某一中间层而言,输入的分布不断改变,需要不断适应新的分布,学习效率也就不高。

BN希望固定网络的各层输入的分布,以加快训练速度。


白化(whitening)模型的输入可以使得训练收敛更快。神经网络时多层的结构,考虑白化神经网络中各层的输入。

Gradient Descent和Normalization的关系

Gradient Descent(GD)和BN的关系分为两种情况:

  1. gradient descent optimization does not take into account the fact that the normalization takes place
  2. gradient descent optimization takes into account the fact that the normalization takes place

情况1中,GD不知道标准化的存在,会存在的问题。
考虑某一层有输入u,和需要学习的偏差b,标准化会首先会减均值,也就是Batch Normalization (BN) 论文阅读笔记,这里Batch Normalization (BN) 论文阅读笔记
如果GD不知道标准化的存在,不考虑E[x]对b对影响,那么Batch Normalization (BN) 论文阅读笔记Batch Normalization (BN) 论文阅读笔记。对b的更新对输出没有任何对效果,而且b可以无限变大。

情况2中,GD知道标准化的存在。上面的例子中,考虑E[x]对b对影响,那么b将不会被更新。

对mini-batch做Normalization

对整个数据集做白化复杂度很高,BN做了两个必要的化简:

  1. instead of whitening the features in layer inputs and outputs jointly, we will normalize each scalar feature independently, by making it have the mean of zero and the variance of 1.
  2. since we use mini-batches in stochastic gradient training, each mini-batch produces estimates of the mean and variance of each activation.

对一个d维的输入x,对每一维分别标准化。比如对第k维

Batch Normalization (BN) 论文阅读笔记,这里对均值和方差都是从mini-batch求的。

注意到简单地对某个层的输入做标准化会改变这个层地表示。为了解决这个问题,BN对每个**值引入两个参数,分别做scale和shift,思想是allows the BN transform to represent the identity transformation and preserves the network capacity
(感觉类似于resnet)。即
Batch Normalization (BN) 论文阅读笔记

完整的Batch Normalizing Transform 如下图

Batch Normalization (BN) 论文阅读笔记

反传时的梯度,使用链式法则chain rule求取

Batch Normalization (BN) 论文阅读笔记

测试阶段的BN

测试时,BN的均值和方差用的是训练时记录的。因为测试时均值和方差时固定的,BN层变为一个线性变换。

对卷积层做BN

对conv层的BN和对fc层的BN不同,因为filter在图像上移动,filter weight是整个图像共用的。

为了保持卷积的性质,在conv层中,对同一个feature map不同位置的元素,一起做normalization。比如输入维度[N, C, W, H],那么对N*W*H个元素一起求均值和方差,也就是会有C个均值和方差。

参考 https://*.com/questions/38553927/batch-normalization-in-convolutional-neural-network

BN使得可以用较大的学习率训练

通常,大学习率会增大参数,进而增大后续计算的梯度,引起模型爆炸。采用BN层,可以使梯度反传不受参数规模影响。

具体而言,假设有一个标量Batch Normalization (BN) 论文阅读笔记,对BN层有
Batch Normalization (BN) 论文阅读笔记
即,经过BN处理后的输出,不受标量Batch Normalization (BN) 论文阅读笔记影响。所以有

  1. Batch Normalization (BN) 论文阅读笔记,即,标量Batch Normalization (BN) 论文阅读笔记不影响反传的梯度。
  2. Batch Normalization (BN) 论文阅读笔记,即,大的参数会引起小的梯度。

两个结论公式都可以通过导数是输出对输入的变化率简单得到。


Reference:
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
深度学习中 Batch Normalization为什么效果好?