反卷積在神經(jīng)網(wǎng)絡(luò)可視化上的成功應(yīng)用

反卷積(Deconvolution)的概念第一次出現(xiàn)是Zeiler在2010年發(fā)表的論文Deconvolutional networks中,但是并沒有指定反卷積這個名字,反卷積這個術(shù)語正式的使用是在其之后的工作中(Adaptive deconvolutional networks for mid and high level feature learning)。隨著反卷積在神經(jīng)網(wǎng)絡(luò)可視化上的成功應(yīng)用,其被越來越多的工作所采納比如:場景分割、生成模型等。其中反卷積(Deconvolution)也有很多其他的叫法,比如:Transposed Convolution,F(xiàn)ractional Strided Convolution等等。

這篇文章的目的主要有兩方面:

1. 解釋卷積層和反卷積層之間的關(guān)系;

2. 弄清楚反卷積層輸入特征大小和輸出特征大小之間的關(guān)系。

## 卷積層

卷積層大家應(yīng)該都很熟悉了,為了方便說明,定義如下:

- 二維的離散卷積(N=2N=2)

- 方形的特征輸入(i1=i2=ii1=i2=i)

- 方形的卷積核尺寸(k1=k2=kk1=k2=k)

- 每個維度相同的步長(s1=s2=ss1=s2=s)

- 每個維度相同的padding (p1=p2=pp1=p2=p)

下圖表示參數(shù)為(i=5,k=3,s=2,p=1)(i=5,k=3,s=2,p=1)的卷積計算過程,從計算結(jié)果可以看出輸出特征的尺寸為(o1=o2=o=3)(o1=o2=o=3)。

下圖表示參數(shù)為(i=6,k=3,s=2,p=1)(i=6,k=3,s=2,p=1)的卷積計算過程,從計算結(jié)果可以看出輸出特征的尺寸為(o1=o2=o=3)(o1=o2=o=3)。

從上述兩個例子我們可以總結(jié)出卷積層輸入特征與輸出特征尺寸和卷積核參數(shù)的關(guān)系為:

o=?i+2p?ks?+1.o=?i+2p?ks?+1.

其中?x??x?表示對xx向下取整。

反卷積層

在介紹反卷積之前,我們先來看看卷積運算和矩陣運算之間的關(guān)系。

卷積和矩陣相乘

考慮如下一個簡單的卷積層運算,其參數(shù)為(i=4,k=3,s=1,p=0)(i=4,k=3,s=1,p=0),輸出o=2o=2。

對于上述卷積運算,我們把上圖所示的3×3卷積核展成一個如下所示的[4,16]的稀疏矩陣CC, 其中非0元素wi,jwi,j表示卷積核的第ii行和第jj列。

??????w0,0000w0,1w0,000w0,2w0,1000w0,200w1,00w0,00w1,1w1,0w0,1w0,0w1,2w1,1w0,2w0,10w1,20w0,2w2,00w1,00w2,1w2,0w1,1w1,0w2,2w2,1w1,2w1,10w2,20w1,200w2,0000w2,1w2,000w2,2w2,1000w2,2??????(w0,0w0,1w0,20w1,0w1,1w1,20w2,0w2,1w2,2000000w0,0w0,1w0,20w1,0w1,1w1,20w2,0w2,1w2,200000000w0,0w0,1w0,20w1,0w1,1w1,20w2,0w2,1w2,2000000w0,0w0,1w0,20w1,0w1,1w1,20w2,0w2,1w2,2)

我們再把4×4的輸入特征展成[16,1]的矩陣XX,那么Y=CXY=CX則是一個[4,1]的輸出特征矩陣,把它重新排列2×2的輸出特征就得到最終的結(jié)果,從上述分析可以看出卷積層的計算其實是可以轉(zhuǎn)化成矩陣相乘的。值得注意的是,在一些深度學(xué)習(xí)網(wǎng)絡(luò)的開源框架中并不是通過這種這個轉(zhuǎn)換方法來計算卷積的,因為這個轉(zhuǎn)換會存在很多無用的0乘操作,Caffe中具體實現(xiàn)卷積計算的方法可參考Implementing convolution as a matrix multiplication。

通過上述的分析,我們已經(jīng)知道卷積層的前向操作可以表示為和矩陣CC相乘,那么我們很容易得到卷積層的反向傳播就是和CC的轉(zhuǎn)置相乘。

反卷積和卷積的關(guān)系

全面我們已經(jīng)說過反卷積又被稱為Transposed(轉(zhuǎn)置) Convolution,我們可以看出其實卷積層的前向傳播過程就是反卷積層的反向傳播過程,卷積層的反向傳播過程就是反卷積層的前向傳播過程。因為卷積層的前向反向計算分別為乘CC和CTCT,而反卷積層的前向反向計算分別為乘CTCT和(CT)T(CT)T,所以它們的前向傳播和反向傳播剛好交換過來。

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

同樣為了說明,定義反卷積操作參數(shù)如下:

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

方形的特征輸入(i′1=i′2=i′i1′=i2′=i′)

方形的卷積核尺寸(k′1=k′2=k′k1′=k2′=k′)

每個維度相同的步長(s′1=s′2=s′s1′=s2′=s′)

每個維度相同的padding (p′1=p′2=p′p1′=p2′=p′)

下圖表示的是參數(shù)為(i′=2,k′=3,s′=1,p′=2i′=2,k′=3,s′=1,p′=2)的反卷積操作,其對應(yīng)的卷積操作參數(shù)為(i=4,k=3,s=1,p=0)(i=4,k=3,s=1,p=0)。我們可以發(fā)現(xiàn)對應(yīng)的卷積和非卷積操作其(k=k′,s=s′)(k=k′,s=s′),但是反卷積卻多了p′=2p′=2。通過對比我們可以發(fā)現(xiàn)卷積層中左上角的輸入只對左上角的輸出有貢獻,所以反卷積層會出現(xiàn)p′=k?p?1=2p′=k?p?1=2。通過示意圖,我們可以發(fā)現(xiàn),反卷積層的輸入輸出在s=s′=1s=s′=1的情況下關(guān)系為:

o′=i′?k′+2p′+1=i′+(k?1)?2po′=i′?k′+2p′+1=i′+(k?1)?2p

Fractionally Strided Convolution

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

o′=s(i′?1)+k?2po′=s(i′?1)+k?2p

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容