卷积神经网络简介

2021-08-05 21:04:58

卷积神经网络在机器学习中非常重要。如果你想做计算机视觉或图像识别任务,你就离不开它们。但是很难理解它们是如何工作的。在这篇文章中,我们将讨论卷积神经网络背后的机制、它们的好处和业务用例。首先,让我们复习一下神经网络一般如何工作的知识。任何神经网络,从简单的感知器到庞大的企业 AI 系统,都由模仿人脑神经元的节点组成。这些细胞紧密相连。节点也是如此。神经元通常被组织成独立的层。神经网络的一个例子是前馈网络。数据从输入层通过一组隐藏层仅在一个方向上移动,就像水通过过滤器一样。系统中的每个节点都连接到上一层和下一层的一些节点。节点从它下面的层接收信息,用它做一些事情,然后将信息发送到下一层。每个传入连接都分配了一个权重。当节点从不同节点接收数据时,它是一个数字乘以输入。

通常有几个节点正在使用的传入值。然后,它将所有内容汇总在一起。有几种可能的方法来决定输入是否应该传递到下一层。例如,如果您使用单位阶跃函数,如果其值低于阈值,则节点不会将数据传递到下一层。如果数量超过阈值,则节点转发该数量。然而,在其他情况下,神经元可以简单地将输入投影到某个固定值段中。第一次训练神经网络时,它的所有权重和阈值都是随机分配的。一旦训练数据被馈送到输入层,它就会遍历所有层并最终到达输出。在训练期间,会调整权重和阈值,直到具有相同标签的训练数据始终提供相似的输出。这称为反向传播。您可以在 TensorFlow Playground 中看到它是如何工作的。常规人工神经网络不能很好地扩展。例如,在通常用于训练计算机视觉模型的数据集 CIFAR 中,图像的大小仅为 32x32 像素,并且具有 3 个颜色通道。这意味着该神经网络的第一个隐藏层中的单个全连接神经元将具有 32 323 = 3072 个权重。它仍然是可控的。但是现在想象一个更大的图像,例如 300x300x3。它将有 270,000 个权重(训练需要如此多的计算能力)!像这样的巨大神经网络需要大量资源,但即便如此,仍然容易过度拟合,因为大量参数使其只能记住数据集。 CNN 使用参数共享。特定特征图中的所有神经元共享权重,这使得整个系统的计算强度降低。卷积神经网络或 ConvNet 只是使用卷积的神经网络。为了理解原理,我们将首先使用二维卷积。

卷积是一种数学运算,允许合并两组信息。在 CNN 的情况下,卷积应用于输入数据以过滤信息并生成特征图。此过滤器也称为内核或特征检测器,其维度可以是例如 3x3。为了执行卷积,内核遍历输入图像,逐个元素进行矩阵乘法。每个感受野(发生卷积的区域)的结果记录在特征图中。在我们进一步讨论之前,讨论填充和跨步也很有用。这些技术在 CNN 中经常使用:Padding。填充通过向矩阵的边界添加假像素来扩展输入矩阵。这样做是因为卷积减少了矩阵的大小。例如,当过滤器经过时,5x5 矩阵会变成 3x3 矩阵。跨步。通常情况下,在使用卷积层时,您需要获得小于输入的输出。实现此目的的一种方法是使用池化层。实现此目的的另一种方法是使用跨步。 stride 背后的想法是在内核滑过时跳过某些区域:例如,每 2 或 3 个像素跳过一次。它降低了空间分辨率并使网络的计算效率更高。有关 CNN 如何工作的更详细说明,请观看 Brandon Rohrer 的机器学习课程的这一部分。对于现实生活中的任务,卷积通常在 3D 中执行。大多数图像有 3 个维度:高度、宽度和深度,其中深度对应于颜色通道 (RGB)。所以卷积滤波器也需要是 3 维的。以下是相同操作在 3D 中的外观。

卷积层中有多个过滤器,每个过滤器生成一个过滤器映射。因此,一个层的输出将是一组相互叠加的过滤器贴图。例如,填充 30x30x3 矩阵并通过 10 个过滤器将产生一组 10 个 30x30x1 矩阵。在我们将这些地图相互叠加后,我们将得到一个 30x30x10 的矩阵。 CNN 的目标是减少图像,以便在不丢失对准确预测有价值的特征的情况下更容易处理。我们已经在上面描述了卷积层的工作原理。它们处于 CNN 的中心,使它们能够自主识别图像中的特征。但是经过卷积过程会产生大量数据,这使得训练神经网络变得困难。为了压缩数据,我们需要经过池化。池化层从卷积层接收结果并对其进行压缩。池化层的过滤器总是小于特征图。通常,它需要一个 2x2 的正方形(补丁)并将其压缩为一个值。 2x2 过滤器会将每个特征图中的像素数量减少到四分之一。如果您的特征图大小为 10×10,则输出图将为 5×5。

使用池化层后,您将获得池化特征图,这些特征图是输入中检测到的特征的汇总版本。池化层提高了 CNN 的稳定性:如果之前像素的最轻微波动都会导致模型错误分类,现在卷积层检测到的输入中特征位置的微小变化将导致池化特征图相同的位置。现在我们需要展平输入(将其转换为列向量)并将其传递给常规神经网络进行分类。扁平化的输出被馈送到前馈神经网络,并在每次训练迭代中应用反向传播。该层为模型提供了最终理解图像的能力:每个输入像素和每个输出类之间都有信息流。卷积神经网络有几个好处,使其可用于许多不同的应用程序。如果您想在实践中看到它们,请观看 StatQuest 的详尽解释。 CNN 不需要手动特征工程:它们可以在训练过程中掌握相关特征。即使您正在处理一项全新的任务,您也可以使用预训练的 CNN,并通过向其提供数据来调整权重。 CNN 将根据新任务进行调整。由于卷积过程,CNN 的计算效率比常规神经网络高得多。 CNN 使用参数共享和降维,使模型易于快速部署。它们可以优化为在任何设备上运行,甚至可以在智能手机上运行。当前最先进的图像分类神经网络不是卷积网络,例如,在图像转换器中。然而,在关于图像和视频识别以及类似任务的大多数情况和任务中,CNN 现在已经占据主导地位很长时间了。它们通常比非卷积神经网络显示出更高的准确性,尤其是在涉及大量数据时。

然而,ConvNet 并不完美。即使它看起来是一个非常智能的工具,它仍然容易受到对抗性攻击。对抗性攻击是向网络提供“坏”示例(也就是以特定方式稍微修改图像)以导致错误分类的情况。即使像素的微小变化也会使 CNN 发疯。例如,犯罪分子可以欺骗基于 CNN 的人脸识别系统,并在镜头前无法识别地通过。为了让 CNN 展示其神奇的力量,他们需要大量的训练数据。这些数据不容易收集和预处理,这可能会阻碍该技术的更广泛采用。这就是为什么即使在今天也只有少数好的预训练模型,如 GoogleNet、VGG、Inception、AlexNet。大多数由全球公司拥有。卷积神经网络用于许多行业。以下是它们在实际应用中使用的一些常见示例。卷积神经网络通常用于图像分类。通过识别有价值的特征,CNN 可以识别图像上的不同对象。这种能力使它们在医学中很有用,例如,用于 MRI 诊断。 CNN 也可以用于农业。这些网络从 LSAT 等卫星接收图像,并可以使用这些信息根据耕地水平对土地进行分类。因此,这些数据可用于预测土地的肥力水平或制定最佳利用农田的策略。手写数字识别也是CNN最早用于计算机视觉的用途之一。自动驾驶汽车、人工智能监控系统和智能家居经常使用 CNN 来识别和标记物体。 CNN 可以实时识别照片上的物体,并对其进行分类和标记。这就是自动驾驶汽车绕过其他汽车和行人的方式,智能家居可以识别车主的脸。 YouTube、Netflix 和其他视频流服务使用视听匹配来改进他们的平台。有时用户的请求可能非常具体,例如“关于太空僵尸的电影”,但搜索引擎甚至应该满足这种奇特的请求。

您可以使用 CNN 对数字空间中的真实物体进行 3D 建模。今天,有 CNN 模型可以仅基于一张图像创建 3D 人脸模型。类似的技术可用于创建数字双胞胎,这在建筑、生物技术和制造业中非常有用。尽管 CNN 经常用于处理图像,但这并不是它们唯一可能的用途。 ConvNet 可以帮助进行语音识别和自然语言处理。例如,Facebook 的语音识别技术基于卷积神经网络。总而言之,卷积神经网络是计算机视觉和类似领域的绝佳工具,因为它们能够识别原始数据中的特征。他们可以识别训练数据中不同像素之间的联系,并使用这些信息自行设计特征,从低级(边缘、圆圈)到高级(人脸、手、汽车)构建。问题是这些特征对人类来说可能变得相当难以理解。此外,图像中的一个狂野像素有时会导致新的令人惊讶的结果。如果您对本文感兴趣并且想了解有关神经网络、深度学习和人工智能的更多信息,您可以在我们的博客上继续阅读有关机器学习的内容。