卷积神经网络(CNN)详解

news2025/4/22 18:02:18

文章目录

  • 引言
  • 1.卷积神经网络(CNN)的诞生背景
  • 2.卷积神经网络(CNN)介绍
    • 2.1 什么是卷积神经网络?
    • 2.2 卷积神经网络(CNN)的基本特征
      • 2.2.1 局部感知(Local Connectivity)
      • 2.2.2 权值共享(Weight Sharing)
  • 3. 卷积神经网络(CNN)结构
    • 3.1 整体架构
    • 3.2 卷积层(Convolutional Layer)
      • 3.2.1 卷积层涉及的参数:
    • 3.3 池化层(Pooling Layer)
    • 3.4 常用激活函数
      • 3.4.1 激活函数的作用
      • 3.4.2 ReLU 激活函数
      • 3.4.3 Sigmoid 激活函数
      • 3.4.4 Tanh 激活函数
    • 3.5 全连接层(Fully Connected Layer)
    • 3.6 卷积神经网络的过程
  • 4. 经典CNN架构演进
  • 5. 总结

引言

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络 (Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。本文旨在介绍CNN的基本概念和结构,以及CNN网络架构设计的基本思路。

1.卷积神经网络(CNN)的诞生背景

在传统神经网络处理图像时,面临几个严峻挑战:

  1. 参数爆炸:一张普通1000×1000像素的彩色图像,全连接层会产生30亿个参数
  2. 平移不变性:传统网络难以识别位置变化的同一物体
  3. 局部相关性:忽略了图像中相邻像素间的紧密关系

受生物视觉皮层启发,Yann LeCun等人在1989年提出了CNN的雏形,并在1998年开发出著名的LeNet-5用于手写数字识别。但直到2012年AlexNet在ImageNet竞赛中一战成名,CNN才真正迎来爆发式发展。

2.卷积神经网络(CNN)介绍

2.1 什么是卷积神经网络?

卷积神经网络是多层感知机 (MLP)的变种,由生物学家休博尔和维瑟尔 在早期关于猫视觉皮层的研究发展而来,视觉皮层的细胞存在一个复杂的构造,这些细胞对视觉输入空间的子区域非常敏感,称之为感受野

CNN由纽约大学的Yann Lecun(杨立昆)于1998年提出(LeNet-5),其本质是一个多层感知机,成功的原因在于其所采用的局部连接和权值共享的方式:一方面减少了权值的数量使得网络易于优化;另一方面降低了模型的复杂度、减小了过拟合 的风险。 当网络的输入为图像时,这些优点将表现地更加明显。

2006年,Hinton提出了深度学习,其主要的观点是:多隐层的人工神经网络 具有优异的特征学习能力,学习到的数据更能反映数据的本质特征有利于可视化或分类。大数据和计算机硬件的发展使得深度学习得以推广和应用。

2012年AlexNet取得ImageNet比赛的分类任务的冠军,使得卷积神经网络真正爆发。如今的卷积神经网络(CNN)是一种带有卷积结构的深度神经网络 ,卷积结构可以减少深层网络占用的内存量,其三个关键的操作——局部感受野 、权值共享、pooling层,有效地减少了网络的参数个数,缓解了模型的过拟合问题。

2.2 卷积神经网络(CNN)的基本特征

2.2.1 局部感知(Local Connectivity)

在这里插入图片描述
图1(a)表示神经网络中神经元之间的全连接结构,即前后两层神经元都是彼此相互连接的,这样可以保证后面一层的每个神经元都能获取前面一层神经元的所有信息。图1(b)表示神经元之间进行局部连接,即后面一层的神经元只与前面一层的部分神经元进行连接,这样后面一层的神经元只能包含前面一层神经元的部分信息。表面上看局部连接似乎损失了部分信息,但实际上后层神经元并没有损失信息。通过后面一层神经元感知局部信息不仅可以减少网络需要学习的大量参数,同时可以减少网络的冗余信息。在图像领域,如果网络输入的是一张图片,每个神经元在卷积层都进行局部感知图像信息,经过几层卷积和池化后再通过卷积可以将这些局部的信息进行综合起来得到图像的全局信息。通过局部感知不仅减少了神经网络的复杂性和参数量,同时减少了对训练时设备算力的高要求。

下面分析网络采用局部的神经元连接方式相比于全连接方式,计算量减少了多少。

假设图像大小为 500 × 500 ,共有 1 0 5 10^5 105 个神经元。

在图中(a)的全连接中,每个神经元需要与图像进行全连接,则网络需要训练的参数有:

  • 前一层的图像大小为 500 × 500 =2.5× 1 0 5 10^5 105,然后神经元个数为 1 0 5 10^5 105个,那么全连接需要计算的参数个数为:2.5× 1 0 5 10^5 105 × 1 0 5 10^5 105 = 2.5 × 1 0 10 10^{10} 1010

如果网络神经元采用图中(b)的局部连接方式,假设神经元的感受野为 10 × 10,则网络需要训练的参数有:

  • 感受野为 10 × 10 ,神经元个数为 1 0 5 10^5 105个,那么需要训练的参数个数为 10 × 10 × 1 0 5 10^5 105 = 1 0 7 10^7 107

由于神经元个数相同,偏置值的数量也是相同的,故在计算中忽略了偏置值的统计,该操作不影响两者计算量的比较。通过比较两种连接方式计算的结果可知,采用局部连接方式的参数量是采用全连接方式的 1 2500 \frac{1}{2500} 25001 。由此可见,神经元采用局部连接可以减少大量网络需要学习的参数,降低模型的复杂度。

2.2.2 权值共享(Weight Sharing)

权值共享是卷积神经网络的另一个特性。在网络对输入图片进行卷积时,对于同一特征的提取,卷积核的参数是共享的,即卷积核中的参数是相同的。在全图对某一个特征,如边缘、纹理等进行提取时,所有卷积核参数相同。这种特性大大减少了卷积神经网络中需要学习的参数,下图是神经网络权值共享示意图。
在这里插入图片描述
图中,第 n + 1 层神经元只与第 n层的部分神经元进行连接,该图中第 n + 1层只与第 n层中的 3 个神经元连接,每一个神经元与上一层的神经元进行连接时,权值是相同的。w1,w2,w3 是不同神经元共享的权值。

权值共享就是说,给一张输入图片,用一个卷积核去扫这张图,卷积核里面的数就叫权重,这张图每个位置是被同样的卷积核扫的,所以权重是一样的,也就是共享。
在这里插入图片描述
这里面,最左边的可以理解为是输入图片的一部分,而中间的是卷积核,右边的是得到FeatureMap。这里的动图演示的是通道数为1的情况(显示情况下,Channel = 1 一般为灰度图)。如果是彩色图像(RGB),那么左边的通道数为3(即有RGB各3张图),中间卷积核的通道数也应该是3(对应输入图片的RGB 3 通道)。

我们需要注意一下:右边输出的FeatureMap的通道数并不是3,而是1。

  • 这是因为,即便输入特征图和卷积核都是3通道的,但输出特征并不是三通道的,而是把这三个通道对应位置上的值进行了相加,最终形成了一个 1通道的输出特征图。

而且我们还要注意一个问题,那就是卷积核上的参数是不变的。这就是我们所说的权值共享技巧。如果我们不进行权值共享,那么结果会这样:
在这里插入图片描述

3. 卷积神经网络(CNN)结构

3.1 整体架构

在这里插入图片描述
上面是一个简单的 CNN 结构图, 第一层输入图片, 进行卷积(Convolution)操作, 得到第二层特征图(Feature Map). 对第二层的特征图进行池化(Pooling)操作, 得到第三层特征图,重复上述操作得到第五层特征图, 最后将这特征图、按行展开连接成向量, 传入全连接(Fully Connected)层, 全连接层就是一个 BP 神经网络. 图中的每个特征图都可以看成是排列成矩阵形式的神经元, 与 BP神经网络中的神经元大同小异。

3.2 卷积层(Convolutional Layer)

卷积操作是CNN的灵魂,通过滑动窗口(滤波器/kernel)在图像上提取局部特征,所以,一幅图像的一个完整的卷积运算过程为:卷积核以一定的间隔滑动,并对所覆盖的区域进行卷积运算得到值 z,直至遍历完整幅图像。如下图所示:
在这里插入图片描述

我们都知道,彩色图片都是三个通道,也就是说一个彩色图片会有三个矩阵。加入现在输入一张彩色图片的尺寸为7×7×3,最后一维3表示图像颜色通道,需要注意的是输入的最后一维要和Filter的最后一维保持一致。Filter为3×3×3,那么这里的卷积核大小为3×3,对应输入矩阵中每3×3的大小进行一个区域选择。
计算方式为: 每一个对应位置相乘,最终结果相加,最后不要忘记加上偏置项
如下图所示:
在这里插入图片描述
而卷积操作并不是说卷积一次就完事了,而是可以进行多次卷积,得到若干张特征图,最后进行堆叠。

3.2.1 卷积层涉及的参数:

(1)滑动窗口步长(Stride)
在这里插入图片描述
从图中可以看出,不同的步长得到的特征图大小也不同。当步长较小时,相当于慢慢的提取特征,细粒度的提取特征,特征提取的较为丰富;当步长较大时,相当于大刀阔斧的提取特征,特征数目较少。

(2)滤波器尺寸(通常3×3或5×5)
其实和滑动窗口的尺寸一样,当卷积核尺寸较小时,相当于慢慢的提取特征,细粒度的提取特征,特征提取的较为丰富;当卷积核尺寸较大时,相当于大刀阔斧的提取特征,特征数目较少。
在一般情况下, 滑动窗口选择1,卷积核尺寸为3×3.

(3)填充(Padding)
在滑动窗口移动过程中,我们会发现,有些位置的值被多次计算,那么这些值会对最终的结果影响较大,这样会造成不公平的效果。
解决方法:zero-padding 经过观察发现,越靠近边缘位置的值计算重复越少,越靠近中心位置的值计算次数越多,因此可以在输入特征矩阵外再添加一圈0,使得原本边界的特征被利用的次数增多,在一定程度上弥补了边界信息缺失,边界特征提取不充分的问题。

在这里插入图片描述
那么为啥添加的是0 ,而不是其他值呢? 如果添加其他值则会再计算过程中对最终的结果产生影响。

(4)卷积核个数
卷积核个数取决于最终在计算过程中得到多少个特征图,10个特征图也就对应10个卷积核。

3.3 池化层(Pooling Layer)

随着模型网络不断加深,卷积核越来越多,要训练的参数还是很多,而且直接拿卷积核提取的特征直接训练也容易出现过拟合的现象。CNN使用的另一个有效的工具被称为“池化(Pooling)”出现并解决了上面这些问题,为了有效地减少计算量,池化就是将输入图像进行缩小,减少像素信息,只保留重要信息;为了有效地解决过拟合问题,池化可以减少数据,但特征的统计属性仍能够描述图像,而由于降低了数据维度,可以有效地避免过拟合。

给出池化的定义,对不同位置区域提取出有代表性的特征(进行聚合统计,例如最大值、平均值等),这种聚合的操作就叫做 池化,池化的过程通常也被称为 特征映射 的过程(特征降维)。听起来很高深,其实简单地说就是下采样。

池化的过程如下图所示:
在这里插入图片描述

池化主要有两种,除了 最大值池化(Max Pooling) 之外,还有 平均值池化(Average pooling),CNN中随机池化使用的较少。

最大池化是对局部的值取最大;平均池化是对局部的值取平均;随机池化是根据概率对局部的值进行采样,采样结果便是池化结果。概念非常容易理解,其示意图如下所示:
在这里插入图片描述
三种池化的意义:

  • 最大池化可以获取局部信息,可以更好保留纹理上的特征。如果不用观察物体在图片中的具体位置,只关心其是否出现,则使用最大池化效果比较好。
  • 平均池化往往能保留整体数据的特征,能凸出背景的信息。
  • 随机池化中元素值大的被选中的概率也大,但不是像最大池化总是取最大值。随机池化一方面最大化地保证了Max值的取值,一方面又确保了不会完全是max值起作用,造成过度失真。除此之外,其可以在一定程度上避免过拟合。

3.4 常用激活函数

3.4.1 激活函数的作用

非线性建模:激活函数的主要作用是提供网络的非线性建模能力。在卷积层中,卷积操作是线性的,即对每个像素点赋予一个权值进行加权求和。然而,对于实际样本来说,不一定是线性可分的。为了解决这个问题,需要引入非线性因素,使网络能够学习更复杂的函数关系。(如果只有线性变换,那无论多少层神经元,都能简化层一层神经元,那神经网络只是简单多元线性回归而已,不能拟合更加复杂的函数。举个例子,只有线性操作,那么神经网络永远无法拟合圆等复杂的曲线图形,永远只能表示超平面,无法表示曲面等。)

构建稀疏矩阵:激活函数还可以构建稀疏矩阵,即稀疏性。这个特性可以去除数据中的冗余,最大可能地保留数据的特征。大多数为0的稀疏矩阵可以更有效地表示数据,从而提高模型的泛化能力。

激活函数的非线性是神经网络发挥作用最重要的因素之一,而对于实际部署,激活函数的实现也是很重要的一个方面,实现的不好对加速效果影响很大,这里主要讲几个部署当中常见的激活函数。

3.4.2 ReLU 激活函数

公式:
在这里插入图片描述
ReLU比较好部署,小于0的部分为0,大于0的部分为原始值,只需要判断一下符号位就行。

3.4.3 Sigmoid 激活函数

公式:
在这里插入图片描述
Sigmoid 函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。它在物理意义上最为接近生物神经元。

3.4.4 Tanh 激活函数

公式:
在这里插入图片描述
比Sigmoid函数收敛速度更快,相比Sigmoid函数,其输出以0为中心。

3.5 全连接层(Fully Connected Layer)

将特征向量转化为分类概率,分类概率是指将输入图片判定的概率。全连接层通常作为CNN的最后一层,对图像的特征进行分类并得出最终的输出结果。

全连接层的工作方式是将图像的特征向量作为输入,通过一组权值,计算得到一个分类结果。全连接层中的每一个神经元代表一个特定的类别,最后的输出即为所属类别的概率。

在这里插入图片描述
在经过多层的卷积层和池化层操作后,一般会有1个或2个全连接层,给出最后的分类结果。全连接层在整个卷积神经网络中起到“分类器”的作用,它将学到的特征表示映射到类标签空间。在实际中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1×1的卷积;而前层是卷积层的全连接层可以转化为卷积核为h×w的全局卷积,h和w分别为前层卷积输出结果的高和宽。

3.6 卷积神经网络的过程

首先需要一张图片进行输入,在输入之后需要对其进行卷积操作,用于特征提取,在特征提取过后,需要用激活函数对所得到的特征图进行激活。在激活之后,需要利用池化去进行降低尺寸,在降低尺寸之后,又要重新进行卷积激活,然后再进行池化,就这样不停循环下去,直到这个神经网络的规模能够满足我们全连接层计算,那我们就进入全连接层,然后在全连接层中进行详细的计算以及进行分类,这就是卷积神经网络CNN的一个整体的过程。
在这里插入图片描述
通过观察图,我们发现了几个特点:

  • 首先每一个卷积过后都连接一个Relu激活函数;
  • 每两次卷积后进行一次池化操作;
  • 所有的卷积和池化操作完成后进行全连接FC,
  • 全连接层得到最终的分类结果。

4. 经典CNN架构演进

模型年份创新点Top-5错误率
LeNet-51998首个成功CNN-
AlexNet2012ReLU/Dropout15.3%
VGG2014小卷积堆叠7.3%
GoogLeNet2014Inception模块6.7%
ResNet2015残差连接3.57%

5. 总结

以上就是本篇博客的全部内容了,真的耗费了我不少时间来总结,希望可以和大家一起学习、进步。大家如果发现博客中有表述不正确的的地方还望能及时指正,谢谢大家!
人生海海,山山而川。希望大家能一直保持初心,坚定目标,并为之努力奋斗,终有一天,我们都能成为心中所想成为的人!

本篇博客就到这里啦,大家下篇博客见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2340264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SF顺丰】顺丰开放平台API对接(注册、API测试篇)

1.注册开发者账号 注册地址:顺丰企业账户中心 2.登录开发平台 登录地址:顺丰开放平台 3.开发者对接 点击开发者对接 4.创建开发对接应用 开发者应用中“新建应用”创建应用,最多创建应用限制数量5个 注意:需要先复制保存生产校验…

VisualSVN过期后的解决方法

作为一款不错的源代码管理软件,svn还是有很多公司使用的。在vs中使用svn,大家一般用的都是VisualSVN插件。在30天试用期过后,它就不能被免费使用了。下面给大家讲如何免费延长过期时间(自定义天数,可以设定一个很大的值…

DeepSeek智能时空数据分析(二):3秒对话式搞定“等时圈”绘制

序言:时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,然而,三大挑战仍制约其发展:技术门槛高,需融合GIS理论、SQL开发与时空数据库等多领域知识;空…

STM32学习2

一、OLED 1.1 OLED介绍 OLED(Organic Light Emitting Diode):有机发光二极管 OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点 0.96寸OLED模块:小巧玲珑、占用接口少…

LabVIEW液压系统远程监控与故障诊断

开发了一种基于LabVIEW的远程液压系统监控解决方案,通过先进的数据采集与分析技术,有效提升工程机械的运作效率和故障响应速度。该系统结合现场硬件设备和远程监控软件,实现了液压系统状态的实时检测和故障诊断,极大地提升了维护效…

Idea中实用设置和插件

目录 一、Idea使用插件 1.Fitten Code智能提示 2.MyBatisCodeHelperPro 3.HighlightBracketPair‌ 4.Rainbow Brackets Lite 5.GitToolBox(存在付费) 6.MavenHelperPro 7.Search In Repository 8.VisualGC(存在付费) 9.vo2dto 10.Key Promoter X 11.CodeGlance…

Java写数据结构:栈

1.概念: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插…

机器学习-08-推荐算法-案例

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中关联规则 参考 机器学习(三):Apriori算法(算法精讲) Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 23张图&#x…

LLM中的N-Gram、TF-IDF和Word embedding

文章目录 1. N-Gram和TF-IDF:通俗易懂的解析1.1 N-Gram:让AI学会"猜词"的技术1.1.1 基本概念1.1.2 工作原理1.1.3 常见类型1.1.4 应用场景1.1.5 优缺点 1.2 TF-IDF:衡量词语重要性的尺子1.2.1 基本概念1.2.2 计算公式1.2.3 为什么需…

Office文件内容提取 | 获取Word文件内容 |Javascript提取PDF文字内容 |PPT文档文字内容提取

关于Office系列文件文字内容的提取 本文主要通过接口的方式获取Office文件和PDF、OFD文件的文字内容。适用于需要获取Word、OFD、PDF、PPT等文件内容的提取实现。例如在线文字统计以及论文文字内容的提取。 一、提取Word及WPS文档的文字内容。 支持以下文件格式: …

HXBC编译相关错误

0、Keil MDK报错:Browse information of one or more files is not available----解决方法: 1、使用cubemax生成的工程中,某些引脚自定义了的,是在main.h中,要记得移植。 注意:cubemax生成的spi.c后,在移植的时候,注意hal_driver下面要对应增加hal_stm32H7xxxspi.c …

运维概述(linux 系统)

1、运维的基本概念 2、企业的运行模式 3、计算机硬件 运维概述 运维岗位的定义 在技术人员(写代码的)之间,一致对运维有一个开玩笑的认知:运维就是修电脑的、装网线的、背锅的岗位。 IT运维管理是指为了保障企业IT系统及网络…

C语言 数据结构 【堆】动态模拟实现,堆排序,TOP-K问题

引言 堆的各个接口的实现(以代码注释为主),实现堆排序,解决经典问题:TOP-K问题 一、堆的概念与结构 堆 具有以下性质 • 堆中某个结点的值总是不大于或不小于其父结点的值; • 堆总是一棵完全二叉树。 二…

模型加载常见问题

safetensors_rust.SafetensorError: Error while deserializing header: HeaderTooLarge 问题代码: model AutoModelForVision2Seq.from_pretrained( "/data-nvme/yang/Qwen2.5-VL-32B-Instruct", trust_remote_codeTrue, torch_dtypetorc…

PyTorch 深度学习实战(37):分布式训练(DP/DDP/Deepspeed)实战

在上一篇文章中,我们探讨了混合精度训练与梯度缩放技术。本文将深入介绍分布式训练的三种主流方法:Data Parallel (DP)、Distributed Data Parallel (DDP) 和 DeepSpeed,帮助您掌握大规模模型训练的关键技术。我们将使用PyTorch在CIFAR-10分类…

微信小程序通过mqtt控制esp32

目录 1.注册巴法云 2.设备连接mqtt 3.微信小程序 备注 本文esp32用的是MicroPython固件,MQTT服务用的是巴法云。 本文参考巴法云官方教程:https://bemfa.blog.csdn.net/article/details/115282152 1.注册巴法云 注册登陆并新建一个topic&#xff…

1.Vue3 - 创建Vue3工程

目录 一、 基于vue-cli 脚手架二、基于vite 推荐2.1 介绍2.2 创建项目2.3 文件介绍2.3.1 extensions.json2.3.2 脚手架的根目录2.3.3 主要文件 src2.3.3.1 main.js2.3.3.2 App.vue 组件2.3.3.3 conponents 2.3.4 env.d.ts2.3.5 index.html 入口文件2.3.6 package2.3.7 tsconfig…

AI编写的“黑科技风格、自动刷新”的看板页面

以下的 index.html 、 script.js 和 styles.css 文件&#xff0c;实现一个具有黑科技风格、自动刷新的能源管理系统实时监控看板。 html页面 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name&q…

11-DevOps-Jenkins Pipeline流水线作业

前面已经完成了&#xff0c;通过在Jenkins中创建自由风格的工程&#xff0c;在界面上的配置&#xff0c;完成了发布、构建的过程。 这种方式的缺点就是如果要在另一台机器上进行同样的配置&#xff0c;需要一项一项去填写&#xff0c;不方便迁移&#xff0c;操作比较麻烦。 解…

【JavaWeb后端开发03】MySQL入门

文章目录 1. 前言1.1 引言1.2 相关概念 2. MySQL概述2.1 安装2.2 连接2.2.1 介绍2.2.2 企业使用方式(了解) 2.3 数据模型2.3.1 **关系型数据库&#xff08;RDBMS&#xff09;**2.3.2 数据模型 3. SQL语句3.1 DDL语句3.1.1 数据库操作3.1.1.1 查询数据库3.1.1.2 创建数据库3.1.1…