深度学习——Batch Normalization

《Batch Normalization: Accelerating Deep Network Training by  Reducing Internal Covariate Shift》一文中的Batch Normalization这个算法目前已经被大量的应用来进行网络训练。

近年来深度学习领域,随机梯度下降成了训练深度网络的主流方法。

随机梯度下降法对于训练深度网络简单高效,但是它有个问题,就是需要人工选择参数,比如学习率、参数初始化、权重衰减系数、Drop out比例等等。这些参数的选择对训练结果至关重要,以至于我们很多时间都浪费在这些的调参上。

应用BN算法则可以摆脱这种状况。其强大之处在于:

1、可以采用初始很大的学习率,然后学习率的衰减速度也很大,因为这个算法收敛很快。;

2、不再使用drop out、L2正则项参数,采用BN算法后,可以移除这两项参数,或者选择更小的L2正则约束参数了,因为BN具有提高网络泛化能力的特性;

3、不需要使用LRN局部响应归一化层了,因为BN本身就是一个归一化网络层;

4、可以把训练数据彻底打乱。

我们知道在神经网络训练开始前,都要对输入数据做一个归一化处理,那么具体为什么需要归一化呢?归一化后有什么好处呢?

原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度。

对于深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,因此如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。


BN算法原理

在网络的每一层输入的时候,又插入了一个归一化层,也就是先做一个归一化处理,然后再进入网络的下一层。不过文献归一化层,可不像我们想象的那么简单,它是一个可学习、有参数的网络层。

既然说到数据预处理,下面就先来复习一下最强的预处理方法:白化。

神经网络输入数据预处理,最好的算法莫过于白化。然而白化计算量太大了,很不划算,还有就是白化不是处处可微的。经过白化预处理后,数据满足条件:

a、特征之间的相关性降低,这个就相当于pca;

b、数据均值、标准差归一化,也就是使得每一维特征均值为0,标准差为1。

如果数据特征维数比较大,要进行PCA,也就是实现白化的第1个要求,是需要计算特征向量,计算量非常大,于是为了简化计算,作者忽略了第1个要求,仅仅进行近似白化预处理。

BN算法概述

文献使用:变换重构,引入了可学习参数γ、β,BN网络层的前向传导过程公式就是:

 

m是mini-batch size


python实现例子

#计算均值  

m = K.mean(X, axis=-1, keepdims=True)

#计算标准差  

std = K.std(X, axis=-1, keepdims=True)

#归一化  
X_normed = (X - m) / (std + self.epsilon)

#重构变换 
out = self.gamma * X_normed + self.beta


CNN中使用

卷积层上的BN使用,其实是把一整张特征图当做一个神经元进行处理。

卷积神经网络经过卷积后得到的是一系列的特征图,如果min-batch sizes为m,那么网络某一层输入数据可以表示为四维矩阵(m,f,p,q),m为min-batch sizes,f为特征图个数,p、q分别为特征图的宽高。在cnn中我们可以把每个特征图看成是一个特征处理(一个神经元),因此在使用Batch Normalization,mini-batch size 的大小就是:m*p*q,于是对于每个特征图都只有一对可学习参数:γ、β。说白了吧,这就是相当于求取所有样本所对应的一个特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化。

使用了BN后的googlenet较之使用BN前的googlenet,速度快了14倍,在imagenet分类问题的top5上达到4.8%。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值