【CNN】卷積神經網絡中的 1*1 卷積 的作用

在論文 Network In Network 中,提出了一個重要的方法:1×1 卷積。這個方法也在後面比較火的方法,如 googLeNet、ResNet、DenseNet ,中得到了非常廣泛的應用。特別是在 googLeNetInception中,發揮的淋漓盡致。

初次看到 1×1 卷積,可能會覺得沒有什麼作用,因爲給人的感覺就是 1×1 的卷積核好像並沒有改變什麼。但如果對卷積操作有過深入的理解,就會發現並沒有那麼簡單。

這裏強調一下,下圖只是用了一個卷積核(filter)。
非線性

總結了一下其作用,主要分爲一下兩種:

  • 改變通道(channels)
    • 降維 / 升維
    • 數據融合
    • 減少計算量
  • 非線性操作

下面詳細介紹一下。

改變通道(channels)

之前有詳細講過對 通道 的理解。通過改變 1×1 卷積核的數量來改變輸出通道的數量。

降維 / 升維

由於 1×1 並不會改變 height 和 width,改變通道的第一個最直觀的結果,就是可以將原本的數據量進行增加或者減少。這裏看其他文章或者博客中都稱之爲升維、降維。但我覺得維度並沒有改變,改變的只是 height × width × channels 中的 channels 這一個維度的大小而已。

數據融合

在 ResNet 中,數據要進行相加 ,但有時並不能保證通道大小匹配。這個時候就需要使用 1×1 卷積操作,是數據在各個維度上進行匹配,從何對兩個數據進行計算。

減少計算量

在 GoogLeNet 中,Inception中的卷積多數先進行了 1×1 卷積操作,再進行其他卷積操作,這樣其實可以減少計算量。

原因如下。
如果不加入 1×1 而直接使用 5×5
不使用
就像這樣,得到結果。
正常計算
需要計算的量爲

(28×28×32)×(5×5×192)

大概需要1.3億次。

而加入了之後,
Inception
加入
計算量變爲

(28×28×16)×(1×1×192)+(28×28×32)×(5×5×16)

大概在1240萬左右。

相比之下,計算量減少了10倍多。

非線性操作

在ResNet中,卷積核進行相關計算後,輸出的結果需要經過 ReLU 進行非線性轉換 。所以這裏也會使整個模型相對更加的複雜,提升網絡的表達能力。


一直在學習中,如有錯誤,請批評指正。

文中圖片引自吳恩達老師的 深度學習課程視頻 和 GoogLeNet論文 Going Deeper with Convolutions

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章