1. 程式人生 > >當卷積層後跟batch normalization層時為什麼不要偏置b

當卷積層後跟batch normalization層時為什麼不要偏置b

起因

之前使用的是inception-v2模型,在v2中,標準的卷積模組為:
* conv_w_b->bn->relu ->pooling*
即,在v2中,儘管在卷積之後、啟用函式之前大量使用batch normalization,但是卷積層依然使用可學習的偏置引數。

這也比較符合我的直觀理解,因為偏置在一般的卷積神經網路中本來就是很重要的,可以讓超判決面不過原點。
但是我在讀inception-v3的程式碼時,發現v3中一個卷積模組中 bn和bias是不共存的,這令我很費解,這麼重要的引數為什麼沒有?

後來想明白了,接下來是明白的過程:

首先,看bias的有無到底會不會對bn的結果造成影響?


bn操作的關鍵一步可以簡寫為:

yi=xix¯D(x)
當加上偏置之後,為:
ybi=xbixb¯D(xb)
其中:
xbi=xi+b
,然後我們對公式進行化簡:
ybi=xi+b(x¯+b)D(xb)=xix¯D(xb)
而:
D(xb)=E[(xb)2][E(xb)]2D(xb)=1Ni(xbi)2(x¯+b)2D(xb)=1Ni(xi+b)2(x¯+b)2D(xb)=1Nix2i+2bx¯+b2(x¯+b)2D(xb)=1Nix2ix¯2D(xb)=D(x)
所以:
ybi=yi

好了。
那麼為什麼沒有bias的卷積層能夠對bn後的輸入學習到很好的決策面呢?

當然啦,bn本身就是將資料歸一化到標準分佈的呀~