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