0

0

零基础也能搞懂卷积神经网络原理!超详细!

WBOY

WBOY

发布时间:2024-06-04 15:19:14

|

993人浏览过

|

来源于51CTO.COM

转载

相信和作者一样爱技术对ai兴趣浓厚的小伙伴们,一定对卷积神经网络并不陌生, 也一定曾经对如此“高级”的名字困惑良久。作者今天将从零开始走进卷积神经网络的世界~与大家分享!

在深入了解卷积神经网络之前,我们先看看图像的原理。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

零基础也能搞懂卷积神经网络原理!超详细!

图像原理

图像在计算机中是通过数字(0-255)来表示的,每个数字代表图像中一个像素的亮度或颜色信息。其中:

  • 黑白图像:每个像素只有一个值,这个值在0(黑色)到255(白色)之间变化。

零基础也能搞懂卷积神经网络原理!超详细!

  • 彩色图像:每个像素包含三个值,最常见的是RGB(Red-Green-Blue)模型,即红色、绿色和蓝色光以不同强度组合起来产生各种颜色。每个颜色通道都有256级亮度,从0~255,因此每种颜色可以用一个8位的二进制数来表述,例如(255,0,0)表示红色,(0,255,0)表示绿色,(0,0,255)表示蓝色,其他组合则对应各种颜色。计算机中,彩色图像的数据结构通常是一个三维数组或张量,形状为(宽度,高度,深度),其中深度就是通道的数量,对于RGB图像来说,深度是3。这意味着,对于每个像素位置,有三个数值分别代表红绿蓝三个通道的亮度。例如,一个100*100像素的RGB图像将占用100x100x3个字节的内存。

零基础也能搞懂卷积神经网络原理!超详细!

「这里“8位的二进制数”怎么理解呢?」

在RGB颜色模型中,每个颜色通道(红、绿、蓝)可以有256个不同的亮度级别,每个通道表示8位二进制表示,8位二进制数的最大值是11111111,转化成十进制就是255;最小值是00000000,转化成十进制就是0。

何为卷积神经网络CNN?

CNN报道了一种在CV中家喻户晓的一种应用场景。以原始图片尺寸为10x10为例,如下图所示,其左半部分是像素值较大,是明亮区域;右半部分是像素值较小,为深度区域。中间的分界线即是要检测的边缘。

「那么怎么检测边缘呢?」 此时滤波器filter(也叫kernel)出场了,如下图所示,kernel尺寸为3x3。

滤波器filter滑过输入图片,在每个区域处稍做停留,对应元素相乘再相加计算,之后再向其它区域滑动继续计算,直到滑动至原图片的最后一个区域为止。这个过程即为「卷积。」

零基础也能搞懂卷积神经网络原理!超详细!

由上图可以看出,输出结果的中间颜色浅,两边颜色深,说明原图的边界已反应出来。「因此可以总结出,边缘检测就是通过输入图片与相应滤波器进行卷积运算得以识别。」

另外,这里的滑动还涉及到一个基本概念,「步长stride」,上述示例中,是以stride为1说明,每次滑动一格,共停留了8x8个区域,所以最终输出结果是8x8矩阵。

「那么,究竟什么是卷积神经网络呢?」

经过上面边缘检测这一具体的目标检测场景的分析,我们也就不难理解,CNN(Convolutional neural network)就是通过各种各样的滤波器filter不断提取图片特征,从局部到整体,进而识别目标。

而在神经网络中,这些filter中的每个数字,就是参数,可通过大量数据训练得到(即深度学习的过程)。

CNN中的基本概念

1.卷积(Convolution)

(1) 卷积计算

卷积是数学分析中的一种积分变换的方法,而在图像处理中则采用的是卷积的离散形式。在卷积神经网络CNN中,卷积层的实现方式本质即为数学中定义的互相关计算(cross-correlation)。具体计算过程如下图所示。

零基础也能搞懂卷积神经网络原理!超详细!

其中:

图(a):左边的图大小是3×3,表示输入数据是一个维度为3×3的二维数组;中间的图大小是2×2,表示一个维度为 2×2的二维数组,也即为「卷积核」。卷积核的左上角与输入数据的左上角(0,0)对齐,并依次将二者对应位置数据相乘,再相加,即可获得卷积输出的第一个结果25。

依次类推,图(b)、(c)、(d)分别为卷积输出的第二、三、四个输出结果。

(2) 图片卷积运算

那么图片卷积运算,具体是怎么回事呢?如下图所示即为彩色图像卷积过程。

零基础也能搞懂卷积神经网络原理!超详细!

对于彩色图像的通道1(Red)、通道2(Green)、通道3(Blue),分别使用Kernel1、Kernel2、Kernel3。每个卷积核在对应的单色图像上滑动,对每个位置上的小块区域(Kernel大小)内的像素值与卷积核的相应元素进行逐点乘法运算,然后将这些乘积相加得到一个值。再将每个通道得到的数值相加,并加上总体的偏置Bias,即可得到对应特征图(feature map)中的一个值。

立体效果如下图所示:

零基础也能搞懂卷积神经网络原理!超详细!

2.Padding

如上所述边缘检测的例子中,可以看到,原图片尺寸是10x10,经过filter之后是8x8。如果再做一次卷积运算就是6x6...这样的话会有两个缺点:

  • 每次做卷积操作,输出图片尺寸缩小
  • 角落或边缘区域的像素点在输出中采用较少,因此容易丢掉图像边缘位置的许多信息。

如下图中左上角红色阴影只被一个输出触碰到,而中间的像素点(紫色方框标记)会有许多3x3的区域与之重叠。所以,角落或边缘区域的像素点在输出中采用较少,容易丢掉图像边缘位置的许多信息。

零基础也能搞懂卷积神经网络原理!超详细!

为了解决这一问题,我们通常采用Padding的方法,在卷积操作之前,先给原图片边缘填充一层像素, 例如,将10x10的图像即可填充为12x12的大小,卷积之后的图片尺寸为8x8,和原始图片一样大,这样便使得原图的边缘区域像素点也可以多次被采用。

选择填充多少像素,通常有两种选择:

  • Same卷积:即如上所述,填充再卷积之后的图片大小与原图片一致。
  • Valid卷积:不进行填充操作,直接卷积。

3.stride

stride的概念在引言中有提到过,表示过滤器filter在原图片中水平方向和竖直方向每次滑动的长度,也叫步进长度。

假设s表示stride长度,p表示padding长度,原图片尺寸是nxn,过滤器filter尺寸是fxf,则卷积后的图片尺寸为:

零基础也能搞懂卷积神经网络原理!超详细!

4.池化

池化的本质就是降维。

Favird
Favird

极其棒且有价值的互联网资源目录!

下载

卷积网络中池化层的作用:降低特征图的参数量、提升计算速度、增加感受野,也即为一种降采样操作。

物体检测中常用的池化:最大值池化(Max Pooling)与平均值池化(Average Pooling)。

(1) Max pooling

即在滤波器filter滑动区域内取最大值,而无需卷积运算。数字大意味着可能探测到了某些特定的特征,忽略了其它值,降低了噪声影响,提高了模型健壮性。「并且,Max pooling需要的超参数仅为滤波器尺寸f和stride长度s,无需要训练其它参数,计算量较小。」

零基础也能搞懂卷积神经网络原理!超详细!

(2) Average pooling

即在滤波器filter滑动区域内求平均值。

零基础也能搞懂卷积神经网络原理!超详细!

5.Shape

在处理多维数据,尤其是图像数据时,Tensorflow和Pytorch数据Shape有所区分。

  • TensorFlow:(batch_size, height, width, in_channels)
  • Pytorch:(batch_size, in_channels, height, width)

其中:

  • batch_size:批量处理的样本数量。
  • in_channels:输入图像的通道数,对于彩色图像通常是3(红、绿、蓝)。
  • height和width分别是图像的高度和宽度。

零基础也能搞懂卷积神经网络原理!超详细!

如上图所示:

  • 输入图片Shape:[height, width, channels],即[8,8,3],表示一个8x8的图像,有3个通道(R、G、B)。
  • 卷积核Shape:[kernel_height, kernel_width, in_channels, out_channels],即[3,3,3,5],表示一个3x3的卷积核,有3个通道(R、G、B),输出通道数是5。
  • 输出图片Shape:[height, width, out_channels],即[6,6,5],表示一个6x6的输出图片,有5个通道(R、G、B)。
out_height = (height - kernel_height + 1) / strideout_width = (width - kernel_width + 1) / stride

对于8x8的图像和3x3的卷积核,输出尺寸将是 (8 - 3 + 1) / 1 = 6,因此输出形状是 [6, 6, 5],表示一个6x6的特征图,有5个输出通道。

卷积核的输入通道数(in_channels)由输入图像的通道数决定,比如:一个RGB格式的图片,其输入通道数为3。

而输出矩阵的通道数(out_channels)是由卷积核的输出通道数所决定,即卷积核有多少个不同的滤波器(filter)。在这个例子中,卷积核有5个滤波器,所以输出有5个通道。

6.激活函数

并不是所有的映射关系都可以用线性关系准确表达。因此需要激活函数表示非线性映射。

激活函数也就是非线性映射。神经网络如果仅仅是由线性运算堆叠,是无法形成复杂的表达空间的,也就很难提取高语义信息,因此需要加入非线性映射关系。

(1) Sigmoid函数

零基础也能搞懂卷积神经网络原理!超详细!

零基础也能搞懂卷积神经网络原理!超详细!

Sigmoid函数将特征压缩到了(0,1)区间,0端是抑制状态,1端是激活状态,中间部分梯度最大。

(2) Relu函数

修正线性单元(Rectified Linear Unit, ReLU)。通常用于缓解梯度消失现象。

零基础也能搞懂卷积神经网络原理!超详细!

在小于0的部分,值与梯度为0,大于0导数为1,避免了Sigmoid函数中梯度接近于0导致的梯度消失问题。

零基础也能搞懂卷积神经网络原理!超详细!

(3) Softmax函数

多物体类别较为常用的分类器是Softmax函数。

在具体的分类任务中,Softmax函数的输入往往是多个类别的得分,输出则是每一个类别对应的概率,所有类别的概率取值都在0~1之间,且和为1。

Softmax函数公式如下:

零基础也能搞懂卷积神经网络原理!超详细!

其中,Vi表示第i个类别的得分,C代表分类的类别总数,输出Si为第i个类别的概率。

CNN整体结构

卷积神经网络CNN由输入层、卷积层、Relu、池化层和全连接层、输出层组成。

如下图所示是一个卷积网络示例,卷积层是卷积网络的第一层,其后跟着其它卷积层或池化层,最后一层是全连接层。越往后的层识别图像越大的部分,较早的层通常专注于简单的特征(例如颜色和边缘等)。随着图像数据在CNN中各层中前进,它开始识别物体的较大元素或形状,直到最终识别出预期的物体。

零基础也能搞懂卷积神经网络原理!超详细!

其中:

  • 输入层:接收原始图像数据,作为网络的输入。
  • 卷积层:由滤波器filters和激活函数构成,属于CNN的核心层,主要作用是提取样本特征。它由输入数据、filter(或卷积核)和特征图组成。若输入数据是RGB图像,则意味着输入将具有三个维度——高度、宽度和深度。filter的本质是一个二维权重矩阵,它将在图像的感受野中移动,检查特征是否存在。卷积的运算过程如上所述。卷积层一般要设置的超参数包括过滤器filters的数量、步长stride以及Padding的方式(valid or same)以及激活函数等。
  • 池化层:本质即就是下采样(Downsampling),利用图像局部相关性原理,对图像进行子抽样,在保留有用信息的前提下减小数据处理量,具有一定的防止模型过拟合作用。
  • 全连接层:该层的每一个结点与上一层的所有结点相连,用于将前边提取到的特征综合在一起。通常,全连接层的参数是最多的。
  • 输出层:根据全连接层的信息得到概率最大的结果。

CNN的优势

与传统神经网络相比CNN具有局部连接、权值共享等优点,使其学习的参数量大幅降低,且网络的收敛速度也更快。

  • 局部连接:特征图的每个输出值不需要连接到输入图像中的每个像素值,而只需要连接到应用过滤器filter的感受野,因此卷积层通常被称为“部分连接层”,这种特性也即是局部连接。
  • 权值共享:当卷积核在图像上移动时,其权值是不变的。即为权值共享。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
php中三维数组怎样求和
php中三维数组怎样求和

php中三维数组求和的方法:1、创建一个php示例文件;2、定义一个名为“$total”的变量,用于记录累加的结果。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

96

2024.02.23

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

549

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

44

2026.01.06

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

77

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.16

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号