理解Batch Normalization

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jesmine_gu/article/details/82689236

Batch Normalization是在GoogleNet的系列文章第二篇《Batch Normalization: Accelerating Deep Network Training by  Reducing Internal Covariate Shift》中提出来的。

字面意思,Batch Normalizatio(BN)是“批规范化”

 

论文的算法本质:在每层网络输入时,插入一个归一化层,经过了归一化处理之后再进入到下一层网络。那么难点或者突破点就是,怎么在完成对一层输入数据归一化操作以后,不影响本层网络学到的特征。

 

从文章切入。

训练深度神经网络的很复杂,原因在于:在训练中,当一个神经网络层的前面层参数发生变化时,每一层输入数据的分布会发生变化。这就要求更低的学习速率以及更谨慎地初始化使训练速度慢下来,这使得训练一个具有非线性饱和性的网络模型很复杂。这种现象称为“ internal covariate shift”(ICS,即在神经网络的训练过程中,由于参数改变,而引起的神经网络激活值分布的改变),并通过对输入归一化来解决。

作者团队通过将规范化作为网络模型结构的一部分,并为每个训练小批量执行归一化操作。BN允许使用更高的学习率,并且不需要过多注重参数初始化的问题。它与正则化类似,在某些情况下消除了dropout的需要。

 

从文章中总结出BN的几个优势:

  1. 快速训练收敛。可以使用较大的学习速率,加快训练速度;
  2. 提高网络泛化能力。可以不考虑dropout参数的选择问题;
  3. 不需要使用Alexnet使用的局部响应归一化,BN本身就是一个归一化网络层;
  4. 可以把训练数据彻底打乱

 

文章第二部分介绍了输入白化(参见参考博客,不详细展开),发现对每一层进行白化会带来过高的计算代价和运算时间,并且不是处处可微。所以在第三部分介绍了两种简化方法。

简化一:直接对输入信号的每个维度做规范化

简化二:在每一个mini-batch中计算得到这个mini-batch均值和方差,用其代替整个训练样本集的均值和方差

在随机梯度下降(SGD)中采用mini-batch方式,通过每个mini-batch来对每个激活值(activation)做规范化操作。

在训练中学习和计算BN的参数,通过比较熟悉的链式法则。

还有训练一个BN网络的算法

 

暂时先写到这里(打公式真的是一件很麻烦的事)

后面待续……

 

参考资料:

  1. 原论文:https://arxiv.org/pdf/1507.02672v2.pdf
  2. 深度学习(二十九)Batch Normalization 学习笔记
  3. 知乎魏秀参答案
  4. 深度学习【2】Batch Normalization论文翻译

 

 

 

猜你喜欢

转载自blog.csdn.net/jesmine_gu/article/details/82689236