卷积神经网络 CNN 的架构解析入门

1. 卷积神经网络 CNN 的架构解析入门

1.1. 引言

本文基于对网络资料的学习,对一个简单的卷积神经网络 CNN 的架构、数据计算和传递流程进行详细的解析和总结,作为理解卷积神经网络架构的基础。

卷积神经网络 CNN 架构各个网络层的设计中,最典型的特征就是在经典的神经网络结构中增加了卷积层池化层
关于 CNN 的卷积和池化层的运算逻辑与流程,在 详细解释卷积神经网络中的卷积与池化计算 一文中有详细总结。

1.2. 卷积神经网络 CNN 的整体架构设计

对于计算机视觉图像识别图像目标检测等领域的人工智能开发而言,卷积神经网络 CNN 几乎是一个绕不开的话题。
因此,要了解这些领域的 AI 模型算法及参数训练,首先需要对卷积神经网络的整体架构设计、各个层次的作用以及数据计算与传递的流程有清楚的理解。

下图是一个典型的基于卷积神经网络的图像识别模型:图像从左侧的输入层输入,通过一系列处理以后,在输出层以识别概率的方式输出结果。

典型的卷积神经网络图像识别模型架构

从整体的网络结构上可以看到,以上的整个网络可以分为两个部分:特征提取部分和图像分类部分

特征提取部分的结构非常有规律,二维图像从输入层输入以后,进行卷积计算(Convolution),然后把卷积计算的结果再用激活函数 ReLU 进行处理,然后进行池化操作(Pooling);池化后反复进行多次卷积 → ReLU 激活 → 池化…直到最后通过Flatten 操作把多维向量转换为一维向量进行后续的分类操作。

图像分类部分基于特征提取部分提取并经过 Flatten 操作转换后的一维特征向量,以多个全连接层的方式实现图像分类任务,最终以 Softmax 作为最后输出层的激活函数,输出图像分类的概率识别结果。

相比于普通的全连接层的神经网络结构而言,对图像数据使用卷积神经网络具有先天性的优势。
因为全连接神经网络对于数据的输入和处理均不会考虑图像数据的空间结构,例如它同等对待相距很远和彼此接近的相邻像素,这样就只能从后续的训练数据中来推理和学习像素本身应该具有的空间结构。
而卷积神经网络直接以二维图像的方式对数据输入和处理,天然考虑了不同像素位置之间的空间结构,因此非常适合用于图像这类二维数据结构,能够更快地进行训练和推理。

以下按照完整网络结构执行的先后顺序对各个层次的处理流程进行详细总结。

1.3. 卷积层

卷积层的作用主要是用于提取图像中的特征数据,后续的分类层就依据卷积层所提取出来的特征数据对不同的图像进行区分并分类。

卷积层的运算如以下动图所示。
卷积核为单位对原始图像或者上一级的特征图进行扫描,根据进行卷积计算的输入是单通道图像数据还是多通道图像/特征图,分别采用平面卷积核立体卷积核对多维数据进行卷积计算。
详细解释卷积神经网络中的卷积与池化计算 一文中对如何进行平面和立体卷积计算做了非常详细的总结,可进一步参考。

卷积核扫描运算动图演示

通过一个卷积核对输入图像/特征图进行一次完整的扫描(卷积计算),就可以得到一张新的特征图
有多少个卷积核就执行多少次扫描,并输出多少张新的特征图,用于后续的池化运算。
例如下图使用 16 个独立的卷积核对输入的图像数据执行卷积运算,产生 16 张特征图:

使用 16 个卷积核生成 16 张特征图

如上所述,执行卷积计算的结果还需要使用ReLU 激活函数处理后,才会传递给下一步进行池化操作。
对卷积计算结果的每个像素通过使用 ReLU 激活函数过滤掉负值,保留图像中物体的形状。

ReLU 激活函数过滤负值保留物体形状

1.4. 池化层

卷积神经网络的池化操作用于对卷积层提取的特征图数据进行降维,目的是保留显著特征的情况下降低数据量,因此就可以降低卷积神经网络的参数数据量和训练以及推理的计算量。

池化所进行的计算非常简单,只需要以 2x2 为单位对前一级卷积层所输出的特征图进行最大化(Max Pooling,选择最大值输出)以及平均化(Average Pooling,对所有值求平均)扫描,每次扫描后步进为 2,不会与上次扫描相重叠(这一点与卷积操作明显不同),因此最终扫描的结果就是一个在水平和垂直方向上均缩小 2 倍的缩版特征图。

以下图为例,上级卷积层输出的特征图为 4x4 分辨率,池化操作以 2x2 对特征图进行扫描,最终池化操作的结果就是一个 2x2 的缩版特征图。

2x2 池化操作将 4x4 特征图缩为 2x2

池化操作以单张特征图为单位进行以上的池化计算,所以前一级卷积层输出多少张特征图,池化层就会输出多少张缩版特征图。

详细的池化操作可参考 详细解释卷积神经网络中的卷积与池化计算 一文。

1.5. Flatten 层

如上所述,无论是卷积层还是池化层,其输出都可以认为是多张二维特征图。
经过卷积和池化处理以后,CNN 接下来就要把前一阶段经过卷积和池化提取出来的特征图转换为一维数据,方便在后续的环节中进行处理,这个特征图转换为一维数据的动作就是Flatten

Flatten 环节的处理非常简单,就是把二维的特征图从上到下,从左到右展开即可:

Flatten 将二维特征图展开为一维

当然,一般而言,最后一个池化层的输出一般会包含多张特征图,那么针对这种多张特征图的 Flatten 操作,就是先对第一张特征图进行一维转换,然后把后续的特征图按照相同的方式继续展开到这个一维数据后面。
无论如何,多张特征图通过 Flatten 操作最终转换为一个一维的数据序列进行后续的分类操作。

多张特征图依次展开拼接为一维序列

1.6. 识别层

如上所述,经过以上的 Flatten 操作以后,在卷积层和池化层中所检测出来的多维特征向量就会转换为一维向量进行图像分类任务的处理。

与普通的人工神经网络结构相比,这个识别层的网络没有什么特殊之处,就是通过多个全连接层最后再叠加一个 Softmax 的输出层:

全连接层与 Softmax 输出层

卷积神经网络架构中的全连接层网络部分以前一阶段的卷积和池化所提取出来的特征向量作为输入,利用多个全连接层所构成的网络来实现图像分类的功能,在全连接层的最后一层使用 Softmax 激活函数以概率的形式输出图像对于各个不同类别的识别结果。

从以上 CNN 网络的整体架构来看,整个网络中所包含的主要训练参数就是特征提取部分各个卷积层的卷积核权重参数以及图像分类部分全连接层各层之间的权重和偏置参数
那么在使用 CNN 网络结构对图像识别功能进行训练的过程中,基于网络最后的 Softmax 激活函数的输出,与训练样本标签之间,使用交叉熵函数作为损失函数,对卷积核权重参数以及全连接层权重和偏置参数进行训练,直到网络能够针对输入图像输出稳定、正确的识别判断结果。

  • 有关深度学习激活函数和损失函数部分的内容,可参考《盘点深度学习神经网络架构中的常用激活函数》和《盘点深度学习神经网络架构中的常用损失函数》。

1.7. 结论与展望

卷积神经网络作为深度学习领域的重要模型,在计算机视觉、图像识别等领域取得了巨大成功。
其核心优势在于通过卷积层和池化层有效地提取图像的局部特征,并保持空间结构信息,从而大大提高了图像识别的准确率。

随着深度学习技术的不断发展,CNN 架构也在不断演进,出现了如 ResNet、Inception、EfficientNet 等更加高效和强大的网络结构。
未来,CNN 架构可能会与其他技术(如注意力机制、Transformer 等)进一步融合,以应对更加复杂的视觉任务。

1.8. 参考资料

  • Convolutional Neural Network | Deep Learning | Developers Breach
  • Flattening CNN layers for Neural Network and basic concepts | by Muhammad Shoaib Ali | Medium
  • [資料分析&機器學習] 第 5.1 講: 卷積神經網絡介紹 (Convolutional Neural Network) - JamesLearningNote - Medium