反卷积(转置卷积)

来源:互联网 发布:广东卫视网络电视回看 编辑:程序博客网 时间:2024/05/30 19:35

转置卷积其实就相当于正常卷积的反向传播。

考虑一个输入为x=4x4,卷积核为w=3x3,步长为stride=1zero-padding=0

将卷积核展开为一个稀疏矩阵C


做卷积可得2x2的输出yC*x=y。如下图所示:

 

那么怎么得到转置卷积呢。正如我们上面说的转置卷积其实就相当于正常卷积的反向传播。

再对上式求输入x的梯度:

 

我们可以发现,在反向传播过程中梯度从高层传向底层,正好是来自高层的梯度左乘CT。所以我们要从2x2的输入y得到4x4的输出,只要:CT*y

但是要注意的一点,转置卷积只是恢复了其形状,并未对其值进行恢复,这也是为什么将其称为反卷积不合适的原因了。

其实在tensorflo中实现转置卷积也是利用了这个性质。

另一种实现转置卷积操作的方法是对输入的feature map进行zero-padding,在进行正常的卷积操作就可以实现转置卷积:

 

但是这种操作相对于上面一种有一个缺点,对一个map进行转置卷积往往需要对其进行很多行和列的padding,所以效率相对较低。

最后需要注意的,转置卷积和信号处理中的反卷积是有差别,并不是卷积的反操作。

如果你不理解转置卷积,你可以这样去设置参数,比如,现在你需要从一个nxnmap转置卷积到一个mxmmap,你不知道怎么设置它的卷积核大小,paddingstrides,这个时候你可以反过来考虑怎么从mxm正常卷积到nxnmap两者的参数是一样的。你定义一个卷积核,决定其进行卷积操作还是转置卷积,只是看你是左乘C还是CT

参考资料:A guide to convolution arithmetic for deep learning

https://www.zhihu.com/question/43609045?rf=53910187

 


0 0
原创粉丝点击