在論文 Network In Network 中,提出了一個重要的方法: 卷積。這個方法也在後面比較火的方法,如 googLeNet、ResNet、DenseNet ,中得到了非常廣泛的應用。特別是在 googLeNet 的Inception
中,發揮的淋漓盡致。
初次看到 卷積,可能會覺得沒有什麼作用,因爲給人的感覺就是 的卷積核好像並沒有改變什麼。但如果對卷積操作有過深入的理解,就會發現並沒有那麼簡單。
這裏強調一下,下圖只是用了一個卷積核(filter)。
總結了一下其作用,主要分爲一下兩種:
- 改變通道(channels)
- 降維 / 升維
- 數據融合
- 減少計算量
- 非線性操作
下面詳細介紹一下。
改變通道(channels)
之前有詳細講過對 通道 的理解。通過改變 卷積核的數量來改變輸出通道的數量。
降維 / 升維
由於 並不會改變 height 和 width,改變通道的第一個最直觀的結果,就是可以將原本的數據量進行增加或者減少。這裏看其他文章或者博客中都稱之爲升維、降維。但我覺得維度並沒有改變,改變的只是 height × width × channels
中的 channels 這一個維度的大小而已。
數據融合
在 ResNet 中,數據要進行相加 ,但有時並不能保證通道大小匹配。這個時候就需要使用 卷積操作,是數據在各個維度上進行匹配,從何對兩個數據進行計算。
減少計算量
在 GoogLeNet 中,Inception中的卷積多數先進行了 卷積操作,再進行其他卷積操作,這樣其實可以減少計算量。
原因如下。
如果不加入 而直接使用 ,
就像這樣,得到結果。
需要計算的量爲
大概需要1.3億次。
而加入了之後,
計算量變爲
大概在1240萬左右。
相比之下,計算量減少了10倍多。
非線性操作
在ResNet中,卷積核進行相關計算後,輸出的結果需要經過 ReLU
進行非線性轉換 。所以這裏也會使整個模型相對更加的複雜,提升網絡的表達能力。
一直在學習中,如有錯誤,請批評指正。
文中圖片引自吳恩達老師的 深度學習課程視頻 和 GoogLeNet論文 Going Deeper with Convolutions 。