(轉)對於反捲積概念的理解
【時間】2018.10.10
【題目】(轉)對於反捲積概念的理解
【原文連結】https://buptldy.github.io/2016/10/29/2016-10-29-deconv/
反捲積(Deconvolution)的概念第一次出現是Zeiler在2010年發表的論文Deconvolutional networks中,但是並沒有指定反捲積這個名字,反捲積這個術語正式的使用是在其之後的工作中(Adaptive deconvolutional networks for mid and high level feature learning)。隨著反捲積在神經網路視覺化上的成功應用,其被越來越多的工作所採納比如:場景分割、生成模型等。其中反捲積(Deconvolution)也有很多其他的叫法,比如:Transposed Convolution,Fractional Strided Convolution等等。
這篇文章的目的主要有兩方面:
1. 解釋卷積層和反捲積層之間的關係;
2. 弄清楚反捲積層輸入特徵大小和輸出特徵大小之間的關係。
從上述例子我們可以總結出卷積層輸入特徵與輸出特徵尺寸和卷積核引數的關係為:
反捲積層
在介紹反捲積之前,我們先來看看卷積運算和矩陣運算之間的關係。
卷積和矩陣相乘
考慮如下一個簡單的卷積層運算,其引數為(i=4,k=3,s=1,p=0),輸出 o=2。
對於上述卷積運算,我們把上圖所示的3×3卷積核展成一個如下所示的[4,16]的稀疏矩陣 CC, 其中非0元素,jwi,j 表示卷積核的第 i行和第 j 列。
⎛⎝⎜⎜⎜⎜
我們再把4×4的輸入特徵展成[16,1]的矩陣 X,那麼 Y=CX 則是一個[4,1]的輸出特徵矩陣,把它重新排列2×2的輸出特徵就得到最終的結果,從上述分析可以看出卷積層的計算其實是可以轉化成矩陣相乘的。值得注意的是,在一些深度學習網路的開源框架中並不是通過這種這個轉換方法來計算卷積的,因為這個轉換會存在很多無用的0乘操作,Caffe中具體實現卷積計算的方法可參考
通過上述的分析,我們已經知道卷積層的前向操作可以表示為和矩陣CC相乘,那麼 我們很容易得到卷積層的反向傳播就是和CC的轉置相乘。
【補充說明】: 只有方陣才有逆,這裡的矩陣C只能用轉置,才能保證維度一致。所以反捲積輸出的結果和原正向卷積的輸入也不是一個東西,只是維度相同 只有方陣才有逆。
反捲積和卷積的關係
下圖表示一個和上圖卷積計算對應的反捲積操作,其中他們的輸入輸出關係正好相反。如果不考慮通道以卷積運算的反向運算來計算反捲積運算的話,我們還可以通過離散卷積的方法來求反捲積(這裡只是為了說明,實際工作中不會這麼做)。
同樣為了說明,定義反捲積操作引數如下:
Fractionally Strided Convolution
【總結】
-
反捲積在結果也是通過卷積運算獲得的,其中卷積核是原卷積核的轉置
-
這裡轉置指核值左右、上下顛倒,比如,
原卷積核:
W00 |
W01 |
W02 |
W10 |
W11 |
W12 |
W20 |
W21 |
W22 |
變為:
W22 |
W21 |
W20 |
W12 |
W11 |
W10 |
W02 |
W01 |
W00 |
-
反捲積填充為:
-
當s>1時,需要在其輸入特徵單元之間插入 s−1 個0,再進行卷積。
參考
Is the deconvolution layer the same as a convolutional layer?