卷积层后面跟batch normalization层时为什么不要偏置b

最近在学习pytorch,自己搭建网络结构,搭建的时候遇到一个问题,就是convolutional层后接了batch normalization和scale层后,到底要不要设置卷积层的偏置,而且我最近在转换模型(caffe转pyotch)时,在跟了batchnorm的卷积层还设置了偏置(由于有偏置参数,所以就设置了偏置),那么到底是否需要在跟了batchnorm的卷积层后面跟上参数了?

以下内容转载自:当卷积层后跟batch normalization层时为什么不要偏置b

首先,看bias的有无到底会不会对bn的结果造成影响? 
bn操作的关键一步可以简写为: 

当加上偏置之后,为:

其中:

,然后我们对公式进行化简:

而: 

所以: 

所以说在跟了batchnorm层的卷积层设置偏置是多此一举;

那么为什么没有bias的卷积层能够对bn后的输入学习到很好的决策面呢? 
当然啦,bn本身就是将数据归一化到标准分布的呀~

补充(该部分摘自:https://blog.csdn.net/hjimce/article/details/50866313):

BN算法概述

对网络某一层A的输出数据做归一化,然后送入网络下一层B,这样是会影响到本层网络A所学习到的特征的。打个比方,比如我网络中间某一层学习到特征数据本身就分布在S型激活函数的两侧,你强制把它给我归一化处理、标准差也限制在了1,把数据变换成分布于s函数的中间部分,这样就相当于我这一层网络所学习到的特征分布被你搞坏了,这可怎么办?于是文献使出了一招惊天地泣鬼神的招式:变换重构,引入了可学习参数γ、β,这就是算法关键之处:

每一个神经元xk都会有一对这样的参数γ、β。这样其实当:

 

是可以恢复出原始的某一层所学到的特征的。因此我们引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。最后Batch Normalization网络层的前向传导过程公式就是:

上面的公式中m指的是mini-batch size。 

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值