机器学习缩小至物联网范围
尽管机器学习在嵌入式应用方面具有潜力,但是由于其本身较为复杂,采用起来并非一件易事。迄今为止,仅有一少部分在数学和计算机科学领域具有专业背景的专家在推动机器学习领域的发展。因此,典型的最终用户在尝试在自己的应用程序中利用机器学习时,往往没有头绪,不知何去何从。没有经验的开发人员面临的主要挑战是缺乏数据。在典型的工作流中,培训数据被输入到“学习算法”当中,从而生成一个“假设函数”,并尝试复制所需行为(如图 1)。然后,通过假设函数运行测试数据,得出的结果用于优化函数的性能。
培训数据一般由领域专家构建,他们通常都是勉强利用手头上现有的数据。使用处于开发阶段的目标系统实时数据测试假设函数是一件难事,而从该领域获取数据则通常更加困难。这一点阻碍了机器学习算法的发展,使其无法发挥最大潜在效能。机器学习建模部分的开发更加需要数据中心级计算、嵌入式处理器的输出算法并未得到调整等问题都阻碍了机器学习的发展。幸运的是,开发工具和硬件平台已浮出水面,可为嵌入式系统定制机器学习。
机器学习原型和原则
例如,SECO 的 UDOO App Inventor (UAPPI) 工具套件中包含适用于机器学习模型构建和算法培训的集成元件。UAPPI 是基于 Web 的网络的集成开发环境 (IDE)(基于 MIT)的开源 App Inventor 2 平台。
无需写入任何传统源代码,UAPPI 就能让用户设计系统和应用程序(如图 2)。相反,UAPPI 环境中的功能则需要为每个逻辑能力使用可视构建模块,才能开发和执行。因此,开发速度以及带有核心功能(包括图形用户界面[GUI]、网络连接性和数据库存储以及机器学习建模和算法培训)的原型设计速度都上了一个新台阶。
UAPPI 中的核心机器学习组件是 UdooSvm,它是一种监督式学习模型,是基于支持向量机 (SVM) 的关联数据集分类算法组。当提供包含特征向量和标签的培训数据集时,UdooSvm 会使用映射函数,将无标记的特征分类。为了更好地理解 UdooSvm 如何生成适合嵌入式系统使用的机器学习算法,让我们来看个例子。
凭借机器学习,种植出更优质的香蕉
思考一下,一个系统可以通过测量细菌散发出的气体,检测香蕉何时成熟。此假设系统包括一个在容器中的香蕉(戳了一些气孔)以及一个气体传感器阵列(用于每五分钟测量一次空气成分)。系统第一次接受培训时对与“成熟度”相关的气体种类和级别一无所知。因此,气体传感器阵列收集的数据最初会被标记为“优质水果”。随着时间的推移,香蕉已经完全成熟,空气成分发生变化,数据样本被标记为“即将腐烂”。香蕉最终变黑,散发出不同的混合气体,此数据被标记为“腐烂水果”。利用此数据集,便可以通过不同的支持向量机内核(包括线性、多项式或径向基函数[RBF]内核)创建学习模型。为判断其精确度,可从原始培训数据集中提取测试数据,并与每个模型(如图 3)产生的算法进行对比。
一旦选中最精确的学习模型,便可以使用它为“成熟度”系统生成一个 UdooSvm 算法。优化的 UdooSvm 算法可在嵌入式处理器目标上运行,但还是不太清楚具体特征向量代表什么,甚至不清楚它们如何生成。这意味着基于元件(如嵌入式传感器)中数据的特征向量和标签可并入算法中,如此一来,问题便会随着时间的推移迎刃而解。
只需添加智能
将 UAPPI 和 UdooSvm 算法优化,以用于与 SECO UDOO 开发主板(包括 UDOO x86 Arduino 101 主板,如图 4)配合工作。由于 UDOO x86 与 Arduino 库和防护板完全兼容,所以开发人员可快速从 Arduino 生态系统获得一系列传感器,从而为 UdooSvm 算法提供实时输入数据。
UDOO x86 适用的处理器包括英特尔凌动® 处理器 X5-E8000、英特尔® 赛扬® 处理器 N3160 或英特尔® 奔腾® 处理器 N3710。无论是仅有几个向量的算法还是具有多个数据源的复杂应用程序,这一组可扩展处理器都能支持。
机器学习的个性发展之路
UAPPI、UdooSvm 和 UDOO x86 不是唯一可用的机器学习原型开发工具,但却提供了某种意义上的抽象概念,从而使各种背景的开发人员都能更快地熟悉和了解机器学习。同时,通过访问 Arduino 生态系统,可以快速轻松地开发更为复杂的机器学习系统。不难想象,在不久的将来,人们就能在机器学习系统中部署初始工厂算法,然后根据他们在该领域获取的环境数据不断进行自我完善。当自动化成为紧跟技术世界快速发展步伐的唯一途径时,可独立学习的系统便势不可挡。