反卷积层(转置卷积)
反卷积(deconvolution)不是数字信号处理里面的意义,在深度学习里面应该叫做转置卷积(transposed convolution)又名微步卷积(fractionally strided convolutions),也有叫Backward strided convolution ,upconvoution, upsample convolution。主要从以下几个方面理解:
-
从概念上理解
转置卷积其实也是一种卷积。总是可以用卷积层来模拟饭卷积层,但是缺点就是需要在行列进行补零,导致不是一个有效的计算接口。
-
从数据角度解释
在卷积网络里面,我们是通过卷积层操作,获得feature map,然而对于反卷积层,则是通过feature map的卷积操作,输出value,这输出值是我们期待的图像的值。有点像通过反卷积还原feature map到原始图像。
-
从卷积公式角度理解
要理解反卷积的公式,就需要理解卷积的矩阵表达从而得到转置的含义。举个例子:
输入的feature map4*4,卷积核3*3.步长为1,不填充。那么输出的大小为2*2.在进行计算时,为了可以使用矩阵进行计算,将输入x拉成16*1维向量,输出y拉成4*1维向量,那么卷积运算可表示为。那么C矩阵可以写成:
我们在计算一下反向传播下的公式,
可以发现卷积层时,正向和反向分别乘以C和CT。反卷积就是正向和反向分别乘以CT和C。
-
可视化角度
-
作用角度上讲
有一种将输入的size变大的意思,一次一般情况下,输出的维度要大于输入的维度。虽然是想还原输入,但实际上是无法还原输入的,反卷积的权重也式可以进行学习得到。
-
应用层面
可以进行可视化操作,将feature map可视化,看到底学习到了什么。
在对抗神经网络中有应用,这方面不熟悉。
在超分辨率成像中,FSRCNN中最后一层使用deconv,可以还原到不同尺度的分辨率图像,类似于对图像进行缩放。
参考:http://blog.csdn.net/u013139259/article/details/53318477
https://github.com/vdumoulin/conv_arithmetic
https://www.zhihu.com/question/43609045?sort=created