0
本文作者: 叢末 | 2019-02-20 09:44 |
雷鋒網(wǎng) AI 科技評(píng)論按:深度學(xué)習(xí)中的各種卷積網(wǎng)絡(luò)大家知多少?對(duì)于那些聽(tīng)說(shuō)過(guò)卻又對(duì)它們沒(méi)有特別清晰的認(rèn)識(shí)的小伙伴們,Kunlun Bai 這篇文章非常值得一讀。Kunlun Bai 是一位人工智能、機(jī)器學(xué)習(xí)、物體學(xué)以及工程學(xué)領(lǐng)域的研究型科學(xué)家,在本文中,他詳細(xì)地介紹了 2D、3D、1x1 、轉(zhuǎn)置 、空洞(擴(kuò)張)、空間可分離、深度可分離、扁平化、 分組等十多種卷積網(wǎng)絡(luò)類型。雷鋒網(wǎng) AI 科技評(píng)論編譯如下。
(本部分為下篇,點(diǎn)擊查看上篇內(nèi)容)
下面這兩篇論文對(duì)空洞卷積(Dilated Convolution)進(jìn)行了介紹:
《使用深度卷積網(wǎng)絡(luò)和全連接 CRF 做語(yǔ)義圖像分割》(Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs,https://arxiv.org/abs/1412.7062)
《通過(guò)空洞卷積做多規(guī)模的上下文聚合》(Multi-scale context aggregation by dilated convolutions,https://arxiv.org/abs/1511.07122)
空洞卷積也稱作擴(kuò)張卷積(Atrous Convolution)。
這是一個(gè)標(biāo)準(zhǔn)的離散卷積:
標(biāo)準(zhǔn)卷積
空洞卷積如下:
當(dāng) l=1 時(shí),空洞卷積就變成了一個(gè)標(biāo)準(zhǔn)卷積。
直觀上,空洞卷積通過(guò)在卷積核部分之間插入空間讓卷積核「膨脹」。這個(gè)增加的參數(shù) l(空洞率)表明了我們想要將卷積核放寬到多大。雖然各實(shí)現(xiàn)是不同的,但是在卷積核部分通常插入 l-1 空間。下圖顯示了當(dāng) l-1,2,4 時(shí)的卷積核大小。
空洞卷積的感受野。本質(zhì)上是在不增加額外的計(jì)算成本的情況下觀察感受野。
在圖像中,3 x 3 的紅點(diǎn)表明經(jīng)過(guò)卷積后的輸出圖像的像素是 3 x 3。雖然三次空洞卷積都得出了相同維度的輸出圖像,但是模型觀察到的感受野(receptive field)是大不相同的。l=1 時(shí),感受野為 3 x 3;l=2 時(shí),感受野是 7 x 7;l=3 時(shí),感受野增至 15x15。有趣的是,伴隨這些操作的參數(shù)數(shù)量本質(zhì)上是相同的,不需要增加參數(shù)運(yùn)算成本就能「觀察」大的感受野。正因?yàn)榇?,空洞卷積常被用以低成本地增加輸出單元上的感受野,同時(shí)還不需要增加卷積核大小,當(dāng)多個(gè)空洞卷積一個(gè)接一個(gè)堆疊在一起時(shí),這種方式是非常有效的。
《通過(guò)空洞卷積做多規(guī)模的上下文聚合》的論文作者在多層空洞卷積以外創(chuàng)建了一個(gè)網(wǎng)絡(luò),其中的空洞率 l 每層都以指數(shù)級(jí)的方式增長(zhǎng)。結(jié)果,當(dāng)參數(shù)數(shù)量每層僅有直線式的增長(zhǎng)時(shí),有效的感受野實(shí)現(xiàn)了指數(shù)型的增長(zhǎng)。
該論文中,空洞卷積被用于系統(tǒng)地聚合多規(guī)模的上下文信息,而不需要損失分辨率。該論文表明,其提出的模塊提高了當(dāng)時(shí)(2016 年)最先進(jìn)的語(yǔ)義分割系統(tǒng)的準(zhǔn)確率。大家可以閱讀這篇論文獲得更多信息。
可分離卷積用于一些神經(jīng)網(wǎng)絡(luò)架構(gòu),例如 MobileNet(該架構(gòu)論文地址:https://arxiv.org/abs/1704.04861)。可分離卷積分為空間可分離卷積(spatially separable convolution)和深度可分離卷積(depthwise separable convolution)。
8.1 空間可分離卷積
空間可分離卷積在圖像的 2D 空間維度上執(zhí)行,例如高和寬兩個(gè)維度。從概念上來(lái)看,顧名思義,空間可分離卷積將卷積分解為兩項(xiàng)單獨(dú)的操作。下面所展示的案例中,一個(gè)卷積核為 3x3 的 Sobel 卷積核拆分成了一個(gè) 3x1 卷積核和一個(gè) 1x3 卷積核。
一個(gè)卷積核為 3x3 的 Sobel 卷積核拆分成了一個(gè) 3x1 卷積核和一個(gè) 1x3 卷積核
在卷積中,3x3 卷積核可以直接對(duì)圖像進(jìn)行卷積操作。在空間可分離卷積中,首先由 3x1 卷積核對(duì)圖像進(jìn)行卷積,之后再應(yīng)用 1x3 卷積核。在執(zhí)行相同的操作中,這就要求 6 個(gè)而不是 9 個(gè)參數(shù)了。
此外,比起卷積,空間可分離卷積要執(zhí)行的矩陣乘法運(yùn)算也更少。舉一個(gè)具體的案例,在卷積核為 3x3 的 5x5 圖像上做卷積,要求橫向掃描 3 個(gè)位置(以及縱向掃描 3 個(gè)位置)上的卷積核,共有 9 個(gè)位置,如下圖標(biāo)出的 9 個(gè)點(diǎn)所示。在每個(gè)位置都進(jìn)行 9 次元素級(jí)別的乘法運(yùn)算,共執(zhí)行 9 x 9 = 81 次運(yùn)算。
針對(duì)空間可分離卷積,另一方面,我們先在 5x5 圖像上應(yīng)用一個(gè) 3x1 的過(guò)濾器,這樣的話就能橫向掃描 5 個(gè)位置的卷積核以及縱向掃描 3 個(gè)位置的卷積核,總共 5 x 3=15 個(gè)位置,如下圖所標(biāo)的點(diǎn)所示。這樣的話就共要進(jìn)行 15 x 3 = 45 次乘法運(yùn)算。現(xiàn)在得到的是一個(gè) 3 x 5 的矩陣,這個(gè)矩陣經(jīng)過(guò) 1 x 3 卷積核的卷積操作——從橫向上的 3 個(gè)位置以及縱向上的 5 個(gè)位置來(lái)掃描該矩陣。對(duì)于這 9 個(gè)位置中的每一個(gè),都進(jìn)行了 3 次元素級(jí)別的乘法運(yùn)算,這個(gè)步驟總共要求 9 x 3=27 次乘法運(yùn)算。因此,總體上,該空間可分離卷積共進(jìn)行了 45 + 27 = 72 次乘法運(yùn)算,也比標(biāo)準(zhǔn)的卷積所要進(jìn)行的乘法運(yùn)算次數(shù)要少。
有 1 個(gè)通道的空間可分離卷積
讓我們稍微概括一下上面的案例。假設(shè)我們現(xiàn)在在 m x m 卷積核、卷積步長(zhǎng)=1 、填充=0 的 N x N 圖像上做卷積。傳統(tǒng)的卷積需要進(jìn)行 (N-2) x (N-2) x m x m 次乘法運(yùn)算,而空間可分離卷積只需要進(jìn)行 N x (N-2) x m + (N-2) x (N-2) x m = (2N-2) x (N-2) x m 次乘法運(yùn)算??臻g可分離卷積與標(biāo)準(zhǔn)的卷積的計(jì)算成本之比為:
對(duì)于圖像大小 N 大于過(guò)濾器大小(N >> m),這個(gè)比率就變成了 2 / m,這就意味著在這種漸進(jìn)情況(N >> m)下,對(duì)于一個(gè) 3x3 的過(guò)濾器,空間可分離卷積與標(biāo)準(zhǔn)的卷積之間的計(jì)算成本比率為 2/3;對(duì)于一個(gè) 5x5 的過(guò)濾器,比率為 2/5;對(duì)于一個(gè) 7x7 的過(guò)濾器,比如為 2/7,以此類推。
雖然空間可分離卷積節(jié)省了計(jì)算成本,但是它很少應(yīng)用于深度學(xué)習(xí)中。一個(gè)主要的原因是,并不是所有的卷積核都能被拆分為 2 個(gè)更小的卷積核。如果我們用這種空間可分離卷積來(lái)取代所有傳統(tǒng)的卷積,就會(huì)束縛我們?nèi)ニ褜び?xùn)練期間所有可能存在的卷積核,因?yàn)檫@個(gè)訓(xùn)練結(jié)果可能是還只是次優(yōu)的。
8.2 深度可分離卷積
現(xiàn)在,讓我們移步到深度可分離卷積,它在深度學(xué)習(xí)中的應(yīng)用要更普遍得多(例如在 MobileNet 和 Xception 中)。深度可分離卷積由兩步組成:深度卷積以及 1x1 卷積。
在介紹這些步驟前,值得回顧一下前面部分所提到的 2D 卷積核 1x1 卷積。讓我們先快速過(guò)一下標(biāo)準(zhǔn)的 2D 卷積。舉一個(gè)具體的案例,假設(shè)輸入層的大小為 7 x 7 x 3(高 x 寬 x 通道),過(guò)濾器大小為 3 x 3 x 3,經(jīng)過(guò)一個(gè)過(guò)濾器的 2D 卷積后,輸出層的大小為 5 x 5 x 1(僅有 1 個(gè)通道)。
使用 1 個(gè)過(guò)濾器做標(biāo)準(zhǔn)的 2D 卷積來(lái)創(chuàng)建一個(gè) 1 層的輸出
一般來(lái)說(shuō),兩個(gè)神經(jīng)網(wǎng)絡(luò)層間應(yīng)用了多個(gè)過(guò)濾器,現(xiàn)在假設(shè)過(guò)濾器個(gè)數(shù)為 128。128 次 2D 卷積得到了 128 個(gè) 5 x 5 x 1 的輸出映射。然后將這些映射堆疊為一個(gè)大小為 5 x 5 x 128 的單個(gè)層。空間維度如高和寬縮小了,而深度則擴(kuò)大了。
使用 128 個(gè)過(guò)濾器做標(biāo)準(zhǔn)的 2D 卷積來(lái)創(chuàng)建一個(gè) 128 層的輸出
接下來(lái)看看使用深度可分離卷積如何實(shí)現(xiàn)同樣的轉(zhuǎn)換。
首先,我們?cè)谳斎雽由蠎?yīng)用深度卷積。我們?cè)?2D 卷積中分別使用 3 個(gè)卷積核(每個(gè)過(guò)濾器的大小為 3 x 3 x 1),而不使用大小為 3 x 3 x 3 的單個(gè)過(guò)濾器。每個(gè)卷積核僅對(duì)輸入層的 1 個(gè)通道做卷積,這樣的卷積每次都得出大小為 5 x 5 x 1 的映射,之后再將這些映射堆疊在一起創(chuàng)建一個(gè) 5 x 5 x 3 的圖像,最終得出一個(gè)大小為 5 x 5 x 3 的輸出圖像。這樣的話,圖像的空間維度縮小了嗎,但是深度保持與原來(lái)的一樣。
深度可分離卷積—第一步:在 2D 卷積中分別使用 3 個(gè)卷積核(每個(gè)過(guò)濾器的大小為 3 x 3 x 1),而不使用大小為 3 x 3 x 3 的單個(gè)過(guò)濾器。每個(gè)卷積核僅對(duì)輸入層的 1 個(gè)通道做卷積,這樣的卷積每次都得出大小為 5 x 5 x 1 的映射,之后再將這些映射堆疊在一起創(chuàng)建一個(gè) 5 x 5 x 3 的圖像,最終得出一個(gè)大小為 5 x 5 x 3 的輸出圖像。
深度可分離卷積的第二步是擴(kuò)大深度,我們用大小為 1x1x3 的卷積核做 1x1 卷積。每個(gè) 1x1x3 卷積核對(duì) 5 x 5 x 3 輸入圖像做卷積后都得出一個(gè)大小為 5 x 5 x1 的映射。
這樣的話,做 128 次 1x1 卷積后,就可以得出一個(gè)大小為 5 x 5 x 128 的層。
深度可分離卷積完成這兩步后,同樣可以將一個(gè) 7 x 7 x 3 的輸入層轉(zhuǎn)換為 5 x 5 x 128 的輸出層。
深度可分離卷積的完整過(guò)程如下圖所示:
深度可分離卷積的完整過(guò)程
因此,做深度可分離卷積的優(yōu)勢(shì)是什么?高效!相比于 2D 卷積,深度可分離卷積的執(zhí)行次數(shù)要少得多。
讓我們回憶一下 2D 卷積案例中的計(jì)算成本:128 個(gè) 3x3x3 的卷積核移動(dòng) 5x5 次,總共需要進(jìn)行的乘法運(yùn)算總數(shù)為 128 x 3 x 3 x 3 x 5 x 5 = 86,400 次。
那可分離卷積呢?在深度卷積這一步,有 3 個(gè) 3x3x3 的卷積核移動(dòng) 5x5 次,總共需要進(jìn)行的乘法運(yùn)算次數(shù)為 3x3x3x1x5x5 = 675 次;在第二步的 1x1 卷積中,有 128 個(gè) 3x3x3 的卷積核移動(dòng) 5x5 次,總共需要進(jìn)行的乘法運(yùn)算次數(shù)為 128 x 1 x 1 x 3 x 5 x 5 = 9,600 次。因此,深度可分離卷積共需要進(jìn)行的乘法運(yùn)算總數(shù)為 675 + 9600 = 10,275 次,花費(fèi)的計(jì)算成本僅為 2D 卷積的 12%。
因此對(duì)于任意大小的圖像來(lái)說(shuō),應(yīng)用深度可分離卷積能節(jié)省多少次計(jì)算呢?我們稍微概括一下上面的案例。假設(shè)輸入圖像大小為 H x W x D,2D 卷積的卷積步長(zhǎng)為 1,填充為 0,卷積核大小為 h x h x D(兩個(gè) h 相等)、個(gè)數(shù)為 Nc。2D 卷積后,大小為 H x W x D 的輸入層最終轉(zhuǎn)換為大小為(H-h+1)x(W-h+1)x Nc 的輸出層,總共需要進(jìn)行的乘法運(yùn)算次數(shù)為:Nc x h x h x D x (H-h+1) x (W-h+1)。
針對(duì)同樣的轉(zhuǎn)換,深度可分離卷積總共需要進(jìn)行的乘法運(yùn)算次數(shù)為:D x h x h x 1 x (H-h+1) x (W-h+1) + Nc x 1 x 1 x D x (H-h+1) x (W-h+1) = (h x h + Nc) x D x (H-h+1) x (W-h+1)。
深度可分離卷積與 2D 卷積之間的乘法運(yùn)算次數(shù)之比為:
對(duì)于大部分現(xiàn)代框架而言,輸出層往往都有許多個(gè)通道,例如幾百甚至幾千個(gè)通道。對(duì)于 Nc >> h 的層,上面的表達(dá)式會(huì)縮短為 1/h/h,這就意味著對(duì)于這個(gè)漸進(jìn)的表達(dá)式而言,如果使用的過(guò)濾器大小為 3 x 3,2D 卷積需要進(jìn)行的乘法運(yùn)算次數(shù)比深度可分離卷積多出 9 次;使用大小為 5 x5 的過(guò)濾器,則要多出 25 次。
使用深度可分離卷積有什么缺點(diǎn)嗎?當(dāng)然有。深度可分離卷積會(huì)減少卷積中的參數(shù)個(gè)數(shù),這樣的話,對(duì)于一個(gè)小的模型,如果采用深度可分離模型來(lái)踢打 2D 模型,該模型的能力就會(huì)被大為削弱。結(jié)果,該模型也會(huì)變成次優(yōu)的模型。然而,如果恰當(dāng)使用,深度可分離卷積可以提高效率而不會(huì)明顯損害模型的性能。
《將扁平化卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于前饋加速》(Flattened convolutional neural networks for feedforward acceleration,https://arxiv.org/abs/1412.5474)這篇論文對(duì)扁平化卷積(Flattened convolutions)進(jìn)行了介紹。直觀上,這種卷積的思路就是應(yīng)用過(guò)濾器分離,即將標(biāo)準(zhǔn)的分離器拆分為 3 個(gè) 1D 分離器,而不是直接應(yīng)用一個(gè)標(biāo)準(zhǔn)的卷積過(guò)濾器來(lái)將輸入層映射為輸出層。這個(gè)思路類似于前部分所提到的空間可分離卷積,其中的一個(gè)空間過(guò)濾器近似于兩個(gè) rank-1 過(guò)濾器。
圖片源自:https://arxiv.org/abs/1412.5474
需要注意的一點(diǎn)事,如果標(biāo)準(zhǔn)卷積的過(guò)濾器是 rank-1 過(guò)濾器,這樣的過(guò)濾器可以被拆分為 3 個(gè) 1D 過(guò)濾器的交叉乘積,但是這是一個(gè)前提條件并且標(biāo)準(zhǔn)過(guò)濾器的固有 rank 往往比現(xiàn)實(shí)應(yīng)用中的更高。正如論文中所指出的:「隨著分類問(wèn)題的難度增加,解決該問(wèn)題還需要更多的關(guān)鍵部分... 深度網(wǎng)絡(luò)中學(xué)習(xí)過(guò)濾器具有分布的特征值,并且將分離直接用于過(guò)濾器會(huì)導(dǎo)致明顯的信息丟失?!?/p>
為了減輕這類問(wèn)題,論文限制了感受野的關(guān)系從而讓模型可以根據(jù)訓(xùn)練學(xué)習(xí) 1D 分離的過(guò)濾器。這篇論文聲稱,通過(guò)使用由連續(xù)的 1D 過(guò)濾器組成的扁平化網(wǎng)絡(luò)在 3D 空間的所有方向上訓(xùn)練模型,能夠提供的性能與標(biāo)準(zhǔn)卷積網(wǎng)絡(luò)相當(dāng),不過(guò)由于學(xué)習(xí)參數(shù)的顯著減少,其計(jì)算成本要更低得多。
2012 年的一篇 AlexNet 論文(ImageNet Classification with Deep Convolutional Neural Networks,https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)對(duì)分組卷積(Grouped convolution)進(jìn)行了介紹。采用這種卷積的主要原因是為了讓網(wǎng)絡(luò)用有限的記憶(1.5GB 記憶/GPU)在兩個(gè) GPU 上進(jìn)行訓(xùn)練。下圖的 AlexNet 現(xiàn)實(shí)了大部分層的兩條分離的卷積路線,正在進(jìn)行兩個(gè) GPU 的模型并行化計(jì)算。
這里我描述的是分組卷積是如何實(shí)現(xiàn)的。首先,傳統(tǒng)的 2D 卷積步驟如下圖所示。在這個(gè)案例中,通過(guò)應(yīng)用 128 個(gè)過(guò)濾器(每個(gè)過(guò)濾器的大小為 3 x 3 x 3),大小為 7 x 7 x 3 的輸入層被轉(zhuǎn)換為大小為 5 x 5 x 128 的輸出層。針對(duì)通用情況,可概括為:通過(guò)應(yīng)用 Dout 個(gè)卷積核(每個(gè)卷積核的大小為 h x w x Din),可將大小為 Hin x Win x Din 的輸入層轉(zhuǎn)換為大小為 Hout x Wout x Dout 的輸出層。
標(biāo)準(zhǔn) 2D 卷積
在分組卷積中,過(guò)濾器被拆分為不同的組,每一個(gè)組都負(fù)責(zé)具有一定深度的傳統(tǒng) 2D 卷積的工作。下圖的案例表示得更清晰一些。
拆分為 2 個(gè)過(guò)濾組的分組卷積
上圖表示的是被拆分為 2 個(gè)過(guò)濾器組的分組卷積。在每個(gè)過(guò)濾器組中,其深度僅為名義上的 2D 卷積的一半(Din / 2),而每個(gè)過(guò)濾器組都包含 Dout /2 個(gè)過(guò)濾器。第一個(gè)過(guò)濾器組(紅色)對(duì)輸入層的前半部分做卷積([:, :, 0:Din/2]),第二個(gè)過(guò)濾器組(藍(lán)色)對(duì)輸入層的后半部分做卷積([:, :, Din/2:Din])。最終,每個(gè)過(guò)濾器組都輸出了 Dout/2 個(gè)通道。整體上,兩個(gè)組輸出的通道數(shù)為 2 x Dout/2 = Dout。之后,我們?cè)賹⑦@些通道堆疊到輸出層中,輸出層就有了 Dout 個(gè)通道。
10.1 分組卷積 VS 深度卷積
你可能已經(jīng)觀察到了分組卷積和深度可分離卷積中用到的深度卷積之間的某些聯(lián)系和區(qū)別。如果過(guò)濾器組的數(shù)量與輸入層的通道數(shù)相同,每個(gè)過(guò)濾器的深度就是 Din / Din = 1,其與深度卷積中的過(guò)濾器深度相同。
從另一個(gè)角度來(lái)說(shuō),每個(gè)過(guò)濾器組現(xiàn)在包含 Dout / Din 個(gè)過(guò)濾器??傮w而言,其輸出層的深度就是 Dout,這就與深度卷積的輸出層深度不同,深度卷積不改變層的深度,但隨后深度可分離卷積中的 1 x 1 卷積會(huì)加大層的深度。
執(zhí)行分組卷積有如下幾個(gè)優(yōu)勢(shì):
第一個(gè)優(yōu)勢(shì)是訓(xùn)練的高效性。由于卷積被拆分到幾條路線中,每條路線都由不同的 GPU 分別進(jìn)行處理。這一過(guò)程就允許模型以平行的方式在多個(gè) GPU 上進(jìn)行訓(xùn)練。比起在一個(gè) GPU 上一個(gè)一個(gè)地訓(xùn)練模型,這種在多個(gè) GPU 上的模型并行化訓(xùn)練方式每一步都可以給網(wǎng)絡(luò)喂養(yǎng)更多的圖像。模型并行化被認(rèn)為比數(shù)據(jù)并行化更佳,后者將數(shù)據(jù)集進(jìn)行拆分,然后對(duì)每一批數(shù)據(jù)進(jìn)行訓(xùn)練。不過(guò),當(dāng)每批數(shù)據(jù)的大小過(guò)小時(shí),我們執(zhí)行的工作基本上是隨機(jī)的,而不是批量梯度下降。這就會(huì)造成訓(xùn)練速度變慢或聚合效果變差的結(jié)果。
對(duì)于訓(xùn)練非常深度的神經(jīng)網(wǎng)絡(luò),分組卷積變得很重要,如下圖中 ResNeXt 所示。
圖片源自:https://arxiv.org/abs/1611.05431
第二個(gè)優(yōu)勢(shì)是模型更加高效,例如,當(dāng)過(guò)濾器組數(shù)增加時(shí),模型參數(shù)就會(huì)減少。在前一個(gè)案例中,在標(biāo)準(zhǔn)的 2D 卷積中,過(guò)濾器有 h x w x Din x Dout 個(gè)參數(shù),而在拆分為 2 個(gè)過(guò)濾器組的分組卷積中,過(guò)濾器僅有 (h x w x Din/2 x Dout/2) x 2 個(gè)參數(shù):參數(shù)數(shù)量減少了一半。
第三個(gè)優(yōu)勢(shì)是給人帶來(lái)了些驚喜的。分組卷積能提供比標(biāo)準(zhǔn) 2D 卷積更好的模型。另一篇很棒的博客
「A Tutorial on Filter Groups (Grouped Convolution)」闡述了這一點(diǎn)。這里僅提取了文章的部分內(nèi)容,大家可前往 https://blog.yani.io/filter-group-tutorial/ 閱讀全文。
其原因與稀疏的過(guò)濾器有關(guān)。下面的圖像就是相鄰層的過(guò)濾器之間的相互關(guān)系,這個(gè)關(guān)系是稀疏的。
在 CIFAR10 訓(xùn)練的 Network-in-Network 模型中相鄰層的過(guò)濾器之間的相關(guān)性矩陣。高相關(guān)的過(guò)濾器對(duì)更亮,而低相關(guān)過(guò)濾器對(duì)更暗。圖片源自:https://blog.yani.io/filter-group-tutorial/
那針對(duì)分組卷積的相關(guān)性映射是怎么樣的呢?
當(dāng)采用 1、2、4、8 和 16 個(gè)過(guò)濾器組訓(xùn)練時(shí),在 CIFAR10 訓(xùn)練的 Network-in-Network 模型中相鄰層的過(guò)濾器之間的相關(guān)性。圖片源自:https://blog.yani.io/filter-group-tutorial/
上圖表示的就是模型采用 1、2、4、8 和 16 個(gè)過(guò)濾器組訓(xùn)練時(shí),相鄰層的過(guò)濾器的相互關(guān)系。這篇文章提出了一個(gè)推論:「過(guò)濾器組的作用就是學(xué)習(xí)通道維度上的塊對(duì)角結(jié)構(gòu)的稀疏性... 在對(duì)過(guò)濾器進(jìn)行了分組的網(wǎng)絡(luò)中,高相關(guān)性的過(guò)濾器以更結(jié)構(gòu)化的方式學(xué)習(xí)。結(jié)果,不要求學(xué)習(xí)的過(guò)濾器關(guān)系也不再需要用參數(shù)進(jìn)行表示,這就顯著減少了網(wǎng)絡(luò)中的參數(shù)數(shù)量,并且在減少參數(shù)的過(guò)程中不容易過(guò)度擬合,因此這種類似正則化的效果可以讓優(yōu)化器學(xué)習(xí)更準(zhǔn)確、更有效的深度網(wǎng)絡(luò)?!?/p>
過(guò)濾器分離:正如論文作者所指出的,過(guò)濾器組似乎將學(xué)習(xí)的過(guò)濾器分為兩個(gè)不同的組:黑白過(guò)濾器和彩色過(guò)濾器。圖片源自:https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
此外,每個(gè)過(guò)濾器組都學(xué)習(xí)數(shù)據(jù)獨(dú)一無(wú)二的表示。正如 AlexaNet 這篇論文的作者所提到的,過(guò)濾器組似乎將學(xué)習(xí)的過(guò)濾器組織成了兩個(gè)不同的組:黑白濾鏡和彩色濾鏡。
曠視研究院的 ShuffleNet 論文(ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices,https://arxiv.org/abs/1707.01083)對(duì)混洗分組卷積(Shuffled grouped convolution)進(jìn)行了介紹。ShuffleNet 是一種計(jì)算高效的卷積架構(gòu),專為計(jì)算能力十分有限的移動(dòng)設(shè)備(如 10–150 MFLOPs)設(shè)計(jì)。
混洗分組卷積背后的思路與分組卷積(應(yīng)用于 MobileNet 、ResNeXt 等網(wǎng)絡(luò))以及深度可分離卷積(應(yīng)用于 Xception)背后的思路相關(guān)。
總的來(lái)說(shuō),混洗分組卷積包括分組卷積和通道混洗(channel shuffling)。
在分組卷積部分,我們了解到了過(guò)濾器被拆分為不同的組,每個(gè)組都負(fù)責(zé)擁有一定深度的傳統(tǒng) 2D 卷積的工作,顯著減少了整個(gè)操作步驟。在下圖這個(gè)案例中,假設(shè)過(guò)濾器分成了 3 組。第一個(gè)過(guò)濾器組對(duì)輸入層的紅色部分做卷積;第二個(gè)和第三個(gè)過(guò)濾器組分別對(duì)輸入層的綠色和藍(lán)色部分做卷積。每個(gè)過(guò)濾器組中的卷積核深度僅為輸入層整個(gè)通道的 1/3。在這個(gè)案例中,進(jìn)行第一個(gè)分組卷積 GConv1 后,輸入層被映射到中間的特征映射上,之后特征映射又通過(guò)第一個(gè)分組卷積 GConv2 被映射到輸出層上。
分組卷積雖然計(jì)算高效,但它也存在問(wèn)題,即每個(gè)過(guò)濾器分組僅對(duì)從前面層的固定部分向后傳遞的信息進(jìn)行處理。在上面這個(gè)圖像的案例中,第一個(gè)過(guò)濾器組(紅色)僅處理從輸入通道的前 1/3 部分向后傳遞的信息;藍(lán)色過(guò)濾器組僅處理從輸入通道的后 1/3 部分向后傳遞的信息。這樣的話,每個(gè)過(guò)濾器組就僅限于學(xué)習(xí)一些特定的特征,這種屬性就阻礙了訓(xùn)練期間信息在通道組之間流動(dòng),并且還削弱了特征表示。為了克服這一問(wèn)題,我們可以應(yīng)用通道混洗。
通道混洗的思路就是混合來(lái)自不同過(guò)濾器組的信息。下圖中,顯示了應(yīng)用有 3 個(gè)過(guò)濾器組的第一個(gè)分組卷積 GConv1 后所得到的特征映射。在將這些特征映射喂養(yǎng)到第二個(gè)分組卷積之前,先將每個(gè)組中的通道拆分為幾個(gè)小組,然后再混合這些小組。
通道混洗
經(jīng)過(guò)這種混洗,我們?cè)俳又绯?zhí)行第二個(gè)分組卷積 GConv2。但是現(xiàn)在,由于經(jīng)過(guò)混洗的層中的信息已經(jīng)被混合了,我們本質(zhì)上是將特征映射層的不同小組喂養(yǎng)給了 GConv2 中的每個(gè)組。結(jié)果,不僅信息可以在通道組間進(jìn)行流動(dòng),特征表示也得到增強(qiáng)。
ShuffleNet 論文(ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices,https://arxiv.org/abs/1707.01083)同樣也對(duì)逐點(diǎn)分組卷積(Pointwise grouped convolution)進(jìn)行了介紹。一般針對(duì) MobileNet 或 ResNeXt 中的分組卷積,分組在 3x3 的空間卷積而不是 1x1 卷積上執(zhí)行。
ShuffleNet 這篇論文認(rèn)為 1x1 卷積的計(jì)算成本也很高,提議也對(duì) 1x1 卷積進(jìn)行分組。逐點(diǎn)分組卷積,顧名思義,就是針對(duì) 1x1 卷積進(jìn)行分組操作,這項(xiàng)操作與分組卷積的相同,僅有一項(xiàng)更改——就是在 1x1 過(guò)濾器而非 NxN 過(guò)濾器 (N>1) 執(zhí)行。
在該論文中,作者使用了我們都有所了解的 3 種卷積: (1) 混洗分組卷積; (2) 逐點(diǎn)分組卷積; 以及 (3) 深度可分離卷積。這種架構(gòu)設(shè)計(jì)能明顯地減少計(jì)算量同時(shí)還能保持準(zhǔn)確性。在實(shí)際的移動(dòng)設(shè)備上,ShuffleNet 的分類錯(cuò)誤與 AlexNet 的相當(dāng)。然而,從使用 AlexNe 的 720 MFLOPs 到使用 ShuffleNet 的 40–140 MFLOPs,計(jì)算成本明顯下降。在面向移動(dòng)設(shè)備的卷積神經(jīng)網(wǎng)絡(luò)領(lǐng)域,ShuffleNe 以相對(duì)較小的計(jì)算成本以及良好的模型性能廣受歡迎。
其他參考博文&文章
「An Introduction to different Types of Convolutions in Deep Learning」:https://towardsdatascience.com/types-of-convolutions-in-deep-learning-717013397f4d
「Review: DilatedNet?—?Dilated Convolution (Semantic Segmentation)」:https://towardsdatascience.com/review-dilated-convolution-semantic-segmentation-9d5a5bd768f5
「ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices」:https://medium.com/syncedreview/shufflenet-an-extremely-efficient-convolutional-neural-network-for-mobile-devices-72c6f5b01651
「Separable convolutions「A Basic Introduction to Separable Convolutions」:https://towardsdatascience.com/a-basic-introduction-to-separable-convolutions-b99ec3102728
Inception network「A Simple Guide to the Versions of the Inception Network」:https://towardsdatascience.com/a-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202
「A Tutorial on Filter Groups (Grouped Convolution)」:https://blog.yani.io/filter-group-tutorial/
「Convolution arithmetic animation」:https://github.com/vdumoulin/conv_arithmetic
「Up-sampling with Transposed Convolution」:https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0
「Intuitively Understanding Convolutions for Deep Learning」:https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1
論文
Network in Network:https://arxiv.org/abs/1312.4400
Multi-Scale Context Aggregation by Dilated Convolutions:https://arxiv.org/abs/1511.07122
Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs:https://arxiv.org/abs/1412.7062
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices:https://arxiv.org/abs/1707.01083
A guide to convolution arithmetic for deep learning :https://arxiv.org/abs/1603.07285
Going deeper with convolutions:https://arxiv.org/abs/1409.4842
Rethinking the Inception Architecture for Computer Vision :https://arxiv.org/pdf/1512.00567v3.pdf
Flattened convolutional neural networks for feedforward acceleration :https://arxiv.org/abs/1412.5474
Xception: Deep Learning with Depthwise Separable Convolutions:https://arxiv.org/abs/1610.02357
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications :https://arxiv.org/abs/1704.04861
Deconvolution and Checkerboard Artifacts:https://distill.pub/2016/deconv-checkerboard/
ResNeXt: Aggregated Residual Transformations for Deep Neural Networks:https://arxiv.org/abs/1611.05431
via:https://towardsdatascience.com/a-comprehensive-introduction-to-different-types-of-convolutions-in-deep-learning-669281e58215 雷鋒網(wǎng) AI 科技評(píng)論編譯
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。