在过去的十年中,由于处理器速度的提高和大数据的来临,我们见证了机器学习算法的规模呈指数增长的过程。 最初,模型很小,可以使用中央处理器(CPU)中的一个或多个内核在本地计算机上运行。 不久之后,使用图形处理单元(GPU)进行计算成为处理大型数据集的必要条件,并且由于像谷歌联合实验室的SaaS平台和IaaS(例如亚马逊弹性计算云系统)等云服务的引入,GPU资源的获取变得更加容易。此时,算法仍然可以在单机上运行。 近期,我们见证了专业化的专用集成电路(ASIC)和张量处理单元(TPU)的发展,性能相当于叠加8块GPU。这些设备已经增强了在多个系统之间进行分布式学习的能力,使训练规模更庞大的模型成为可能。 随着GPT-3算法于2020年5月发布,更加印证了这一趋势。GPT-3算法号称拥有惊人的1750亿个参数的网络结构,是人脑中神经元数量的两倍多(约850亿),是有史以来第二大神经网络——图灵NLG(于2020年2月发布,包含约175亿个参数)神经元数目的10倍。一些人估计,训练该模型一次约耗费数百万美元,耗电量约为3GWh(大约相当于3座核电站1小时的发电量)。 尽管GPT-3和Turing-NLG的成就可圈可点,但自然而然地,这引发了一些业内人士对AI行业日益增长的能耗的批评,但是这也有助于激发AI界探索节能计算的兴趣。而更高效的算法、数据表示和计算,一直是微型机器学习领域的关注重点。

1. 微型机器学习是什么?

微型机器学习(TinyML)是机器学习与嵌入式物联网(IoT)设备的交叉方向。该领域是一门新兴的工程学科,具有革新许多行业的潜力。 TinyML的主要行业受益者是边缘计算和节能计算。TinyML源自物联网(IoT)的概念,物联网的传统思想是将数据从本地设备发送到云端进行处理。但有些人对此概念表示担忧,如隐私泄露、消息延迟、数据存储和能源效率等等。 1.1 能源效率 (通过有线或无线方式)传输数据非常耗能,比机载计算(特别是乘积累加单元)要高大约一个数量级。开发能够自己进行数据处理的物联网系统是最节能的方法。 人工智能的先驱们已经讨论了“以数据为中心”的计算思想(相对于云模型的“以计算为中心”的思想),现在我们开始看到它正在发挥作用。 1. 2 隐私泄露 传输数据可能会导致隐私泄露。 此类数据可能被恶意行为者拦截,并且当存储在单个位置(例如云端)时,其固有的安全性会降低。通过将数据主要保留在设备上并最大程度地减少通信,可以提高数据安全性以及保护隐私信息。 1.3 数据存储 对于许多物联网设备而言,它们获取的数据毫无价值。想象一下,一个安保摄像头24小时记录着一栋大厦的入口情况。在这一天的大部分时间里,摄像机镜头没有派上用场,因为大厦内外一切正常。 通过设立仅在必要时才激活的更智能化的系统,会降低存储容量需求,并减少了传输到云端所需的数据量。 1.4 消息延迟 对于标准物联网设备,这些设备将数据传输到云中进行处理,然后根据算法的输出返回响应。从这个意义上讲,该设备只是通向云模型的便捷网关。这样的设备非常笨拙,输出结果的快慢完全取决于互联网的速度。如果你的网速很慢,设备的速度也会变慢。对于具有机载自动语音识别功能的智能物联网设备,由于减少了(如果不是没有)对外部通信的依赖性,可以降低延迟。 这些问题催生了边缘计算的发展,即在边缘设备(云的“边缘”设备)上执行处理工作的想法。这些设备在内存空间、计算能力和功耗方面都受到资源的高度限制,从而激发相关工作者开发更高效的算法、数据结构以及计算方法。 这种改进也适用于较大的模型,在不影响模型精度的前提下,将机器学习模型的效率提高几个数量级。例如,Microsoft开发的Bonsai算法可以小到2 KB,但比典型的40 MB kNN算法或4 MB神经网络具有更好的性能。这个结果听起来可能微不足道,但是模型的规模缩减到万分之一时,与缩减前的精度依然保持相同,着实令人叹为观止。 如此小的模型可以在具有2 KB RAM的Arduino Uno上运行——简而言之,你现在可以利用5美元的微控制器构建上述机器学习模型。 机器学习现在正处于两种计算范式之间的分岔路口:以算力为中心的计算和以数据为中心的计算。在以算力为中心的范式中,由数据中心的实例对数据进行存储和分析;而在以数据为中心的范式中,处理是在数据源本地完成的。尽管我们似乎正在迅速迈向以算力为中心的范式上限,但是以数据为中心的范式的工作才刚刚开始。 物联网设备和嵌入式机器学习模型在现代世界中变得比比皆是(预计到2020年底,活跃设备将超过200亿台)。其中许多设备你甚至可能都没有注意到。智能门铃、智能恒温器、智能手机,只要你说几句话甚至“拿起手机”就可以“唤醒”。

2. TinyML实例

先前,复杂电路是设备执行各种命令所必需的。现在,机器学习使此类硬件“智能”抽象成软件的可能性越来越大,使得嵌入式设备变得越来越简单、轻巧和灵活。 使用嵌入式设备进行机器学习所带来的挑战是相当大的,但是在这方面也已经取得了很大的进展。在微控制器上部署神经网络的关键挑战是如何实现低内存占用率,以及利用有限的功率和算力资源训练神经网络模型。 TinyML最显而易见的应用实例也许就是智能手机。这些设备会持续积极地聆听“唤醒词”,例如Android智能手机的“ Hey Google”或iPhone的“ Hey Siri”。利用智能手机的主中央处理器(CPU)运行程序实现上述功能,对于现代iPhone来说,其主处理器频率为1.85 GHz,将在短短几个小时内耗尽电量。即使对于大多数人一天最多使用几次的应用程序来说,这种耗电速度也难以接受。 为了解决这个问题,开发人员创建了专用的低功耗硬件,该硬件可以用小电池(例如CR2032环形“纽扣”电池)供电。这些功能使电路即使在CPU未运行时(基本上在屏幕不亮时)也保持运行状态。 这些电路消耗的功率仅为1毫瓦,使用标准的CR2032电池可供电长达一年。

目前,TinyML的两个主要关注领域如下: 1、关键词识别 大多数人对这个应用程序了如指掌。“Hey Siri”和“Hey Google”是关键字的示例(通常与“热词”或“唤醒词”同义)。这类设备连续收听来自麦克风的音频输入,并被训练成只对特定的声音序列做出响应,这些声音序列与所学的关键词相对应。这些设备比自动语音识别(ASR)应用程序更简单,并且相应地占用了更少的资源。某些设备(例如Google智能手机)利用级联架构来提供扬声器验证以确保安全性。 2、视觉唤醒词 视觉唤醒词是一种基于图像的唤醒词的类比。将其视为图像的二进制分类,以表示存在或不存在。例如,智能照明系统可以被设计成当它检测到人的存在时开启,当人们离开时关闭。类似地,野生动物摄影师可以利用智能系统在特定动物出现时拍照,而当他们监测到人类时,可以使用安全摄像机拍摄照片。

3. inyML如何运作?

TinyML算法的工作原理与传统的机器学习模型非常相似。通常情况下,在用户的计算机上或云端训练模型。后训练是真正的TinyML工作的开始,这个过程通常被称为“深度压缩”。 3.1 模型蒸馏 后训练,即以更紧凑的表征形式创建模型,对模型进行修改。剪枝和知识蒸馏就是实现这一目的的两种技术。 知识蒸馏的基本思想是,较大的网络内部会存在一些稀疏或冗余特征。虽然大型网络具有较高的表示能力,但是如果网络容量未达到饱和,则可以在具有较低表示能力的较小网络(即较少的神经元)中进行表示。2015年Hinton等人将教师模型中嵌入的信息称为“暗知识”,迁移给学生模型。

3.2 量化 蒸馏的后续步骤是模型量化,将模型后训练成与嵌入式设备的架构兼容的格式。 为什么需要量化? 想象一下使用ATmega328P微控制器的Arduino Uno,该微控制器使用8位算术编码。要在Uno上运行模型,理想情况下,模型权重必须存储为8位整数值(而许多台式机和笔记本电脑使用32位或64位浮点表示法)。通过对模型进行量化,权重的存储占用空间将减少4倍(对于从32位到8位值的量化),准确率通常受到的影响很小(通常为1-3%)。

3.3 霍夫曼编码 编码是一个可选步骤,有时会通过以最大有效的方式存储数据——通常通过著名的霍夫曼编码,进一步减小模型大小。

3.4 编译 一旦模型被量化和编码,它就被转换成一种被某种形式的轻量级神经网络解释器可解释的格式,其中最流行的可能是TF-Lite(大小约500kb)和TF-Lite Micro(大小约20kb)。然后将模型编译为C或C ++代码(大多数微控制器使用的语言以有效利用内存),并由解释器在设备上运行。

3.5 为什么不在设备上训练呢? 在设备上进行训练会引发额外的问题。由于数值精度降低,训练网络以确保达到所需的精度水平通常极为困难。标准台式计算机上的自动微分方法近似精确到机器精度。导数计算精确到10^-16是难以实现的,但是仅利用8位值的自动微分将导致糟糕的结果。在反向传播过程中,这些导数将被组合并最终用于更新神经网络的参数。 也就是说,神经网络是用16位和8位浮点数训练的。 “Deep Learning with Limited Numerical Precision”是Suyog Gupta及其同事于2015年发表的第一篇关于在深度学习中降低数值精度的论文。本文的结果很有趣,表明32位浮点表示可以简化为16位定点表示,而精度基本上没有下降。然而,这是使用随机四舍五入的唯一情况,因为平均而言,它会产生无偏的结果。 2018年,Naigang Wang和同事在他们的论文“Training Deep Neural Networks with 8-bit Floating Point Numbers”中使用8位浮点数训练神经网络。由于需要在反向传播过程中保持梯度计算的保真度(在使用自动微分时能够达到机器精度),使用8位浮点数来训练神经网络(而不是推理)更具挑战性。

3.6 计算效率如何? 我们还可以对模型进行裁剪,使其计算效率更高。广泛部署在MobileNetV1和MobileNetV2等移动设备上的模型架构就是很好的例子,其本质是卷积神经网络,它们重塑了卷积运算以使其具有更高的计算效率。这种更有效的卷积形式称为深度可分离卷积。还可以使用基于硬件的评测和神经架构搜索针对延迟优化架构。

4. 下一代AI革命

能够在资源受限的设备上运行机器学习模型,将为许多新的可能性打开大门。 TinyML也许有助于使标准机器学习更加节能,从而减少人们对数据科学引发环境问题的担忧。此外,TinyML赋予嵌入式设备基于数据驱动算法的新智能,可以用于从预防性维护到森林中的鸟鸣声检测等许多方面。 尽管某些机器学习从业者无疑将继续扩大模型的规模,机器学习算法朝着内存占用率低、计算加速和能源利用率更高的方向发展的趋势正如火如荼。

内容中包含的图片若涉及版权问题,请及时与我们联系删除