1. 程式人生 > >【機器學習】關於CNN中1×1卷積核和Network in Network的理解

【機器學習】關於CNN中1×1卷積核和Network in Network的理解

前天去面某公司的AI部門,被問到了關於1×1卷積核的相關問題,因為之前沒有了解過,所以也沒有答上來,回來查閱了相關資料,特此總結一番。

1×1的卷積核

卷積核在CNN中經常被用到,一般常見的是3×3的或者5×5的,見下圖,這裡不多贅述
這裡寫圖片描述這裡寫圖片描述
那麼1×1的卷積核,就像上面那樣。
一般1×1的卷積核本質上並沒有對影象做什麼聚合操作,以為就是同一個w去乘以原影象上的每一個畫素點,相當於做了一個scaling
1×1卷積核最初是在Network in Network這個網路結構中提出來的。它用了比AlexNet更少的引數,達到了跟其一樣的效果。

1×1卷積核的作用

那麼1×1卷積核有什麼作用呢,如果當前層和下一層都只有一個通道那麼1×1卷積核確實沒什麼作用,但是如果它們分別為m層和n層的話,1×1卷積核可以起到一個跨通道聚合的作用

所以進一步可以起到降維(或者升維)的作用,起到減少引數的目的
比如當前層為 x×x×m即影象大小為x×x,特徵層數為m,然後如果將其通過1×1的卷積核,特徵層數為n,那麼只要n<m這樣就能起到降維的目的,減少之後步驟的運算量(當然這裡不太嚴謹,需要考慮1×1卷積核本身的引數個數為m×n個)。這個作用在參考文獻6裡有舉例說明。換句話說,如果使用1x1的卷積核,這個操作實現的就是多個feature map的線性組合,可以實現feature map在通道個數上的變化。
而因為卷積操作本身就可以做到各個通道的重新聚合的作用,所以1×1的卷積核也能達到這個效果。

Network in Network

NIN網路是第一個提出1×1卷積核的論文,同時其也提出了Network in Network的網路概念。因為一般卷積操作可以看成特徵的提取操作,而一般卷積一層只相當於一個線性操作,所以其只能提取出線性特徵。所以該作者就像能否在卷積層後也加入一個MLP使得每層卷積操作能夠提取非線性特徵。
其實這裡的MLP,指的是同一層中,不同特徵層之間,同一個位置上的值的MLP
理解了這一點就好辦了,詳細的圖見參考文獻8中的那個圖:
這裡寫圖片描述
這裡寫圖片描述
所以NIN只得是,一個神經網路之中,其每一層之間的特徵提取又加上了一個小的神經網路。

NIN與1×1卷積核的關係

那麼NIN與1×1卷積核又有什麼關係呢
因為NIN中的MLP層可以用兩層1×1卷積核來代替,比如當前這一層是54×54×96的影象層,然後過一個1×1×96的卷積核,還是一個54×54×96的卷積層,然後再過一個1×1×96的卷積核,還是一個54×54×96的卷積層。
但是這樣但看最開始那個96個特徵層的影象同一個位置不同層之間的畫素點,相當於過了一個96×96×96的MLP網路
可以再參考下參考文獻7中caffe的實現。

用卷積核實現全連線層

In Convolutional Nets, there is no such thing as “fully-connected layers”. There are only convolution layers with 1x1 convolution kernels and a full connection table. – Yann LeCun

LeCun經常說一個全連線層的網路可以用1×1卷積核去替換,雖然這個說法被批了(見參考文獻1)
但是1×1卷積核確實可以實現全連線層
具體的操作是,輸入是224x224x3 的影象,假設經過變換之後最後一層是[7x7x512]的,那麼傳統的方法應該將其展平成為一個7x7x512長度的一層,然後做全連線層,假設全連線層為4096×1000層的(假設有1000個分類結果)。
那麼用1×1卷積核怎麼做呢,因為1×1卷積核相當於在不同channel之間做線性變換,所以:

  1. 先選擇7×7的卷積核,輸出層特徵層數為4096層,這樣得到一個[1×1×4096]層的
  2. 然後再選擇用1×1卷積核,輸出層數為1000層,這樣得到一個[1×1×1000]層的

這樣就搞定了。

擴充套件:用卷積層代替全連線層的好處

這樣做其實有非常多的好處,比如上面的例子中輸入是224x224x3 的影象,如果此時影象變得更大了,變成384x384大小的了,那麼一開始按照32作為步長來進行卷積操作,最後還按照這個網路結構能得到一個[6×6×1000]層的,那麼前面那個[6×6]有什麼用呢,這個代表每一個位置上,其屬於1000個分類結果中的打分,所以這在影象分割等領域等領域有著非常重要的作用【之前一篇論文就是用的這種方法Fully Convolutional Networks for Semantic Segmentation】。
【上面這些步驟如果在全連線網路中做的話,需要多做36次,而在全卷積網路中只用做一次就好。】
這個詳見參考文獻2和9

參考資料