1X1 convolution layers
一文讀懂卷積神經網絡中的1x1卷積核
Amusi
微信公眾號:CVer
552 人贊同了該文章
前言
在介紹卷積神經網絡中的1x1卷積之前,首先回顧卷積網絡的基本概念[1]。
?
1. 卷積核(convolutional kernel):可以看作對某個局部的加權求和;它是對應局部感知,它的原理是在觀察某個物體時我們既不能觀察每個像素也不能一次觀察整體,而是先從局部開始認識,這就對應了卷積。卷積核的大小一般有1x1,3x3和5x5的尺寸(一般是奇數x奇數)。
?
卷積核的個數就對應輸出的通道數(channels),這里需要說明的是對于輸入的每個通道,輸出每個通道上的卷積核是不一樣的。比如輸入是28x28x192(WxDxK,K代表通道數),然后在3x3的卷積核,卷積通道數為128,那么卷積的參數有3x3x192x128,其中前兩個對應的每個卷積里面的參數,后兩個對應的卷積總的個數(一般理解為,卷積核的權值共享只在每個單獨通道上有效,至于通道與通道間的對應的卷積核是獨立不共享的,所以這里是192x128)。
?
2. 池化(pooling):卷積特征往往對應某個局部的特征。要得到global的特征需要將全局的特征執行一個aggregation(聚合)。池化就是這樣一個操作,對于每個卷積通道,將更大尺寸(甚至是global)上的卷積特征進行pooling就可以得到更有全局性的特征。這里的pooling當然就對應了cross region。
與1x1的卷積相對應,而1x1卷積可以看作一個cross channel的pooling操作。pooling的另外一個作用就是升維或者降維,后面我們可以看到1x1的卷積也有相似的作用。
?
下面從一般卷積過程介紹1x1的卷積,下面圖像來表示卷積的過程:
convolution
1x1卷積核
1x1卷積核,又稱為網中網(Network in Network)[2]。
?
這里通過一個例子來直觀地介紹1x1卷積。輸入6x6x1的矩陣,這里的1x1卷積形式為1x1x1,即為元素2,輸出也是6x6x1的矩陣。但輸出矩陣中的每個元素值是輸入矩陣中每個元素值x2的結果。
?
上述情況,并沒有顯示1x1卷積的特殊之處,那是因為上面輸入的矩陣channel為1,所以1x1卷積的channel也為1。這時候只能起到升維的作用。這并不是1x1卷積的魅力所在。
?
讓我們看一下真正work的示例。當輸入為6x6x32時,1x1卷積的形式是1x1x32,當只有一個1x1卷積核的時候,此時輸出為6x6x1。此時便可以體會到1x1卷積的實質作用:降維。當1x1卷積核的個數小于輸入channels數量時,即降維[3]。
?
注意,下圖中第二行左起第二幅圖像中的黃色立方體即為1x1x32卷積核,而第二行左起第一幅圖像中的黃色立方體即是要與1x1x32卷積核進行疊加運算的區域。
?
其實1x1卷積,可以看成一種全連接(full connection)。
?
第一層有6個神經元,分別是a1—a6,通過全連接之后變成5個,分別是b1—b5,第一層的六個神經元要和后面五個實現全連接,本圖中只畫了a1—a6連接到b1的示意,可以看到,在全連接層b1其實是前面6個神經元的加權和,權對應的就是w1—w6,到這里就很清晰了。
?
第一層的6個神經元其實就相當于輸入特征里面那個通道數:6,而第二層的5個神經元相當于1*1卷積之后的新的特征通道數:5。
?
w1—w6是一個卷積核的權系數,若要計算b2—b5,顯然還需要4個同樣尺寸的卷積核[4]。
?
?
上述列舉的全連接例子不是很嚴謹,因為圖像的一層相比于神經元還是有區別的,圖像是2D矩陣,而神經元就是一個數字,但是即便是一個2D矩陣(可以看成很多個神經元)的話也還是只需要一個參數(1*1的核),這就是因為參數的權值共享。
?
注:1x1卷積一般只改變輸出通道數(channels),而不改變輸出的寬度和高度
1x1卷積核作用
?
降維/升維
由于 1×1 并不會改變 height 和 width,改變通道的第一個最直觀的結果,就是可以將原本的數據量進行增加或者減少。這里看其他文章或者博客中都稱之為升維、降維。但我覺得維度并沒有改變,改變的只是 height × width × channels 中的 channels 這一個維度的大小而已[5]。
圖像來自知乎ID: YJango的回答[6]
增加非線性
1*1卷積核,可以在保持feature map尺度不變的(即不損失分辨率)的前提下大幅增加非線性特性(利用后接的非線性激活函數),把網絡做的很deep。
?
備注:一個filter對應卷積后得到一個feature map,不同的filter(不同的weight和bias),卷積以后得到不同的feature map,提取不同的特征,得到對應的specialized neuron[7]。
?
跨通道信息交互(channal 的變換)
例子:使用1x1卷積核,實現降維和升維的操作其實就是channel間信息的線性組合變化,3x3,64channels的卷積核后面添加一個1x1,28channels的卷積核,就變成了3x3,28channels的卷積核,原來的64個channels就可以理解為跨通道線性組合變成了28channels,這就是通道間的信息交互[7]。
?
注意:只是在channel維度上做線性組合,W和H上是共享權值的sliding window
?
1x1卷積應用
?
Inception
?
1. 這一點孫琳鈞童鞋講的很清楚。1×1的卷積層(可能)引起人們的重視是在NIN的結構中,論文中林敏師兄的想法是利用MLP代替傳統的線性卷積核,從而提高網絡的表達能力。文中同時利用了跨通道pooling的角度解釋,認為文中提出的MLP其實等價于在傳統卷積核后面接cccp層,從而實現多個feature map的線性組合,實現跨通道的信息整合。而cccp層是等價于1×1卷積的,因此細看NIN的caffe實現,就是在每個傳統卷積層后面接了兩個cccp層(其實就是接了兩個1×1的卷積層)。
?
2. 進行降維和升維引起人們重視的(可能)是在GoogLeNet里。對于每一個Inception模塊(如下圖),原始模塊是左圖,右圖中是加入了1×1卷積進行降維的。雖然左圖的卷積核都比較小,但是當輸入和輸出的通道數很大時,乘起來也會使得卷積核參數變的很大,而右圖加入1×1卷積后可以降低輸入的通道數,卷積核參數、運算復雜度也就跟著降下來了。
?
以GoogLeNet的3a模塊為例,輸入的feature map是28×28×192,3a模塊中1×1卷積通道為64,3×3卷積通道為128,5×5卷積通道為32,如果是左圖結構,那么卷積核參數為1×1×192×64+3×3×192×128+5×5×192×32,而右圖對3×3和5×5卷積層前分別加入了通道數為96和16的1×1卷積層,這樣卷積核參數就變成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),參數大約減少到原來的三分之一。
?
同時在并行pooling層后面加入1×1卷積層后也可以降低輸出的feature map數量,左圖pooling后feature map是不變的,再加卷積層得到的feature map,會使輸出的feature map擴大到416,如果每個模塊都這樣,網絡的輸出會越來越大。
?
而右圖在pooling后面加了通道為32的1×1卷積,使得輸出的feature map數降到了256。GoogLeNet利用1×1的卷積降維后,得到了更為緊湊的網絡結構,雖然總共有22層,但是參數數量卻只是8層的AlexNet的十二分之一(當然也有很大一部分原因是去掉了全連接層)[8]。
Inception
?
ResNet
?
ResNet同樣也利用了1×1卷積,并且是在3×3卷積層的前后都使用了,不僅進行了降維,還進行了升維,參數數量進一步減少,如下圖的結構[8]。
其中右圖又稱為”bottleneck design”,目的一目了然,就是為了降低參數的數目,第一個1x1的卷積把256維channel降到64維,然后在最后通過1x1卷積恢復,整體上用的參數數目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的話就是兩個3x3x256的卷積,參數數目: 3x3x256x256x2 = 1179648,差了16.94倍。
對于常規ResNet,可以用于34層或者更少的網絡中,對于Bottleneck Design的ResNet通常用于更深的如101這樣的網絡中,目的是減少計算和參數量(實用目的)[9]。
?
ResNet
參考
?
[1]?1*1的卷積核與Inception
[2]?《Network in network》
[3]https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x)
[4]?如何理解卷積神經網絡中的1*1卷積
[5]【CNN】卷積神經網絡中的 1*1 卷積 的作用
[6]?https://www.zhihu.com/question/56024942/answer/194997553
[7]?1×1 卷積核的作用?(附實例):
[8]?1X1卷積核到底有什么作用呢?ResNet解析 - CSDN博客?blog.csdn.net[8]?1X1卷積核到底有什么作用呢?
[9]?ResNet解析 - CSDN博客
擴展知乎話題:卷積神經網絡中用1*1 卷積有什么作用或者好處呢?
?
微信搜索:CVer或者CVerNews,即可關注CVer公眾號
總結
以上是生活随笔為你收集整理的1X1 convolution layers的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用评分如何应用在风控策略中(二)
- 下一篇: Deep Learning的基础概念