本文深入解析计算机视觉中的卷积神经网络(Convolutional Neural Network, CNN),涵盖卷积运算、边缘检测、卷积核参数学习、填充与步长等核心概念,并阐述其在缓解过拟合问题上的显著优势。文章系统性地探讨了卷积层与池化层的结构设计、特征提取的关键作用,并结合实际案例展示了特征图的演变过程,帮助读者全面理解卷积神经网络的工作原理。
在这里插入图片描述
以下内容整合自网络资料,仅供个人学习参考!
一、计算机视觉概述
在这里插入图片描述
如果输入层与隐藏层依旧采用全连接网络架构,庞大的参数规模不仅容易引发过拟合问题,还会对内存存储造成巨大压力。
在这里插入图片描述
那么如何解决这一困境?答案正是——卷积神经网络。
二、卷积神经网络详解
2.1:卷积运算
卷积运算是构建卷积神经网络的基础单元之一。
我们不妨从边缘检测(edge detection)这一经典任务入手,通过具体实例来认识卷积神经网络的工作方式。
在这里插入图片描述
通过上述卷积运算,我们能够有效检测出图像的边缘信息:中间的3×3矩阵被称为过滤器、边缘检测器或卷积核。
在这里插入图片描述
接下来探讨如何将这种卷积运算作为基本单元,应用到完整的卷积神经网络中。
正边缘和负边缘:由亮变暗与由暗变亮
在这里插入图片描述
其他边缘检测器(卷积核)
在这里插入图片描述
如何让算法自主学会边缘检测器?
与其像传统计算机视觉方法那样手动设计滤波器,不如让卷积神经网络自行学习。原理十分直观:将卷积核中的数值视为可训练参数,借助反向传播(back propagation)算法进行优化。
在这里插入图片描述
这样学习得到的卷积核,往往比人工精心设计的滤波器更加稳健且泛化能力更强。
在深入讲解如何通过反向传播学习这9个参数之前,有必要先了解卷积计算底层架构中两个至关重要的组成部分:填充(padding)与步长(stride)。
2.1.1:填充(padding)
先观察不对图像进行填充的情况:
n×n的图像与f×f的卷积核进行卷积,输出结果尺寸为 (n-f+1) × (n-f+1)。
在这里插入图片描述
这种卷积方式存在两个明显缺陷:
- shrinky output:卷积结果比原图小,每经过一层,图像尺寸就会缩减,深层网络中最终图像会变得非常小。
- throw away info from the edge:边缘像素被利用的次数远少于中间像素,导致大量边缘信息丢失。
在这里插入图片描述
为了解决上述问题,可以采用填充(padding)策略,对原始图像进行像素扩展。
在这里插入图片描述
总结而言,上面涉及两种常用的卷积模式:
- valid convolutions:不对原始图像进行任何填充。
- same convolutions:填充后确保卷积结果与原始图像尺寸保持一致。
在这里插入图片描述
对于Same convolutions,通常要求卷积核尺寸f为奇数,这样可保证 p = (f-1)/2,从而使输出大小与输入一致。这一特性解释了为何3×3和5×5的卷积核在工程中最为常见。另一个原因在于:奇数大小的卷积核具有明确的中心像素点,该中心在卷积过程中扮演关键角色(可以思考若使用偶数核,卷积操作应如何进行?),这已成为计算机视觉领域的惯例。
2.1.2:步长(stride)
前述示例默认步长为1,实际应用中可以灵活设定。步长不同,卷积结果也会随之变化。下图展示了步长为2时的卷积示例:
在这里插入图片描述
总结通用公式(注意向下取整的含义在于保证卷积核始终位于原图像填充后的有效范围内,不能超出边界):
在这里插入图片描述
2.1.3:交叉相关(cross-correlation)
这一概念可作为知识补充。在数字信号处理中,图像卷积原本需要将卷积核翻转后再执行元素相乘相加操作。然而在计算机视觉领域,通常省略翻转步骤,直接进行乘加运算。从数学角度看,这属于交叉相关(cross-correlation),但在深度学习文献中,大家仍习惯称之为卷积(convolutions)。
在这里插入图片描述
2.1.4:三维卷积
此前讨论均针对二维图像(灰度图)的二维卷积。对于RGB等三维彩色图像,则需要采用三维卷积。
在这里插入图片描述
不过你可能产生疑问:这样得到的结果仍然是二维的,其意义何在?
如下图所示,通过设置3D卷积核不同通道的参数值,我们可以仅检测红色通道的边缘(其他通道参数设为0),或者将三个通道的参数设为相同值——即使输入为RGB图像,也无需先转换为灰度图再卷积,效果完全相同。
在这里插入图片描述
另一个问题是:此前我们只检测了一种边缘——垂直方向。若想同时检测多种边缘(例如水平和垂直方向),就需要使用多个检测器,即多个3D卷积核。注意,卷积结果第三维度的大小正是所使用3D卷积核的数量。
在这里插入图片描述
2.2:卷积网络的一层
对卷积结果的每个元素加入偏差b,再执行非线性变换,然后将多个3D卷积核的输出整合起来,就得到4×4×2的一层卷积网络输出。
在这里插入图片描述
2.2.1:与传统神经网络的对比
实际上,两者的处理流程本质相同:先执行线性运算(输入a0与参数W相乘相加,再加偏差b),然后通过激活函数进行非线性变换。

在上述例子中,共有2个3D卷积核,即提取了2个特征(features)。卷积核的数量对应特征数量,这是理解卷积神经网络底层原理的关键。
现在回到最初的问题:为什么全连接网络容易过拟合,而卷积网络能够避免?
无论输入图像尺寸多大,卷积层需要训练的参数数量始终是固定的——例如 (27+1)×10。因此,卷积神经网络天生不易过拟合。
在这里插入图片描述
2.2.2:符号汇总(Summary of notations)
在这里插入图片描述
2.3:卷积神经网络简单实例
如图所示,经过若干卷积层处理后,最终将卷积结果展平(flatten),送入全连接神经网络,借助逻辑回归或Softmax进行分类。
在这里插入图片描述
可以观察到:输入图像通常较大,但随着网络加深,图像尺寸逐渐减小,而通道数则逐步增加。
2.3.1:超参数(hyperparameter)
图中箭头下方标注的参数(滤波器个数、步长、填充方式等)统称为超参数。设计卷积神经网络时,选择和调整这些超参数是最主要的工作。
2.3.2:网络组成
一个典型的卷积神经网络由三部分组成:
- 卷积层
- 池化层
- 全连接层
在这里插入图片描述
2.3.3:卷积层的多层叠加
前面提到,随着层数加深,通道数增大、图像尺寸减小。这样做的好处是:即使每层采用较小的卷积核(如3×3),也能通过叠加足够多的卷积层获得更大的感受野,最终覆盖整张图片。这正是多层卷积叠加的核心原因。
打个比方:假设我们在训练一个面部识别的卷积网络。第一层可能仅识别边缘和颜色;第二层学会将这些元素组合成更简单的形状(如眼睛、鼻子);第三层则将简单形状组合成更复杂的面部特征。显然,越深的层越能将低级特征逐步组合为高级且有意义的语义特征。
那么,感受野具体指什么?
2.3.4:感受野(Receptive Field)
感受野是一个非常重要的概念。它描述了不同feature maps A与B上神经元之间的关联:假设从A经过若干操作得到B,则B上的某个区域areaB仅与A上的特定区域areaA相关,这个areaA就是areaB的感受野。
在这里插入图片描述
上图中,map3里1×1的区域对应map2的感受野是红色7×7区域,而map2里7×7区域对应map1的感受野是蓝色11×11区域。因此,map3中1×1的区域对应map1的感受野即为蓝色11×11区域。
2.4:池化层
先看两种池化操作的示例:
在这里插入图片描述
在这里插入图片描述
2.4.1:原理
池化操作主要发挥以下作用:
- 减轻计算负担
- 增加感受野
- 防止过拟合
吴恩达老师曾指出,池化操作背后深层的理论有时难以完全阐明,本质上是因为实验效果优异,可以直接添加使用。
从直观上理解也是可行的:图像本身存在大量冗余信息,用4个像素表示的特征完全可以由1个像素代替。对原始图像进行最大值或均值采样(即池化),能够更有效地提取关键特征。既然效果显著,为何不用呢?
这一操作的直观感知就像:你游览了一处独特风景,过段时间可能记不清每个细节,但一定记得那里很美。这个“美”的概念,就类似于池化后保留的核心特征。
补充一点:AlphaGo背后的算法同样采用了卷积神经网络,但仅包含卷积层而未使用池化层。这是因为棋盘上每个像素点都至关重要,不能为了减轻计算负担而随意舍弃。这也是理解池化作用的一个反面案例。
2.4.2:总结
需要注意两点:
- 池化层的超参数由人工设定,无需通过训练学习。
- 最大值和平均值采样是独立作用于输入每个通道的。池化结果的通道数与输入的通道数相同。
在这里插入图片描述
2.5:完整的卷积神经网络示例
在这里插入图片描述
在这里插入图片描述
需要明确以下几点:
- 池化层不包含任何需要学习的参数。
- 卷积层的参数数量通常呈下降趋势。
- 绝大多数参数位于全连接神经网络中。
2.6:卷积神经网络的原理
前面一直在介绍卷积神经网络是什么以及由什么组成,但更重要的是理解其背后的原因——为什么卷积神经网络能够有效工作?(虽然开篇已对比了全连接与卷积的差异,说明了采用卷积的原因,但这只是其中一个方面。)
首先需要明确:卷积神经网络本质上是计算机视觉领域的深度学习技术。在传统机器学习中,通过输入数据即可良好地完成分类或回归任务。计算机视觉与深度学习结合后,基本原理并未改变,不同之处在于输入的数据形态——这正是为什么需要引入卷积层,而不能直接使用全连接层来处理图像数据的原因。
例如之前预测房价时,输入的是房屋面积、房龄等基础单特征。但对于计算机而言,一张图片只是一个三维或二维矩阵,本身不包含任何语义特征信息。换句话说,直接将像素点作为特征输入全连接网络,这样的特征难以利用、复用和比较。而卷积层的作用正是提取特征——提取那些有用且可复用的局部特征。通过卷积层完成特征提取后,再接入全连接层,后者就能像传统神经网络一样工作:对特征信息进行处理并做出预测。一言以蔽之:卷积神经网络识别图像的第一步,就是利用卷积层提取图像的局部特征。
在这里插入图片描述
在这里插入图片描述
总结:
所谓的“卷积操作”,可以简单理解为一个滤波过程:在图像上不断滑动窗口,将局部像素值通过特定运算(运算参数即网络需要学习的内容)计算出一个新值,该值代表了该区域某种特征的响应强度。
OK,现在理解了卷积的作用——提取图像中的特征信息。那么问题进一步聚焦为:卷积为什么能够提取特征?提取的特征是什么形式?为何这种方式有效?
2.6.1:特征提取
从上面的卷积操作以及下方卷积结果可以直观感受到:卷积确实能够提取特征。例如使用垂直卷积核和水平卷积核,就能分别提取图像中的垂直边缘和水平边缘信息。
至此我们明确两点:
- 卷积操作确实可以提取局部特征。
- 不同的特征需要不同的卷积核(而在神经网络中,卷积核参数无需手动设计,网络会自行学习)。
在这里插入图片描述
至于卷积操作能够提取特征背后的本质,以及卷积核扮演的具体角色,需要了解下面将要介绍的内容:傅里叶变换与加窗傅里叶变换。
2.6.2:加窗傅里叶变换
卷积的本质是二维的加窗傅里叶变换。学过信号与系统的读者对傅里叶变换应不陌生。这里的卷积核类似于傅里叶基,通过卷积核对二维图像进行加窗傅里叶变换,本质上是在提取图像中与卷积核相似的特征信息——换句话说,如果图像局部区域与卷积核所表达的特征相似,那么卷积得到的中心像素值就越大,说明此处存在该特征。
在这里插入图片描述
下面是一个生动的例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这也解释了为什么吴恩达老师指出:有几个卷积核,就有几个特征的含义。
在这里插入图片描述
需要注意的是,不像上图中那些规则的卷积核,神经网络中的卷积核参数由反向传播学习得到,其具体形态需待训练结束后才可知。
在这里插入图片描述
在这里插入图片描述
例如下面识别字母X的例子。假设一开始卷积核模板已学习得到或设计好,即以下三个特征。
在这里插入图片描述
当用相应模板对图像进行卷积时,与模板特征匹配度越高,中心像素点的值就越高——本质上是在这个位置捕捉到了该卷积核对应的特征。
在这里插入图片描述
然后像之前一样,用过滤器对原图像分别卷积一遍,得到3个feature map。
在这里插入图片描述
思考:这样得到的特征信息包含两个方面:
- 这个位置存在什么特征
- 这个特征存在的位置
结合“位置”与“特征”这两个信息,将其展平(不会丢失信息),输入全连接神经网络,网络便开始工作,像传统神经网络那样进行预测。
当然,上面这个例子过于简化,仅有一层。多层网络和池化的原理之前已经介绍过,本质仍是为了获得更大的感受野并减轻计算负担,底层逻辑完全相同。
因此,常说卷积神经网络能够自主学习特征,归根结底,就是通过反向传播来学习这些卷积核中的参数。
2.6.3:卷积神经网络特征图可视化
接下来对feature map进行可视化,以便更深入理解:
定义了一个4层卷积网络,每层分别包含9个卷积、ReLU激活和不同尺度的池化,所有系数均为随机初始化。
输入原图:
在这里插入图片描述
第一层卷积后可视化的特征图:
在这里插入图片描述
第二层卷积后可视化的特征图:
在这里插入图片描述
第三层卷积后可视化的特征图:
在这里插入图片描述
第四层卷积后可视化的特征图:
在这里插入图片描述
从不同层可视化的特征图中可以总结出一些规律:
- 浅层网络提取的是纹理、细节特征。
- 深层网络提取的是轮廓、形状及最强特征(如猫的眼睛区域)——或者说是前面特征叠加效果的通用最强特征(个人直觉)。单独查看某一层的特征似乎难以解释,但最终得到的特征图建立在前多个卷积核共同作用的基础之上。
- 浅层网络包含更多特征,也具备提取关键特征的能力(如第一组特征图中的第4张,提取出的是猫眼睛特征)。
- 相对而言,网络层数越深,提取的特征越具有代表性。
- 图像的分辨率随层数加深而逐渐减小。
在这里插入图片描述
以上内容结合了多篇视频与文章资料的学习、整合,并融入了个人理解。限于水平,若有不当之处,欢迎在评论区讨论与指正!
