大部分時候都是升維或降維的作用,因為1*1卷積不會對相鄰像素之間的關係進行學習,但卻可以通過改變卷積後的通道數實現特徵圖數據的增加或減少。我第一次遇到1*1卷積的經典應用實例是GoogLeNet,它的block中就使用了1*1卷積進行數據降維,你也可以去查看原文和相關博客,介紹得很詳細。


在GoogLeNet遇到過

  1. 可以升降維度,創造更多(少)的feature map
  2. 1*1卷積雖然沒法捕捉空間上的pattern,但是可以捕捉深度上的pattern
  3. 一般和其他卷積層組合使用,比如說一對([1 x 1, 3 x 3],[1 x 1, 5 x 5])卷積層能想像成一個卷積層,能捕捉更複雜的pattern

捕捉深度pattern + 降維


升維和降維都是比較直觀的理解,我說一個不太直觀但是非常常見的吧。其實現在1x1卷積的很多作用尤其是在輕量級網路中的作用是cross-group information exchange。 舉個例子,ResNeXt中3×3卷積是group卷積,每組運算都是獨立的,後面的1×1卷積除了升/降維之外,還起到了組間信息傳播的作用。 另外,深度可分卷積中的point-wise conv起到的作用也是如此,只不過其空間卷積假設每個channel都是一個group,所以後面的1×1卷積作用依然是cross-group information exchange。除此之外,另一個最直接的證據就是shuffleNet。它把1×1的卷積也做成group-wise之後(此時它已經失去了跨組信息傳播的作用,因為它自身也是group-wise的),但它加了一個什麼操作? Channel Shuffle。其實就是用來替代1×1卷積cross-group information exchange的作用。

題主還提到了非線性,那我就順便提一嘴。非線性是非常古老的作用了,在CNN沒有出現之前,大家都用MLP(多層感知機)。那麼非常著名的一個理論就是兩層的fc中間加個非線性激活函數能夠擬合任何有界函數。這裡的fc和1x1卷積其實是一個東西,而增加中間非線性fc的維度能大大提升擬合能力。所以非線性的作用大概就是如此了,體現在CNN中,其實就是通過多層+非線性激活函數來達到的。


[公式]卷積的定義

? [公式]卷積十分有趣。咋一看[公式]卷積對於單通道而言僅僅是每個元素乘以一個數字,但如果輸入層為多通道,情況就變為有趣了。

上圖解釋了[公式]卷積如何適用於尺寸為[公式]的輸入層,濾波器大小為[公式],輸出通道的尺寸為[公式]。如果應用[公式]個這樣的濾波器,然後組合在一起,得到的輸出層大小為[公式]

1. [公式]卷積的作用

  • 調節通道數 由於 [公式] 卷積並不會改變 height 和 width,改變通道的第一個最直觀的結果,就是可以將原本的數據量進行增加或者減少。這裡看其他文章或者博客中都稱之為升維、降維。但實際情況維度並沒有改變,改變的只是 [公式] 中的[公式]這一個維度的大小而已。
  • 增加非線性

    [公式]卷積核,可以在保持特徵圖尺度不變的(即不改變)的前提下大幅增加非線性特性(利用後接的非線性激活函數如ReLU)。非線性允許網路學習更複雜的功能,並且使得整個網路能夠進一步加深。

  • 跨通道信息 使用[公式]卷積核,實現降維和升維的操作其實就是間通道信息的線性組合變化。例如:在卷積核大小為[公式],卷積核個數為64的濾波器與卷積核大小為[公式],卷積核個數為28的濾波器組合,其輸出層大小等於通過卷積核大小為[公式],卷積核個數為28的濾波器所得到的輸出層的大小,原來的64個通道就可以理解為跨通道線性組合變成了28通道,這就是通道間的信息交互。
  • 減少參數 前面所說的降維,其實也是減少了參數,因為特徵圖少了,參數也自然跟著就減少,相當於在特徵圖的通道數上進行卷積,壓縮特徵圖,二次提取特徵,使得新特徵圖的特徵表達更佳。

? 關於 [公式]卷積的一個有趣的觀點來自 Yann LeCun, 「在卷積神經網路中, 沒有『全連接層(fully-connected layers)』的概念。只有卷積層具有[公式]卷積核和全連接表。」

2. [公式]卷積的應用

[公式]卷積在多個經典網路中發揮了重要作用,以下簡要介紹幾個[公式]卷積重要的應用。

  • Network in Network(NIN)

    NIN提出了MLP卷積層,MLP卷積層通過疊加"Micro Network"網路,提高非線性表達,而其中的"Micro Network"基本組成單元是[公式]卷積網路,說到這,就要解釋一下[公式]卷積了,該篇論文是首次提出[公式]卷積,具有劃時代的意義,之後的GoogleNet借鑒了[公式]卷積,還專門致謝過這篇論文。

  • Inception ? GoogleNet首次提出Inception模塊,Inception一共有V1、V2、V3、V4四個版本(這裡就不詳述了)。下圖為Inception V1的結構如下圖兩個圖所示。

在充分引入[公式]卷積進行降維後如圖(b)所示,總體而言相比於圖(a)其卷積參數量已經減少了近4倍。

? 在inception結構中,大量採用了[公式]卷積,主要是兩點作用:a.對數據進行降維;b.引入更多的非線性,提高泛化能力,因為卷積後要經過ReLU激活函數;

  • ResNet

ResNet同樣也利用了[公式]卷積,並且是在[公式]卷積層的前後都使用了,不僅進行了降維,還進行了升維,參數數量進一步減少。其中右圖又稱為Bottleneck Design,目的一目了然,就是為了降低參數的數目,第一個[公式]的卷積把通道量從256降到64,然後在最後通過[公式]卷積恢復,整體上用的參數數目差了近16.94倍。

? 對於常規ResNet,可以用於34層或者更少的網路中,對於Bottleneck Design的ResNet通常用於更深的如101這樣的網路中,目的是減少計算和參數量。

3. [公式]卷積的計算

? [公式]卷積實際上看做2D卷積的特殊情況,計算的過程可參考2D卷積的計算過程。

參考資料

  • A Comprehensive Introduction to Different Types of Convolutions in Deep Learning | by Kunlun Bai | Towards Data Science


卷積核的計算公式為 [公式] ,跟全連接神經元的計算公式在數學上是等價的。經典三層神經網路的隱含層可看成一個特徵提取器, [公式] 卷積核可做特徵提取(無論升維、降維還是不變),也可用於直接得到網路輸出。推薦看OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks這篇文章,用全卷積代替全連接的一個直觀好處就是利用現有框架進行代碼實現很方便。


推薦閱讀:
相关文章