如何理解深度學習中的deconvolution networks?

時間 2021-05-12 07:55:20

1樓:

寫寫理解,不對的請批評指正。

卷積:輸入—— H_in * W_in, 卷積核 k, stride,pad

輸出 —— H_out * W_out

如果想輸入尺寸=輸出尺寸, stride=1, pad=k/2如果想輸入尺寸》輸出尺寸, stride>1反卷積:就是卷積

適用場景—— 輸入尺寸 < 輸出尺寸, 並且通過對輸入隔行補0、pading等方式,實現輸出尺寸增大。

為啥叫反卷積:因為在實際的神經網路中,卷積對應著原圖降取樣的過程,而反卷積過程則把降取樣後的小圖,上取樣成原圖大小的圖,看起來是做了卷積的反操作。所以,反卷積的反字,本質上對應的是上取樣,而不是卷積的逆;在數學上,反卷積就是卷積。

2樓:Harden

Convolution arithmetic tutorialconvolution理解:deconvolution是一種卷積層,它的重要引數由對應的convolution決定

設deconvolution具有I'(input size) o'(output size) p'(padding) k'(kernel size) s'(stride)等引數,對應的convolution layer的引數 i'(input size) o'(output size) p(padding) k(kernel size) s(stride)來決定,兩套引數間有相應的換算公式,換算公式的推導出發點便是i=o',o=i'.具體的公式見附上的參考文獻,分析了各種情況並給出公式

參考文獻順帶提了一下dilation convolution layer:核心點,kernel size 中補零,使得等效kernel size 變大,感受野變大,兩者的計算公式為 , 為dilation rate,定義kernel中補的零的多少。

3樓:張健煒

補充一點,其實resize feature map到更大的尺寸,然後卷積,以padding='SAME'的模式,不比deconvolution差。

Deconvolution and Checkerboard Artifacts

hvy/gan-resize-convolution

4樓:機械人-Robotics

從矩陣相乘角度理解。

首先看看卷積過程:

圖1中,4*4的輸入經過3*3卷積核的卷積(步子=1)得到(4-3+1)*(4-3+1)=2*2的輸出。

圖2中更清楚看卷積過程【可惜不是動態的】

下圖1是卷積核下圖2是卷積核變換--稱為卷積矩陣

或許你不明白怎麼轉化的,請看下圖。

下面我們看看如何矩陣相乘角度理解卷積。

(1)首先把輸入程式設計乙個列陣如下圖

(2)上面說的卷積矩陣【4*16】乘以輸入矩陣的列陣【16*1】=輸出【41】然後轉換成【2*2】就是卷積後的輸出。完成輸入矩陣【4*4】-->列陣【16*1】-->輸出【41】-- >最終輸出矩陣【2*2

同理deconvolution就是卷積的反過程。如下圖一卷積過程,圖二反卷積過程

下面從矩陣的角度理解反卷積過程【叫法不一,這裡不爭論】

首先把上面卷積過程的卷積矩陣【4*16】轉置,得到反卷積矩陣【16*4】如下圖一,或許這就是為什麼有的地方稱deconvolution為Transposed Convolution【轉置卷積】。然後反卷積矩陣【16*4】乘以輸入【4*1】(由【2*2】的輸入轉換而來)得到輸出矩陣【16*1】,最後輸出矩陣【16*1】轉換成輸出【4*4】,完成反卷積過程。

圖一圖一

【參考】Up-sampling with Transposed Convolution

5樓:任魚兒

請看這篇文章。

Is the deconvolution layer the same as a convolutional layer?

6樓:sen lin

看到兩個演算法:

另乙個辦法是pad 0然後直接卷積

方法一的後續問題1是toeplitz具體做法怎麼辦,雖然都是對角線相同,但你看那個例子3x3weight轉為4x16的時候排出的是乙個2x4的2x4矩陣,為啥巢狀這麼兩遍,當然你說可以從多項式推導,但是我懶啊,對於5x5或者7x7的一般性,哪位大俠來直接講講這個巢狀規律?

方法二驗算失敗了,比如乙個簡單的stride=1那麼就是conv,其結果和方法一對不上。

現在開始做出來越來越多的cnn加速器,方法一是相當於以full connection做法,方法二更喜人。哪位大俠幫忙講講?

7樓:wangyc

deconvolution我理解其實就是卷積的反向傳播,建議去詳細了解一下卷積的反向傳播流程。如果是為了上取樣的話,就是對下一層的輸出加padding然後和轉置後的卷積做點乘

8樓:Lonicera

剛開始接觸,只是一點點個人理解。

卷積:y=Cx,C是權值矩陣

對應的梯度反傳公式為:

2. 如果把「Loss對y的梯度」看成輸入、「Loss對x的梯度」看成輸出的話,「C轉置」就是梯度反傳的權值矩陣,把這樣的操作稱為「轉置卷積」

3. 因此,轉置卷積並不是卷積的逆操作,它只是一種新的卷積操作,權值矩陣長成普通卷積權值矩陣的轉置這樣。

4. 於是,每個卷積操作(考慮padding、stride等)都對應乙個權值矩陣,而這個權值矩陣的轉置又可以定義一種轉置卷積操作,實際寫一下就會發現,無padding且stride為1時的卷積操作,其對應的轉置卷積就是把卷積核旋轉180°,再進行Full padding的卷積。其他可以類推,得到一系列的轉置卷積操作。

9樓:機器在思考

今天忽然想到乙個簡單的模擬,不知道正確嗎:

你可以把卷積生成N個特徵圖,理解成乙個語音頻號生成N個諧波頻率。

而轉置卷積可以理解為你如何根據n個諧波頻率得到乙個訊號。

兩者雖然都是加和,但是操作物件不同,前者是在乙個輸入訊號上操作,得到N個頻率,容易理解,後者需要操作N個諧波頻率,得到乙個輸入訊號,並不是很直觀。

但通常,N個諧波頻率會被集合到一起和輸入訊號是一樣的,看上很對稱很直觀,誰是訊號誰是頻率都可以,並且完全可逆。

影象上如果是標準的把影象進行頻率變換,也是完全可逆的,你可以把N個特徵圖集合成乙個圖,與輸入進行一對一變換。但是通常特徵圖不是等價的頻域變換,所以不可逆。

10樓:晟沚

反卷積又叫轉置卷積,一般我們在正向傳播過程中,會用filter去卷積影象,一般卷積之後的大小都會變小,當然,我們可以pad補0啊,在語意分割時,卷積之後的影象需要跟原圖乙個大小,那麼我們想正向卷積一樣,從卷積的output出發,學習filter的引數,然後將影象通過反卷積恢復到原圖的大小,一定會有人不解,卷積過程input肯定會大於output啊,但是轉置卷積的output 的size是大於input的size的。

11樓:小K哦

個人覺得,對於乙個卷積層的input->output,卷積操作就是根據input到output的過程來確定filter的size,stride,channel,而轉置卷積就是根據output到input的過程來確定filter的size,stride,channel,然後再像最高票數的那位同學的回答那樣把矩陣乘法反過來。卷積和轉置卷積應該只是只是實現卷積的不同思考方式,只不過在用卷積時通常是output的size小於等於input的size,而在用轉置卷積時通常是output的size大於等於input的size。

12樓:nipan

一圖勝千言。

貼兩張:

output feature map的(2x2x1)的區域是如何由input feature map的(1x1x5)的區域算得。[1]

當向上卷積的卷積核尺寸(kernel)大於卷積步長(strides)時,如何處理卷積結果的重疊區域。[2]

13樓:

最直觀的解釋:將cnn反過來,output shape 對映到 input shape(即動畫中的2*2 綠格作為input, 4x4藍色的作為輸出, 這大概就是deconvolution network的由來)

為什麼在gan會用到,因為gan的generator的output是image(fake), 輸入是latent variable(維數:input< output), 看起來和cnn相反。

14樓:

15樓:Wayne

反卷積的名字的確容易誤導,所以後來出現的一些名字例如轉置卷積,可以理解成正常前向傳播的倒向傳遞過程(但是不是更新梯度的反向傳播)。在某一層的倒向傳遞的示意圖如下

其中switch是記錄在正常傳遞過程中maxpooling的最大值的座標。

在[1]這篇文章中,引入了反卷積層,但是反卷積層和反卷積網路[2]不是一回事。至於反卷積網路, @譚旭已經說的很清楚了。但是最近很多文章中出現的deconv(反卷積,轉置卷積,微步卷積)大多起源於[2]這篇文章。

caffe裡有im2col層,如果對matlab比較熟悉的話,就應該知道im2col是什麼意思。它先將乙個大矩陣,重疊地劃分為多個子矩陣,對每個子矩陣序列化成向量,最後得到另外乙個矩陣。看一看圖就知道了:

在caffe中,卷積運算就是先對資料進行im2col操作,再進行內積運算(inner product)。這樣做,比原始的卷積操作速度更快。

看看兩種卷積操作的異同:

我們通過實驗來進行解釋:

【1. 無 padding】那麼如果我們想從輸入乙個4*4,channel為1的的在i層的feature map,用乙個3*3的kernel進行卷積,padding=0,stride=1,我們理應得到乙個2*2,在i+1層的feature map。

在實現過程,根據部落格[3],會首先把3*3的kernel展成C=

並把輸入x展成16*1的向量,這樣進行矩陣的相乘(不是卷積也不是點乘),根據矩陣的運算法則(4*16)*(16*1)=(4,1),把(4,1)的結果再展成(2,2),這也是我們根據卷積運算法則得到的大小:2*2.

現在對輸出的結果,進行轉置卷積,也就是對得到的2*2的feature map進行操作得到4*4大小的原先的輸入,我們用上一步得到的(4,1)的結果,乘上kernel的轉置C',整個運算過程如果看矩陣的維度的話是(4,1)*(1*16)=(4*16),這個維度和我們輸入的x是相同的。

如果從直觀上理解上述過程:

正向卷積過程(藍色為輸入x,陰影為卷積核C,綠色為輸出)

對於No zero padding, unit strides, 的卷積來說,轉置卷積:

其對應關係可以理解為正向卷積為0 padding,那麼轉置卷積就是full padding。

公式關係為正向卷積s=1,p=0那麼轉置卷積的k'=k,s'=s,p'=k-1,轉置卷積的輸出尺寸

o'=i'+2(k-1)-(k-1)

可以從直觀上理解當padding=0,stride=1轉置卷積的運算過程。

了解零填充邏輯的一種方法是考慮轉置卷積的連線模式,並使用它來指導等效卷積的設計。

例如,直接卷積的輸入的左上畫素僅對輸出的左上畫素有貢獻,右上畫素僅連線到右上輸出畫素,等等。為了在等效卷積中保持相同的連線模式,有必要以使得核的第一(左上)乘法僅接觸左上畫素的方式對輸入進行零填充,即,填充必須相等到核心的大小減一::Padding =ks-1 也是full卷積的模式

這也是為什麼轉置卷積乘上C_T

【2. padding】那麼當stride不為1的時候,轉置卷積的卷積核就變成了乙個帶'洞'的卷積,也就是fractional stride convolution(微步卷積)

帶洞是為了使轉置卷積的步長變為正向卷積的1/i倍,核將以乙個更小的步伐移動,使得轉置卷積的輸出比輸入要大一些。

例如正向卷積輸入x,i=5,p=0,k=3,stride=2,那麼得到的正向卷積結果大小是2*2的,若要恢復其5*5的大小,轉置卷積的引數應該為i'=i_transformed(即在正向卷積的輸出之間填補0), k'=k.s'=1,padding=k-1

得到的輸出的大小為o'=s(i'-1)+k,這裡的s指的是正向卷積的步長。

以上是對轉置卷積的直觀理解,針對轉置卷積為何乘上C_T,可以參照 @張萌的答案

[1] Zeiler M D, Taylor G W, Fergus R, et

al. Adaptive deconvolutional networks for mid and high level feature

learning[C]. International Conference on Computer Vision, 2011.

[2] Zeiler M D, Fergus R. Visualizing and

Understanding Convolutional Networks[C]. European Conference on Computer

Vision, 2013.

[3]Convolution arithmetic tutorial

如何理解機器學習中說深度學習和整合學習是黑箱模型?

Ada 深度學習和整合學習都是機器學習裡面的分支,裡面主要涉及到的技術就是神經網路。而之所以說它們是黑箱模型,主要是因為它們所使用的神經網路技術的不可解釋性。神經網路是一種模擬人的大腦思考計算的演算法,裡面涉及到了很多的計算層級,每乙個層級裡面又有很多的計算節點,同一層級的各個節點之間,不同層級之間...

如何理解微軟的深度殘差學習?

楊思達zzzz 先占個坑,回頭貼詳細解釋。用一句話解釋就是,深度網路容易造成梯度在back propagation的過程中消失,導致訓練效果很差,而深度殘差網路在神經網路的結構層面解決了這一問題,使得就算網路很深,梯度也不會消失。關於梯度消失的問題,詳見這篇文章 我們知道,對於神經網路來講,我們需要...

關於深度學習中adaptive learning rate的問題,比如RMSprop?

AsSalmon 我是這樣理解的,有不對的望指正.引數更新時,使用梯度下降演算法更新,沿著梯度方向是變化最快的方向。訓練集資料量很大的時候,使用SGD,每次只用一小批資料更新,這時候根據這一小批資料計算出的梯度和前面用全部訓練集資料計算的梯度是有一點誤差的,即梯度方向並不是下降最快的方向,會有偏差。...