跳至主要内容

什么是卷积神经网络?完整 CNN 指南

全面了解 CNN、其对图像分析的影响,以及在 CNN 与深度学习应用中防止过拟合的关键策略。
· 14分钟 阅读

使用 AI 探索

卷积神经网络支撑着当今最令人惊叹的一些 AI 能力,从智能手机的人脸识别到医学影像中的肿瘤检测。

在本教程中,我将讲解什么是 CNN、其工作原理、关键组成部分、应对过拟合的策略,以及用于构建 CNN 的主流框架。

想要亲手实践深度学习,请查看 DataCamp 的 Python 深度学习入门课程。

要点速览

  • 卷积神经网络(CNN)是一种用于图像分类、目标检测与分割等任务的深度学习架构。
  • CNN 有四个关键组成:卷积层(特征提取)、如 ReLU 的激活函数(非线性)、池化层(降维)以及全连接层(分类)。
  • 其设计灵感源自人类视觉皮层的层级结构。
  • 过拟合是主要挑战;dropout、批归一化、数据增强和提前停止等技术可帮助缓解。
  • TensorFlow、PyTorch 和 Keras 是构建 CNN 最流行的框架。

什么是卷积神经网络(CNN)?

卷积神经网络(CNN,也称为 ConvNet)是一种专门的深度学习算法,主要用于需要目标识别的任务,包括图像分类、检测与分割。CNN 被应用于多种实际场景,如自动驾驶、安全摄像系统等。

CNN 的重要性

CNN 在当今世界之所以重要,原因有以下几点:

  • CNN 与传统机器学习算法(如SVM和决策树)的区别在于其能够在大规模上自动提取特征,无需手动特征工程,从而提升效率。

  • 卷积层赋予 CNN 平移不变性,使其能够在位置、方向、尺度或平移变化下识别并提取数据中的模式与特征。

  • 多种预训练 CNN 架构(如 VGG-16、ResNet50、Inceptionv3 和 EfficientNet)已表现出顶级性能。通过微调,这些模型可在相对较少的数据下适配新任务。

  • 除了图像分类任务外,CNN 也具有通用性,可应用于自然语言处理、时间序列分析与语音识别等领域。

CNN 的灵感与人类视觉系统的相似之处

卷积神经网络的灵感来自人类视觉皮层的分层架构,以下是一些关键相似点与差异:

Illustration of the corrispondence between the areas associated with the primary visual cortex and the layers in a convolutional neural network

初级视觉皮层相关区域与卷积神经网络层之间对应关系的示意图(来源)

  • 层级架构:CNN 与视觉皮层均具层级结构,早期层提取简单特征,深层逐步构建更复杂特征,从而形成对视觉输入越来越精细的表征。
  • 局部连接:视觉皮层中的神经元只与输入的局部区域相连,而非整个视野。类似地,CNN 层中的神经元也仅通过卷积操作与输入体积的局部区域相连,这种局部连接带来高效性。
  • 平移不变性:视觉皮层神经元可在不同位置检测到特征。CNN 中的池化层通过汇总局部特征,提供一定的平移不变性。
  • 多特征图:每一阶段的视觉处理都会提取多种特征图。CNN 在每个卷积层通过多个滤波器映射来模拟这一点。
  • 非线性:视觉皮层神经元呈现非线性响应特性。CNN 通过在每次卷积后应用如 ReLU 的激活函数实现非线性。

CNN 模仿了人类视觉系统但更为简化,缺少其复杂的反馈机制,并依赖有监督学习而非无监督。尽管存在差异,它们仍推动了计算机视觉的发展。

CNN 的关键组件

卷积神经网络由四个主要部分组成。

但 CNN 如何通过这些部分进行学习?

它们帮助 CNN 模拟人脑识别图像中模式与特征的方式:

  • 卷积层
  • 线性整流单元(简称 ReLU)
  • 池化层
  • 全连接层

本节将通过手写数字分类的示例来说明这些组件各自的定义。

Architecture of the CNNs applied to digit recognition

用于数字识别的 CNN 架构(来源)

卷积层

这是 CNN 的第一个构建模块。顾名思义,其主要数学运算是卷积,即将一个滑动窗口函数应用于表示图像的像素矩阵。施加于矩阵的滑动函数称为核或滤波器,两者可互换使用。

在卷积层中,会应用多个尺寸相同的滤波器,每个滤波器用于从图像中识别某一种特定模式,例如数字的弯曲、边缘、整体形状等。

简单来说,在卷积层中,我们使用在图像上移动的小网格(称为滤波器或核)。每个小网格就像一个微型放大镜,专门寻找图中的特定模式,如直线、曲线或形状。它在图像上移动的同时,会生成一个新的网格,突出显示发现这些模式的位置。

例如,一个滤波器可能擅长找到直线,另一个则擅长发现曲线,等等。通过使用多个不同的滤波器,CNN 能较全面地把握构成图像的各种模式。

让我们考虑一张 32x32 的手写数字灰度图。矩阵中的数值仅为示意。

Illustration of the input image and its pixel representation

输入图像及其像素表示示意

同时,设想用于卷积的核为 3x3 矩阵。核中每个元素的权重在网格中表示。权重为 0 的用黑格表示,权重为 1 的用白格表示。

这些权重要我们手动寻找吗?

在实际中,核的权重在神经网络的训练过程中确定。

利用这两个矩阵,我们可以通过点积执行卷积操作,步骤如下:

  1. 将核矩阵从左上角开始向右滑动。
  2. 进行元素逐位相乘。
  3. 对乘积求和。
  4. 所得值对应于卷积后矩阵的第一个值(左上角)。
  5. 按照滑动步幅向下移动核。
  6. 重复步骤 1 至 5,直到覆盖完整个图像矩阵。

卷积后矩阵的尺寸取决于滑动窗口(步幅)的大小。步幅越大,输出尺寸越小。

Application of the convolution task using a stride of 1 with 3x3 kernel

使用 3x3 核、步幅为 1 的卷积示意

文献中与核相关的另一个名称是特征检测器,因为其权重可被微调,以检测输入图像中的特定特征。

例如:

  • 对邻域像素求平均的核可用于模糊输入图像。
  • 邻域差分的核用于边缘检测。

网络的卷积层越多,越能检测到更抽象的特征。

激活函数

每次卷积之后都会应用ReLU 激活函数。该函数有助于网络学习图像特征之间的非线性关系,从而更稳健地识别不同模式,同时也有助于缓解梯度消失问题。

池化层

池化层旨在从卷积后的特征图中提取最重要的特征。其通过应用某些聚合操作来减小特征图(卷积矩阵)的尺寸,从而在训练时降低内存占用。池化对于缓解过拟合也很有帮助。

常见的聚合函数包括:

  • 最大池化:取特征图中的最大值
  • 求和池化:对应特征图所有值的总和
  • 平均池化:取所有值的平均数

下面是上述每种方式的示意:

Application of max pooling with a stride of 2 using 2x2 filter

使用 2x2 滤波器、步幅为 2 的最大池化示意

同时,随着池化函数的应用,特征图的尺寸会变小。

最后一个池化层会将其特征图展平,以便由全连接层处理。

全连接层

这些层位于卷积神经网络的末端,其输入对应于由最后一个池化层生成的一维展平特征。为引入非线性,将对其应用 ReLU 激活函数。

最后,使用 softmax 预测层为每个可能的输出标签生成概率值,最终预测的标签为概率最高者。

CNN 的过拟合与正则化

过拟合是机器学习模型与 CNN 深度学习项目中的常见挑战。它发生在模型“背熟”了训练数据(包括其噪声与离群点)时。这样学习会导致模型在训练数据上表现良好,但在新的、未见过的数据上表现不佳。

当模型在训练集上的准确率显著高于验证或测试集时即可观察到此现象,下面给出了图示:

Underfitting Vs. Overfitting

欠拟合 vs. 过拟合

深度学习模型,尤其是卷积神经网络(CNN),由于具备高复杂度并能从大规模数据中学习到细节模式,因而尤为易受过拟合影响。

为缓解 CNN 的过拟合,可采用多种正则化技术,部分如下图所示:

7 strategies to mitigate overfitting in CNNs

缓解 CNN 过拟合的 7 种策略

  • Dropout:在训练过程中随机丢弃部分神经元,迫使其余神经元从输入数据中学习新的特征。
  • 批归一化:通过调整与缩放激活值来归一化输入层,在一定程度上降低过拟合,同时用于加速并稳定训练过程。
  • 池化层:用于减小输入图像的空间维度,为模型提供抽象表征,从而降低过拟合的可能性。
  • 提前停止:在训练过程中持续监控模型在验证数据上的表现,一旦验证误差不再改善即停止训练。
  • 噪声注入:在训练时向输入或隐藏层的输出加入噪声,使模型更稳健,避免泛化能力薄弱。
  • L1 与 L2 正则化:二者均基于权重大小向损失函数添加惩罚项。具体而言,L1 鼓励权重稀疏,有利于特征选择;L2(也称权重衰减)鼓励权重更小,防止其对预测产生过大影响。
  • 数据增强:通过对输入图像施加随机变换(如旋转、缩放、翻转或裁剪)来人为扩增训练数据集的规模与多样性。

CNN 的实际应用

卷积神经网络革新了计算机视觉领域,推动了众多现实应用的重大进展。以下是其应用的一些示例。

Some practical applications of CNNs

CNN 的部分实际应用

  • 图像分类:卷积神经网络用于图像归类,将图像分配到预定义类别。社交媒体平台中的自动照片整理即是此类应用。
  • 目标检测:CNN 能在一张图像中识别并定位多个目标。在零售货架扫描等多种场景中,此能力对于识别缺货商品至关重要。
  • 人脸识别:这也是 CNN 的主要应用行业之一。例如,该技术可嵌入安防系统中,基于面部特征高效进行门禁控制。

若想更动手的实现,请参阅我们的使用 TensorFlow 的卷积神经网络(CNN)教程,学习如何在 Python 中用 TensorFlow 2 构建与实现 CNN。

常见 CNN 架构

多年来,研究人员不断提出更强大的 CNN 架构。以下是一些最具影响力的架构:

  • LeNet-5(1998):最早的 CNN 之一,为手写数字识别而设计。
  • AlexNet(2012):赢得 ImageNet 比赛,普及了使用 GPU 训练的深层 CNN。
  • VGGNet(2014):证明了更深的网络与小型 3x3 滤波器可提升准确率。
  • GoogLeNet/Inception(2014):引入并行滤波器尺寸的 Inception 模块,实现多尺度特征提取。
  • ResNet(2015):引入残差连接,使得训练 100 层以上的网络成为可能。
  • EfficientNet(2019):使用复合缩放在网络深度、宽度与分辨率间取得平衡。
  • ConvNeXt(2022):现代化的 CNN 设计,可与视觉 Transformer 竞争。

尽管自 2020 年以来视觉 Transformer(ViT)崛起为强有力的替代方案,CNN 仍因其高效性、较低的数据需求以及在生产环境中的成熟度而被广泛使用。

用于 CNN 的深度学习框架

深度学习的快速发展主要得益于 TensorFlow、Pytorch 和 Keras 等强大框架,它们让训练卷积神经网络和其他深度学习模型更为容易。

下面简要概览各个框架。

TensorFlow

TensorFlow 是 Google 于 2015 年发布的开源深度学习框架,提供一系列用于机器学习开发与部署的工具。我们的深度神经网络入门完整介绍了深度神经网络及其在现代人工智能深度学习领域的重要性,并包含使用 TensorFlow 的真实案例实现。

Keras

Keras 是 Python 中的高层神经网络框架,支持快速试验与开发。它是开源项目,自 2.0 版本起成为 TensorFlow 官方高层 API,简化了在 TensorFlow 生态中的模型开发。我们的课程使用 Keras 进行 Python 图像处理,将通过构建、训练与评估卷积神经网络,教您如何使用 Keras 在 Python 中进行图像分析。

PyTorch

由 Meta(原 Facebook)AI Research 于 2017 年发布,PyTorch 是通用深度学习框架,以其动态计算图、Python 风格语法与强大的研究社区而闻名。若您想深入自然语言处理,我们的PyTorch 自然语言处理:全面指南是绝佳的起点。

每个项目各不相同,因此选择取决于特定用例最重要的特性。为便于决策,下面的表格对这些框架进行了简要比较,突出其独特特性。

 

Tensorflow

Pytorch

Keras

API 等级

二者皆有

(高层与低层)

低层

高层

架构

不太易用

Python 风格,语法直观

简单、精炼、可读性强

数据集

大型数据集,高性能

大型数据集,高性能

较小数据集

调试

调试较困难

良好的调试能力

网络简单,较少需要调试

预训练模型?

有

有

有

流行度

三者中第二受欢迎

研究领域最广泛采用,且在生产中日益增多

已集成为 TensorFlow 官方高层 API

速度

快速,高性能

快速,高性能

与 TensorFlow 相同(运行于 TF 后端)

实现语言

C++、CUDA、Python

C++、Python

Python

Tensorflow、Pytorch 与 Keras 的对比表(来源)

结语

本文全面介绍了深度学习中的 CNN,以及它们在图像识别与分类任务中的关键作用。

文章首先强调了 CNN 的设计灵感来自人类视觉系统,随后探讨了使这些网络能够学习并进行预测的关键组件。

同时指出过拟合是影响 CNN 泛化能力的重要挑战。为缓解这一问题,文中概述了多种相关策略,以降低过拟合并提升 CNN 的整体表现。

最后,文章提及了几大主流深度学习 CNN 框架,并介绍了各自的独特特性及相互比较。

渴望进一步踏入 AI 与机器学习的世界?立即报名参加PyTorch 深度学习课程,升级您的专业能力。

Zoumana Keita

作者

Zoumana Keita

一位多才多艺、乐于分享知识并回馈他人的数据科学家。Zoumana 是 YouTube 内容创作者,也是 Medium 上的顶尖科技写作者。他热爱演讲、编程与教学。Zoumana 拥有两个硕士学位:其一是在法国巴黎获得的计算机科学硕士,专注于机器学习;其二是在美国德州理工大学获得的数据科学硕士。他的职业生涯始于法国 Groupe OPEN 的软件开发工程师,随后加入 IBM 担任机器学习顾问,为保险公司构建端到端的 AI 解决方案。之后,Zoumana 加入了 Axionable——一家总部位于巴黎与蒙特利尔的首家“可持续 AI”初创公司。在那里,他担任数据科学家,为来自法国、蒙特利尔、新加坡和瑞士的客户交付 AI 产品,主要聚焦 NLP 场景。此外,他将 5% 的时间投入到研发工作。目前,他在 IFC(世界银行集团)担任高级数据科学家。

CNN 常见问题

CNN 与常规神经网络有什么区别?

常规(全连接)神经网络会将每个神经元与下一层的每个神经元相连,对于图像数据而言计算代价高。CNN 使用卷积层将小型滤波器应用于输入的局部区域,大幅减少参数数量,同时保留空间关系。这使得 CNN 在与图像相关的任务上更加高效且效果更好。

最常见的 CNN 架构有哪些?

最具影响力的 CNN 架构包括 LeNet-5(1998)、AlexNet(2012)、VGGNet(2014)、ResNet(2015)与 EfficientNet(2019)。更近一些的 ConvNeXt(2022)通过现代化的 CNN 方法与视觉 Transformer 竞争。每种架构都引入了关键创新,例如跳跃连接(ResNet)或复合缩放(EfficientNet)。

2026 年 CNN 仍然重要吗?

是的,到了 2026 年 CNN 仍然非常重要。尽管视觉 Transformer(ViT)在部分任务上越来越流行,但在许多生产环境中,CNN 仍因其计算高效、对有限训练数据表现出色以及成熟的部署流程而更受青睐。诸如 ConvNeXt 等现代架构显示,在采用更新的训练技术时,CNN 可与 Transformer 匹敌。

在构建 CNN 时,如何在 TensorFlow、PyTorch 和 Keras 之间做选择?

PyTorch 因其 Python 风格语法与动态计算图而最受研究与快速原型开发青睐。TensorFlow 在生产部署方面表现出色,配有 TensorFlow Serving 与用于移动端的 TensorFlow Lite 等工具。Keras 现已作为 TensorFlow 的官方高层 API,非常适合希望用最少代码来构建与训练 CNN 的初学者。

CNN 中池化层的作用是什么?

池化层在保留最重要信息的同时,缩减特征图的空间维度(高度与宽度)。这有三大作用:通过减少参数数量来降低计算成本;提供一定的平移不变性(无论特征的精确位置在哪里都能识别);并通过提供更抽象的输入表示来防止过拟合。

主题