近期在閱讀cnn**中多次出現反卷積(deconvolution)的概念,反卷積的概念第一次出現是zeiler在2023年發表的**deconvolutional networks中,但是並沒有指定反卷積這個名字,反卷積這個術語正式的使用是在其之後的工作中(adaptive deconvolutional networks for mid and high level feature learning)。隨著反卷積在神經網路視覺化上的成功應用,其被越來越多的工作所採納比如:場景分割、生成模型等。其中反卷積(deconvolution)也有很多其他的叫法,比如:transposed convolution,fractional strided convolution等等。
本文參考了很多部落格和文章,在這裡對作者表示感謝,彙總記錄下來以防忘記。本文力求以比較直觀的方式展示這些容易繞暈的概念,因此不對其背後的數學公示進行展開描述,感興趣的童鞋可以參看文末的相關參考文獻。
先給一張圖對反卷積有個直觀的理解,從直觀上看,卷積使特徵圖width、height變小進行更進一步的特徵提取和抽象,反卷積是反向還原特徵圖大小的過程,當然實際理解不是這麼簡單,我們一步步來就一些容易混淆的概念給予解釋。
一、上取樣(unsampling)與上池化(unpooling)
用兩張圖可以很好的詮釋,應該不用過多解釋,這兩張圖借用了部落格1中的插圖。
二、反卷積、導向反向傳播
這裡直接借用了jost tobias springenberg發表在iclr2015的**3中的插圖,插圖上我進行了注釋,可以很好的闡述區分這兩個概念。
三、卷積與矩陣運算之間的關係
這裡參考了github中的說明2,以及一篇發表於2023年的**4。cnn中的卷積可以展開為普通全連線神經網路中的矩陣運算,反之也成立。為簡單計,後文的描述均採用以下符號:
定義如下:
- 二維的離散卷積(n=2n=2)
- 方形的特徵輸入(i1=i2= i)
- 方形的卷積核尺寸(k1=k2=k)
- 每個維度相同的步長(s1=s2=s)
- 每個維度相同的padding (p1=p2=p)
考慮如下乙個簡單的卷積層運算,其引數為 (i=4,k=3,s=1,p=0),輸出 o=2。
對於上述卷積運算,我們把上圖所示的3×3卷積核展成乙個如下所示的[4,16]的稀疏矩陣c, 其中非0元素wij表示卷積核的第 i行和第 j 列。
我們再把4×4的輸入特徵展成[16,1]的矩陣 x,那麼 y=cx則是乙個[4,1]的輸出特徵矩陣,把它重新排列2×2的輸出特徵就得到最終的結果,從上述分析可以看出卷積層的計算其實是可以轉化成矩陣相乘的。值得注意的是,在一些深度學習網路的開源框架中並不是通過這種這個轉換方法來計算卷積的,因為這個轉換會存在很多無用的0乘操作,caffe中具體實現卷積計算的方法可參考implementing convolution as a matrix multiplication5。通過上述的分析,我們已經知道卷積層的前向操作可以表示為和矩陣c相乘,我們很容易得到卷積層的反向傳播就是和c的轉置相乘。
四、反卷積
重新理一下思路,卷積時候的權重矩陣w為:
展開為4*16的矩陣如第三節所述。
反卷積時採用的是和權重矩陣展開矩陣的轉置相乘,即cty,對於權重矩陣w來說相當於旋轉了180度。即:
對應的展開矩陣如下,為卷積時候展開矩陣的逆矩陣:
運算過程借用部落格6中的圖展示:
關於更深入的卷積公示推算,以及非單位步長,有padding的卷積與反卷積,在**arxiv-a guide to convolution arithmetic for deep learning4
中有描述,這裡就不再展開。
1.2.
3. sjost tobias springenberg ,triving for simplicity: the all convolutional net,iclr2015.
4.vincent dumoulin1f and francesco visin2 .a guide to convolution arithmetic for deep learning,2018.
5. 6.
深度學習 卷積理解
一.深度卷積神經網路學習筆記 一 假設輸入影象尺寸為w,卷積核尺寸為f,步幅 stride 為s 卷積核移動的步幅 padding使用p 用於填充輸入影象的邊界,一般填充0 那麼經過該卷積層後輸出的影象尺寸為 w f 2p s 1。2.它寫出為什麼會用padding?卷積核大小該如何確定?strid...
反卷積(轉置卷積)的理解
參考 開啟鏈結 就是這個圖啦,其中藍色部分是輸入的feature map,然後有3 3的卷積核在上面以步長為2的速度滑動,可以看到周圍還加里一圈padding,用更標準化的引數方式來描述這個過程 二維的離散卷積 n 2 方形的特徵輸入 i i i 方形的卷積核尺寸 k k k 每個維度相同的步長 s...
深度學習(二)神經網路中的卷積和反卷積原理
深度學習教程目錄如下,還在繼續更新完善中 深度學習系列教程目錄 一.卷積 在深度學習的過程中,很多神經網路都會用到各種卷積核來進行操作,那麼我們就簡單講一下卷積的原理和實現過程。那麼卷積在神經網路中的作用是什麼呢?一開始的傳統神經網路是沒有卷積層的,都是隱藏層加生全連線層的結構,這樣在中間得到的特徵...