反捲積(轉置卷積)
阿新 • • 發佈:2019-02-07
轉置卷積其實就相當於正常卷積的反向傳播。
考慮一個輸入為x=4x4,卷積核為w=3x3,步長為stride=1,zero-padding=0
將卷積核展開為一個稀疏矩陣C:
做卷積可得2x2的輸出y,C*x=y。如下圖所示:
那麼怎麼得到轉置卷積呢。正如我們上面說的轉置卷積其實就相當於正常卷積的反向傳播。
再對上式求輸入x的梯度:
我們可以發現,在反向傳播過程中梯度從高層傳向底層,正好是來自高層的梯度左乘CT。所以我們要從2x2的輸入y得到4x4的輸出,只要:CT*y。
但是要注意的一點,轉置卷積只是恢復了其形狀,並未對其值進行恢復,這也是為什麼將其稱為反捲積不合適的原因了。
其實在
另一種實現轉置卷積操作的方法是對輸入的feature map進行zero-padding,在進行正常的卷積操作就可以實現轉置卷積:
但是這種操作相對於上面一種有一個缺點,對一個map進行轉置卷積往往需要對其進行很多行和列的padding,所以效率相對較低。
最後需要注意的,轉置卷積和訊號處理中的反捲積是有差別,並不是卷積的反操作。
如果你不理解轉置卷積,你可以這樣去設定引數,比如,現在你需要從一個nxn的map轉置卷積到一個mxm的map,你不知道怎麼設定它的卷積核大小,padding和strides,這個時候你可以反過來考慮怎麼從mxm
參考資料:A guide to convolution arithmetic for deep learning
https://www.zhihu.com/question/43609045?rf=53910187