看完还不懂卷积神经网络CNN的可能性接近于0

1. 引言

卷积神经网络是如何工作的呢?
它们利用滤波器卷积核从图像中提取特征,然后通过神经网络得出预测或输出结果。

在深入探讨卷积神经网络之前,让我们先详细了解一下图像的工作原理。

1.1. 图像基础

图像由被称为像素的微小粒子构成,就如同原子构成了宇宙。

这些微小粒子是包含数字的单元格,就像矩阵中的单元格一样。
图像实际上是具有固定行数和列数的矩阵,图像矩阵中的每个单元格都是一个像素。

该像素包含一个介于 0 到 255 之间的数字,当你看到图像尺寸为 1920x1080 时,这实际上意味着该图像由 1920 列和 1080 行的矩阵构成,且该矩阵中的每个单元格或像素都包含一个介于 0 到 255 之间的数字。

矩阵图展示了图像在计算机上的真实样子。

1.2. 图像中的颜色

图像中的颜色:你知道吗?
其实你屏幕上显示的所有图像都仅由红色绿色蓝色这三种颜色构成,将这三种颜色混合在一起,就能产生白光或图像中的不同颜色。

图像是由像素或包含 0 到 255 之间数值的单元格构成的矩阵,0 代表最低颜色强度(黑色),而 255 则代表每个像素中的最高颜色强度。

实际上,每张彩色图像都包含三个相同大小的矩阵,第一个矩阵代表红色,第二个矩阵代表绿色,第三个矩阵代表蓝色,每个矩阵都包含数值在 0 到 255 之间的单元格,这些数值代表它们的颜色强度。

如果三个矩阵中的每个单元格的值都为 255,则图像将显示为白色;
如果都为 0,则图像将显示为黑色。
这三个提供颜色的矩阵被称为通道

图表显示了图像中通道的表示。

这三个矩阵像透明纸一样叠放在一起,每个像素内部都有灯泡,分别发出各自对应的光色。

该图显示了图像的所有 3 个颜色通道如何堆叠在一起。

将每个矩阵上的数字从 0 更改到 255,可以创建不同的颜色。
例如,如果将蓝色和绿色矩阵中的所有像素都更改为 0,并将红色矩阵中的所有像素都更改为 255,则图像将完全显示为红色。

如果对绿色和蓝色矩阵进行同样的操作,则图像将仅显示它们各自的颜色。

但是如果在每个彩色矩阵中更改一些像素值,将其更改为随机数字,则图像将在更改每个矩阵像素值的部分产生不同的颜色,如棕色、黄色、橙色或青色。

1.3. 卷积运算原理

回到卷积运算:想象一下,你正在解读一份已有 3000 年历史的卷轴,其中包含有关未来的秘密信息;
为了收集信息,你会使用放大镜来仔细观察卷轴,并慢慢将所有获得的信息记录下来。

卷积神经网络的工作原理也是如此,我们有一个矩阵,其功能类似于放大镜,也包含数字。

该矩阵在图像上逐像素滑动,并通过将该矩阵内的所有数字与正在分析的图像中的对应像素相乘,然后相加结果,从而从图像中提取信息,这个小矩阵被称为滤波器卷积核

该图展示了一个矩阵形式的图像以及其旁边的内核或过滤器。

1.4. 图像预处理

注意:

在开始卷积过程之前,我们还需要做另一件事,在代表每种颜色的三个矩阵或通道中,每个像素都包含介于 0 和 255 之间的数值。

这些数值对于机器学习模型来说太大了,可能会导致训练速度变慢以及梯度爆炸等问题。

为了避免这种情况,我们需要将每个像素值从 0 到 255 的范围缩放到 0 到 1 的范围。
我们该怎么做呢?
我们将每个像素值除以 255,将其缩放到 0 到 1 之间的值。

这一步被称为图像预处理,是训练卷积神经网络时必须遵循的关键步骤。

图像预处理步骤。将所有像素除以 255,使其值介于 1 和 0 之间。

对图像中的所有 3 个通道都执行此预处理步骤。

显示图像预处理通道的图像。

1.5. CNN 图像分类应用

在本文中,我们将使用卷积神经网络对图像进行分类。

想象一下,你有两张图像:一张是热狗,另一张是披萨。

卷积神经网络可以确定每张图像所属的类别。
例如披萨的图像将被归类为披萨类,热狗的图像将被归类为热狗类。

在本文中,我们将训练一个卷积神经网络,对两张图像进行分类,一张包含数字 “1”,另一张包含数字 “2”。

1.6. CNN 工作流程

步骤:

  • 首先对图像进行预处理,即将所有像素值除以 255,将其缩放到 0 到 1 之间的范围。
  • 将图像与滤波器或卷积核进行滑动(卷积)操作,该操作将每个重叠的像素相乘,并将它们的乘积结果相加,得到一个单一数值。
  • 每种颜色通道都有自己的卷积核或滤波器。在获取每个像素区域的结果后,将每个通道的最终值相加,得到一个单一值,该值将被放入一个称为特征图的单一输出矩阵中。
  • 对该特征图进行最大池化操作。最大池化涉及从像素的特定区域中提取最大值。例如,如果你有一个 6x6 的矩阵和一个 2x2 的最大池化层,则在 6x6 的矩阵中,最大池化层将从 6x6 矩阵的每个 2x2 区域中提取最大值。这一点将在后面更详细地解释。
  • 将最大池化层展平为一维数组,然后通过一个普通的前馈神经网络,最终得出预测结果。

1.7. 特征提取详解

首先对图像进行预处理,即将所有三个通道中的所有像素值除以 255,使它们位于 0 到 1 之间的范围内。
为了简化说明,让我们假设预处理后的图像是黑白图像。

由于 255 代表白色或最高颜色强度,0 代表黑色,因此 255 除以 255 得到 1,代表白色;
0 除以 255 得到 0,代表黑色。

图片

1.7.1. 将特征提取到特征图中

特征图是一个单一矩阵,其中包含从预处理后的输入图像中提取的特征。
它就像前文提到的那份记录。

为了从输入图像中提取特征,一个随机滤波器或卷积核(本质上是一个包含随机数字的小矩阵)将在输入图像上滑动。
输入图像中的每个通道都有自己的滤波器或卷积核,计算过程涉及将卷积核中的重叠像素值与输入图像相乘。

例如,如果我们有一个 3x3 的卷积核,在一个 6x6 的图像上滑动,则 3x3 的卷积核将首先放置在 6x6 图像的左上角,与 6x6 图像的 3x3 部分重叠。

由于卷积核的大小为 3x3,因此它只会覆盖实际输入图像的 3x3 部分,重叠的像素将与卷积核中对应位置的值相乘,该过程将重复进行,直到处理完第九个像素。

包含数字 1 的黑白 6x6 像素图像。

完成后,将所有对应乘积的结果相加,得到一个单一值。

将该单一值与卷积核相关的另一个称为偏置的值相加,该偏置被初始化为一个随机数,旨在使卷积神经网络模型多样化,并赋予其更多灵活性。

我们将对每个通道重复此过程,每个通道都将为其矩阵的左上角 3x3 部分生成自己的输出值。

例如,红色通道可能产生输出 3,绿色通道可能产生输出 -1,蓝色通道可能产生输出 2。

在下图中,红色通道的最终输出为 2。

图片

每个卷积核(kernel)相乘后的输出值会加上一个偏置(bias),这个偏置是与每个卷积核或滤波器相关联的一个单一值。

这个偏置只是一个随机数,加到输出上是为了给模型增加更多的灵活性。

由于红色通道的卷积核的偏置为 -2,所以这个值会加到红色通道第一个输出值 2 上(来自左上角)。

注意:偏置是可调整的可训练参数,通过移动激活值,使模型能更好地拟合训练数据。

下图展示了我们将要计算的三个通道各自的卷积核和偏置。

图片

以下是卷积计算过程。

绿色通道的卷积核偏置为 -1,这个 -1 会加到绿色通道的第一个输出上,该输出代表图像左上角的 3x3 矩阵,即(0 + (-1))。

蓝色通道的卷积核偏置为 0.9,这个 0.9 会加到蓝色通道的输出上,即(1+0.9),这就是从图像中提取特征的方式。

上述图像中三个通道的计算过程如下:

红色通道 (0x0)+(0x1)+(0x1)+ (0x0)+(0x0)+(1x1)+ (0x0)+(1x1)+(0x0) = 2,2 + (-2) = 0 (红色通道左上角的输出)

绿色通道 (0x1)+(0x0)+(0x0)+ (0x1)+(0x1)+(1x0)+ (0x1)+(0x1)+(0x0) = 0,0 + (-1) = -1 (绿色通道左上角的输出)

蓝色通道 (0x0)+(0x0)+(0x1)+ (0x1)+(0x0)+(1x0)+ (0x0)+(1x1)+(0x1) = 1,1 + 0.9 = 1.9 (蓝色通道左上角的输出)

但是,特征图(feature map)是一个单一的矩阵,而我们得到了三个输出值。

所以我们需要将每个通道的三个输出值相加,得到特征图的第一个值。
由于每个通道左上角的值分别为 0、-1 和 1.9,所以将这些值相加,得到输出 0.9。

这个 0.9 会被放入特征图中,特征图是包含提取特征的单一输出矩阵,0.9 将成为特征图左上角的一个像素,代表图像所有通道的左上角。

特征图的大小将与卷积核移动到行列边缘的次数相匹配。

图片

1.8. 卷积核移动与步长

1.8.1. 进一步解释

在计算出特征图(feature map)的第一个像素值之后,所有 3 个通道的每个卷积核(kernel)都会向右移动一个像素或者一列。
卷积核移动的列数被称为步长(stride)

步长设置为 1 意味着所有 3 个通道的每个卷积核每次都会向右移动一个像素。

整个计算过程会不断重复,从而为特征图生成新的数值。

如果步长设置为 2,那么在第一次计算完成后,卷积核会向右移动两列。

当卷积核到达边缘时,它会根据设定的步长向下移动。
如果步长设置为 1,那么每个通道的卷积核在到达边缘后,会向下移动一行,然后开始计算过程,为特征图生成另一个数值。

如果卷积核向下移动,那么特征图的下一个计算值也会出现在下方。

在一个 6x6 的矩阵中,卷积核会向右移动 4 次,直到到达边缘,它会在特征图中生成一行 4 个数值。

但是,当卷积核到达边缘后,它会向下移动,开始新的计算。

当这种情况发生时,特征图的新计算值也会出现在之前计算值的下方,最终特征图将会有 4 行 4 列,这与前面提到的卷积核移动的次数相匹配。

该图显示了特征图映射了内核在图像上移动的次数。

重复上述过程,直到卷积核与图像的所有部分都重叠。

在图像的所有部分都经过卷积和计算后,会生成下面的特征图。

图片

1.9. ReLU 激活函数

在获得最终的特征图(feature map)后,每个像素值都会通过一个ReLU 激活函数

ReLU 激活函数会将特征图中所有负的像素值变为 0,同时保持所有正的像素值不变。

为了简化,我们将所有正的像素值转换为 1,注意:这并不是卷积过程的一部分。

最终,你会得到一个仅由 1 和 0 组成的矩阵。
这个新矩阵就成为了新的特征图。
参见下图。

图片

1.10. 最大池化层

最大池化通常每次都在卷积层之后进行,它提取特征图中特定区域内的最大值,并创建一个包含这些提取值的新矩阵。
最大池化层类似于卷积核,但不包含任何值。

它们通过提取特征图特定区域内的最大值来减少特征图的空间维度。

就像卷积核一样,最大池化层会根据其大小像放大镜一样在特征图上移动。

假设我们有一个 2x2 的最大池化层,最大池化层最初会被放置在特征图的左上角,以提取该 2x2 区域内的最大值。

特征图的尺寸为 4x4 像素,这意味着最大池化层将提取特征图中第一个 2x2 区域内的最大值。

图片

最大池化层以其尺寸为步长移动,不过也可以使用其他步长值。

由于最大池化层的尺寸为 2x2,所以它会在特征图上以 2x2 的区域滑动。

这意味着,它会向侧面移动 2 列,直到到达边缘,并在从边缘提取信息后向下移动 2 行,最终结果将是一个新的 2x2 矩阵。

最大池化后的 2x2 矩阵的左上角代表特征图的左上角。

1.11. 展平与前馈神经网络

在获得最大池化后的图像后,需要将最大池化层中的最终值通过一个普通的前馈神经网络,以最终进行分类或预测。

我们有一个来自最大池化层的 2x2 矩阵(二维矩阵),而普通的前馈神经网络只接受一维数组。

因此我们需要将二维矩阵展平为一维数组,最大池化层的输出值将被转换为一个单行的一维数组,尽管下图看起来像是一个列。

图片

1.11.1. 详细步骤解释

一个普通的前馈神经网络包含权重和偏置,从下图中你可以看到,每个值都连接到一条线上。

这条线被称为权重,并包含一个值,每个权重都会与一维数组中对应的值相乘。

它们的乘积结果将被相加,并加上一个偏置(也是一个随机数),然后输出将通过一个激活函数,激活函数可以是 ReLU、SoftMax 或 Sigmoid。

Sigmoid 激活函数将值转换为 0 到 1 之间的范围,它通常用于二分类,即仅在两个类别之间进行分类。

SoftMax最适合用于多分类,它返回一个跨多个类别的概率分布。

图片

在单个输出通过激活函数后,它会像上图所示那样乘以两个不同的权重,并加上粉色对应的偏置,以在两个输出神经元中分别产生两个值。

一个输出神经元代表第一个图像类别(数字 1),另一个代表第二个图像类别(数字 2)。

但是,由于计算机理解的是数字而不是字母,所以每个输出神经元中的输出值要么是 1,要么是 0。

如果包含 1 的神经元代表第一类(带有数字 1 的黑白图像),则第一类成为预测类别,反之亦然。

1.12. CNN 完整流程总结

1.12.1. A. 训练与预测

对于包含数字 2 的图像,会重复相同的步骤,同时保持权重、偏置和卷积核不变。

在训练过程中,如果模型做出了错误的预测,那么所有的权重、偏置和卷积核都会被改变或调整,直到做出正确的预测,这就是模型的学习方式。

1.12.2. B. 卷积过程

  • 首先对图像进行预处理,将所有像素值除以 255,使其值在 0 和 1 之间。
  • 将卷积核或滤波器应用于图像以提取特征,然后将这些特征放入另一个称为特征图的矩阵中。
  • 特征图通过 ReLU 激活函数,该函数将所有负值转换为 0,并保留所有正值。
  • 应用最大池化层以基于最大池化层或矩阵的大小提取特定像素区域内的最大值。
  • 最大池化层的最终结果被转换为一维数组,以输入到前馈神经网络中。
  • 前馈神经网络包含权重和偏置以及另一个激活函数,该函数做出最终预测以确定图像所属的类别。

1.12.3. C. 最大池化步骤

图片

2. 结论与展望

卷积神经网络(CNN)作为深度学习领域的重要模型,在图像识别、计算机视觉等领域取得了巨大成功。
通过本文的详细解析,我们了解了 CNN 从图像预处理、卷积运算、特征提取、池化操作到最终分类的完整工作流程。

CNN 的核心优势在于其能够自动学习特征,无需人工设计特征提取器,这使得它在处理复杂图像数据时表现出色。
随着技术的发展,CNN 架构也在不断演进,从 LeNet、AlexNet 到 VGG、ResNet 等,网络结构越来越深,性能也越来越强。

未来,CNN 与其他技术的融合将进一步拓展其应用边界,如与注意力机制结合、与 Transformer 架构混合等,这些创新将为计算机视觉领域带来更多可能性。
同时,轻量化 CNN 模型的发展也将使其在移动端和嵌入式设备上的应用更加广泛。

理解 CNN 的工作原理不仅有助于我们更好地应用现有模型,也为开发新的网络架构提供了基础。
随着人工智能技术的不断发展,CNN 必将在更多领域发挥重要作用。