1*1shape的卷積在很多神經網絡中都有應用(如Google InceptionNet,Resnet等),比起我們常見的2*2,3*3,5*5的卷積,這樣的卷積核有什么作用呢?
首先,1*1的卷積可以增加網絡層的非線性,它的卷積過程其實相當於全連接層的計算過程,並且還加入了非線性的激活函數(relu等),從而使網絡結構變得更加的復雜。
其次,1*1的卷積加入可以通過控制卷積核的數量達到放縮通道數大小的目的,從而實現特征降維,以實現參數和計算量的減少。
下面舉一個引入1*1和不引入1*1卷積的例子:
1.不引入1*1卷積:
input(28*28*192)→(conv(5*5*32,same))→output(28*28*32)
計算參數量:(28*28*32)*(5*5*192)≈120M
2.引入1*1卷積:
input(28*28*192)→(conv*(1*1*16))→hidden(28*28*16)→(conv(5*5*32,same))→output(28*28*32)
計算參數量:(28*28*16)*192+(28*28*32)*(5*5*6)≈12.4M
約減少了十倍計算量
又如Google InceptionNet:
最初始版本的inceptionNet結構如下:
改進后的結構如下:
假設previous layer層的大小為28*28*192,非1*1卷積層核數按順序分別為(64,128,32),黃色1*1卷積層核數分別為(96,16,32)則有:
圖一:weight:1*1*192*64+3*3*192*128+5*5*192*32=387072
featuremap:28*28*64+28*28*128+28*28*32+28*28*192=28*28*416
圖二:weight:1*1*192*64+(1*1*192*96+3*3*96*128)+(1*1*192*16+5*5*16*32)+1*1*192*32=163328
featuremap:28*28*64+28*28*128+28*28*32+28*28*32=28*28*256
由此可證明,1*1的卷積核可以在增加網絡結構復雜性的同時實現特征降維。