CNN中卷积、池化、激活,Fully Connected layer,Global Average Pooling的作用

本文深入探讨了全局平均池化(GlobalAveragePooling,GAP)在卷积神经网络(CNN)中的作用,解释了它如何替代全连接层进行特征降维,减少网络参数,防止过拟合,同时保持分类性能。GAP通过直接从特征图的通道获取类别信息,简化了网络结构,提高了模型的泛化能力。

raditional Pooling Methods

要想真正的理解Global Average Pooling,首先要了解深度网络中常见的pooling方式,以及全连接层。

众所周知CNN网络中常见结构是:卷积、池化和激活。卷积层是CNN网络的核心,激活函数帮助网络获得非线性特征,而池化的作用则体现在降采样:保留显著特征、降低特征维度,增大kernel的感受野深度网络越往后面越能捕捉到物体的语义信息,这种语义信息是建立在较大的感受野基础上。已古人的例子来做解释,想必大家都知道盲人摸象这个成语的来历,每个盲人只能触摸到大象的一部分,也就是只能获得local response,基于这些local response,盲人们很难猜对他们到底在摸什么。即使是一个明眼人,眼睛紧贴这大象后背看,也很难猜到看的是什么。这个例子告诉我们局部信息很难提供更高层的语义信息,因此对feature map降维,进而增大后面各层kernel的感受野是一件很重要的事情。另外一点值得注意:pooling也可以提供一些旋转不变性。


Fully Connected layer

很长一段时间以来,全连接网络一直是CNN分类网络的标配结构。一般在全连接后会有激活函数来做分类,假设这个激活函数是一个多分类softmax,那么全连接网络的作用就是将最后一层卷积得到的feature map stretch成向量,对这个向量做乘法,最终降低其维度,然后输入到softmax层中得到对应的每个类别的得分。

全连接层如此的重要,以至于全连接层过多的参数重要到会造成过拟合,所以也会有一些方法专门用来解决过拟合,比如dropout。


Global Average Pooling

有了上面的基础,再来看看global average poolilng。既然全连接网络可以使feature map的维度减少,进而输入到softmax,但是又会造成过拟合,是不是可以用pooling来代替全连接。

答案是肯定的,Network in Network工作使用GAP来取代了最后的全连接层,直接实现了降维,更重要的是极大地减少了网络的参数(CNN网络中占比最大的参数其实后面的全连接层) 。 但是同样也降低了classification performance。Global average pooling的结构如下图所示:

 

image.png

每个讲到全局池化的都会说GAP就是把avg pooling的窗口大小设置成feature map的大小,这虽然是正确的,但这并不是GAP内涵的全部。GAP的意义是对整个网络从结构上做正则化防止过拟合。既要参数少避免全连接带来的过拟合风险,又要能达到全连接一样的转换功能,怎么做呢?直接从feature map的通道上下手,如果我们最终有1000类,那么最后一层卷积输出的feature map就只有1000个channel,然后对这个feature map应用全局池化,输出长度为1000的向量, 这就相当于剔除了全连接层黑箱子操作的特征,直接赋予了每个channel实际的类别意义。当然两者之间的值也可以不一样,就是feature global pooling之后,再乘以 w_(channel * category) 也能得到最后为category长度的向量

实验证明,这种方法是非常有效的,

这样做还有另外一个好处:不用在乎网络输入的图像尺寸。同时需要注意的是,使用gap也有可能造成收敛变慢。

<think>好的,用户的问题是关于神经网络中全局平均池化Global Average Pooling, GAP)后接全连接层(Fully Connected Layer)再接Softmax的实现方式和工作原理。我需要先理解每个组件的作用,然后解释它们如何协同工作。 首先,全局平均池化。通常在卷积神经网络(CNN)中,卷积层和池化层之后会有一个全连接层来进行分类。但全连接层参数多,容易过拟合。而GAP通过将每个特征图的空间维度平均池化为一个标量,减少参数数量。例如,如果有K个特征图,GAP后会得到K个特征值。 接下来是全连接层。虽然GAP本身可以替代全连接层,但有时还会在后面接一个较小的全连接层,可能是为了进一步调整特征的组合,或者适应输出的类别数。比如,GAP输出K个特征,全连接层可能将其映射到类别数目,比如C个节点。 然后是Softmax层,将全连接层的输出转换为概率分布,用于分类。 实现方面,用户可能想知道如何在代码中构建这样的结构。比如,在Keras中,GlobalAveragePooling2D层后接Dense层,再激活Softmax。需要确保输入输出的维度正确,比如卷积层的输出形状是否符合GAP的要求。 可能需要注意的问题包括:GAP如何减少过拟合,参数量的变化,以及为什么在GAP后还要使用全连接层。例如,VGG等网络直接用全连接层,而ResNet可能使用GAP后直接接Softmax,但根据具体设计,中间可能仍有全连接层调整维度。 还要考虑数学公式的展示。例如,GAP的数学表达式是对于每个特征图求平均,全连接层是线性变换,Softmax是归一化指数函数。 用户可能还希望了解这种结构的优势,比如参数更少,模型更轻量,适合迁移学习等。同时,可能的应用场景,比如图像分类中的高效模型设计。 需要确保引用相关参考文献,比如引用[1]和[2]提到全连接层参数较多,而GAP可以减少参数,引用[4]关于卷积层的原理。 最后,生成相关问题时要围绕GAP、全连接层、Softmax的组合,可能的优化、比较和应用等。</think>### 全局平均池化接全连接层和Softmax的实现与原理 #### 1. **全局平均池化Global Average Pooling, GAP)** **作用**:将每个特征图(Feature Map)的空间维度(宽×高)压缩为单个标量。例如,若卷积层输出为 $H \times W \times K$(高×宽×通道数),GAP 会将其转换为 $1 \times 1 \times K$,即对每个通道的所有元素取平均值: $$ \text{GAP}(x)_{k} = \frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} x_{i,j,k} $$ **优势**: - 显著减少参数量,避免全连接层导致的过拟合[^1][^2]。 - 保留通道维度的语义信息,增强模型泛化能力。 #### 2. **全连接层(Fully Connected Layer)** **作用**:将 GAP 输出的 $K$ 维特征向量映射到目标类别数 $C$ 的维度。数学表示为: $$ \mathbf{z} = \mathbf{W} \cdot \mathbf{f} + \mathbf{b} $$ 其中 $\mathbf{f} \in \mathbb{R}^K$ 是 GAP 输出,$\mathbf{W} \in \mathbb{R}^{C \times K}$ 为权重矩阵,$\mathbf{b} \in \mathbb{R}^C$ 为偏置。 **设计意义**: - 在 GAP 后添加全连接层可灵活调整输出维度(例如适应分类任务类别数)。 - 部分网络(如ResNet)直接用 GAP 接 Softmax,但保留全连接层可增强特征组合能力[^4]。 #### 3. **Softmax 激活函数** **作用**:将全连接层输出转换为概率分布: $$ \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} $$ **结果**:输出 $C$ 个类别的概率,用于分类任务。 --- ### **实现方式(以Keras为例)** ```python from keras.models import Sequential from keras.layers import Conv2D, GlobalAveragePooling2D, Dense model = Sequential() model.add(Conv2D(64, (3,3), activation='relu', input_shape=(224,224,3))) # 卷积层示例 model.add(GlobalAveragePooling2D()) # GAP层,输出形状为 (None, 64) model.add(Dense(1000, activation='softmax')) # 全连接层 + Softmax ``` --- ### **工作流程** 1. **特征提取**:卷积层提取空间特征(如边缘、纹理)。 2. **压缩特征**:GAP 将每个特征图压缩为标量,保留通道语义。 3. **分类映射**:全连接层将压缩后的特征映射到类别空间。 4. **概率输出**:Softmax 生成类别概率。 --- ### **优势与适用场景** - **参数效率**:GAP 替代全连接层可减少参数(如 VGG16 全连接层参数占比 >80%[^1])。 - **抗过拟合**:适用于小数据集或轻量化模型(如 MobileNet)。 - **解释性**:GAP 输出的通道可对应类别激活(Class Activation Mapping)[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值