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


參考:打開鏈接

卷積:

就是這個圖啦,其中藍色部分是輸入的feature map,然后有3*3的卷積核在上面以步長為2的速度滑動,可以看到周圍還加里一圈padding,用更標准化的參數方式來描述這個過程:
二維的離散卷積(N=2)
方形的特征輸入(\(i_{1}=i_{2}=i\))
方形的卷積核尺寸(\(k_{1} = k_{2}=k\))
每個維度相同的步長(\(s_{1}=s_{2}=s\))
每個維度相同的padding(\(p_{1}=p_{2}=p\))
這里寫圖片描述
\((i = 5, k = 3, s = 2, p = 1)\), \(輸出特征尺寸o_{1} = o{2} = o\)
其中,卷積層輸入特征與輸出特征尺寸和卷積核參數的關系為: \(o = (floor)[\frac{i+2p-k}{s}+1]\)

反卷積

這里寫圖片描述
這里寫圖片描述
考慮一下這個圖,其中的參數描述是:(i=4,k=3,s=1,p=0),輸出o=2。
對於這個運算,我們把33的卷積核展開成如下圖所示的[4,16]的稀疏矩陣,其中非0元素\(w_{ij}\)表示卷及核的第i行和第j列。
這里寫圖片描述
然后再把4
4的輸入特征轉換成[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^{T}\),而反卷積層的前向反向計算分別為乘 \(C^{T}\)\((C^{T})^{T}\) ,所以它們的前向傳播和反向傳播剛好交換過來。

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

同樣為了說明,定義反卷積操作參數如下:
二維的離散卷積 \((N = 2)\)
方形的特征輸入 \(i^{\prime}_{1}=i^{\prime}_{2}=i^{\prime}\)
方形的卷積核尺寸\(k_{1}^{\prime}=k_{2}^{\prime}=k^{\prime}\)
每個維度相同的步長\(s_{1}^{\prime}=s_{2}^{\prime}=s^{\prime}\)
每個維度相同的padding \(p_{1}^{\prime}=p_{2}^{\prime}=p^{\prime}\)

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

Fractionally Strided Convolution

上面也提到過反卷積有時候也被叫做Fractionally Strided Convolution,翻譯過來大概意思就是小數步長的卷積。對於步長 \(s>1\)
的卷積,我們可能會想到其對應的反卷積步長 \(s^{\prime}<1\)。z如下圖所示為一個參數為 \(i=5,k=3,s=2,p=1\)的卷積操作(就是第一張圖所演示的)所對應的反卷積操作。對於反卷積操作的小數步長我們可以理解為:在其輸入特征單元之間插入 $s−1 $個0,插入0后把其看出是新的特征輸入,然后此時步長 $ s^{\prime}$不再是小數而是為1。因此,結合上面所得到的結論,我們可以得出Fractionally Strided Convolution的輸入輸出關系為:

\[o^{\prime} = s(i^{\prime} -1)+k-2p \]

這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM