反卷積(轉置卷積)的理解

2022-07-22 05:39:10 字數 2359 閱讀 5318

參考:開啟鏈結

就是這個圖啦,其中藍色部分是輸入的feature map,然後有3*3的卷積核在上面以步長為2的速度滑動,可以看到周圍還加里一圈padding,用更標準化的引數方式來描述這個過程:

二維的離散卷積(n=2)

方形的特徵輸入(\(i_=i_=i\))

方形的卷積核尺寸(\(k_ = k_=k\))

每個維度相同的步長(\(s_=s_=s\))

每個維度相同的padding(\(p_=p_=p\))

\((i = 5, k = 3, s = 2, p = 1)\), \(輸出特徵尺寸o_ = o = o\)

其中,卷積層輸入特徵與輸出特徵尺寸和卷積核引數的關係為: \(o = (floor)[\frac+1]\)

這裡寫描述

考慮一下這個圖,其中的引數描述是:(i=4,k=3,s=1,p=0),輸出o=2。

對於這個運算,我們把33的卷積核展開成如下圖所示的[4,16]的稀疏矩陣,其中非0元素\(w_\)表示捲及核的第i行和第j列。

然後再把44的輸入特徵轉換成[16,1]的矩陣x,那麼y=cx則是乙個[4,1]的輸出特徵矩陣,把它重新排列2×2的輸出特徵就得到最終的結果,從上述分析可以看出卷積層的計算其實是可以轉化成矩陣相乘的。值得注意的是,在一些深度學習網路的開源框架中並不是通過這種這個轉換方法來計算卷積的,因為這個轉換會存在很多無用的0乘操作,caffe中具體實現卷積計算的方法可參考implementing convolution as a matrix multiplication。通過上述的分析,我們已經知道卷積層的前向操作可以表示為和矩陣c相乘,那麼我們很容易得到卷積層的反向傳播就是和c的轉置相乘。

反卷積的作用:雜訊公升維,上取樣,從低維度進入高維度,比直接給定高維度隨機形更強,這樣就可以通過修改轉置conv kernel去梯度下降出網路超引數

全面我們已經說過反卷積又被稱為transposed(轉置) convolution,我們可以看出其實卷積層的前向傳播過程就是反卷積層的反向傳播過程,卷積層的反向傳播過程就是反卷積層的前向傳播過程。因為卷積層的前向反向計算分別為乘 \(c\)

和 \(c^\),而反卷積層的前向反向計算分別為乘 \(c^\) 和 \((c^)^\) ,所以它們的前向傳播和反向傳播剛好交換過來。

下圖表示乙個和上圖卷積計算對應的反卷積操作,其中他們的輸入輸出關係正好相反。如果不考慮通道以卷積運算的反向運算來計算反卷積運算的話,我們還可以通過離散卷積的方法來求反卷積(這裡只是為了說明,實際工作中不會這麼做)。

同樣為了說明,定義反卷積操作引數如下:

二維的離散卷積 \((n = 2)\)

方形的特徵輸入 \(i^_=i^_=i^\)

方形的卷積核尺寸\(k_^=k_^=k^\)

每個維度相同的步長\(s_^=s_^=s^\)

每個維度相同的padding \(p_^=p_^=p^\)

下圖表示的是引數為\((i^ = 2, k^ = 3, s^ = 1, p^ = 2)\)的反卷積操作,其對應的卷積操作引數為\((i = 4, k = 3, s = 1, p = 0)\)。我們可以發現對應的卷積和非卷積操作其\((k = k ^, s = s^ = 1)\),但是反卷積卻多了\(p^ = 2\)。通過對比我們可以發現卷積層中左上角的輸入只對左上角的輸出有貢獻,所以反卷積層會出現\(p^ = k - p - 1 = 2\).通過示意圖,我們可以發現,反卷積層的輸入輸出在$ s = s^ = 1$的情況下關係為: $$o^ = i^ - k^ + 2p^ + 1 = i^ + (k-1) - 2p$$

上面也提到過反卷積有時候也被叫做fractionally strided convolution,翻譯過來大概意思就是小數步長的卷積。對於步長 \(s>1\)

的卷積,我們可能會想到其對應的反卷積步長 \(s^<1\)。z如下圖所示為乙個引數為 \(i=5,k=3,s=2,p=1\)的卷積操作(就是第一張圖所演示的)所對應的反卷積操作。對於反卷積操作的小數步長我們可以理解為:在其輸入特徵單元之間插入 $s−1 $個0,插入0後把其看出是新的特徵輸入,然後此時步長 $ s^$不再是小數而是為1。因此,結合上面所得到的結論,我們可以得出fractionally strided convolution的輸入輸出關係為:

反卷積 轉置卷積

搞明白了卷積網路中所謂deconv到底是個什麼東西後,不寫下來怕又忘記,根據參考資料,加上我自己的理解,記錄在這篇部落格裡。第一次看到deconv這個詞,以為deconv的結果就是卷積的逆,覺得神奇,不禁產生了 哦?轉置的卷積就可以求逆了嗎?這樣的想法,然後在matlab裡面實驗求證,我還記得當時以...

轉置卷積 反卷積

借鑑於此個部落格,寫的非常好 轉置卷積 transposed convolution 也叫做反卷積 deconvolution pytorch中可以使用torch.nn.convtranspose2d 來呼叫,caffe中對應的轉置卷積層為deconv layer 作用 在 中用於對影象上取樣。操作...

理解轉置卷積 反卷積 分步卷積

gan涉及到轉置卷積,這裡mark一下忘記了再回來看下。轉置卷積源於與卷積方向相反的願望,即從卷積的output形狀到input形狀,同時保持與卷積相相容的一種模式。轉置卷積可以作為卷積編碼器的解碼器 decode 的轉換,或者將當前特徵對映到乙個高維度的空間。要理解轉置卷積,先從卷積開始。我們先從...