卷积神经网络CNN中1×1卷积作用理解
0.引言
研究 GoogLeNet 和 VGG 神經網絡結構的時候,都看見了它們在某些層有采取 1x1 作為卷積核,在最開始看到的AlexNet中都是出現了卷積核是 3x3和5×5的。那么,1x1 的卷積核有什么意義呢?
最初應用 1x1 卷積核的神經網絡是 Network In Network,然后 GoogLeNet 和 VGG 也不約而同的更正了。
他們在論文中解釋,大概有下面 2 個意義。
1、增加網絡的深度,添加非線性
其一:
這個就比較好理解了,1x1 的卷積核雖小,但也是卷積核,加 1 層卷積,網絡深度自然會增加。
其實問題往下挖掘,應該是增加網絡深度有什么好處?為什么非要用 1x1 來增加深度呢?其它的不可以嗎?
其實,這涉及到感受野的問題,我們知道卷積核越大,它生成的 featuremap 上單個節點的感受野就越大,隨著網絡深度的增加,越靠后的 featuremap 上的節點感受野也越大。因此特征也越來越形象,也就是更能看清這個特征是個什么東西。層數越淺,就越不知道這個提取的特征到底是個什么東西。
解釋:
好比以上這個圖,當層數越淺時,我們只能看到low level parts 也就是一些細節的紋理,并不知道這個紋理是來自于車輪,車身,還是其他哪里。但是隨著網絡層數的加深,感受野增大,到了mid level parts時,就可以看到車的一部分零件了,比如看到了車輪,車窗,但是看不完。到了層數很深后,就是high level parts了,可以看到這個物品是個完整的車子,或者是其他一個什么東西。
其二:
但有的時候,我們想在不增加感受野的情況下,讓網絡加深,為的就是引入更多的非線性。而 1x1 卷積核,恰巧可以辦到。
我們知道,卷積后生成圖片的尺寸受卷積核的大小和卷積核個數影響,但如果卷積核是 1x1 ,個數也是 1,那么生成后的圖像長寬不變,厚度為1。
但通常一個卷積層是包含激活和池化的。也就是多了激活函數,比如 Sigmoid 和 Relu。
所以,在輸入不發生尺寸的變化下,加入卷積層的同時引入了更多的非線性,這將增強神經網絡的表達能力。
2、升維或者降維
大家可以看下面這張圖:
在這里插入圖片描述
我們可以直觀地感受到卷積過程中:卷積后的的 featuremap 通道數是與卷積核的個數相同的
所以,如果輸入圖片通道是 3,卷積核的數量是 6 ,那么生成的 feature map 通道就是 6,這就是升維,如果卷積核的數量是 1,那么生成的 feature map 只有 1 個通道,這就是降維度。
值得注意的是,所有尺寸的卷積核都可以達到這樣的目的。
3、減少網絡參數,是成倍數減少
那為什么要用 1x1 呢?
原因就是數據量的大小,我們知道在訓練的時候,卷積核里面的值就是要訓練的權重。下面舉1個例子:
在RestNet中:
?
看右圖,輸入是一個3×3×256的特征,第一個步驟用64個1x1的卷積把256維channel降到64維,然后在最后通過1x1卷積恢復到256個channel,整體上用的參數數目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用1×1卷積的話參考左圖,輸入假設是3x3x256(圖中是3x3x64我們為了對比右圖參數個數所以改變一下),第一步經過256個卷積核3×3×256,第二部再經過256個卷積核3×3×256。所以參數數目: 3x3x256x256x2 = 1179648,參數個數差了16.94倍。
減少參數的例子還出現在哪里呢?我們看VGG
Q1: 為什么3個3x3的卷積可以代替7x7的卷積?
2個3×3卷積核疊加可以當做1個5×5卷積核,3個3×3卷積核疊加可以當做1個7×7卷積核。但是大的卷積核拆成3×3疊加之后可以進一步減少參數個數,但是實際的感受野不會發生改變。
下圖中 最底下是5×5的,用3×3的去卷積得到3×3的圖(也就是第二層),再用3×3的去卷積,就會得到一個數,也就是下圖最頂層。
既然,感受野的大小是一樣的,那么用 3x3 有什么好處呢?
答案有 2,一是參數更少,二是層數加深了。
現在解釋參數變少的問題。(為什么是C^2還是感覺有問題,我理解就是C)
假設現在有 3 層 3x3 卷積核堆疊的卷積層,卷積核的通道是 C 個,那么它的參數總數是 3x(3Cx3C) = 27C^2。同樣和它感受野大小一樣的一個卷積層,卷積核是 7x7 的尺寸,通道也是 C 個,那么它的參數總數就是 49C^2。通過計算很容易得出結論,3x3 卷積方案的參數數量比 7x7 方案少了 81% 多,并且它的層級還加深了。
4.再換一種理解方式
當1*1卷積出現時,在大多數情況下它作用是升/降特征的維度,這里的維度指的是通道數(厚度),而不改變圖片的寬和高。
舉個例子,比如某次卷積之后的結果是W*H*6的特征,現在需要用1*1的卷積核將其降維成W*H*5,即6個通道變成5個通道:
如下圖就是一個W*H*6的特征,而1*1的卷積核在圖上標出,卷積核自身的厚度也是6(圖畫的好難看!!)
這里寫圖片描述
通過一次卷積操作,W*H*6將變為W*H*1,這樣的話,使用5個1*1的卷積核,顯然可以卷積出5個W*H*1,再做通道的串接操作,就實現了W*H*5。
在這里先計算一下參數數量,5個卷積核,每個卷積核的尺寸是1*1*6,也就是一種有30個參數。
我們還可以用另一種角度去理解1*1卷積,可以把它看成是一種全連接,如下圖:
這里寫圖片描述
第一層有6個神經元,分別是a1—a6,通過全連接之后變成5個,分別是b1—b5,第一層的六個神經元要和后面五個實現全連接,本圖中只畫了a1—a6連接到b1的示意,可以看到,在全連接層b1其實是前面6個神經元的加權和,權對應的就是w1—w6,到這里就很清晰了:
第一層的6個神經元其實就相當于輸入特征里面那個通道數:6,而第二層的5個神經元相當于1*1卷積之后的新的特征通道數:5。
w1—w6是一個卷積核的權系數,如何要計算b2—b5,顯然還需要4個同樣尺寸的核。
最后一個問題,圖像的一層相比于神經元還是有區別的,這在于是一個2D矩陣還是一個數字,但是即便是一個2D矩陣的話也還是只需要一個參數(1*1的核),這就是因為參數的權值共享。就是說一個卷積核的參數可以對整張圖片進行卷積一遍。
參考文獻:
https://blog.csdn.net/briblue/article/details/83151475
https://blog.csdn.net/chaipp0607/article/details/60868689
?
總結
以上是生活随笔為你收集整理的卷积神经网络CNN中1×1卷积作用理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: verilog符号 与或非 异或_在Ve
- 下一篇: 卷积神经网络计算题试题_卷积神经网络的计