搞明白了卷积网络中所谓deconv到底是个什么东西后,不写下来怕又忘记,根据参考资料,加上我自己的理解,记录在这篇博客里。

先来规范表达

  • 为了方便理解,本文出现的举例情况都是2D矩阵卷积,卷积输入和核形状都为正方形,x和y轴方向的padding相同,stride也相同。
  • 记号: 
     i,o,k,p,s<?XML:NAMESPACE PREFIX = "[default] http://www.w3.org/1998/Math/MathML" NS = "http://www.w3.org/1998/Math/MathML" /> i,o,k,p,s 分别表示:卷积/反卷积的输入大小 input size input size,卷积/反卷积输出大小 output size output size,卷积/反卷积核大小 kernel size kernel size, padding padding, stride stride 。
  • 举例(如下左图): 
    输入 X∈R(4,4) X∈R(4,4)矩阵,卷积核 w∈R(3,3),padding=0,stride=1 w∈R(3,3),padding=0,stride=1的情况下,卷积的输出 Y∈R(2,2) Y∈R(2,2),就记为 i=4,o=2,k=3,p=0,s=1 i=4,o=2,k=3,p=0,s=1 。

推翻错误的理解

第一次看到deconv这个词,以为deconv的结果就是卷积的逆,觉得神奇,不禁产生了“哦?转置的卷积就可以求逆了吗?”这样的想法,然后在matlab里面实验求证,我还记得当时以为反卷积能够求逆,考虑到图片进行常规卷积操作输出大小又不可能变大(same/valid),于是我还假设反卷积输出大小不变,用了same padding和原核的转置作为反卷积配置,结果发现根本不是那么一回事好吗。 
其实DL中的deconv,是一种上采样过程,举个比方:输入 X∈R(4,4) X∈R(4,4)矩阵,卷积核 w∈R(3,3),pad=0,stride=1 w∈R(3,3),pad=0,stride=1的情况下(如下左图),卷积的输出 Y∈R(2,2) Y∈R(2,2)。对 Y Y进行deconv,它只能做到把还原输出大小到和 X X一样大,输出值和 X X有那么一点联系。 
所以啊deconv这个名字相当误导人呐!这在cs231n课程里也被吐槽过,大家现在更喜欢用transposed conv来表述反卷积。为了方便起见,后文就用反卷积这个词了。

第二个容易confused的地方,就是很多文章都说卷积核的转置就可以求反卷积,又陷入迷茫“就算把卷积核转置(或者左右翻转上下翻转),卷积后输出还是越来越小(或不变,至少不会增大)啊”……直到看到文献和相应的这个动画(其他动画在github-convolution arithmetic1)

卷积  i=4,k=3,p=0,s=1,则 o=2 i=4,k=3,p=0,s=1,则 o=2 反卷积 i=2,k=3,p=0,s=1,则 o=4 i=2,k=3,p=0,s=1,则 o=4

注意图中蓝色(下面)是输入,绿色(上面)是输出,卷积和反卷积在 p、s、k  p、s、k 等参数一样时,是相当于 i i 和 o o 调了个位。 
这里说明了反卷积的时候,是有补0的,即使人家管这叫no padding( p=0 p=0),这是因为卷积的时候从蓝色 4×4 4×4 缩小为绿色 2×2 2×2,所以对应的 p=0 p=0 反卷积应该从蓝色 2×2 2×2 扩展成绿色 4×4 4×4。而且转置并不是指这个 3×3 3×3 的核 w w 变为 wT wT,但如果将卷积计算写成矩阵乘法(在程序中,为了提高卷积操作的效率,就可以这么干,比如tensorflow中就是这种实现), Y⃗ =CX⃗  Y→=CX→(其中 Y⃗  Y→ 表示将 Y⃗  Y→ 拉成一维向量, X⃗  X→ 同理),那么反卷积确实可以表示为 CTY⃗  CTY→,而这样的矩阵乘法,恰恰等于 w w 左右翻转再上下翻转后与补0的 Y Y卷积的情况。

然后就产生了第三个confuse:“补0了会不会有影响,还能通过反卷积近似输入 X X 吗?”其实反卷积也不一定能达到近似的效果,图像里的卷积,相当于一种相关操作,而反卷积维持了这种相关操作时的 w w 与 X X、与 Y Y 之间的联系维持了。至于补0后操作是否还等价,上一段已经说明了是等价的,读者可以在阅读完后面的文章后自己尝试一下。


反卷积以及反向传播的过程

卷积和反卷积的过程在arXiv-A guide to convolution arithmetic for deep learning2写的非常详细,还有很多例子便于理解,在这里我就截图出重点来(ps.文中的figure2.1就是上图的左边)。剩下的例子请大家多看看原文,最好自己动手算一下,我也贴个我算的过程( Ci Ci 表示矩阵 C C 的第 i i 行),供参考。 
关于反向传播, 知乎-如何理解深度学习中的deconvolution networks3有详细的推导过程。 
 

 
 

转载于:https://www.cnblogs.com/hdk1993/p/8784578.html

深度学习卷积网络中反卷积/转置卷积的理解 transposed conv/deconv相关推荐

  1. 深度学习 | 反卷积/转置卷积 的理解 transposed conv/deconv

    原文:https://blog.csdn.net/u014722627/article/details/60574260 深度学习 | 反卷积/转置卷积 的理解 transposed conv/dec ...

  2. 深度学习深度前馈网络_深度学习前馈网络中的讲义第4部分

    深度学习深度前馈网络 FAU深度学习讲义 (FAU Lecture Notes in Deep Learning) These are the lecture notes for FAU's YouT ...

  3. 深度学习深度前馈网络_深度学习前馈网络中的讲义第1部分

    深度学习深度前馈网络 FAU深度学习讲义 (FAU Lecture Notes in Deep Learning) These are the lecture notes for FAU's YouT ...

  4. 【深度学习】网络中隐含层神经元节点的个数(需要学习的特征数目)

    http://blog.csdn.net/zouxy09/article/details/9983399 1.网络中隐含层神经元节点的个数(需要学习的特征数目),采集的密度(也就是convolutio ...

  5. 深度学习笔记--Transformer中position encoding的源码理解与实现

    1--源码 import torch import math import numpy as np import torch.nn as nnclass Pos_Embed(nn.Module):de ...

  6. CVPR2020:点云分析中三维图形卷积网络中可变形核的学习

    CVPR2020:点云分析中三维图形卷积网络中可变形核的学习 Convolution in the Cloud: Learning Deformable Kernels in 3D Graph Con ...

  7. [十三]深度学习Pytorch-卷积层(1D/2D/3D卷积、卷积nn.Conv2d、转置卷积nn.ConvTranspose)

    0. 往期内容 [一]深度学习Pytorch-张量定义与张量创建 [二]深度学习Pytorch-张量的操作:拼接.切分.索引和变换 [三]深度学习Pytorch-张量数学运算 [四]深度学习Pytor ...

  8. 【CV论文解读】AAAI2021 | 在图卷积网络中超越低频信息

    论文解读者:北邮 GAMMA Lab 博士生  薄德瑜 题目: 在图卷积网络中超越低频信息 会议: AAAI 2021 论文链接: https://arxiv.org/abs/2101.00797 图 ...

  9. 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究

    吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 2.1 为什么要进行实例探究 2.2 经典网络 LeNet-5 AlexNet VGG- ...

最新文章

  1. nagios安装配置(一)
  2. php正则匹配js中变量_PHP正则表达式核心技术 第4节 php查找匹配函数使用心得
  3. 解决Intellij IDEA部署JavaWeb项目 404问题
  4. DevExpress Chart空间Y轴归一化(线性归一化函数)
  5. Java Socket笔记-利用tcp socket搭建CS模型
  6. mysql5.6 排序失效_mysql 使用union(all) + order by 导致排序失效
  7. java util.function.BiConsumer
  8. 前端必备:FSCapture取色器
  9. SQL Server 2008 R2永久激活秘钥
  10. 我常去的编程技术网站
  11. 用HTML和CSS制作简单的静态网页
  12. 计算机专业规划ppt模板,2021大学生个人规划ppt模板
  13. 四六级考试中的计算机类文章,四六级英语考试进入机考时代
  14. Google快讯 - UTStarcom
  15. 【计算机图形学 】绘制椭圆 | OpenGL+鼠标交互
  16. android rom 制作工具,ROM工具箱(ROM Toolbox Pro)
  17. 文档在线化管理系统Confluce使用
  18. kingcms php 搜索,KingCMS内容管理系统
  19. LibOpenCM3(一) Linux下命令行开发环境配置
  20. 上海大学电影学院计算机17,上海大学17级表演系女神集体曝光,有网红也有小明星...

热门文章

  1. Linker加载so失败问题分析
  2. Java并发编程:线程池
  3. Fabric环境搭建
  4. 编程中经常碰到且觉得难的事是什么?
  5. sklearn API 文档 - 0.18 中文翻译
  6. 军规13 降低流量和电量消耗
  7. [转]:xmake插件开发之色彩高亮显示
  8. 如何用两种方式同时实现ListBox的滚动功能
  9. 使用CSS3实现超炫的Loading(加载)动画效果
  10. 关于美工ps出图table格式的处理