为什么要将全连接层转化为卷积层

本文深入解析了为什么将全连接层转换为卷积层在深度学习网络中是必要的,尤其是在处理不同大小的输入图像时。通过转换,网络能够更灵活地处理任意尺寸的输入,同时在大规模图像上的前向传播过程中显著提高计算效率。

转自:https://www.cnblogs.com/liuzhan709/p/9356960.html

理解为什么要将全连接层转化为卷积层

1.全连接层可以视作一种特殊的卷积

考虑下面两种情况:

  1. 特征图和全连接层相连,AlexNet经过五次池化后得到7*7*512的特征图,下一层全连接连向4096个神经元,这个过程可以看做有4096个7*7*512的卷积核和7*7*512的特征图进行卷积操作,最终得到1*1*4096的特征图,等价与全连接得到4096个神经元。
  2. 全连接层和全连接层相连,AlexNet的再下一层依然是4096个神经元,即4096个神经元和4096个神经元全连接,由(1)我们得到了1*1*4096的特征图,本次全连接过程可以看做存在4096个1*1*4096个卷积核,依次和1*1*4096的特征图进行卷积操作,等价与全连接。

2.网络改成全卷积形式后在某些场景可以提升效率

CS231课程中有如下陈述: 实际操作中,每次这样的变换都需要把全连接层的权重W重塑成卷积层的滤波器。那么这样的转化有什么作用呢?它在下面的情况下可以更高效:让卷积网络在一张更大的输入图片上滑动(译者注:即把一张更大的图片的不同区域都分别带入到卷积网络,得到每个区域的得分),得到多个输出,这样的转化可以让我们在单个向前传播的过程中完成上述的操作。

举个例子,如果我们想让224x224尺寸的浮窗,以步长为32在384x384的图片上滑动,把每个经停的位置都带入卷积网络,最后得到6x6个位置的类别得分。上述的把全连接层转换成卷积层的做法会更简便。如果224x224的输入图片经过卷积层和汇聚层之后得到了[7x7x512]的数组,那么,384x384的大图片直接经过同样的卷积层和汇聚层之后会得到[12x12x512]的数组(因为途径5个汇聚层,尺寸变为384/2/2/2/2/2 = 12)。然后再经过上面由3个全连接层转化得到的3个卷积层,最终得到[6x6x1000]的输出(因为(12 - 7)/1 + 1 = 6)。这个结果正是浮窗在原图经停的6x6个位置的得分!

面对384x384的图像,让(含全连接层)的初始卷积神经网络以32像素的步长独立对图像中的224x224块进行多次评价,其效果和使用把全连接层变换为卷积层后的卷积神经网络进行一次前向传播是一样的。自然,相较于使用被转化前的原始卷积神经网络对所有36个位置进行迭代计算,使用转化后的卷积神经网络进行一次前向传播计算要高效得多,因为36次计算都在共享计算资源。这一技巧在实践中经常使用,一次来获得更好的结果。比如,通常将一张图像尺寸变得更大,然后使用变换后的卷积神经网络来对空间上很多不同位置进行评价得到分类评分,然后在求这些分值的平均值。

上面给出了转化为全卷积的两个理由,一是不用限制死输入图像的大小,提供方便。二是前向传播时效率更高。

我的理解与推理

首先解释方便,对于384*384的图片,不修改AlexNet的结构使之适应384*384(依然使用原来224x224输入的结构),直到经过汇聚层得到[12x12x512]的数组时,网络运行没有任何问题,按照原来的架构,接下来要将特征图平铺和4096个神经元全连接,这时候就出问题了,因为原架构平铺后是7x7,现在是12x12,无法使用之前的参数矩阵了,但是将全连接层转化为卷积层后可继续进行,并最终得到6x6的正确输出,仅仅将网络的全连接层等价转化为卷积层,就能接收更大的图片,这显然方便了很多。

然后解释高效,第一层卷积,对于224x224的一张图片,假设卷积耗时为t,那么前向传播时,36张图片的时间为36t,对于384x384的图片,耗时同样为6*6*t = 36t,假设下一层为池化层,每次2x2池化的时间为ti,对于36张224x224的图片,总耗时36*112*112*ti = 451584ti,对于384x384的图片,耗时为192*192*ti = 36864ti << 451584ti,类似进行计算下去,发现全卷积每一层的耗时都少的多。因此全卷积效率更高,直观上如何得到这个结论呢?将384x384的图片按照32的步长切成224x224后得到36张图片,这36张图片有很多区域重叠了,本来一次池化就可以得到结果的,但是输入36张图片后,相同区域进行了多次重复池化操作,因此耗费了更多的时间。

### 全连接层卷积层的主要区别 全连接层卷积层在神经网络中的功能和结构上存在显著差异。以下是对它们主要区别的详细分析: #### 1. **连接方式** 全连接层的每个神经元都与上一层的所有神经元相连,这种连接方式使得全连接层能够将学到的分布式特征映射到样本标记空间,起到分类器的作用。相比之下,卷积层的神经元仅与输入数据的局部区域相连,这种局部连接的设计使得卷积层能够提取输入数据的局部特征,同时减少参数数量和计算复杂度 [^3]。 #### 2. **参数数量** 全连接层的参数数量通常非常庞大。例如,假设输入特征图的尺寸为 $ 20 \times 12 \times 12 $,并且全连接层有 100 个神经元,则全连接层的参数数量为 $ 20 \times 12 \times 12 \times 100 = 288,000 $。而卷积层的参数数量相对较少,例如一个卷积核大小为 $ 7 \times 7 $,输入通道数为 64,输出通道数为 64 的卷积层,其参数数量为 $ 7 \times 7 \times 64 \times 64 = 313,600 $。因此,全连接层的参数数量通常远大于卷积层的参数数量 [^2]。 #### 3. **输入尺寸要求** 全连接层的权重矩阵是固定的,因此输入到全连接层的特征图必须具有固定的尺寸。这意味着整个网络的输入图像尺寸也必须固定,以确保传递到全连接层的特征图尺寸与权重矩阵匹配。而卷积层的卷积操作不依赖于输入尺寸,因此卷积层可以处理任意尺寸的输入数据 [^4]。 #### 4. **功能与应用场景** 全连接层通常位于卷积神经网络的最后,负责将卷积层提取的二维特征图转化为一维向量,从而实现端到端的学习过程。卷积层则主要用于提取输入数据的局部特征,通过堆叠多个卷积层可以逐步提取更高层次的抽象特征 [^3]。 #### 5. **可替换性** 全连接层可以通过卷积操作实现。对于前层是全连接层全连接层,可以使用卷积核为 $ 1 \times 1 $ 的卷积操作来实现;而对于前层是卷积层全连接层,可以使用卷积核为 $ h \times w $ 的全局卷积操作来实现,其中 $ h $ 和 $ w $ 分别为前层卷积结果的高度和宽度 [^1]。 #### 6. **计算效率** 由于全连接层的参数数量庞大,计算效率较低,且容易导致过拟合。因此,现代深度学习模型中,全连接层逐渐被全局平均池化层或其他轻量级操作替代。卷积层由于其局部连接和参数共享的特性,计算效率较高,且能够有效减少过拟合的风险 [^2]。 ### 示例代码:全连接层卷积层的实现对比 以下是一个简单的代码示例,展示了全连接层卷积层的实现方式: ```python import torch import torch.nn as nn # 全连接层示例 class FullyConnectedLayer(nn.Module): def __init__(self, input_size, output_size): super(FullyConnectedLayer, self).__init__() self.fc = nn.Linear(input_size, output_size) def forward(self, x): return self.fc(x) # 卷积层示例 class ConvolutionalLayer(nn.Module): def __init__(self, in_channels, out_channels, kernel_size): super(ConvolutionalLayer, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size) def forward(self, x): return self.conv(x) # 示例输入 input_fc = torch.randn(1, 20 * 12 * 12) # 全连接层输入 input_conv = torch.randn(1, 64, 28, 28) # 卷积层输入 # 实例化并运行全连接层 fc_layer = FullyConnectedLayer(20 * 12 * 12, 100) output_fc = fc_layer(input_fc) print("全连接层输出形状:", output_fc.shape) # 实例化并运行卷积层 conv_layer = ConvolutionalLayer(64, 64, 7) output_conv = conv_layer(input_conv) print("卷积层输出形状:", output_conv.shape) ``` ### 总结 全连接层卷积层在连接方式、参数数量、输入尺寸要求、功能与应用场景、可替换性以及计算效率等方面存在显著差异。全连接层通常用于分类任务,而卷积层主要用于特征提取。随着深度学习的发展,全连接层逐渐被更高效的替代方案取代,而卷积层仍然是卷积神经网络的核心组成部分 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值