参考文档

https://blog.csdn.net/qq_22764813/article/details/97940302
https://zhuanlan.zhihu.com/p/340219662

正文

最近在学习pytorch,自己搭建网络结构,搭建的时候遇到一个问题,就是convolutional层后接了batch normalization和scale层后,到底要不要设置卷积层的偏置,而且我最近在转换模型(caffe转pyotch)时,在跟了batchnorm的卷积层还设置了偏置(由于有偏置参数,所以就设置了偏置),那么到底是否需要在跟了batchnorm的卷积层后面跟上参数了?
以下内容转载自:当卷积层后跟batch normalization层时为什么不要偏置b
首先,看bias的有无到底会不会对bn的结果造成影响?
bn操作的关键一步可以简写为:
image.png
当加上偏置之后,为:
image.png
其中:
image.png
,然后我们对公式进行化简:
image.png
而:
image.png
所以:
image.png
所以说在跟了batchnorm层的卷积层设置偏置是多此一举;
那么为什么没有bias的卷积层能够对bn后的输入学习到很好的决策面呢?
当然啦,bn本身就是将数据归一化到标准分布的呀~
补充(该部分摘自:https://blog.csdn.net/hjimce/article/details/50866313):
BN算法概述
对网络某一层A的输出数据做归一化,然后送入网络下一层B,这样是会影响到本层网络A所学习到的特征的。打个比方,比如我网络中间某一层学习到特征数据本身就分布在S型激活函数的两侧,你强制把它给我归一化处理、标准差也限制在了1,把数据变换成分布于s函数的中间部分,这样就相当于我这一层网络所学习到的特征分布被你搞坏了,这可怎么办?于是文献使出了一招惊天地泣鬼神的招式:变换重构,引入了可学习参数γ、β,这就是算法关键之处:
卷积层后面跟batch normalization层时为什么不要偏置b - 图7
每一个神经元xk都会有一对这样的参数γ、β。这样其实当:
卷积层后面跟batch normalization层时为什么不要偏置b - 图8

卷积层后面跟batch normalization层时为什么不要偏置b - 图9
是可以恢复出原始的某一层所学到的特征的。因此我们引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。最后Batch Normalization网络层的前向传导过程公式就是:
卷积层后面跟batch normalization层时为什么不要偏置b - 图10
上面的公式中m指的是mini-batch size。