Skip to main content

编写会学习的程序

发布于2022-05-11

人工智能 (AI) 是汽车、医疗保健、工业系统和越来越多的应用领域取得巨大进步的核心要素。随着人们对人工智能的兴趣不断上升,人工智能的本质让大家对其在日常生活中日益增长的作用感到了一些困惑,甚至是恐惧。但实际上,支撑越来越多智能产品的人工智能是基于一些简单直接但并非微不足道的工程方法,它们提供的能力与科幻小说中终结人类文明的人工智能相去甚远。

人工智能的定义既有仍然处于概念阶段的最先进形式(机器在行为上类似于人类),也有我们更熟悉的形式(机器经过训练可以执行特定任务)。在其最高级的形式中,真正的人工智能将在没有人类明确指示和控制的情况下运行,以独立得出某种结论,或像人类一样采取某种行动。而在我们更熟悉的形式中,人工智能以工程为导向的一端,机器学习 (ML) 方法通常为当前的人工智能应用提供计算基础。这些方法以惊人的速度和准确性生成对输入数据的响应,而无需使用显式编写的代码来提供这些响应。软件开发人员是编写代码来处理传统系统中的数据,而ML开发人员则是使用数据来训练机器学习算法(如人工神经网络模型)如何生成对数据的期望响应。

基本神经网络模型是如何建立的?

神经网络模型是很常见的机器学习类型之一,它将数据从输入层通过隐藏层传送到输出层(图1)。如下所述,对隐藏层进行训练,以执行一系列转换,提取区分不同类别的输入数据所需的特征。这些转换在加载到输出层的值中达到顶点,其中每个输出单元提供一个值,代表输入数据属于某个类别的概率。通过这种方法,开发人员可以使用适当的神经网络架构对图像或传感器测量值等数据进行分类。

图1:神经网络由多层人工神经元组成,人工神经元经过训练以区分不同类别的输入数据。(图源:Wikipedia

神经网络架构有多种形式,从图1所示的简单前馈神经网络,到由大量隐藏层和包含数十万个神经元的独立层所构成的深层神经网络 (DNN)。不过,这些架构虽各有不同,但通常都基于具有多个输入和单个输出的人工神经元单元(图2)。

图2激活函数对神经元的加权输入总和进行运算,人工神经元根据激活函数产生输出。(图源:Wikipedia

在前馈神经网络中,隐藏层j中的某个神经元nij对其i个输入 (xi) 求和,再由输入特定的加权 (wij) 进行调整,然后加上层特定的偏差系数 (bj)(图中未显示),如下所示:

Sj = åiwijxi+bj

最后,求和得到的值Sj被激活函数转换为单个值输出。按照要求,这些函数可以采用多种形式,例如简单的阶跃函数、反正切函数或非线性映射,如修正线性单元 (ReLU),其输出0表示Sj<=0,或输出Sj表示Sj>0。

尽管它们都是为提取数据的显著特征而设计,但不同的架构可能会使用显著不同的转换类型来执行此操作。例如,用于图像识别的卷积神经网络 (CNN) 使用核卷积。在这里,被称为核的函数对输入图像进行卷积操作,将其转换为一组特征映射。后续层执行更多卷积操作或其他功能,进一步提取并转换特征,直到CNN模型生成与更简单的神经网络类似的分类概率输出。

不过对于开发人员来说,由于有了机器学习开发工具,几种流行神经网络架构的基本数学原理在很大程度上是透明的[在本期其他地方讨论]。使用这些工具,开发人员可以非常轻松地实现一个神经网络模型,并开始使用一组被称为训练集的数据对其进行训练。这个训练数据集包含一组具有代表性的数据观测值,以及每个观测值的正确分类,是神经网络模型开发中比较有挑战性的要素之一。

神经网络模型是如何训练和部署的?

过去,创建训练集的开发人员别无选择,只能在一个典型训练集中处理数千个必需的观测对象,并用正确的名称手动标记每个观测对象。例如,要为道路标志识别应用创建训练集,他们需要查看道路标志的图像,并用正确的标志名称标记每个图像。公共域的预标记数据集让许多ML研究人员避免了这项任务,能够专注于算法开发。不过对于生产型ML应用,这项标记任务可能会带来重大挑战。高级ML开发人员经常在一个名为“迁移学习”的过程中使用预先训练的模型来帮助缓解这个问题。

尽管新兴的工具和服务可以帮助准备数据,但训练集的特征才对神经网络模型的有效性和整体应用起着关键作用。在选择包含和排除哪些观测对象时所做的决定基本取决于需要仔细考虑的灵活性、特异性和公平性。因此,创建理想的训练集所需的努力水平堪比实现机器学习程序本身所需的努力。

在创建训练集并实现了神经网络模型后,模型训练过程会通过模型迭代运行训练数据。在每次迭代中,训练过程会执行一个损失函数,该函数测量数据标签提供的期望结果与模型生成的计算结果之间的差异。使用一种被称为“反向传播”的方法,训练过程使用该错误信息来调整权重值和其他模型参数,以用于下一次迭代。这个过程会一直持续到损失函数落在某个阈值内,或者经过指定次数的迭代后无法进一步改善。

在训练完成后,通过执行大量优化,包括移除不需要的结构(如反向传播机制),消除对分类过程贡献甚微的神经元,甚至合并层,将模型转换为推理模型。程序通过加载机器学习工具和框架以各种标准格式保存的紧凑表示来实现推理模型。

神经网络并非总是理想解决方案

虽然神经网络可能是识别能力更强的机器学习类型,但对于有些应用来说,它们绝不是唯一选择,也不是完美选择。神经网络属于一种被称为“监督学习”的机器学习类型,因为它们依赖于标记的数据集来训练算法。在物联网 (IoT) 或工业系统等基于传感器的应用中,支持向量机 (SVM) 或决策树等其他监督学习算法提供了一种更简单、更紧凑的等效替代方法。

SVM方法通过查找输入数据点位于训练数据所定义的n维空间内的位置来对数据进行分类。决策树方法利用训练数据构建模型,高效地将输入数据分解为一系列优化决策。与神经网络的输出层一样,决策树的最终叶节点提供数据属于特定类别的概率。这种方法在对传感器数据(例如同步加速度计和陀螺仪测量值)进行分类以检测复杂运动的发生时尤其高效。事实上,对决策树的支持已集成到STMicroelectronics的一些惯性测量单元中。

这些监督学习方法可能是机器学习中识别能力很强的方法,但其他类型的机器学习,包括无监督学习、强化学习和许多其他类型的学习,也已经被用于解决实际工程问题。顾名思义,无监督学习可以在未标记的数据中发现关系,使用聚类技术来识别具有相似特征的数据。这些技术在训练集开发和特征工程中特别有用,可帮助开发人员优化用于训练和推理的数据特点或特征的选择。强化学习应用于机器人系统编程中,它通过效用测定来优化训练,与在神经网络训练中使用损失函数没什么两样。

结语

神经网络等ML方法基于复杂的数学概念,构成了越来越多智能产品的基础,让这些智能产品能够识别特定的图像或传感器测量值并加以分类。对于开发人员来说,在他们的应用中实现神经网络模型和其他基于ML的解决方案可以让开发过程更加清晰明了,但绝不是单纯的简化。

作者简介

Stephen Evanczuk拥有20多年的电子行业编辑经验,主题涉猎广泛,涵盖硬件、软件、系统以及包括物联网在内的各种应用。他拥有神经网络领域的神经科学博士学位,曾经从事航空航天领域大规模分布式安全系统和算法加速方法方面的工作。目前,他不仅会撰写技术和工程文章,还在研究深度学习在识别和推荐系统方面的应用。