batch-normalization 技术分析

这两天重新回顾了一下batch-normalization技术,主要参考了论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》与大牛张俊林的博客:http://blog.csdn.net/malefactor/article/details/51476961。不对的地方还望大家指正。

说白了,BN的提出还是为了克服深度神经网络难以训练的弊病,虽然论文里一直在强调他是为了解决“Internal Covariate Shift”这个问题,但是我觉得这只是论文为了显示包装自己而引入的概念。如果从算法本身的角度来分析原因的话,我觉得它真正起作用的原因是:1 防止“梯度弥散”;2 使用了scale和shift参数使新构建的网络拥有了更强的表征能力(至少新的解空间包含了之前的解空间); 3 消除了向量各个维度之间量纲的影响,可以适当的增加learing rate,加快了训练速度。从操作方式来看batch-normalization技术,其实就是把每一层的输入向量的每一维特征进行归一化(减去均值,除以标准差),是不能像论文说的那样保证不同batch中的数据满足同一分布的(只是均值同为0,方差同为1)。

首先我们来详细地讲解一下batch-normalization的工作机制。

如上图所示,BN的使用位置是在每一层输出的激活函数之前。 y=WX+b X 代表了每一层的输入,那么Y就是经过线性变换之后与激活函数之前的部分。Y是一个向量,那么在以batch为单位进行计算的时候,我们的batch-normalization就是作用在m个样本的 Y 向量的各个维度(千万不要理解成同一向量的不同维度之间的操作,不同的向量维度之间代表了不同的属性,不同属性之间的归一化是没有意义的)。具体操作就是减去以m为单位的该维度的均值然后除以标准差。Y+k=YkE[Yk]var[Yk],其中X代表了要归一化的向量,k代表了向量的第k维度。经过了这个变换之后,Y向量的每一维度就变成了以0为均值,1为方差的标注向量,如果这时的激活函数是sigmoid或者tanh的话,就把值往后续要进行的非线性变换的线性区拉动,增大导数值,增强反向传播信息流动性,加快训练收敛速度。但是这样会导致网络表达能力下降,为了防止这一点,每个神经元增加两个调节参数(scale和shift),这两个参数是通过训练来学习到的,用来对变换后的激活反变换,使得网络表达能力增强,即对变换后的激活进行如下的scale和shift操作,这其实是变换的反操作: Zk=Y+kαk+βk

batch-normalization的训练流程如下:
这里写图片描述

batch-normalization的推理流程如下:
BN在训练的时候可以根据Mini-Batch里的若干训练实例进行激活数值调整,但是在推理(inference)的过程中,很明显输入就只有一个实例,看不到Mini-Batch其它实例。解决方案其实很简单,因为每次做Mini-Batch训练时,都会有那个Mini-Batch里m个训练实例获得的均值和方差,现在要全局统计量,只要把每个Mini-Batch的均值和方差统计量记住,然后对这些均值和方差求其对应的数学期望即可得出全局统计量。

在CNN结构中使用batch-normalization技术
论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中给出了一种参考方式:由于在CNN网络结构中,同一个filter map共享权值,故在进行batch-normalization操作的时候也要延续这种思想,同一个filter map共享一组期望、方差、scale和shift。以二维卷积为例,对于batch size为m,卷积结果为p*q的filter来说,他的有效统计量为m*p*q。

其实batch-normalization从广义上来说更像是一种思想,可以用在任意的机器学习算法之中。基于其特征归一化的特性,一般可以用在像神经网络这样采用stacking方式组合在一起的算法结构。

batch-normalization作用分析
论文里作者用了一系列的实验来说明这种算法的优势,总结来说就是下面三点:
1 加快了模型的训练速度(可以使用更大的learing rate)
2 起到了部分正则化的效果
3 提高了分类的效果

论文中作者的实验都是在图像分类上,现在目前来看还没有人用在文本分析领域。我曾经在文本分类领域使用这种技术,我的发现是:如果在浅层次网络中使用这种技术,对最后的结果影响不大,会稍微加快了一点训练速度;而很深的网络还没有在文本分类领域中提出来,我自己曾经胡乱的根据图像处理的深层次卷积神经网络构造了文本处理网络(20层),如果不使用batch-normalization技术那么这个网络几乎无法收敛,而使用了该技术之后,网络的收敛速度大大加快了。至于说最后的效果嘛,呵呵,可能是我构造的方式不对,也可能是更深的网络压根就不适合在文本处理领域,反正最后的结果相对于浅层次的网络并没有明显的提升。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值