卷積神經(jīng)網(wǎng)絡(luò)中十大拍案叫絕的操作寺庄!

從2012年的AlexNet發(fā)展至今艾蓝,科學(xué)家們發(fā)明出各種各樣的CNN模型,一個(gè)比一個(gè)深斗塘,一個(gè)比一個(gè)準(zhǔn)確赢织,一個(gè)比一個(gè)輕量。我下面會(huì)對(duì)近幾年一些具有變革性的工作進(jìn)行簡(jiǎn)單盤(pán)點(diǎn)馍盟,從這些充滿(mǎn)革新性的工作中探討日后的CNN變革方向于置。

卷積只能在同一組進(jìn)行嗎?

-- Group convolution

Group convolution 分組卷積贞岭,最早在AlexNet中出現(xiàn)八毯,由于當(dāng)時(shí)的硬件資源有限,訓(xùn)練AlexNet時(shí)卷積操作不能全部放在同一個(gè)GPU處理瞄桨,因此作者把feature maps分給多個(gè)GPU分別進(jìn)行處理话速,最后把多個(gè)GPU的結(jié)果進(jìn)行融合。

AlexNet

分組卷積的思想影響比較深遠(yuǎn)芯侥,當(dāng)前一些輕量級(jí)的SOTA(State Of The Art)網(wǎng)絡(luò)泊交,都用到了分組卷積的操作乳讥,以節(jié)省計(jì)算量。但題主有個(gè)疑問(wèn)是廓俭,如果分組卷積是分在不同GPU上的話云石,每個(gè)GPU的計(jì)算量就降低到 1/groups,但如果依然在同一個(gè)GPU上計(jì)算研乒,最終整體的計(jì)算量是否不變留晚?找了pytorch上有關(guān)組卷積操作的介紹,望讀者解答我的疑問(wèn)告嘲。

pytroch github

EDIT:

關(guān)于這個(gè)問(wèn)題错维,知乎用戶(hù)朋友 @蔡冠羽 提出了他的見(jiàn)解:

我感覺(jué)group conv本身應(yīng)該就大大減少了參數(shù),比如當(dāng)input channel為256橄唬,output channel也為256赋焕,kernel size為33,不做group conv參數(shù)為25633256仰楚,若group為8隆判,每個(gè)group的input channel和output channel均為32,參數(shù)為8323332僧界,是原來(lái)的八分之一侨嘀。這是我的理解。

我的理解是分組卷積最后每一組輸出的feature maps應(yīng)該是以concatenate的方式組合捂襟,而不是element-wise add咬腕,所以每組輸出的channel是 input channels / #groups,這樣參數(shù)量就大大減少了葬荷。

卷積核一定越大越好涨共?-- 3×3卷積核

AlexNet中用到了一些非常大的卷積核,比如11×11宠漩、5×5卷積核举反,之前人們的觀念是,卷積核越大扒吁,receptive field(感受野)越大火鼻,看到的圖片信息越多,因此獲得的特征越好雕崩。雖說(shuō)如此魁索,但是大的卷積核會(huì)導(dǎo)致計(jì)算量的暴增,不利于模型深度的增加晨逝,計(jì)算性能也會(huì)降低蛾默。于是在VGG(最早使用)、Inception網(wǎng)絡(luò)中捉貌,利用2個(gè)3×3卷積核的組合比1個(gè)5×5卷積核的效果更佳支鸡,同時(shí)參數(shù)量(3×3×2+1 VS 5×5×1+1)被降低冬念,因此后來(lái)3×3卷積核被廣泛應(yīng)用在各種模型中。

每層卷積只能用一種尺寸的卷積核牧挣?

-- Inception結(jié)構(gòu)

傳統(tǒng)的層疊式網(wǎng)絡(luò)急前,基本上都是一個(gè)個(gè)卷積層的堆疊,每層只用一個(gè)尺寸的卷積核瀑构,例如VGG結(jié)構(gòu)中使用了大量的3×3卷積層裆针。事實(shí)上,同一層feature map可以分別使用多個(gè)不同尺寸的卷積核寺晌,以獲得不同尺度的特征世吨,再把這些特征結(jié)合起來(lái),得到的特征往往比使用單一卷積核的要好呻征,谷歌的GoogLeNet耘婚,或者說(shuō)Inception系列的網(wǎng)絡(luò),就使用了多個(gè)卷積核的結(jié)構(gòu):

最初版本的Inception結(jié)構(gòu)

如上圖所示陆赋,一個(gè)輸入的feature map分別同時(shí)經(jīng)過(guò)1×1沐祷、3×3、5×5的卷積核的處理攒岛,得出的特征再組合起來(lái)赖临,獲得更佳的特征。但這個(gè)結(jié)構(gòu)會(huì)存在一個(gè)嚴(yán)重的問(wèn)題:參數(shù)量比單個(gè)卷積核要多很多灾锯,如此龐大的計(jì)算量會(huì)使得模型效率低下兢榨。這就引出了一個(gè)新的結(jié)構(gòu):

怎樣才能減少卷積層參數(shù)量?

-- Bottleneck

發(fā)明GoogleNet的團(tuán)隊(duì)發(fā)現(xiàn)挠进,如果僅僅引入多個(gè)尺寸的卷積核色乾,會(huì)帶來(lái)大量的額外的參數(shù)誊册,受到Network In Network中1×1卷積核的啟發(fā)领突,為了解決這個(gè)問(wèn)題,他們往Inception結(jié)構(gòu)中加入了一些1×1的卷積核案怯,如圖所示:

加入1×1卷積核的Inception結(jié)構(gòu)

根據(jù)上圖君旦,我們來(lái)做個(gè)對(duì)比計(jì)算,假設(shè)輸入feature map的維度為256維嘲碱,要求輸出維度也是256維金砍。有以下兩種操作:

  1. 256維的輸入直接經(jīng)過(guò)一個(gè)3×3×256的卷積層,輸出一個(gè)256維的feature map麦锯,那么參數(shù)量為:256×3×3×256 = 589,824
  2. 256維的輸入先經(jīng)過(guò)一個(gè)1×1×64的卷積層恕稠,再經(jīng)過(guò)一個(gè)3×3×64的卷積層,最后經(jīng)過(guò)一個(gè)1×1×256的卷積層扶欣,輸出256維鹅巍,參數(shù)量為:256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69,632千扶。足足把第一種操作的參數(shù)量降低到九分之一!

1×1卷積核也被認(rèn)為是影響深遠(yuǎn)的操作骆捧,往后大型的網(wǎng)絡(luò)為了降低參數(shù)量都會(huì)應(yīng)用上1×1卷積核澎羞。

越深的網(wǎng)絡(luò)就越難訓(xùn)練嗎?

-- ResNet殘差網(wǎng)絡(luò)

ResNet skip connection傳統(tǒng)的卷積層層疊網(wǎng)絡(luò)會(huì)遇到一個(gè)問(wèn)題敛苇,當(dāng)層數(shù)加深時(shí)妆绞,網(wǎng)絡(luò)的表現(xiàn)越來(lái)越差,很大程度上的原因是因?yàn)楫?dāng)層數(shù)加深時(shí)枫攀,梯度消散得越來(lái)越嚴(yán)重括饶,以至于反向傳播很難訓(xùn)練到淺層的網(wǎng)絡(luò)。為了解決這個(gè)問(wèn)題来涨,何凱明大神想出了一個(gè)“殘差網(wǎng)絡(luò)”巷帝,使得梯度更容易地流動(dòng)到淺層的網(wǎng)絡(luò)當(dāng)中去,而且這種“skip connection”能帶來(lái)更多的好處扫夜,這里可以參考一個(gè)PPT:極深網(wǎng)絡(luò)(ResNet/DenseNet): Skip Connection為何有效及其它 楞泼,以及我的一篇文章:為什么ResNet和DenseNet可以這么深?一文詳解殘差塊為何能解決梯度彌散問(wèn)題笤闯。 大家可以結(jié)合下面的評(píng)論進(jìn)行思考堕阔。

卷積操作時(shí)必須同時(shí)考慮通道和區(qū)域嗎?

-- DepthWise操作

標(biāo)準(zhǔn)的卷積過(guò)程可以看上圖颗味,一個(gè)2×2的卷積核在卷積時(shí)超陆,對(duì)應(yīng)圖像區(qū)域中的所有通道均被同時(shí)考慮,問(wèn)題在于浦马,為什么一定要同時(shí)考慮圖像區(qū)域和通道时呀?我們?yōu)槭裁床荒馨淹ǖ篮涂臻g區(qū)域分開(kāi)考慮?

Xception網(wǎng)絡(luò)就是基于以上的問(wèn)題發(fā)明而來(lái)晶默。我們首先對(duì)每一個(gè)通道進(jìn)行各自的卷積操作谨娜,有多少個(gè)通道就有多少個(gè)過(guò)濾器。得到新的通道feature maps之后磺陡,這時(shí)再對(duì)這批新的通道feature maps進(jìn)行標(biāo)準(zhǔn)的1×1跨通道卷積操作趴梢。這種操作被稱(chēng)為 “DepthWise convolution” ,縮寫(xiě)“DW”币他。這種操作是相當(dāng)有效的坞靶,在imagenet 1000類(lèi)分類(lèi)任務(wù)中已經(jīng)超過(guò)了InceptionV3的表現(xiàn),而且也同時(shí)減少了大量的參數(shù)蝴悉,我們來(lái)算一算彰阴,假設(shè)輸入通道數(shù)為3,要求輸出通道數(shù)為256拍冠,兩種做法:1.直接接一個(gè)3×3×256的卷積核尿这,參數(shù)量為:3×3×3×256 = 6,9122.DW操作廉丽,分兩步完成,參數(shù)量為:3×3×3 + 3×1×1×256 = 795妻味,又把參數(shù)量降低到九分之一正压!因此,一個(gè)depthwise操作比標(biāo)準(zhǔn)的卷積操作降低不少的參數(shù)量责球,同時(shí)論文中指出這個(gè)模型得到了更好的分類(lèi)效果焦履。EDIT:2017.08.25本文在發(fā)出12小時(shí)后,一位知乎用戶(hù)私信了我雏逾,向我介紹了Depthwise和Pointwise的歷史工作嘉裤,而Xception和Mobilenet也引用了他們16年的工作,就是Min Wang et al 的Factorized Convolutional Neural Networks栖博,這篇論文的Depthwise中屑宠,每一通道輸出的feature map(稱(chēng)為“基層”)可以不止一個(gè),而Xception中的Depthwise separable Convolution仇让, 正是這篇工作中“單一基層”的情況典奉。推薦有興趣的讀者關(guān)注下他們的工作,這里有篇介紹博文:【深度學(xué)習(xí)】卷積層提速Factorized Convolutional Neural Networks丧叽。而最早關(guān)于separable convolution的介紹卫玖,Xception作者提到,應(yīng)該追溯到Lau- rent Sifre 2014年的工作 Rigid-Motion Scattering For Image Classification 6.2章節(jié)踊淳。

分組卷積能否對(duì)通道進(jìn)行隨機(jī)分組假瞬?****-- ShuffleNet
在AlexNet的Group Convolution當(dāng)中,特征的通道被平均分到不同組里面迂尝,最后再通過(guò)兩個(gè)全連接層來(lái)融合特征脱茉,這樣一來(lái),就只能在最后時(shí)刻才融合不同組之間的特征垄开,對(duì)模型的泛化性是相當(dāng)不利的琴许。為了解決這個(gè)問(wèn)題,ShuffleNet在每一次層疊這種Group conv層前说榆,都進(jìn)行一次channel shuffle虚吟,shuffle過(guò)的通道被分配到不同組當(dāng)中。進(jìn)行完一次group conv之后签财,再一次channel shuffle,然后分到下一層組卷積當(dāng)中偏塞,以此循環(huán)唱蒸。

來(lái)自ShuffleNet論文經(jīng)過(guò)channel shuffle之后,Group conv輸出的特征能考慮到更多通道灸叼,輸出的特征自然代表性就更高神汹。另外庆捺,AlexNet的分組卷積,實(shí)際上是標(biāo)準(zhǔn)卷積操作屁魏,而在ShuffleNet里面的分組卷積操作是depthwise卷積滔以,因此結(jié)合了通道洗牌和分組depthwise卷積的ShuffleNet,能得到超少量的參數(shù)以及超越mobilenet氓拼、媲美AlexNet的準(zhǔn)確率你画!另外值得一提的是,微軟亞洲研究院MSRA最近也有類(lèi)似的工作桃漾,他們提出了一個(gè)IGC單元(Interleaved Group Convolution)坏匪,即通用卷積神經(jīng)網(wǎng)絡(luò)交錯(cuò)組卷積,形式上類(lèi)似進(jìn)行了兩次組卷積撬统,Xception 模塊可以看作交錯(cuò)組卷積的一個(gè)特例适滓,特別推薦看看這篇文章:王井東詳解ICCV 2017入選論文:通用卷積神經(jīng)網(wǎng)絡(luò)交錯(cuò)組卷積要注意的是,Group conv是一種channel分組的方式恋追,Depthwise +Pointwise是卷積的方式凭迹,只是ShuffleNet里面把兩者應(yīng)用起來(lái)了。因此Group conv和Depthwise +Pointwise并不能劃等號(hào)苦囱。

通道間的特征都是平等的嗎蕊苗?

-- SEnet

無(wú)論是在Inception、DenseNet或者ShuffleNet里面沿彭,我們對(duì)所有通道產(chǎn)生的特征都是不分權(quán)重直接結(jié)合的朽砰,那為什么要認(rèn)為所有通道的特征對(duì)模型的作用就是相等的呢?這是一個(gè)好問(wèn)題喉刘,于是瞧柔,ImageNet2017 冠軍SEnet就出來(lái)了。

SEnet 結(jié)構(gòu)一組特征在上一層被輸出睦裳,這時(shí)候分兩條路線造锅,第一條直接通過(guò),第二條首先進(jìn)行Squeeze操作(Global Average Pooling)廉邑,把每個(gè)通道2維的特征壓縮成一個(gè)1維哥蔚,從而得到一個(gè)特征通道向量(每個(gè)數(shù)字代表對(duì)應(yīng)通道的特征)。然后進(jìn)行Excitation操作蛛蒙,把這一列特征通道向量輸入兩個(gè)全連接層和sigmoid糙箍,建模出特征通道間的相關(guān)性,得到的輸出其實(shí)就是每個(gè)通道對(duì)應(yīng)的權(quán)重牵祟,把這些權(quán)重通過(guò)Scale乘法通道加權(quán)到原來(lái)的特征上(第一條路)深夯,這樣就完成了特征通道的權(quán)重分配。作者詳細(xì)解釋可以看這篇文章:專(zhuān)欄 | Momenta詳解ImageNet 2017奪冠架構(gòu)SENet

能否讓固定大小的卷積核看到更大范圍的區(qū)域?****-- Dilated convolution標(biāo)準(zhǔn)的3×3卷積核只能看到對(duì)應(yīng)區(qū)域3×3的大小咕晋,但是為了能讓卷積核看到更大的范圍雹拄,dilated conv使其成為了可能。dilated conv原論文中的結(jié)構(gòu)如圖所示:

上圖b可以理解為卷積核大小依然是3×3掌呜,但是每個(gè)卷積點(diǎn)之間有1個(gè)空洞滓玖,也就是在綠色7×7區(qū)域里面,只有9個(gè)紅色點(diǎn)位置作了卷積處理质蕉,其余點(diǎn)權(quán)重為0势篡。這樣即使卷積核大小不變,但它看到的區(qū)域變得更大了饰剥。詳細(xì)解釋可以看這個(gè)回答:如何理解空洞卷積(dilated convolution)殊霞?

卷積核形狀一定是矩形嗎?****-- Deformable convolution 可變形卷積核

圖來(lái)自微軟亞洲研究院公眾號(hào)傳統(tǒng)的卷積核一般都是長(zhǎng)方形或正方形汰蓉,但MSRA提出了一個(gè)相當(dāng)反直覺(jué)的見(jiàn)解绷蹲,**認(rèn)為卷積核的形狀可以是變化的,變形的卷積核能讓它只看感興趣的圖像區(qū)域 **顾孽,這樣識(shí)別出來(lái)的特征更佳祝钢。

圖來(lái)自微軟亞洲研究院公眾號(hào)要做到這個(gè)操作,可以直接在原來(lái)的過(guò)濾器前面再加一層過(guò)濾器若厚,這層過(guò)濾器學(xué)習(xí)的是下一層卷積核的位置偏移量(offset)拦英,這樣只是增加了一層過(guò)濾器,或者直接把原網(wǎng)絡(luò)中的某一層過(guò)濾器當(dāng)成學(xué)習(xí)offset的過(guò)濾器测秸,這樣實(shí)際增加的計(jì)算量是相當(dāng)少的疤估,但能實(shí)現(xiàn)可變形卷積核,識(shí)別特征的效果更好霎冯。詳細(xì)MSRA的解讀可以看這個(gè)鏈接:可變形卷積網(wǎng)絡(luò):計(jì)算機(jī)新“視”界铃拇。

啟發(fā)與思考

現(xiàn)在越來(lái)越多的CNN模型從巨型網(wǎng)絡(luò)到輕量化網(wǎng)絡(luò)一步步演變,模型準(zhǔn)確率也越來(lái)越高∩蜃玻現(xiàn)在工業(yè)界追求的重點(diǎn)已經(jīng)不是準(zhǔn)確率的提升(因?yàn)槎家呀?jīng)很高了)慷荔,都聚焦于速度與準(zhǔn)確率的trade off,都希望模型又快又準(zhǔn)缠俺。因此從原來(lái)AlexNet显晶、VGGnet,到體積小一點(diǎn)的Inception壹士、Resnet系列磷雇,到目前能移植到移動(dòng)端的mobilenet、ShuffleNet(體積能降低到0.5mbD关浴)倦春,我們可以看到這樣一些趨勢(shì):卷積核方面:

  1. 大卷積核用多個(gè)小卷積核代替;
  2. 單一尺寸卷積核用多尺寸卷積核代替落剪;
  3. 固定形狀卷積核趨于使用可變形卷積核睁本;
  4. 使用1×1卷積核(bottleneck結(jié)構(gòu))。

卷積層通道方面:

  1. 標(biāo)準(zhǔn)卷積用depthwise卷積代替忠怖;
  2. 使用分組卷積呢堰;
  3. 分組卷積前使用channel shuffle;
  4. 通道加權(quán)計(jì)算凡泣。

卷積層連接方面:

  1. 使用skip connection枉疼,讓模型更深;
  2. densely connection鞋拟,使每一層都融合上其它層的特征輸出(DenseNet)

啟發(fā)類(lèi)比到通道加權(quán)操作骂维,卷積層跨層連接能否也進(jìn)行加權(quán)處理?bottleneck + Group conv + channel shuffle + depthwise的結(jié)合會(huì)不會(huì)成為以后降低參數(shù)量的標(biāo)準(zhǔn)配置贺纲?
原文:https://zhuanlan.zhihu.com/p/28749411

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末航闺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猴誊,更是在濱河造成了極大的恐慌潦刃,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懈叹,死亡現(xiàn)場(chǎng)離奇詭異乖杠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)澄成,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)胧洒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人墨状,你說(shuō)我怎么就攤上這事卫漫。” “怎么了歉胶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵汛兜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我通今,道長(zhǎng)粥谬,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任辫塌,我火速辦了婚禮漏策,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臼氨。我一直安慰自己掺喻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著感耙,像睡著了一般褂乍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上即硼,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天逃片,我揣著相機(jī)與錄音,去河邊找鬼只酥。 笑死褥实,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裂允。 我是一名探鬼主播损离,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绝编!你這毒婦竟也來(lái)了僻澎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓮增,失蹤者是張志新(化名)和其女友劉穎怎棱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绷跑,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拳恋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砸捏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谬运。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垦藏,靈堂內(nèi)的尸體忽然破棺而出梆暖,到底是詐尸還是另有隱情,我是刑警寧澤掂骏,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布轰驳,位于F島的核電站,受9級(jí)特大地震影響弟灼,放射性物質(zhì)發(fā)生泄漏级解。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一田绑、第九天 我趴在偏房一處隱蔽的房頂上張望勤哗。 院中可真熱鬧,春花似錦掩驱、人聲如沸芒划。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)民逼。三九已至泵殴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缴挖,已是汗流浹背袋狞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工焚辅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留映屋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓同蜻,卻偏偏與公主長(zhǎng)得像棚点,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子湾蔓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容