一文概覽深度學習中的捲積結構

 2017-09-28 07:19:53.0

選自Medium

作者:Paul-Louis Prove

參與:路雪、李亞洲

本文對三種不同的捲積進行了介紹,同時講解了各自的優點,對初學者而言,是理解卷積的一篇好文章。

卷積

首先,我們需要定義卷積層的幾個參數。


kernel 為 3、stride 為 1,使用 padding 的 2D 卷積

卷積核大小:卷積核決定卷積的視野。 2D 卷積的常見卷積核為 3,即 3x3 像素。

stride:stride 決定卷積核遍歷圖像時的步子大小。默認值通常為 1,我們可以將 stride 設置成 2,對圖像進行類似最大池化的下採樣。

Padding:padding 決定處理樣本時的邊界。 (半)填充的捲積使輸出空間維度等於輸入,而未填充的捲積會裁剪部分邊界,如果卷積核大於 1 的話。

輸入&輸出通道:卷積層通常需要一定數量的輸入通道 (I),計算一定數量的輸出通道 (O)。所需參數可以通過 IOK 來計算,K 就是卷積核的值。

機器之心曾介紹過用於語義分割中的各種卷積:從全連接層到大型捲積核:深度學習語義分割全指南

擴張卷積(又叫空洞卷積)


kernel 為 3、擴張率為 2、沒有 padding 的 2D 卷積

擴張卷積向卷積層引入另一個參數「擴張率」。它決定了卷積核中值之間的空間。 3x3 卷積核、擴張率為 2 的捲積視野和 5x5 卷積核的視野相同,並且前者僅使用了 9 個參數。想像一個 5x5 的捲積核,每個都刪去第二行和第二列。

這種卷積用同樣的計算成本生成了更大的視野。擴張卷積在實時分隔領域中尤為流行。如果你需要一個寬闊視野,但無力使用多個卷積或更大的捲積核,那麼你可以使用這種卷積。

轉置卷積(解卷積或微步卷積)

解卷積(deconvolution)這種叫法不太合適,因為這並不是解卷積。解卷積確實存在,但在深度學習領域中並不常見。真正的解卷積是卷積過程的逆轉。想像一下將一個圖像輸入到單個卷積層上。再把輸出放到黑箱中,然後再次輸出的是原始輸入圖像。這個黑箱就叫作解卷積。這是卷積層執行的數學逆運算。

轉置卷積與解卷積有一些相似,因為它所輸出的空間分辨率反捲積層也能夠輸出。但是,在這些值上真正進行的數學運算是不一樣的。轉置卷積層使用的是常規的捲積,但仍然能夠進行空間分辨率轉換。


沒有 padding、stride 為 2、卷積核為 3 的 2D 卷積

到這裡你可能有些疑惑,那麼讓我們看一下具體的例子吧。一個 5x5 的圖像輸入到卷積層中,stride 設置為 2,沒有 padding,卷積核為 3x3。輸出的是 2x2 的圖像。

如果我們想逆轉該過程,則我們需要進行數學逆運算,以使我們輸入的每個像素都能夠生成 9 個值。之後,我們用值為 2 的 stride 遍歷輸出圖像。這就是解卷積。


沒有 padding、stride 為 2、kernel 為 3 的轉置 2D 卷積

轉置卷積並不這麼做。二者唯一的共同點是輸出的都是 5x5 的圖像,雖然它執行的仍舊是常規的捲積運算。為了做到這一點,我們需要在輸入上執行某種 padding。

如同你能想像的,這一步不會從頂部逆轉該流程,至少在數值方面不會實現逆轉。

它只不過是從前面重建了空間分辨率,且完成一個卷積。這可能不是數學意義上的逆轉,但對編碼器-解碼器架構而言,它仍舊非常有幫助。通過這種方式,我們可以將捲積和圖像的 upscaling 結合起來,而不是執行兩個獨立的流程。

可分離卷積

在可分離卷積中,我們能把捲積核運算分離到多個步驟中。例如,我們可以把一種卷積表達為 y = conv(x, k),其中 y 是輸出圖像,x 是輸入圖像,k 是卷積核。下面,假設 k 按 k = k1.dot(k2) 進行計算。這樣可使其成為可分離卷積,因為我們不再使用 k 做 2D 卷積,而是通過用 k1 和 k2 做兩個 1D 卷積得到同樣的結果。


Sobel X 與 Y 濾波器

拿經常用於圖像處理的 Sobel 核為例。你可以通過乘以向量 [1, 0, -1] 和 [1,2,1] 的轉置向量獲得相同的核。在進行相同操作時,這只需要 6 個參數,而無需 9 個。

上述實例展示了空間可分離卷積,據我所知它並不用於深度學習。我只是想讓大家在看到這個術語時不會感到困惑。在神經網絡中,我們通常使用深度可分離卷積(depthwise separable convolution)。

這種卷積將執行空間卷積,同時保持通道分離,接著跟從深度卷積。為了便於理解,我們來看一個實例。

假設我們在 16 個輸入通道和 32 個輸出通道上有一個 3x3 卷積層。每一個輸入通道都由 32 個 3x3 內核遍歷,產生 512(16x32)個特徵圖。下一步,我們通過疊加每一個輸入通道中的特徵圖,合併形成一個特徵圖。由於我們這樣做了 32 次,我們得到了 32 個想要的輸出通道。

對於相同實例上的深度可分離卷積,我們遍歷了 16 個通道(每個帶有一個 3x3 內核),得到了 16 個特徵圖。現在,在合併之前,我們遍歷了這 16 個特徵圖(每個帶有 32 個 1x1 卷積),然後再把它們疊加在一起。相比於上述的 4608(16x32x3x3)個參數,這產生了 656(16x3x3 + 16x32x1x1)個參數。

該實例是深度可分離卷積的特定實現,深度乘數是 1,這是目前這類卷積層的最常見設置。

我們這麼做是因為假設空間和深度信息可被解耦。看 Xception 模型的表現,該理論似乎是成立的。因其對參數的高效使用,深度可分離卷積也可被用於移動設備。

原文地址: https://medium.com/towards-data-science/types-of-convolutions-in-deep-learning-717013397f4d

文章來源:機器之心