卷積與互相關(guān) 在信號(hào)處理、圖像處理和其它工程/科學(xué)領(lǐng)域,卷積都是一種使用廣泛的技術(shù)。在深度學(xué)習(xí)領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)(CNN)這種模型架構(gòu)就得名于這種技術(shù)。但是,深度學(xué)習(xí)領(lǐng)域的卷積本質(zhì)上是信號(hào)/圖像處理領(lǐng)域內(nèi)的互相關(guān)(cross-correlation)。這兩種操作之間存在細(xì)微的差別。 無(wú)需太過(guò)深入細(xì)節(jié),我們就能看到這個(gè)差別。在信號(hào)/圖像處理領(lǐng)域,卷積的定義是: 其定義是兩個(gè)函數(shù)中一個(gè)函數(shù)經(jīng)過(guò)反轉(zhuǎn)和位移后再相乘得到的積的積分。下面的可視化展示了這一思想: 信號(hào)處理中的卷積。過(guò)濾器 g 經(jīng)過(guò)反轉(zhuǎn),然后再沿水平軸滑動(dòng)。在每一個(gè)位置,我們都計(jì)算 f 和反轉(zhuǎn)后的 g 之間相交區(qū)域的面積。這個(gè)相交區(qū)域的面積就是特定位置出的卷積值。 這里,函數(shù) g 是過(guò)濾器。它被反轉(zhuǎn)后再沿水平軸滑動(dòng)。在每一個(gè)位置,我們都計(jì)算 f 和反轉(zhuǎn)后的 g 之間相交區(qū)域的面積。這個(gè)相交區(qū)域的面積就是特定位置出的卷積值。 另一方面,互相關(guān)是兩個(gè)函數(shù)之間的滑動(dòng)點(diǎn)積或滑動(dòng)內(nèi)積。互相關(guān)中的過(guò)濾器不經(jīng)過(guò)反轉(zhuǎn),而是直接滑過(guò)函數(shù) f。f 與 g 之間的交叉區(qū)域即是互相關(guān)。下圖展示了卷積與互相關(guān)之間的差異。 信號(hào)處理中卷積與互相關(guān)之間的差異 在深度學(xué)習(xí)中,卷積中的過(guò)濾器不經(jīng)過(guò)反轉(zhuǎn)。嚴(yán)格來(lái)說(shuō),這是互相關(guān)。我們本質(zhì)上是執(zhí)行逐元素乘法和加法。但在深度學(xué)習(xí)中,直接將其稱(chēng)之為卷積更加方便。這沒(méi)什么問(wèn)題,因?yàn)檫^(guò)濾器的權(quán)重是在訓(xùn)練階段學(xué)習(xí)到的。如果上面例子中的反轉(zhuǎn)函數(shù) g 是正確的函數(shù),那么經(jīng)過(guò)訓(xùn)練后,學(xué)習(xí)得到的過(guò)濾器看起來(lái)就會(huì)像是反轉(zhuǎn)后的函數(shù) g。因此,在訓(xùn)練之前,沒(méi)必要像在真正的卷積中那樣首先反轉(zhuǎn)過(guò)濾器。
3D 卷積 在上一節(jié)的解釋中,我們看到我們實(shí)際上是對(duì)一個(gè) 3D 體積執(zhí)行卷積。但通常而言,我們?nèi)栽谏疃葘W(xué)習(xí)中稱(chēng)之為 2D 卷積。這是在 3D 體積數(shù)據(jù)上的 2D 卷積。過(guò)濾器深度與輸入層深度一樣。這個(gè) 3D 過(guò)濾器僅沿兩個(gè)方向移動(dòng)(圖像的高和寬)。這種操作的輸出是一張 2D 圖像(僅有一個(gè)通道)。 很自然,3D 卷積確實(shí)存在。這是 2D 卷積的泛化。下面就是 3D 卷積,其過(guò)濾器深度小于輸入層深度(核大小<通道大小)。因此,3D 過(guò)濾器可以在所有三個(gè)方向(圖像的高度、寬度、通道)上移動(dòng)。在每個(gè)位置,逐元素的乘法和加法都會(huì)提供一個(gè)數(shù)值。因?yàn)檫^(guò)濾器是滑過(guò)一個(gè) 3D 空間,所以輸出數(shù)值也按 3D 空間排布。也就是說(shuō)輸出是一個(gè) 3D 數(shù)據(jù)。 在 3D 卷積中,3D 過(guò)濾器可以在所有三個(gè)方向(圖像的高度、寬度、通道)上移動(dòng)。在每個(gè)位置,逐元素的乘法和加法都會(huì)提供一個(gè)數(shù)值。因?yàn)檫^(guò)濾器是滑過(guò)一個(gè) 3D 空間,所以輸出數(shù)值也按 3D 空間排布。也就是說(shuō)輸出是一個(gè) 3D 數(shù)據(jù)。 與 2D 卷積(編碼了 2D 域中目標(biāo)的空間關(guān)系)類(lèi)似,3D 卷積可以描述 3D 空間中目標(biāo)的空間關(guān)系。對(duì)某些應(yīng)用(比如生物醫(yī)學(xué)影像中的 3D 分割/重構(gòu))而言,這樣的 3D 關(guān)系很重要,比如在 CT 和 MRI 中,血管之類(lèi)的目標(biāo)會(huì)在 3D 空間中蜿蜒曲折。
轉(zhuǎn)置卷積(去卷積) 對(duì)于很多網(wǎng)絡(luò)架構(gòu)的很多應(yīng)用而言,我們往往需要進(jìn)行與普通卷積方向相反的轉(zhuǎn)換,即我們希望執(zhí)行上采樣。例子包括生成高分辨率圖像以及將低維特征圖映射到高維空間,比如在自動(dòng)編碼器或形義分割中。(在后者的例子中,形義分割首先會(huì)提取編碼器中的特征圖,然后在解碼器中恢復(fù)原來(lái)的圖像大小,使其可以分類(lèi)原始圖像中的每個(gè)像素。) 實(shí)現(xiàn)上采樣的傳統(tǒng)方法是應(yīng)用插值方案或人工創(chuàng)建規(guī)則。而神經(jīng)網(wǎng)絡(luò)等現(xiàn)代架構(gòu)則傾向于讓網(wǎng)絡(luò)自己自動(dòng)學(xué)習(xí)合適的變換,無(wú)需人類(lèi)干預(yù)。為了做到這一點(diǎn),我們可以使用轉(zhuǎn)置卷積。 轉(zhuǎn)置卷積在文獻(xiàn)中也被稱(chēng)為去卷積或 fractionally strided convolution。但是,需要指出「去卷積(deconvolution)」這個(gè)名稱(chēng)并不是很合適,因?yàn)檗D(zhuǎn)置卷積并非信號(hào)/圖像處理領(lǐng)域定義的那種真正的去卷積。從技術(shù)上講,信號(hào)處理中的去卷積是卷積運(yùn)算的逆運(yùn)算。但這里卻不是這種運(yùn)算。因此,某些作者強(qiáng)烈反對(duì)將轉(zhuǎn)置卷積稱(chēng)為去卷積。人們稱(chēng)之為去卷積主要是因?yàn)檫@樣說(shuō)很簡(jiǎn)單。后面我們會(huì)介紹為什么將這種運(yùn)算稱(chēng)為轉(zhuǎn)置卷積更自然且更合適。 我們一直都可以使用直接的卷積實(shí)現(xiàn)轉(zhuǎn)置卷積。對(duì)于下圖的例子,我們?cè)谝粋€(gè) 2×2 的輸入(周?chē)恿?2×2 的單位步長(zhǎng)的零填充)上應(yīng)用一個(gè) 3×3 核的轉(zhuǎn)置卷積。上采樣輸出的大小是 4×4。 將 2×2 的輸入上采樣成 4×4 的輸出 有趣的是,通過(guò)應(yīng)用各種填充和步長(zhǎng),我們可以將同樣的 2×2 輸入圖像映射到不同的圖像尺寸。下面,轉(zhuǎn)置卷積被用在了同一張 2×2 輸入上(輸入之間插入了一個(gè)零,并且周?chē)恿?2×2 的單位步長(zhǎng)的零填充),所得輸出的大小是 5×5。 將 2×2 的輸入上采樣成 5×5 的輸出 觀察上述例子中的轉(zhuǎn)置卷積能幫助我們構(gòu)建起一些直觀認(rèn)識(shí)。但為了泛化其應(yīng)用,了解其可以如何通過(guò)計(jì)算機(jī)的矩陣乘法實(shí)現(xiàn)是有益的。從這一點(diǎn)上我們也可以看到為何「轉(zhuǎn)置卷積」才是合適的名稱(chēng)。 在卷積中,我們定義 C 為卷積核,Large 為輸入圖像,Small 為輸出圖像。經(jīng)過(guò)卷積(矩陣乘法)后,我們將大圖像下采樣為小圖像。這種矩陣乘法的卷積的實(shí)現(xiàn)遵照:C x Large = Small。 下面的例子展示了這種運(yùn)算的工作方式。它將輸入平展為 16×1 的矩陣,并將卷積核轉(zhuǎn)換為一個(gè)稀疏矩陣(4×16)。然后,在稀疏矩陣和平展的輸入之間使用矩陣乘法。之后,再將所得到的矩陣(4×1)轉(zhuǎn)換為 2×2 的輸出。 卷積的矩陣乘法:將 Large 輸入圖像(4×4)轉(zhuǎn)換為 Small 輸出圖像(2×2) 現(xiàn)在,如果我們?cè)诘仁降膬蛇叾汲松暇仃嚨霓D(zhuǎn)置 CT,并借助「一個(gè)矩陣與其轉(zhuǎn)置矩陣的乘法得到一個(gè)單位矩陣」這一性質(zhì),那么我們就能得到公式 CT x Small = Large,如下圖所示。 卷積的矩陣乘法:將 Small 輸入圖像(2×2)轉(zhuǎn)換為 Large 輸出圖像(4×4) 這里可以看到,我們執(zhí)行了從小圖像到大圖像的上采樣。這正是我們想要實(shí)現(xiàn)的目標(biāo)。現(xiàn)在。你就知道「轉(zhuǎn)置卷積」這個(gè)名字的由來(lái)了。 轉(zhuǎn)置矩陣的算術(shù)解釋可參閱:https://arxiv.org/abs/1603.07285