您的位置:首页 > 其它

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

2017-09-20 23:08 309 查看

起因

之前使用的是inception-v2模型,在v2中,标准的卷积模块为:

* conv_w_b->bn->relu ->pooling*

即,在v2中,尽管在卷积之后、激活函数之前大量使用batch normalization,但是卷积层依然使用可学习的偏置参数。

这也比较符合我的直观理解,因为偏置在一般的卷积神经网络中本来就是很重要的,可以让超判决面不过原点。

但是我在读inception-v3的代码时,发现v3中一个卷积模块中 bn和bias是不共存的,这令我很费解,这么重要的参数为什么没有?

后来想明白了,接下来是明白的过程:

首先,看bias的有无到底会不会对bn的结果造成影响?

bn操作的关键一步可以简写为:

yi=xi−x¯D(x)−−−−√

当加上偏置之后,为:

ybi=xbi−xb¯D(xb)−−−−−√

其中:

xbi=xi+b

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

ybi=xi+b−(x¯+b)D(xb)−−−−−√=xi−x¯D(xb)−−−−−√

而:

D(xb)=E[(xb)2]−[E(xb)]2D(xb)=1N∑i(xbi)2−(x¯+b)2D(xb)=1N∑i(xi+b)2−(x¯+b)2D(xb)=1N∑ix2i+2bx¯+b2−(x¯+b)2D(xb)=1N∑ix2i−x¯2D(xb)=D(x)

所以:

ybi=yi



好了。

那么为什么没有bias的卷积层能够对bn后的输入学习到很好的决策面呢?

当然啦,bn本身就是将数据归一化到标准分布的呀~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  深度学习