網上解釋
作者:張萌
鏈接:https://www.zhihu.com/question/43609045/answer/120266511
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
不難想象
其實就是如下的稀疏陣:
鏈接:https://www.zhihu.com/question/43609045/answer/120266511
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
一句話解釋:逆卷積相對於卷積在神經網絡結構的正向和反向傳播中做相反的運算。
逆卷積(Deconvolution)比較容易引起誤會,轉置卷積(Transposed Convolution)是一個更為合適的叫法.
舉個栗子:
4x4的輸入,卷積Kernel為3x3, 沒有Padding / Stride, 則輸出為2x2。
輸入矩陣可展開為16維向量,記作
輸出矩陣可展開為4維向量,記作
卷積運算可表示為
不難想象
其實就是如下的稀疏陣:
平時神經網絡中的正向傳播就是轉換成了如上矩陣運算。
那么當反向傳播時又會如何呢?首先我們已經有從更深層的網絡中得到的
.

回想第一句話,你猜的沒錯,所謂逆卷積其實就是正向時左乘
,而反向時左乘
,即
的運算。
補充理解
下圖標注有誤,“SAME”應為“VALID”,kernel為3,stride為1,卷積輸出為(輸入-核+1)/步長。

tensorflow接口
tf.nn.conv2d_transpose()
kernel = tf.random_normal(shape=[2,2,3,1])
# strides 和padding也是假想中 正向卷積的模樣。當然,x是正向卷積后的模樣
y = tf.nn.conv2d_transpose(x,kernel,output_shape=[1,5,5,3],
strides=[1,2,2,1],padding="SAME")
# 在這里,output_shape=[1,6,6,3]也可以,考慮正向過程,[1,6,6,3]
# 通過kernel_shape:[2,2,3,1],strides:[1,2,2,1]也可以
注意:conv2d_transpose 中會計算 output_shape 能否通過給定的參數計算出 inputs的維度,如果不能,則報錯。
