解读Batch Normalization

本文转载自:http://blog.csdn.net/shuzfan/article/details/50723877

本次所讲的内容为Batch Normalization,简称BN,来源于《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,是一篇很好的paper。

1-Motivation

作者认为:网络训练过程中参数不断改变导致后续每一层输入的分布也发生变化,而学习的过程又要使每一层适应输入的分布,因此我们不得不降低学习率、小心地初始化。作者将分布发生变化称之为 internal covariate shift。

大家应该都知道,我们一般在训练网络的时会将输入减去均值,还有些人甚至会对输入做白化等操作,目的是为了加快训练。为什么减均值、白化可以加快训练呢,这里做一个简单地说明:

首先,图像数据是高度相关的,假设其分布如下图a所示(简化为2维)。由于初始化的时候,我们的参数一般都是0均值的,因此开始的拟合y=Wx+b,基本过原点附近,如图b红色虚线。因此,网络需要经过多次学习才能逐步达到如紫色实线的拟合,即收敛的比较慢。如果我们对输入数据先作减均值操作,如图c,显然可以加快学习。更进一步的,我们对数据再进行去相关操作,使得数据更加容易区分,这样又会加快训练,如图d。 

白化的方式有好几种,常用的有PCA白化:即对数据进行PCA操作之后,在进行方差归一化。这样数据基本满足0均值、单位方差、弱相关性。作者首先考虑,对每一层数据都使用白化操作,但分析认为这是不可取的。因为白化需要计算协方差矩阵、求逆等操作,计算量很大,此外,反向传播时,白化操作不一定可导。于是,作者采用下面的Normalization方法。

2-Normalization via Mini-Batch Statistics

数据归一化方法很简单,就是要让数据具有0均值和单位方差,如下式: 

但是作者又说如果简单的这么干,会降低层的表达能力。比如下图,在使用sigmoid激活函数的时候,如果把数据限制到0均值单位方差,那么相当于只使用了激活函数中近似线性的部分,这显然会降低模型表达能力。 

为此,作者又为BN增加了2个参数,用来保持模型的表达能力。  于是最后的输出为: 

上述公式中用到了均值E和方差Var,需要注意的是理想情况下E和Var应该是针对整个数据集的,但显然这是不现实的。因此,作者做了简化,用一个Batch的均值和方差作为对整个数据集均值和方差的估计。  整个BN的算法如下: 

求导的过程也非常简单,有兴趣地可以自己再推导一遍或者直接参见原文。

测试

实际测试网络的时候,我们依然会应用下面的式子: 

特别注意: 这里的均值和方差已经不是针对某一个Batch了,而是针对整个数据集而言。因此,在训练过程中除了正常的前向传播和反向求导之外,我们还要记录每一个Batch的均值和方差,以便训练完成之后按照下式计算整体的均值和方差: 

BN before or after Activation

作者在文章中说应该把BN放在激活函数之前,这是因为Wx+b具有更加一致和非稀疏的分布。但是也有人做实验表明放在激活函数后面效果更好。这是实验链接,里面有很多有意思的对比实验:https://github.com/ducha-aiki/caffenet-benchmark

3-Experiments

作者在文章中也做了很多实验对比,我这里就简单说明2个。  下图a说明,BN可以加速训练。图b和c则分别展示了训练过程中输入数据分布的变化情况。 

下表是一个实验结果的对比,需要注意的是在使用BN的过程中,作者发现Sigmoid激活函数比Relu效果要好。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

卷积神经网络CNN原理详解(一)——基本原理

作者:Charlotte77数学系的数据挖掘民工 博客专栏:http://www.cnblogs.com/charlotte77/ 个人公众号:Charlott...

41950
来自专栏IT派

对数几率回归 —— Logistic Regression

首先,在引入LR(Logistic Regression)模型之前,非常重要的一个概念是,该模型在设计之初是用来解决0/1二分类问题,虽然它的名字中有回归二字,...

13920
来自专栏AI科技大本营的专栏

一文概览主要语义分割网络:FCN,SegNet,U-Net...

图像的语义分割是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类。虽然自 2007 年以来,语义分割/场景解析一直是计算机视觉社区的一部分,但与计...

63320
来自专栏杨熹的专栏

为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例

里面对 BGD,SGD,MBGD,Adagrad,Adadelta,RMSprop,Adam 进行了比较, 今天对其中的 mini-batch 梯度下降 作进...

18210
来自专栏机器人网

最全机器学习算法汇总

本文是对机器学习算法的一个概览,以及个人的学习小结。通过阅读本文,可以快速地对机器学习算法有一个比较清晰的了解。本文承诺不会出现任何数学公式及推导,适合茶余饭后...

44650
来自专栏计算机视觉与深度学习基础

解读Batch Normalization

目录 目录 1-Motivation 2-Normalization via Mini-Batch Statistics 测试 BN before or af...

223100
来自专栏数据派THU

一文图解机器学习的基本算法!

来源:软件定义世界 本文长度为2877字,建议阅读6分钟 本文为你分析如何选择机器学习的各种方法。 每当提到机器学习,大家总是被其中的各种各样的算法和方法搞晕,...

25050
来自专栏GAN&CV

风格迁移背后原理及tensorflow实现

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

33010
来自专栏深度学习思考者

深入浅出——搞懂卷积神经网络的过拟合、梯度弥散、batchsize的影响的问题(二)

  上一篇主要是对卷积神经网络的整个训练过程中公式以及误差的推导给出详细的分析。   博客地址:https://cloud.tencent.com/deve...

45590
来自专栏机器学习算法与Python学习

机器学习(7) -- k-means 聚类

根据大家的提议,从今天起每次算法介绍完之后会给大家一个用python编写的实例刚打架参考 Clustering  9. Clustering     9.1...

40550

扫码关注云+社区

领取腾讯云代金券