卷积神经网络(CNN)详解

文章目录

  • 引言
  • 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.mzph.cn/pingmian/78081.shtml

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

相关文章

8051单片机所有Keil C51汇编伪指令和C语言关键字大全

8051单片机所有Keil C51汇编伪指令和C语言关键字大全 作者将狼才鲸创建日期2025-04-21 CSDN阅读地址:8051单片机所有Keil汇编伪指令和C语言关键字的详细解释 8051单片机所有Keil汇编伪指令和C语言关键字的详细解释,在Keil已安装文件夹D:\Keil_v5\C51\H…

机器视觉的智能手机屏贴合应用

在智能手机制造领域,屏幕贴合工艺堪称"微米级的指尖芭蕾"。作为影响触控灵敏度、显示效果和产品可靠性的关键工序,屏幕贴合精度直接决定了用户体验。传统人工对位方式已无法满足全面屏时代对极窄边框和超高屏占比的严苛要求,而Mast…

运维打铁:网络基础知识

文章目录 一、网络架构1. 网络架构图2. 各层级功能3. 机房网络常见问题及解决方案 二、交换技术1. 交换技术基础2. 交换技术分类3. 广播域相关概念4. ARP 协议5. 三层交换机6. VLAN(虚拟局域网) 三、路由技术1. 路由器端口类型及功能2. 路由器功能3. 路由…

使用C#和FFmpeg开发RTSP视频播放器的完整指南

RTSP(Real Time Streaming Protocol)是流媒体技术中广泛使用的协议,广泛应用于视频监控、视频会议和在线直播等领域。本文将详细介绍如何使用C#和FFmpeg开发一个功能完整的RTSP视频播放器,涵盖从环境搭建到核心功能实现的全部过程。 一、开发环境准备 …

前端基础之《Vue(9)—混入》

一、什么是混入 1、是一种代码复用的技巧 Vue组件是由若干选项组成的,向组件中混入可复用的选项。 2、作用 比如我封装两个组件,一个是A组件,一个是B组件,发现它里面有相同的选项,就可以用混用的方式来复用它。 二、…

Anything V4/V5 模型汇总

​​​​​​二次元风格生成扩散模型-anything-v4.0Stable Diffusion anything-v5-PrtRE模型介绍及使用深度探索 Anything V5:安装与使用全攻略anything-v5x0.25少儿插画_v1xyn-ai/anything-v4.0

一天学完Servlet!!!(万字总结)

文章目录 前言Servlet打印Hello ServletServlet生命周期 HttpServletRequest对象常用api方法请求乱码问题请求转发request域对象 HttpServletResponse对象响应数据响应乱码问题请求重定向请求转发与重定向区别 Cookie对象Cookie的创建与获取Cookie设置到期时间Cookie注意点Cook…

Springboot整合 xxljob,自定义添加、修改、删除、停止、启动任务

目录 一、模拟登录方式 二、注解方式 三、访问者调用 四、测试 本次自定义方式分为两种:一种是模拟登录,另一种是使用注解的方式 一、模拟登录方式 修改xxl-job-admin工程,在controller里面添加一个MyApiController,在里面添…

STM32F407使用ESP8266实现阿里云OTA(中)

文章目录 前言一、程序分析二、程序讲解1. main函数2. Get_Version()函数3. esp_Init()函数4. Check_Updata()函数结语前言 从上一章STM32F407使用ESP8266实现阿里云OTA(上)中我们已经对连接阿里云和从阿里云获取升级包的流程非常的熟悉了。所以本章我们进行STM32的程序开发…

Docker部署DeepSeek常见问题及解决方案

在使用Docker部署DeepSeek的过程中,许多开发者可能会遇到一些常见问题。本文整理了几个高频问题及其解决方案,帮助大家更顺利地完成部署。 镜像拉取失败 问题现象 执行 docker pull 命令时,提示超时或镜像不存在。 可能原因 1. 网络环境不稳定,导致连接Docker Hub失败…

Linux 内核 IPv4 套接字创建机制与协议表管理深度解析

一、inet_create:IPv4 套接字创建的核心引擎 1.1 核心功能与执行流程 inet_create 是 Linux 内核处理 socket(AF_INET, type, protocol) 系统调用的核心实现,主要完成以下关键任务: 协议匹配与初始化:根据套接字类型和协议号匹配协议处理模块 资源分配:创建并初始化套接…

网络:手写HTTP

目录 一、HTTP是应用层协议 二、HTTP服务器 三、HTTP服务 认识请求中的uri HTTP支持默认首页 响应 功能完善 套接字复用 一、HTTP是应用层协议 HTTP下层是TCP协议,站在TCP的角度看,要提供的服务是HTTP服务。 这是在原来实现网络版计算器时&am…

论文笔记(七十八)Do generative video models understand physical principles?

Do generative video models understand physical principles? 文章概括Physics-IQ基准数据集评估协议为什么要创建一个真实世界的Physics-IQ数据集模型物理理解的评估指标动作发生在哪里?空间IoU(Spatial IoU)动作在哪里、何时发生&#xf…

AXP2101入门

目录 核心功能与特性封装与配置安全与可靠性 AXP2101 是一款由全志公司开发的单电池 NVDC 电源管理集成电路(PMIC),专为锂离子/锂聚合物单电池应用设计,适用于需要多通道电源输出的设备。 核心功能与特性 1.输入与充电管理 输入…

DAY8:Oracle高可用架构深度解析与Data Guard单节点搭建实战

引言 在数据库领域,高可用性(High Availability)是保障业务连续性的核心要求。Oracle作为企业级数据库的领导者,提供了RAC、Data Guard、GoldenGate三大核心方案。本文将深入剖析这些技术的实现原理,并手把手指导搭建…

游戏引擎学习第243天:异步纹理下载

仓库 https://gitee.com/mrxiao_com/2d_game_6 https://gitee.com/mrxiao_com/2d_game_5 回顾并为今天设定阶段 目前的开发工作主要回到了图形渲染相关的部分。我们之前写了自己的软件渲染器,这个渲染器性能意外地好,甚至可以以相对不错的帧率运行过场…

BBRv2,v3 吞吐为什么不如 BBRv1

为什么 BBRv2/3 测试下来吞吐远不如 2016 年底的 BBRv1,这个事曾经提到过很多次,今天分析一下原理。注意三个事实: BBR 是一种拥塞控制算法;BBR 已经迭代到了 v3 版本;BBRv3 的 “性能” 远不如 BBRv1. 第二点有点不…

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程 前言:一、Vue项目下载快速通道二、React项目下载快速通道三、BrowserPlugins项目下载快速通道四、项目搭建教…

蓝桥杯 15.小数第n位

小数第n位 原题目链接 题目描述 我们知道,整数做除法时,有时会得到有限小数,有时会得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 0,它们就具有了统一的形式。 本题的任务是:在上述约定下&#xff0c…

【Docker】在Ubuntu平台上的安装部署

写在前面 docker作为一种部署项目的辅助工具,真是太好用了需要魔法,不然无法正常运行笔者环境:ubuntu22.04 具体步骤 更新系统包索引 sudo apt update安装必要依赖包 sudo apt install -y apt-transport-https ca-certificates curl softwa…