Batch Normalization的一些个人理解

简单说一说Batch Normalization的一些个人理解:

1、要说batch normalization不得不先说一下梯度消失和梯度爆炸问题

梯度消失一是容易出现在深层网络中,二是采用了不合适的损失函数也较容易发生梯度消失,比如sigmoid

梯度爆炸一般出现在深层网络和权值初始化值太大的情况。

考虑这样一个简单的三隐层的全连接网络

我们假设每一层网络激活后的输出为fi(x),其中i表示第i, x代表第i层的输入,也就是第i−1层的输出,f是激活函数,那么得出fi+1=f(fi∗wi+1+bi+1) ,偏置在梯度消失和梯度爆炸中影响较小,所以我们可以简单记为fi+1=f(fi∗wi+1)

如果要更新第二隐层的权值信息,根据链式求导法则,更新梯度信息:

很容易看出来∂f2 /∂w2即为第二隐藏层的输入,∂f4 /f3就是对激活函数求导。如果此部分大于1,那么层数增多的时候,最终的求出的梯度更新信息将以指数形式增加,即发生梯度爆炸,如果此部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失(注:在深层网络中梯度消失发生的常见一点,而梯度爆炸比较少见)。

如下图所示,是sigmoid函数的导数信息,可见sigmoid函数的导数最大为0.25,所以使用sigmoid函数,网络过深时较容易发生梯度消失

梯度消失和梯度爆炸问题也说明一个问题:随着网络深度的增加,网络的输出在输入到激活函数中之前,往往会趋于分布在较大的值附近或较小的值附近,而BN正是可以较好的解决这个问题

2、介绍batch normalization

因为深层神经网络在做非线性变换前的激活输入值(就是x=WU+BU是输入,x是激活函数的输入)随着训练过程加深中,其分布逐渐发生偏移或者变动,之所以训练收敛慢一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致激活单元饱和,即反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因。

BN就是通过一定的规范化手段,把每层神经网络任意神经元的输入值的分布强行拉回到均值为0方差为1标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活函数输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致激活函数较大的变化,也就是让梯度变大,避免产生梯度消失问题,而且梯度变大也意味着学习收敛速度快,能大大加快训练速度。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值