通过-Excel-理解卷积神经网络--CNNs-

通过 Excel 理解卷积神经网络 (CNNs)

原文:towardsdatascience.com/understanding-convolutional-neural-networks-cnns-through-excel/

深度学习通常被视为一个黑盒子。我们知道它从数据中学习,但问题是它真正是如何学习的。**

在这篇文章中,我们将直接在 Excel 中构建一个微型的卷积神经网络 (CNN),以逐步理解 CNN 实际上是如何处理图像的。

我们将打开这个黑盒子,并亲眼看到每个步骤是如何发生的。我们将理解所有被称为“深度学习”基础的计算。

你可以使用 这个链接 在阅读这篇文章的同时探索计算。

Google 表格链接

这篇文章是关于在 Excel 中实现机器学习和深度学习算法系列的一部分。你可以在阅读这篇文章时自己实现计算。你可以在这个 Kofi 链接 中找到所有 Excel 文件。如果你想支持我的工作,那对我来说意义重大。

所有 Excel/Google 表格文件用于机器学习和深度学习

1. 如何简化问题

就像我在 Excel 中实现的所有机器学习和深度学习算法一样,第一步是简化数据,简化问题。

首先,我想找到一个简单但又有意义的数据库来可视化计算的每一步。

然后,你还得忘记你可能已经知道的事情(非常复杂的事情)。是的,根据我的经验,这不会对你有帮助。例如,你可能知道 CNN 使用 ReLU 激活,或者逻辑函数的公式。忘掉它!我保证你在这个练习中只会做 X 和 +。

1.1 在图像中检测某物的两种方法

好吧,在我们尝试简化之前,我想提醒大家问题通常是如何解释的…

当我们试图在图片中检测一个物体,比如一只猫,有两种主要方法:确定性方法和机器学习方法。

然后,他们会用这些方法解释这个例子,即识别图片中的猫。

确定性方法意味着手动编写规则。

例如,我们可以说猫有一个圆形的脸,两个三角形耳朵,一个身体,一条尾巴等。因此,开发者将做所有的工作来定义规则。

然后,计算机运行所有这些规则,并给出相似度的分数。

确定性方法检测图片中的猫——图片由作者提供

机器学习方法意味着我们不需要自己编写规则。

相反,我们给计算机提供许多示例,包括有猫和无猫的图片。然后它自己学习什么使猫成为猫。

图片

机器学习方法在图片上检测猫——图片由作者提供(猫由 AI 生成)

所以,你可能认为你现在已经理解了深度学习是如何真正工作的。

请,对自己诚实!

我们说机器会自己弄清楚,但真正的问题是它是如何做到的。

实际上,我们仍然需要告诉机器如何创建这些规则。规则是可以学习的。所以关键点是:我们如何定义将要使用的规则类型?

要了解如何定义规则,我们首先必须了解图像是什么。

1.2 理解图像是什么

一只猫是一个复杂的形态,但我们可以用一个简单明了的例子来说明:MNIST 数据集中的手写数字。

首先,什么是图像?

数字图像可以看作是一个像素的网格。每个像素是一个数字,表示它的亮度,从 0(白色)到 255(黑色)。

在 Excel 中,我们可以用表格来表示这个网格,其中每个单元格对应一个像素。

图片

MNIST 手写数字——图片来自 MNIST 数据集 en.wikipedia.org/wiki/MNIST_database (CC BY-SA 3.0)

数字的原始维度是 28 x 28。但为了简化问题,我们将使用 10×10 的表格。它足够小,可以快速计算,但仍然足够大,可以展示出大致的形状。

因此,我们将降低维度。

例如,手写数字“1”可以在 Excel 中用以下 10×10 的网格表示。

图片

图像是数字的网格——图片由作者提供

1.3 深度学习之前:图像的经典机器学习方法

在使用 CNN 或任何深度学习方法之前,我们就可以用经典的机器学习算法,如逻辑回归决策树,来识别简单的图像。

在这种方法中,每个像素成为一个特征。例如,一个 10×10 的图像有 100 个像素,因此有 100 个特征作为输入。

算法随后学会将像素值的模式与标签如“0”、“1”或“2”相关联。

图片

经典机器学习用于图像识别——图片由作者提供

事实上,使用这种简单的机器学习方法,逻辑回归可以达到大约 90%的准确率,效果相当不错。

这表明经典模型能够从原始像素值中学习到有用的信息。

然而,它们有一个主要的局限性。它们将每个像素视为一个独立的价值,没有考虑其邻居。因此,它们不能理解像素之间的空间关系

所以直观上,我们知道对于复杂的图像,性能不会很好。因此,这种方法不可扩展。

现在,如果你已经知道经典机器学习是如何工作的,你知道没有魔法。事实上,你已经知道该做什么:你必须改进特征工程步骤,你必须转换特征,以便从像素中获得更有意义的信息。

2. 在 Excel 中逐步构建 CNN

2.1 从复杂的 CNN 到 Excel 中的简单 CNN

当我们谈论卷积神经网络时,我们经常看到非常深和复杂的架构,如 VGG-16。许多层,数千个参数,无数的操作,看起来非常复杂,有人说它不可能完全理解它的工作原理。

图片

VGG16 架构——作者提供的图片

层背后的主要思想是:逐步检测模式。

以手写数字的例子为例,让我们提出一个问题:最简单的可能的 CNN 架构可能是什么?

首先,对于隐藏层,在完成所有层之前,让我们减少数量。多少?让我们做一个。没错:只有一个。

至于过滤器,它们的尺寸如何?在真实的 CNN 层中,我们通常使用 3×3 的过滤器来检测小模式。但让我们从大的开始。

多大?10×10!

是的,为什么不呢?

这也意味着你不必将过滤器在图像上滑动。这样,我们可以直接比较输入图像与过滤器,并查看它们匹配得有多好。

这个简单的例子不是关于性能,而是关于清晰度。

它将展示 CNN 如何逐步检测模式。

现在,我们必须定义过滤器的数量。我们将说 10 个,这是最小值。为什么?因为有 10 个数字,所以我们必须至少有 10 个过滤器。我们将在下一节中看到它们是如何被发现的。

在下面的图片中,你有这个最简单的 CNN 神经网络架构的图解:

图片

最简单的 CNN 架构——作者提供的图片

2.2 训练过滤器(或我们自己设计它们)

在真实的卷积神经网络中,过滤器不是手工编写的。它们是在训练过程中学习到的。

神经网络调整每个过滤器内部的值,以检测有助于识别图像的最佳模式。

在我们的简单 Excel 例子中,我们不会训练过滤器。

相反,我们将自己创建它们,以了解它们代表什么。

由于我们已经知道了手写数字的形状,我们可以设计看起来像每个数字的过滤器。

例如,我们可以绘制一个与 0 的形状相匹配的过滤器,另一个与 1 的形状相匹配,以此类推。

另一个选项是取每个数字的所有示例的平均图像,并将其用作过滤器。

每个过滤器将代表一个数字的“平均形状”。

这就是人类与机器之间的边界再次变得清晰可见的地方。我们可以让机器发现过滤器,或者我们可以利用自己的知识手动构建它们。

没错:机器不定义操作的本质。机器学习研究人员定义它们。机器擅长做循环,找到这些定义规则的优化值。在简单的情况下,人类总是比机器更好。

因此,如果有 10 个滤波器要定义,我们知道我们可以直接定义 10 个数字。所以,直观上,我们知道这些滤波器的本质。但当然还有其他选择。

现在,为了定义这些滤波器的数值,我们可以直接使用我们的知识。我们还可以使用训练数据集。

下面你可以看到由平均每个手写数字的所有图像创建的 10 个滤波器。每个滤波器都显示了定义一个数字的典型模式。

图片

平均值作为滤波器——图片由作者提供

2.3 CNN 如何检测模式

现在我们有了滤波器,我们必须将输入图像与这些滤波器进行比较。

一种做法是,嗯,最小二乘误差。或者说我们应该说是平方差,因为我们不是直接预测某物,而是比较输入和一个滤波器。

图片

如果我们可以得到 SD 分数,那么这个算法就可以称为 SDNN,对吧。尽管如此,它在这里也能很好地工作。

所以,为了比较两个图像,实际上还有另一种已知的方法:交叉相关

它分为两个简单的步骤:

  1. 乘值/点积:我们取输入图像中的每个像素,并将其与滤波器中相同位置的像素相乘。这意味着滤波器“观察”图像中的每个像素,并测量它与滤波器中存储的模式的相似程度。是的,如果两个值都很大,那么结果也会很大。

  2. 加和结果/总和:这些乘积相加,产生一个单一的数字。这个数字表达了输入图像与滤波器的匹配强度。

图片

一幅图片的交叉相关示例——图片由作者提供

在我们的简化架构中,滤波器的大小与输入图像相同(10×10)。

因此,滤波器不需要在整个图像上移动。

相反,交叉相关只应用一次,直接比较整个图像与滤波器。

这个数字表示图像与滤波器内模式的匹配程度。

如果滤波器看起来像是手写“5”的平均形状,高值意味着图像很可能是“5”。

通过对所有滤波器重复此操作,每个数字一个,我们可以看到哪个模式给出了最高的匹配度。

2.4 在 Excel 中构建简单的 CNN

现在,我们可以从头到尾创建一个小型卷积神经网络(CNN),以了解整个过程在实际中的工作方式。

  1. 输入:一个 10×10 的矩阵表示要分类的图像。

  2. 滤波器:我们定义了 10 个大小为 10×10 的滤波器,每个滤波器代表从 0 到 9 的手写数字的平均图像。这些滤波器作为每个数字的模式检测器。

  3. 交叉相关:每个滤波器都应用于输入图像,产生一个单一的分值,衡量图像与该滤波器模式的匹配程度。

  4. 决策:得分最高的滤波器给出预测的数字。在深度学习框架中,这一步通常由Softmax 函数处理,它将所有得分转换为概率。

    在我们简单的 Excel 版本中,取最高分就足以确定图像最可能代表的数字。

每个 10×10 的滤波器代表手写数字(0-9)的平均形状。输入图像使用交叉相关与所有滤波器进行比较。经过 Softmax 归一化后产生最高分的滤波器对应于检测到的数字。

输入数字与十个平均数字滤波器的交叉相关。通过 Softmax 归一化后的最高分,将输入识别为“6。”——图像由作者提供

使用 Excel,您可以测试不同的数字,甚至可以自己写一个数字。

在 Excel 中实现的简单 CNN 的测试——图像由作者提供

2.5 平方差与交叉相关

在 Excel 表格中,我也实现了平方差。您可以看到,对于某些示例,使用平方差进行预测更好。

并且平方差与平方误差相同,并且在几乎所有经典回归问题中都被广泛使用。它似乎也更有性能。为什么我们使用交叉相关而不是?

可能的一个原因是它更简单,如果我们想在多层中使用它。它也更容易进行微分。

没错:这是关于模式算法的简单性,计算的扩展性,函数的可训练性。

因此,交叉相关似乎是我们可以在多层神经网络中用于检测图像模式的最简单且最可扩展的函数。

平方差与交叉相关

2.6 卷积或交叉相关?

在这一点上,你可能会想知道,当我们描述的操作实际上是交叉相关时,为什么我们称之为卷积神经网络。

差异微妙但简单:

  • 卷积意味着在将滤波器滑动到图像上之前,先水平垂直翻转滤波器。

  • 交叉相关意味着直接应用滤波器,而不进行翻转。

由于某些历史原因,术语“卷积”保留了下来,而 CNN 中实际执行的操作是交叉相关。

如您所见,在大多数深度学习框架中,如 PyTorch 或 TensorFlow,实际上在执行“卷积”时使用的是交叉相关

交叉相关和卷积——图像由作者提供

简而言之:

CNN 在名称上是“卷积”的,但在实践中是“交叉相关”的。

3. 构建更复杂的架构

3.1 使用小滤波器检测更详细的模式

在上一个例子中,我们使用了一个 10×10 的滤波器来比较整个图像与一个模式。

这就足以理解互相关原理以及卷积神经网络(CNN)如何检测图像与滤波器之间的相似性。

现在我们可以更进一步。

我们将使用几个较小的滤波器,每个滤波器的大小为5×5。这些滤波器将观察图像的较小区域,检测局部细节而不是整个形状。

让我们以四个 5×5 滤波器应用于手写数字为例。

输入图像可以被切割成 4 个更小的部分,每个部分为 5×5 像素。

我们仍然可以使用所有数字的平均值开始。因此,每个滤波器将给出 4 个值,而不是一个。

图片

用于数字识别的 CNN 中的较小滤波器 – 图片由作者提供

最后,我们可以应用 Softmax 函数来得到最终的预测。

但在这个简单的情况下,也可以直接将所有值相加。

3.2 如果数字不在图像中心

在我之前的例子中,我将滤波器与图像的固定区域进行比较。我们可以提出的一个直观问题是,如果对象不在中心怎么办。是的,它可以在图像的任何位置。

解决方案很不幸地非常基础:你将滤波器在图像上滑动。

让我们再次举一个简单的例子:输入图像的维度是 10×14。高度没有改变,宽度是 14。

因此,滤波器仍然是 10 x 10,它将在图像上水平滑动。然后,我们将得到 5 个互相关。

我们不知道图像在哪里,但这不是一个问题,因为我们只需要获取 5 个互相关的最大值。

这就是我们所说的最大池化层。

图片

简单 CNN 中的最大池化 – 图片由作者提供

3.3 CNN 中使用的其他操作

我们试图解释,CNN 中的每个组件为什么有用。

最重要的组件是输入和滤波器之间的互相关。我们还解释了小滤波器为什么有用,以及最大池化如何处理图像中任何位置的物体。

CNN 中还有其他常用的步骤,例如使用多个连续层或应用非线性激活函数。

这些步骤使模型更加灵活、更加鲁棒,并且能够学习更丰富的模式。

它们为什么有用呢?

我将把这个问题留给你作为练习。

现在你已经理解了核心思想,试着思考这些步骤如何帮助 CNN 更进一步,你可以在 Excel 中尝试一些具体的例子。

结论

在 Excel 中模拟 CNN 是一种有趣且实用的方式,可以看到机器如何识别图像。

通过使用小矩阵和简单的滤波器,我们可以理解 CNN 的主要步骤。

我希望这篇文章能让你对深度学习的真正含义有所思考。机器学习和深度学习之间的区别不仅在于模型的深度,还在于它们如何与图像和数据的表示进行交互。

posted @ 2026-03-28 10:06  布客飞龙III  阅读(4)  评论(0)    收藏  举报