Batch Normalization原理分析和算法详解笔记

 

前言

众所周知,现阶段很多模型在反向传播算法的时候都选择的是随机梯度下降法,尽管随机梯度下降法对于训练深度网络简单高效,但是它有个毛病,就是需要我们人为的去选择参数,比如学习率、参数初始化、权重衰减系数、Drop out比例等。这些参数的选择对训练结果至关重要,以至于我们很多时间都浪费在这些的调参上。

而batch normalization(后面简称BN算法)的出现打破了这样的局面——不需要那么刻意的慢慢调整参数。

其优点在于:

(1)可以选择比较大的初始学习率,因为它具有很快的收敛性。

(2)可以不用Drop out,有人可能会说这样会不会降低泛化能力,无法防止过拟合的问题,不用担心因为BN具有提高网络泛化能力的特性。,即使不用Drop out也可以达到相当好的效果。

(3)不用使用局部响应归一化的问题了,BN顾名思义就知道自带归一化的效果。归一化的好处我说一下,大家都知道现阶段的神经网络其实就是在学习数据的分布,在函数中找到一个属于自己的对应值,而归一化不仅可以将数据分布集中但又保持相对的距离,而且可以防止在每次增加新数据时迭代会产生巨大的波动所带来的影响,这样就可以增加训练的速度了。

这里补充一下局部响应归一化:

BN算法的具体实现原理

BN的想法来源于白化,所谓白化,就是对输入数据分布变换到0均值,单位方差的正态分布,其目的是去除数据的冗余信息,因为一般情况下,所获得的数据都具有相关性,所以通常都要求对数据进行初步的白化或球化处理,因为白化处理可去除各观测信号之间的相关性,从而简化了后续独立分量的提取过程,而且,通常情况下,数据进行白化处理与不对数据进行白化处理相比,算法的收敛性较好。

虽然白化处理的数据效果很好,但是其计算量非常之大,以至于不少人不得不放弃白化预处理。而有人就简化白化的计算,从而得到了现在的BN算法,近似与白化的公式:

要注意,这里的x(k)不是指原始输入,也不是某层每个神经元的输出,而是该层这个神经元的线性激活x=WU+B,这里的U才是上一层神经元的输出。变换的意思是:某个神经元对应的原始的激活x通过减去mini-Batch内m个实例获得的m个激活x求得的均值E(x)并除以求得的方差Var(x)来进行转换。

变换后某个神经元的激活x形成了均值为0,方差为1的正态分布,目的是把值往后续要进行的非线性变换的线性区拉动,增大导数值,增强反向传播信息流动性,加快训练收敛速度但是这样会破坏网络特征分布为了防止这一点,增加了变换重构,即每个神经元增加两个调节参数(scale和shift),这两个参数是通过训练来学习到的,用来对变换后的激活反变换,使得网络表达能力增强,即对变换后的激活进行如下的scale和shift操作,这其实是变换的反操作:

BN算法公式图为:

 

具体的推导过程请参考此处,个人感觉该作者写的非常好,过程也很详细。

BN算法运用

根据上面算法的原理,可以知道,BN算法最主要的功能:归一化。

1.可以对输入的样本数据进行BN处理,我朋友在处理三维坐标时,就将数据用BN算法过了一遍,不仅降维了,而且数据的相关性也分离了,效果出奇的好。

2.根据它的归一化,还可以将BN应用于一个神经网络的任何神经元上。即将某神经元输出的特征进行BN(Wx+b),然后再传到下一层,这样可以增加迭代的速度。

现阶段BN算法主要用于这几处,还有其他方向的,希望读者能在评论区告知,我一定及时加入进去。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值