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