一、前言
Batch Normalization,简称BN,直译过来是批标准化。原始论文读了有几遍,每次读起来都感觉内容很晦涩,很长时间都没有理解透彻其中的基本概念和一些细节。最近因为工作原因,深入的进行了一次研读,终于把主要脉络和细节搞清楚了。在讲一个复杂的概念的时候,搞清楚其出现的背景很重要,因果关系搞清楚了,后面在实践过程中才能理解的更加透彻。所以,本文试着将自己对BN的理解进行整理,希望能帮到也在研究BN的同学,也欢迎对BN有深入理解的同学批评指正。
推荐一篇写的比较好的博文:【深度学习】深入理解Batch Normalization批标准化 - 郭耀华 - 博客园
二、背景
BN的提出源于一个概念: covarivate shift,翻译成中文容易曲解,因此不给出中文翻译。什么是covarivate shift?论文里给出了解释,如果一个系统的输入分布不断变化,为了适应不断变化的输入分布,系统需要不断进行调整,这就是covarivate shift。关于这个的一篇文章写的很好: covariate shift现象的解释。首先说明一点,covarivate shift对于网络训练不利,解决的方法是将每层的输入分布进行固定。结合原论文和一些相关文章的结论,做了初步的总结和筛选,得出固定输入分布相关的优点如下:
- 增强泛化性,由于网络在训练过程中,每层的输入分布相对固定,一定程度上可以捕捉数据的普适特征。
- 减轻层与层之间的互相影响,削弱了浅层的微小变化导致深层激活单元值的剧烈变化的现象,使大部分激活单元都能停留在一个非饱和的区域里,加快收敛速度。
关于第二点, 可以通过下图sigmod激活函数进行理解。
如图,由于层与层之前的互相影响,随着层越来越深,影响会别放大,前面层的参数发生些微的变化便会导致之后的层的参数发生很大变化,导致输入分布经常变化,很多激活单元将被推向饱和区域(右图),但是如果固定输入分布,则可以将激活限制在一个非饱和区域(左图)。关于第二点,BN的做法不仅使激活停留在一个非饱和区,且这个非饱和区是非线性的,提高网络学习速度的同时,让网络的非线性能力不会受损