卷积神经网络Convolutional Neural Networks (CNNs)是什么
卷积神经网络 (CNN),也称为 ConvNet,是一种专门的深度学习算法,主要用于需要对象识别的任务,包括图像分类、检测和分割。CNN 可用于各种实际场景,例如自动驾驶汽车、安全摄像头系统等。
CNN 的重要性
CNN 在现代世界中如此重要的原因有几个,如下所述:
- CNN 与SVM和决策树等经典机器学习算法的区别在于,它能够大规模自主提取特征,从而无需进行手动特征工程,从而提高效率。
- 卷积层赋予 CNN 平移不变的特性,使其能够从数据中识别和提取模式和特征,而不受位置、方向、尺度或平移变化的影响。
- 各种预训练的 CNN 架构(包括 VGG-16、ResNet50、Inceptionv3 和 EfficientNet)都表现出了顶级性能。这些模型可以通过微调过程适应数据相对较少的新任务。
- 除了图像分类任务之外,CNN 还具有多种用途,可应用于一系列其他领域,例如自然语言处理、时间序列分析和语音识别。
CNN 背后的灵感以及与人类视觉系统的相似之处
卷积神经网络受到人类视觉皮层分层结构的启发,以下是一些主要的相同点和不同点:

与初级视觉皮层相关的区域与卷积神经网络中各层之间的对应关系图(来源)
- 层次结构: CNN 和视觉皮层都具有层次结构,在早期层中提取简单特征,在更深层构建更复杂的特征。这允许对视觉输入进行越来越复杂的表示。
- 局部连接:视觉皮层中的神经元仅连接到输入的局部区域,而不是整个视野。同样,CNN 层中的神经元仅通过卷积运算连接到输入体积的局部区域。这种局部连接可以提高效率。
- 平移不变性:无论特征在视野中的什么位置,视觉皮层神经元都可以检测这些特征。CNN 中的池化层通过汇总局部特征来提供一定程度的平移不变性。
- 多个特征图:在视觉处理的每个阶段,都会提取许多不同的特征图。CNN 通过每个卷积层中的多个滤波器图来模拟这种情况。
- 非线性:视觉皮层中的神经元表现出非线性响应特性。CNN 通过每次卷积后应用 ReLU 等激活函数实现非线性。
CNN 模仿人类的视觉系统,但更简单,缺乏复杂的反馈机制,并且依赖于监督学习而不是无监督学习,尽管存在这些差异,但它仍然推动了计算机视觉的进步。
CNN 的关键组件
卷积神经网络由四个主要部分组成。
但是 CNN 如何利用这些部分进行学习呢?
它们帮助 CNN 模仿人类大脑的运作方式来识别图像中的模式和特征:
- 卷积层
- 整流线性单元(简称ReLU)
- 池化层
- 全连接层
本节通过以下手写数字分类的示例深入探讨每个组件的定义。

应用于数字识别的 CNN 架构(来源)
卷积层
这是 CNN 的第一个构建块。顾名思义,它执行的主要数学任务称为卷积,即将滑动窗口函数应用于表示图像的像素矩阵。应用于矩阵的滑动函数称为核或过滤器,两者可以互换使用。
在卷积层中,应用了几个大小相同的过滤器,每个过滤器用于从图像中识别特定的模式,例如数字的弯曲、边缘、数字的整体形状等等。
简单来说,在卷积层中,我们使用在图像上移动的小网格(称为过滤器或内核)。每个小网格就像一个迷你放大镜,用于在照片中寻找特定图案,如线条、曲线或形状。当它在照片上移动时,它会创建一个新的网格,突出显示找到这些图案的位置。
例如,一个过滤器可能擅长寻找直线,另一个过滤器可能擅长寻找曲线,等等。通过使用多个不同的过滤器,CNN 可以很好地了解构成图像的所有不同模式。
让我们考虑一下这张 32×32 的手写数字灰度图像。矩阵中的值仅用于说明目的。

输入图像及其像素表示的图示
另外,让我们考虑用于卷积的核。它是一个尺寸为 3×3 的矩阵。核的每个元素的权重都表示在网格中。零权重表示在黑色网格中,一权重表示在白色网格中。
我们必须手动找到这些权重吗?
在现实生活中,核的权重是在神经网络的训练过程中确定的。
利用这两个矩阵,我们可以通过应用点积来执行卷积运算,其工作原理如下:
- 从左上角到右角应用核矩阵。
- 执行逐元素乘法。
- 将产品的值相加。
- 结果值对应于卷积矩阵中的第一个值(左上角)。
- 根据滑动窗口的大小将内核向下移动。
- 重复步骤 1 至 5,直到图像矩阵完全覆盖。
卷积矩阵的维度取决于滑动窗口的大小,滑动窗口越高,维度越小。

使用步长为 1 且内核为 3×3 的卷积任务的应用
文献中与内核相关的另一个名称是特征检测器,因为可以对权重进行微调以检测输入图像中的特定特征。
例如:
- 平均相邻像素核可用于模糊输入图像。
- 减去邻近核用于执行边缘检测。
网络的卷积层越多,该层检测抽象特征的能力就越强。
激活函数
每次卷积操作后都会应用 ReLU 激活函数。该函数可帮助网络学习图像中特征之间的非线性关系,从而使网络在识别不同模式方面更加稳健。它还有助于缓解梯度消失问题。
池化层
池化层的目标是从卷积矩阵中提取最重要的特征。这是通过应用一些聚合操作来实现的,这些操作会降低特征图(卷积矩阵)的维度,从而减少训练网络时使用的内存。池化对于缓解过度拟合也很重要。
可以应用的最常见聚合函数是:
- 最大池化,即特征图的最大值
- Sum Pooling 对应于特征图所有值的总和
- 平均池化是所有值的平均值。
下面是前面每个例子的说明:

使用 2×2 过滤器,应用步长为 2 的最大池化
此外,随着池化函数的应用,特征图的维度变得更小。
最后的池化层将其特征图展平,以便能够由全连接层进行处理。
全连接层
这些层位于卷积神经网络的最后一层,它们的输入对应于由最后一个池化层生成的扁平一维矩阵。ReLU 激活函数应用于它们以实现非线性。
最后,使用softmax预测层为每个可能的输出标签生成概率值,最终预测的标签是概率得分最高的标签。
CNN 中的过度拟合和正则化
过度拟合是机器学习模型和 CNN 深度学习项目中常见的挑战。当模型对训练数据学习得太好(“死记硬背”),包括其噪音和异常值时,就会发生这种情况。这样的学习会导致模型在训练数据上表现良好,但在新的、未见过的数据上表现不佳。
当训练数据上的性能与验证或测试数据上的性能相比太低时,可以观察到这种情况,如下所示:

欠拟合与过拟合
深度学习模型,尤其是卷积神经网络(CNN),由于其高复杂度和在大规模数据中学习详细模式的能力而特别容易出现过度拟合。
可以采用多种正则化技术来减轻 CNN 中的过度拟合,其中一些如下所示:

缓解 CNN 过拟合的 7 种策略
- 丢弃:这包括在训练过程中随机丢弃一些神经元,迫使剩余的神经元从输入数据中学习新特征。
- 批量标准化:通过调整和缩放激活来标准化输入层,在一定程度上减少了过度拟合。这种方法也用于加速和稳定训练过程。
- 池化层:可用于减少输入图像的空间维度,为模型提供抽象的表示形式,从而减少过度拟合的机会。
- 早期停止:这包括在训练过程中持续监控模型在验证数据上的性能,并在验证错误不再改善时停止训练。
- 噪声注入:此过程包括在训练期间向隐藏层的输入或输出添加噪声,以使模型更加稳健并防止其泛化能力弱。
- L1 和 L2 归一化: L1 和 L2 均用于根据权重的大小对损失函数添加惩罚。更具体地说,L1 鼓励权重保持较少,从而实现更好的特征选择。另一方面,L2(也称为权重衰减)鼓励权重保持较小,从而防止它们对预测产生太大影响。
- 数据增强:这是通过对输入图像应用旋转、缩放、翻转或裁剪等随机变换来人为增加训练数据集的大小和多样性的过程。
CNN 的实际应用
卷积神经网络彻底改变了计算机视觉领域,为许多实际应用带来了重大进步。以下是一些应用示例。

CNN 的一些实际应用
- 图像分类:卷积神经网络用于图像分类,将图像分配到预定义的类别中。这种场景的一个用途是在社交媒体平台上自动组织照片。
- 物体检测: CNN 能够识别和定位图像中的多个物体。此功能在零售业货架扫描识别缺货商品的多种场景中至关重要。
- 面部识别:这也是 CNN 应用的主要行业之一。例如,该技术可以嵌入到安全系统中,以便根据面部特征有效地控制访问。
CNN 的深度学习框架
深度学习的快速增长主要归功于 Tensorflow、Pytorch 和 Keras 等强大的框架,它们使得训练卷积神经网络和其他深度学习模型变得更加容易。
让我们简单概述一下每个框架。

Tensorflow、Keras 和 Pytorch 徽标
Tensorflow
TensorFlow 是 Google 开发并于 2015 年发布的开源深度学习框架。它提供了一系列用于机器学习开发和部署的工具。
Keras
Keras 是 Python 中的高级神经网络框架,可实现快速实验和开发。它是开源的,可以在 TensorFlow、CNTK 和 Theano 等其他框架中使用。
Pytorch
它由 Facebook 的 AI 研究部门于 2017 年发布,专为自然语言处理应用而设计,以其动态计算图和内存效率而闻名。如果您有兴趣深入研究自然语言处理,
每个项目都不同,因此决策实际上取决于对于给定用例来说哪些特性最重要。为了帮助您做出更好的决策,下表对这些框架进行了简要比较,重点介绍了它们的独特功能。
Tensorflow | Pytorch | Keras | |
API 级别 | 两个都(高和低) | 低的 | 高的 |
建筑学 | 不易使用 | 复杂,可读性较差 | 简单、简洁、可读 |
数据集 | 大数据集、高性能 | 大数据集、高性能 | 较小的数据集 |
调试 | 调试困难 | 良好的调试能力 | 网络简单,因此不需要经常调试 |
预训练模型? | 是的 | 是的 | 是的 |
受欢迎程度 | 三者中第二受欢迎的 | 最受欢迎的三者之一 | 最受欢迎的三款 |
速度 | 快速、高性能 | 快速、高性能 | 速度慢,性能低 |
写于 | C++、CUDA、Python | Lua | Python |
Tensorflow、Pytorch 和 Keras 的比较表(来源)
结论
本文全面概述了深度学习中的 CNN 是什么,以及它 在图像识别和分类任务中的关键作用。
它首先强调了从人类视觉系统中汲取的 CNN 设计灵感,然后探讨了允许这些网络学习和进行预测的关键组件。
过度拟合问题被认为是 CNN 泛化能力面临的重大挑战。为了缓解这一问题,概述了各种相关策略来缓解过度拟合并提高 CNN 的整体性能。