理解卷积神经网络
扫描二维码
随时随地手机看文章
人工智能 (AI) 世界正在快速发展,AI 越来越多地支持以前无法实现或难以实现的应用。
什么是卷积神经网络?
神经网络是一种系统,或者说是神经元的结构,它使人工智能能够更好地理解数据,从而解决复杂的问题。虽然网络类型多种多样,但本系列文章将仅关注卷积神经网络 (CNN)。CNN 的主要应用领域是模式识别和对输入数据中包含的对象进行分类。CNN 是一种用于深度学习的人工神经网络。这种网络由一个输入层、几个卷积层和一个输出层组成。卷积层是最重要的组件,因为它们使用一组独特的权重和过滤器,使网络能够从输入数据中提取特征。数据可以有多种不同的形式,例如图像、音频和文本。这种特征提取过程使 CNN 能够识别数据中的模式。通过从数据中提取特征,CNN 使工程师能够创建更有效、更高效的应用程序。为了更好地理解 CNN,我们将首先讨论经典的线性规划。
经典控制工程中的线性程序执行
在控制工程中,任务在于从一个或多个传感器读取数据,处理数据,根据规则做出响应,并显示或转发结果。例如,温度调节器通过微控制器单元 (MCU) 每秒测量一次温度,微控制器单元从温度传感器读取数据。从传感器获取的值用作闭环控制系统的输入数据,并在循环中与设定温度进行比较。这是由 MCU 运行的线性执行的示例。该技术根据一组预编程值和实际值提供结论性结果。相比之下,概率在 AI 系统的运行中发挥着作用。
复杂模式和信号处理
还有许多应用程序需要处理输入数据,这些数据首先必须由模式识别系统进行解释。模式识别可以应用于不同的数据结构。在我们的示例中,我们将自己限制在一维和二维数据结构中。以下是一些示例:音频信号、心电图 (ECG)、光电容积描记器 (PPG)、一维数据和图像的振动、热图像以及二维数据的瀑布图。
在上述案例中使用的模式识别,将应用程序转换为 MCU 的传统代码极其困难。一个例子是识别图像中的物体(例如猫)。在这种情况下,要分析的图像是来自早期记录还是刚刚由相机传感器读取的图像都没有区别。分析软件会根据规则搜索可以归因于猫的模式:典型的尖耳朵、三角形鼻子或胡须。如果可以在图像中识别出这些特征,软件就会报告发现了猫。这里出现了一些问题:如果只显示猫的背面,模式识别系统会做什么?如果它没有胡须或在事故中失去了腿,会发生什么?尽管这些例外不太可能发生,模式识别代码必须检查大量涵盖所有可能异常的附加规则。即使在我们这个简单示例中,软件设置的规则也会很快变得繁琐。
机器学习如何取代传统规则
人工智能背后的想法是小规模地模仿人类的学习。我们不是制定大量的“如果-那么”规则,而是模拟一个通用的模式识别机器。这两种方法之间的关键区别在于,与一组规则不同,人工智能不会提供明确的结果。机器学习不会报告“我在图片中认出了一只猫”,而是得出这样的结果:“图片中有一只猫的概率为 97.5%。它也可能是一只豹子(2.1%)或一只老虎(0.4%)。”这意味着此类应用程序的开发人员必须在模式识别过程结束时做出决定。为此使用决策阈值。
另一个区别是,模式识别机器没有固定的规则。相反,它是经过训练的。在这个学习过程中,神经网络会看到大量的猫图像。最后,这个网络能够独立识别图像中是否有猫。关键是未来的识别并不局限于已知的训练图像。这个神经网络需要映射到 MCU 中。
模式识别机器的内部到底是什么样的?
人工智能中的神经元网络与人类大脑中的生物神经元网络相似。一个神经元有多个输入和一个输出。基本上,这样的神经元只不过是输入的线性变换——将输入乘以数字(权重,w)并添加一个常数(偏差,b),然后是一个固定的非线性函数,也称为激活函数。[1] 作为网络中唯一的非线性组件,此激活函数用于定义人工神经元触发的值范围。神经元的功能可以用数学方式描述为
其中 f = 激活函数,w = 权重,x = 输入数据,b = 偏差。数据可以作为单个标量、向量或矩阵形式出现。图 1 显示了一个具有三个输入和一个 ReLU[2] 激活函数的神经元。网络中的神经元总是按层排列。
图 1. 一个具有三个输入和一个输出的神经元。
如上所述,CNN 用于对输入数据中包含的对象进行模式识别和分类。CNN 分为多个部分:一个输入层、多个隐藏层和一个输出层。图 2 中可以看到一个小型网络,该网络具有三个输入、一个具有五个神经元的隐藏层和一个具有四个输出的输出层。所有神经元输出都连接到下一层的所有输入。图 2 中所示的网络无法处理有意义的任务,在此仅用于演示目的。即使在这个小型网络中,用于描述网络的方程中也有 32 个偏差和 32 个权重。
CIFAR 神经网络是一种广泛用于图像识别任务的 CNN。它由两种主要类型的层组成:卷积层和池化层,这两种层在神经网络的训练中都得到了很好的利用。卷积层使用一种称为卷积的数学运算来识别像素值数组中的模式。如图 3 所示,卷积发生在隐藏层中。此过程重复多次,直到达到所需的准确度。请注意,如果要比较的两个输入值(在本例中为图像和过滤器)相似,则卷积运算的输出值总是特别高。这称为过滤矩阵,也称为过滤内核或过滤器。然后将结果传递到池化层,池化层生成特征图 - 识别重要特征的输入数据的表示。这被视为另一个过滤矩阵。经过训练后 - 在网络的运行状态下 - 将这些特征图与输入数据进行比较。由于特征图包含与输入图像进行比较的对象类别特定特征,因此只有当内容相似时,神经元的输出才会触发。通过结合这两种方法,CIFAR 网络可用于高精度地识别和分类图像中的各种对象。
图 2。一个小型神经网络。
图 3. 使用 CIFAR-10 数据集训练的 CIFAR 网络模型。
CIFAR-10 是常用于训练 CIFAR 神经网络的一个特定数据集。它包含 60,000 张 32 × 32 彩色图像,分为 10 个类别,这些图像来自网页、新闻组和个人图像集等各种来源。每个类别有 6000 张图像,在训练集、测试集和验证集之间平均分配,使其成为测试新计算机视觉架构和其他机器学习模型的理想数据集。
卷积神经网络与其他类型网络的主要区别在于它们处理数据的方式。通过过滤,输入数据被依次检查其属性。随着串联的卷积层数量的增加,可识别的细节级别也会增加。在第一次卷积之后,该过程从简单的对象属性(例如边缘或点)开始,在第二次卷积之后继续到详细结构(例如角、圆、矩形等)。在第三次卷积之后,特征表示类似于图像中对象部分的复杂模式,并且通常是给定对象类所独有的。在我们最初的例子中,这些是猫的胡须或耳朵。特征图的可视化(如图 4 所示)对于应用程序本身来说不是必需的,但它有助于理解卷积。
即使是像 CIFAR 这样的小型网络,每层也包含数百个神经元,并且有许多层串联在一起。随着网络的复杂性和规模的增加,必要的权重和偏差的数量也会迅速增加。在图 3 所示的 CIFAR-10 示例中,已经有 200,000 个参数在训练过程中需要一组确定的值。可以通过池化层进一步处理特征图,从而减少需要训练的参数数量,同时仍保留重要信息。
图 4。CNN 的特征图。
如上所述,在 CNN 中,每次卷积之后,通常都会进行池化(在文献中也称为子采样)。这可以减少数据的维度。如果您查看图 4 中的特征图,您会注意到大区域几乎不包含任何有意义的信息。这是因为对象不是整个图像,而只是其中的一小部分。图像的其余部分未在此特征图中使用,因此与分类无关。在池化层中,指定池化类型(最大或平均)和窗口矩阵大小。在池化过程中,窗口矩阵以逐步方式在输入数据上移动。例如,在最大池化中,取窗口中的最大数据值。所有其他值都将被丢弃。这样,数据数量不断减少,最终与卷积一起形成各自对象类别的独特属性。
然而,这些卷积和池化组的结果是大量的二维矩阵。为了实现我们实际的分类目标,我们将二维数据转换为一个长的一维向量。转换是在所谓的扁平层中完成的,其后跟着一个或两个全连接层。最后两层中的神经元类型类似于图 2 所示的结构。我们的神经网络的最后一层的输出数量与要区分的类别数量完全相同。此外,在最后一层,数据也被归一化以产生概率分布(97.5% 为猫,2.1% 为豹,0.4% 为老虎等)。
至此,我们的神经网络建模就结束了。但是,内核和滤波器矩阵的权重和内容仍然未知,必须通过网络训练来确定,才能使模型正常工作。