11月了,秋招已經開始了。不知最近有沒有同學在投簡歷面試呢?
回想起幾年前我面試某大廠的時候,被問到了很多深度學習相關的知識,那時的我懂的不多,可以說是被面試官360度無死角蹂躪。
那次面試,印象最深的是問了很多與卷積相關的問題,導致我後來工作一段時間看到卷積就時不時的去查些資料,害怕自己又理解錯了。
今天就介紹一個我曾經被問到的問題,那就是:在卷積神經網路中,1x1的卷積都有什麼作用?
在卷積神經網路中,1x1的卷積有什麼作用呢?
大概有以下幾個作用。
第一是可以實現輸出feature map(特徵圖)的升維和降維第二個是可以減少模型中的引數量,從而減少計算量,提升模型的推理效能除此之外,就是使用1x1的卷積可以增加網路的深度,從而提升模型的非線性表達能力。
1x1的卷積是如何實現升維和降維的
這裡說的1x1的卷積實現升維和降維的功能,指的是 feature map 通道維度的改變,也即特徵維度的改變。
這是因為1x1的卷積,卷積核長寬尺寸都是 1,在計算的過程中,不存在長、寬方向畫素之間的融合計算(乘累加計算),而僅僅存在通道之間的融合計算。
因此,在這種情況下,1x1的卷積所能改變的僅僅是通道數。
而從卷積演算法上可以看出,卷積核的個數就是卷積輸出的通道數。因此如果想讓輸出特徵圖的通道數增大,就要使用更多數量的卷積核來做卷積,從而實現特徵維度的升或者降。
1x1的卷積是如何減少模型引數的
減少引數量可以這麼理解:在輸出相同特徵圖的前提下,將一個普通的卷積,替換成一個1x1的卷積加上另一個卷積,先進行降維,然後計算,如此一來整體的計算量要比普通卷積少。
舉個例子,如上圖所示。假設一個卷積的輸入通道是128,輸出通道是32,如果不使用1x1的卷積,那麼整個卷積的乘累加計算量是:28x28x128x3x3x32 = 28901376
而如果使用1x1的卷積先降維處理,然後在降維之後的特徵圖上進行一個卷積計算,那麼整體的乘累加計算量為:128x28x28x16 + 28x28x16x3x3x32 = 5218304
兩者對比,後者比前者減少了80%的計算量。
如何理解1x1卷積可以提升模型的非線性表達能力
神經網路模擬的就是一個非線性系統,之所以在卷積層後面增加非線性層,比如Relu層,其實就是這個道理。
而1x1的卷積可以使得在完成相同卷積功能的前提下,網路的層數變得更深(如上面的例子,一個普通卷積變成了2層卷積)。
網路層數的加深,就會導致更多非線性層數的增加,從而使得整個神經網路模型的非線性表達能力更強。
1x1的卷積還有其他哪些優勢嗎
1x1的卷積還可以增加通道之間的融合程度。
由於1x1卷積不存在長寬方向的畫素融合,所有的計算都是通道之間的交叉計算,因此,可以更好的完成通道間的融合,而通道代表的是特徵,因此可以更好的實現特徵融合這一點,和全連線類似(因為1x1的卷積就可以表示為全連線)。
總結:如果在面試過程中被問到關於1x1的卷積問題,把上面的幾點回答出來,這個問題基本就可以了,不知道有沒有人被問道過這個問題呢?
最後,祝各位在秋招中表現出色,都能拿到滿意的offer~
我是一名 AI 攻城獅,如果你也想學習 AI ,歡迎你關注我的公眾號,會有非常多好玩的AI技術分享~