关闭

解读Batch Normalization

13470人阅读 评论(1) 收藏 举报
分类:

目录

本次所讲的内容为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效果要好。
这里写图片描述

11
0
查看评论

Batch Normalization Caffe版实现解析

建议先看论文Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift,这样会对本文有更好的理解; 同时使用Batch Normalization的GoogLENet也被...
  • lanran2
  • lanran2
  • 2017-02-22 17:21
  • 3883

关于Batch Normalization在Caffe中的使用

在Caffe中使用Batch Normalization需要注意以下两点, 1. 要配合Scale层一起使用,具体参见http://blog.csdn.net/sunbaigui/article/details/50807398以及Residual Network 2. 训练的时候,将BN层的us...
  • kuaitoukid
  • kuaitoukid
  • 2016-08-26 18:48
  • 8933

Caffe 中 BN(BatchNorm ) 层的参数均值、方差和滑动系数解读

Caffe 中 BN(BatchNorm ) 层的参数均值、方差和滑动系数解读 —————————— 可选参数 —————————— 可选参数定义在 src\caffe\proto\caffe.proto 中,共有3个: message BatchNormParameter { // 如果为...
  • d5224
  • d5224
  • 2017-05-25 15:55
  • 4174

【深度学习:CNN】Batch Normalization解析(2)-- caffe中batch_norm层代码详细注解

转载:http://blog.csdn.net/mrhiuser/article/details/52575951 一:BN的解释: 在训练深层神经网络的过程中, 由于输入层的参数在不停的变化, 因此, 导致了当前层的分布在不停的变化, 这就导致了在训练的过程中, 要求 learning ra...
  • SMF0504
  • SMF0504
  • 2017-01-18 13:43
  • 2675

caffe 学习笔记之BatchNormalizationParameter

在官方描述 在proto中的定义为message BatchNormParameter { // If false, normalization is performed over the current mini-batch // and global statistics are ac...
  • u011394059
  • u011394059
  • 2017-06-22 14:44
  • 1084

[caffe]深度学习之图像分类模型Batch Normalization[BN-inception]解读

一、简介 如果将googlenet称之为google家的inception v1的话,其Batch Normalization(http://arxiv.org/pdf/1502.03167v3.pdf)文章讲的就是BN-inception v1。 它不是网络本身本质上的内容修改,而是为了将co...
  • sunbaigui
  • sunbaigui
  • 2016-03-05 10:05
  • 19970

解读Batch Normalization

目录 目录 1-Motivation 2-Normalization via Mini-Batch Statistics 测试 BN before or after Activation 3-Experiments本次所讲的内容为Batch Normalization,简称BN,来源于《Batch ...
  • shuzfan
  • shuzfan
  • 2016-02-23 16:03
  • 13470

深入浅出——深度学习中的Batch Normalization使用

《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shi
  • u010402786
  • u010402786
  • 2016-04-24 15:33
  • 7350

caffe深度学习调参笔记+caffe训练时的问题+dropout/batch Normalization

一、深度学习中常用的调节参数 本节为笔者上课笔记(CDA深度学习实战课程第一期) 1、学习率 步长的选择:你走的距离长短,越短当然不会错过,但是耗时间。步长的选择比较麻烦。步长越小,越容易得到局部最优化(到了比较大的山谷,就出不去了),而大了会全局最优 一般来说,前1000步,很大,0....
  • dongapple
  • dongapple
  • 2017-07-20 10:57
  • 3666

caffe中batch_norm层代码详细注解

caffe batch_norm 层代码详细注解
  • Mrhiuser
  • Mrhiuser
  • 2016-09-18 17:42
  • 8176
    个人资料
    • 访问:655041次
    • 积分:6876
    • 等级:
    • 排名:第4047名
    • 原创:135篇
    • 转载:11篇
    • 译文:1篇
    • 评论:524条