卷积神经网络 - 从全连接到卷积

news/2025/3/17 16:17:06/

在全连接前馈神经网络中,如果第 𝑙 层有 𝑀𝑙 个神经元,第 𝑙 − 1 层有 𝑀𝑙−1 个 神经元,连接边有 𝑀𝑙 × 𝑀(𝑙−1) 个,也就是权重矩阵有 𝑀𝑙 × 𝑀(𝑙−1) 个参数。当 𝑀𝑙 和 𝑀(𝑙−1) 都很大时,权重矩阵的参数非常多,训练的效率会非常低。

在卷积神经网络(CNN)中,用卷积层替代全连接层的核心目的是通过保留空间结构信息减少参数量来提升模型的效率和泛化能力。

一、全连接层的局限性

1. 参数爆炸与过拟合
  • 参数数量:假设输入为 H×W×C 的特征图(如 7×7×512),全连接层输出维度为 D,则参数数量为:

    参数量=(H×W×C)×D+D

    例如,输入为 7×7×512,输出为 4096,则参数高达 7×7×512×4096=102,760,448个。

  • 过拟合风险:大量参数容易在小数据集上过拟合。

2. 空间信息丢失
  • 全连接层将多维特征图展平为一维向量,破坏图像或特征的空间结构,难以建模局部特征间的关联。

3. 输入尺寸固定
  • 全连接层要求输入尺寸固定,无法灵活处理不同分辨率的输入。

二、卷积层替代全连接的优势

1. 保留空间结构
  • 局部连接:卷积操作直接在二维(或三维)特征图上滑动,保持空间维度。

  • 权重共享:同一卷积核扫描全图,捕捉平移不变的特征(如边缘、纹理)。

2. 参数效率
  • 参数量公式:假设卷积核大小为 K×K,输入通道 C,输出通道 D:

    参数量=K×K×C×D+D

    例如,K=3, C=512, D=4096,则参数为 3×3×512×4096=18,874,368 个,远低于全连接层。

3. 输入尺寸灵活性
  • 卷积层支持任意尺寸的输入(通过调整步长或填充),例如:

    • 输入 7×7×512 → 输出 1×1×4096(使用 7×7 卷积核,步长=1)。

    • 输入 14×14×512 → 输出 8×8×4096(使用 7×7 卷积核,步长=1)。

三、替代全连接的实现方法

1. 全局平均池化(Global Average Pooling, GAP)
  • 操作:对每个通道的特征图取平均值,输出 1×1×C 的向量。

  • 优势

    • 参数量为 0(无权重参数)。

    • 强制网络学习通道级别的语义特征。

  • 应用:广泛用于ResNet、SENet等网络,直接连接分类器。

示例

# 输入形状:(batch, 7, 7, 512)
x = GlobalAveragePooling2D()(x)  # 输出形状:(batch, 512)
x = Dense(num_classes)(x)       # 全连接层参数量:512×num_classes

2. 全卷积网络(Fully Convolutional Network, FCN)

  • 设计:所有层均为卷积层,最后一层用 1×1 卷积输出类别概率。

  • 优势

    • 支持任意尺寸输入(如语义分割任务)。

    • 保持空间分辨率,输出像素级预测。

示例

# 输入形状:(batch, H, W, 512)
x = Conv2D(4096, (7, 7), activation='relu', padding='valid')(x)  # 输出:(batch, H-6, W-6, 4096)
x = Conv2D(num_classes, (1, 1))(x)                             # 输出:(batch, H-6, W-6, num_classes)
3. 用大核卷积模拟全连接
  • 操作:使用与输入特征图尺寸相同的卷积核(如 7×7),等效于全连接。

  • 公式:输入 H×W×C,使用 H×W 的卷积核 → 输出 1×1×D。

  • 优势:参数共享,避免展平操作。

示例

# 输入形状:(batch, 7, 7, 512)
x = Conv2D(4096, (7, 7), activation='relu')(x)  # 输出形状:(batch, 1, 1, 4096)
x = Flatten()(x)                                # 展平为 (batch, 4096)

四、实际应用场景

1. 图像分类
  • 传统方法:VGG16 使用全连接层(参数量占比 >90%)。

  • 现代改进:ResNet 用全局平均池化替代全连接,参数量减少 80%。

2. 目标检测
  • Faster R-CNN:用卷积层生成区域建议(RPN),避免全连接层的计算瓶颈。

  • YOLO:全卷积设计直接输出检测框和类别。

3. 语义分割
  • U-Net:全卷积网络保留空间信息,输出逐像素标签。

  • DeepLab:空洞卷积扩大感受野,替代全连接层的全局建模。

五、卷积替代全连接的本质

维度全连接层卷积层替代方案
参数效率高参数,易过拟合参数共享,大幅减少参数量
空间保留展平破坏空间结构保持二维/三维特征结构
灵活性输入尺寸固定支持任意尺寸输入
计算效率密集矩阵乘法,计算量大滑动窗口局部计算,高效并行
适用任务简单分类分类、检测、分割等复杂任务

用卷积替代全连接的实质是通过局部连接和权重共享,在保留空间信息的同时,实现参数高效的计算。这种设计不仅提升模型效率,还增强了模型对平移、缩放等变化的鲁棒性,深度学习从“暴力映射”走向“结构化学习”的重要进步。

六、卷积参数量=K*K*C*D+D如何得来?

在卷积神经网络中,卷积层的参数量的计算公式为:

其中:

  • K×K: 卷积核的空间尺寸(如 3×33×3)

  • C: 输入通道数(Input Channels)

  • D: 输出通道数(Output Channels)

以下通过具体示例和分步推导,解释公式的由来:

1. 权重参数的来源(K×K×C×D)

单通道输入(C=1)

假设输入是单通道(如灰度图像),卷积核尺寸为 K×K,输出通道数为 D。

  • 每个输出通道需要一个独立的卷积核
    例如,若输出通道数 D=16,则需要 16 个不同的 K×K 卷积核。

  • 权重参数总数:K×K×D。

多通道输入(C>1)

当输入是多通道(如 RGB 图像的 C=3)时,每个输出通道的卷积核需要同时处理所有输入通道

  • 每个输出通道的卷积核维度为 K×K×C
    例如,输入是 RGB 图像(C=3),则每个卷积核需要 3 个 K×K 的二维核,分别对应 R、G、B 通道。

  • 权重参数总数:K×K×C×D。

图示说明(以 C=3, D=2, K=3 为例):

输出通道1的卷积核:R通道核: 3×3 参数G通道核: 3×3 参数B通道核: 3×3 参数总参数: 3×3×3 = 27输出通道2的卷积核:R通道核: 3×3 参数G通道核: 3×3 参数B通道核: 3×3 参数总参数: 3×3×3 = 27总权重参数 = 27 × 2 = 54 = 3×3×3×2 = K×K×C×D

2. 偏置参数的来源(+D)

每个输出通道有一个独立的偏置项 b,用于调整激活值的基线。

  • 输出通道数为 D → 需要 D 个偏置
    例如,若输出通道数 D=16,则有 16 个偏置值 b1,b2,...,b16​。

3. 具体示例计算

案例1:经典卷积层(AlexNet 第一层)
  • 输入:RGB 图像(C=3)

  • 卷积核:K=11×11

  • 输出通道数:D=96

参数量计算

案例2:轻量级卷积层(MobileNet 深度可分离卷积)
  • 输入:C=256

  • 卷积核:K=3×3

  • 输出通道数:D=256

参数量计算

  • 卷积层参数量

    K×K×C×D+D

关键差异

  • 全连接层的权重参数与输入空间尺寸 H×W 成正比,导致参数爆炸(如 H=7,W=7H=7,W=7 时参数量是卷积层的  倍)。

  • 卷积层通过权重共享(同一卷积核扫描全图)和局部连接,显著减少参数量。

卷积层的参数量公式 K×K×C×D+D 体现了以下设计特性:

  1. 通道独立性:每个输出通道需要独立处理所有输入通道(C)。

  2. 空间局部性:卷积核在空间维度共享权重(K×K)。

  3. 偏置必要性:每个输出通道需要一个偏置调整激活值。

这种参数共享机制使得卷积层既能高效提取空间特征,又避免了全连接层的参数冗余,是 CNN 成功的核心设计之一。

七、局部连接 & 权重共享

1、局部连接

在卷积层(假设是第 𝑙 层)中的每一个神经元都只和前一层(第 𝑙 − 1 层)中某个局部窗口内的神经元相连,构成一个局部连接网络。如下图所示,卷积层和前一层之间的连接数大大减少,由原来的 𝑀𝑙 × 𝑀(𝑙−1) 个连接变为 𝑀𝑙 × 𝐾 个连接,𝐾 为卷积核大小。

2、权重共享

作为参数的卷积核 𝒘(𝑙) 对于第 𝑙 层的所有的神经元都是相同的。

权重共享可以理解为一个卷积核只捕捉输入数据中的一种特定的局部特征。因此,如果要提取多种特征就需要使用多个不同的卷积核。

由于局部连接和权重共享,卷积层的参数只有一个 𝐾 维的权重 𝒘(𝑙) 和 1 维 的偏置 𝑏(𝑙),共 𝐾 + 1 个参数。参数个数和神经元的数量无关。此外,第 𝑙 层的神经元个数不是任意选择的,而是满足 𝑀𝑙 = 𝑀(𝑙−1) − 𝐾 + 1。

八、第 𝑙 层的神经元数量𝑀𝑙 = 𝑀(𝑙−1) − 𝐾 + 1如何得来?

在卷积神经网络中,第 𝑙  层的神经元数量  是由卷积操作的局部连接滑动窗口机制决定的。

1. 核心推导(以步长=1、无填充为例)

2. 直观解释

  • 滑动窗口机制
    卷积核每次在输入上滑动 1 步,覆盖连续的 K 个输入神经元。
    每滑动一次生成 1 个输出神经元,直到无法再完整覆盖输入。

  • 覆盖范围

3. 具体示例

4. 参数与神经元数量的独立性

  • 参数数量:仅由卷积核大小 K 和偏置决定(K+1),与输入尺寸无关。(注意这里的输入尺寸,是指输入的变量数,并非输入通道
    例如,无论输入是 5 还是 100,只要 K=3,参数数恒为 3+1=4。

5. 扩展情况

总结

  • 该公式本质是滑动窗口覆盖输入数据的结果,反映了卷积操作对局部特征的逐段提取特性。

  • 参数数量与输入尺寸无关,体现了权重共享的优越性。


http://www.ppmy.cn/news/1579849.html

相关文章

【DevOps】Backstage介绍及如何在Azure Kubernetes Service上进行部署

【DevOps】Backstage介绍及如何在Azure Kubernetes Service上进行部署 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 【DevOps】Backstage介绍及如何在Azure Kubernetes Service上…

vue3,Element Plus中el-select默认显示0

el-select默认显示0 <el-select v-model"queryDTO.checkGroupId" placeholder"请选择" clearable filterable style"width: 240px"> <el-option v-for"item in checkGroupOptions" :key"item.key" :label"it…

LInux基础--apache部署网站

httpd的安装 yum -y install httpdhttpd的使用 启动httpd systemctl enable --now httpd使用enable --now 进行系统设置时&#xff0c;会将该服务设置为开机自启并且同时开启服务 访问httpd 创建虚拟主机 基于域名 在一台主机上配置两个服务server1和server2&#xff0c;其…

Windows远程桌面黑屏怎么办?

在使用Windows远程桌面连接另一台电脑时&#xff0c;用户经常会遇到Windows远程桌面黑屏的问题。那么&#xff0c;该如何有效地解决Windows远程桌面黑屏的问题呢&#xff1f;遇到远程桌面连接黑屏的问题时&#xff0c;可以通过在本地组策略编辑器中禁用WDDM图形显示驱动来解决。…

Ubuntu24.10编译Android12源码并运行于模拟器中

效果如下&#xff1a; 初始化环境&#xff1a; 运行lunch弹出对应目标 生成模拟器版本镜像 镜像生成成功 生成模拟器启动镜像 编译注意事项: 24.10版本&#xff1a; sudo apt install curl curl -sSL https://gerrit-googlesource.proxy.ustclug.org/git-repo//master/r…

Python----数据分析(Pandas一:pandas库介绍,pandas操作文件读取和保存)

一、Pandas库 1.1、概念 Pandas是一个开源的、用于数据处理和分析的Python库&#xff0c;特别适合处理表格类数 据。它建立在NumPy数组之上&#xff0c;提供了高效的数据结构和数据分析工具&#xff0c;使得数据操作变得更加简单、便捷和高效。 Pandas 的目标是成为 Python 数据…

案例驱动的 IT 团队管理:创新与突破之路:第一章 重构 IT 团队管理:从传统到创新-1.1.3 敏捷开发 vs 传统流程

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 重构 IT 团队管理&#xff1a;从传统到创新1.1.3 敏捷开发 vs 传统流程一、核心理念对比二、流程与实践差异1. **传统流程的线性结构**2. **敏捷开发的迭代循环** 三、适用场…

LeetCode 3280 将日期转换为二进制表示

【算法实战】日期转二进制&#xff1a;两种解法的思路与优化&#xff08;附代码解析&#xff09; 一、问题描述 给定一个yyyy-mm-dd格式的日期字符串&#xff0c;要求将年、月、日分别转为无前导零的二进制&#xff0c;并保持year-month-day格式。 示例&#xff1a;输入2025-…