对Batch Normalization理解

论文地址:https://arxiv.org/pdf/1502.03167.pdf
深层神经网络有一个前提是IID即独立同分布假设,而每一层输入的分布都会随着前一层参数的变化而变化,这就降低了训练的速度,如图所示
在这里插入图片描述
当底层网络中参数发生微弱变化时,由于每一层中的线性变换与非线性激活映射,这些微弱变化随着网络层数的加深而被放大(类似蝴蝶效应);另一方面,参数的变化导致每一层的输入分布会发生改变,进而上层的网络需要不停地去适应这些分布变化,使得我们的模型训练变得困难。上述这一现象叫做Internal Covariate Shift(ICS)
BN就是使每一层神经网络的输入均保持相同分布。

一、ICS

我们每一层的线性变化为Y(i) = WX+b,i表示第i层,那么经过激活函数变为Z(i) = f(Y(i)),我们把得到的Z(i)作为第i+1层的输入。我们没进行一次权值更新,就会改变W与b,从而Y(i)与Z(i)都会发生变化,而第i+1层的就需要不断适应这种数据变化,整个网络学习速率就会变慢,这就称之为ICS。
ICS的问题是发生在每一层,而不只是发生在输入层,我们需要稳定的IID假设来进行稳定的学习规律,所以我们有两种解决方案。
(1)白化:分为PCA白化与ZCA白化,就是对输入数据分布变换到0均值,方差为1的高斯分布(PCA)或均值为0,方差相同的高斯分布(ZCA),从而去除特征之间的相关性。但白化过程计算成本太高,并且在白化过程改变了网络每一层的分布,因而改变了网络层中本身数据的表达能力。底层网络学习到的参数信息会被白化操作丢失掉。
(2)BN:简易版白化

二、BN思想

激活前输入值(Y = WX+b)随着网络深度加深,其分布逐渐发生偏移,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WX+b是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因。
而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着迈的步子大了,学习收敛速度就快了,能大大加快训练速度。
在这里插入图片描述
在这里插入图片描述
假设原来是均值为-6,方差为1的高斯分布,那么我们有百分之95的可能性值落在[-8,-4]之间,通过sigmoid后梯度趋近于0,梯度变化很慢,降低训练速度。
若通过BN把原分布拉回到均值为0,方差为1的高斯分布,那么我们有百分之95的可能性落在[-2,2]中,从而x的小变化会引起梯度的大变化,梯度变化收敛速度也变大,从而提高训练速度。
BN作为简易版白化,需要解决白化的两个问题:(1)我们可以单独对每个特征进行normalizaiton(2)白化弱化了每一层输入数据表达能力,那就加个线性变换,让来恢复本身的表达能力。
在这里插入图片描述
在这里插入图片描述
同样一个样本的输出不再仅仅取决于样本本身,也取决于跟这个样本属于同一个mini-batch的其它样本。同一个样本跟不同的样本组成一个mini-batch,它们的输出是不同的。

三、测试阶段

在这里插入图片描述

四、BN的优势

(1)BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度
(2)BN使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定
(3)BN允许网络使用饱和性激活函数(例如sigmoid,tanh等),缓解梯度消失问题
(4)BN具有一定的正则化效果

另外,原作者通过也证明了网络加入BN后,可以丢弃Dropout,模型也同样具有很好的泛化效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值