反卷积(转置卷积)的理解

网上有很多关于反卷积的资料,这些资料中反卷积的可视化方式对于初学者而言容易产生问题,本小节将对这些问题进行解释说明。


一、反卷积的两种可视化

下图是B站吴恩达团队视频中的可视化方式。Filter 与 Input 中的每个像素值分别相乘,得到的结果如右图按位放置,其中重叠区域部分需要相加求和
在这里插入图片描述
下图是另一种在博客中常见的可视化方式,即将其视为一种普通卷积。这两种方式看起来不一样,实际上运算过程是等效的。
在这里插入图片描述
该种可视化方法虽然能将反卷积操作看成普通卷积,便于理解,但由于它是等效得来的,容易对一些细节产生混淆。如果想正确理解反卷积操作,建议采用第一种可视化方法。

二、反卷积的一些易混淆点

1. 卷积核参数位置

上文中提到的第二种可视化中,卷积核在参数位置上需要进行180°旋转才是实际中的卷积核。因为卷积操作会让卷积核参数以180°翻转再乘上某个参数得出结果,因此需要预先对卷积核进行翻转。
具体验证留给读者,可分别采用一二两种可视化计算结果,进行验证。

2. 填充(padding)

padding=0
上图中padding值为0,但是会看到输入的四周还是填充了2个像素,这是由于可视化方式导致的。如果采用第一种可视化方式,会发现确实不存在padding。对于第二种可视化,需要事先填充k-1个像素

padding>0
对于padding大于0的情况,由于反卷积被视为卷积的反向操作,对于输入的padding则转换为对于输出的center crop,或者直接对卷积核进行padding。例如,padding为2则裁掉output周围的2个像素,也可以将卷积核周围填充2个像素

3. 步长(stride)

stride=1
上图中stride值为1,暂时没有什么问题。

stride>1
当stride大于1时,等效于在输入各像素之间插入空值,见下图。在第一种可视化方式中,stride则为输出的滑窗步长。在本文的例子中,stride置为2后,滑窗不再有重叠区域,输出大小为4×4。
在这里插入图片描述

### 转置卷积反卷积的关系 在深度学习领域,转置卷积和所谓的“反卷积”经常被提及并有时混淆。实际上,“反卷积”的术语并不准确,因为这暗示着该操作是传统卷积的一个逆过程;然而事实并非如此。 转置卷积并不是标准卷积运算的真正意义上的逆运算[^2]。相,它是一种通过特定方式调整输入张量尺寸的操作,通常用于上采样或增加特征图的空间维度。这种操作可以通过学习一组参数来实现放大图像或其他数据结构的效果。 具体而言,当提到转置卷积时,指的是一个能够扩展输入大小的过程,而这个过程中所使用的滤波器(kernel)并没有执行实际意义下的解卷积动作。因此,在严格的数学意义上讲,转置卷积不等于真正的反卷积[^3]。 为了更好地理解这一点,考虑如下Python代码片段展示了如何利用PyTorch框架来进行一次简单的转置卷积: ```python import torch import torch.nn as nn input_tensor = torch.randn(1, 1, 4, 4) # 创建随机输入张量 (batch_size=1, channels=1, height=4, width=4) transposed_conv_layer = nn.ConvTranspose2d(in_channels=1, out_channels=1, kernel_size=3, stride=2, padding=1) output_tensor = transposed_conv_layer(input_tensor) print(output_tensor.shape) # 输出形状会比原始输入更大 ``` 上述代码中`nn.ConvTranspose2d()`函数定义了一个二维转置卷积层,其作用是在给定条件下对输入进行空间上的扩张处理而不是逆转某个先前应用过的常规卷积效果[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值