1*1的卷積核在NIN、Googlenet中被廣泛使用,但其到底有什么作用也是一直困擾的問題,這里總結和歸納下在網上查到的自認為很合理的一些答案,包括1)跨通道的特征整合2)特征通道的升維和降維 3)減少卷積核參數(簡化模型)
1 - 引入
在我學習吳恩達老師Deeplearning.ai深度學習課程的時候,老師在第四講卷積神經網絡第二周深度卷積網絡:實例探究的2.5節網絡中的網絡以及1×1卷積對1×1卷積做了較為詳細且通俗易懂的解釋。現自己做一下記錄。
2 - 1×1卷積理解
假設當前輸入張量維度為6×6×32,卷積核維度為1×1×32,取輸入張量的某一個位置(如圖黃色區域)與卷積核進行運算。實際上可以看到,如果把1×1×32卷積核看成是32個權重W,輸入張量運算的1×1×32部分為輸入x,那么每一個卷積操作相當於一個Wx過程,多個卷積核就是多個神經元,相當於一個全連接網絡。
綜上,可以將1×1卷積過程看成是將輸入張量分為一個個輸入為1×1×32的x,他們共享卷積核變量(對應全連接網絡的權重)W的全連接網絡。
3 - 1×1卷積核作用
3.1 - 放縮nc的大小
通過控制卷積核的數量達到通道數大小的放縮。而池化層只能改變高度和寬度,無法改變通道數。
3.2 - 增加非線性
如上所述,1×1卷積核的卷積過程相當於全連接層的計算過程,並且還加入了非線性激活函數,從而可以增加網絡的非線性,使得網絡可以表達更加復雜的特征。
3.3 - 減少參數
在Inception Network中,由於需要進行較多的卷積運算,計算量很大,可以通過引入1×1確保效果的同時減少計算量。具體可以通過下面例子量化比較
3.3.1 - 不引入1×1卷積的卷積操作
3.3.2 - 引入1×1卷積的卷積操作
總共需要的計算量為(28×28×16)×(1×1×192)+(28×28×32)×(5×16×16)≈ 12.4 million,明顯少於不引入1×1卷積的卷積過程的計算量。其本質我覺得可以理解成,通過1×1卷積操作提取出輸入張量的重要特征(相當於降維),然后通過5×5卷積的計算量可以減少很多(減少的比引入1×1卷積所需額外的計算量多多了)。