编译 | bluemin
编辑 | 陈彩娴
在过去的十年中,由于处理器速度的提高和大数据的来临,我们见证了机器学习算法的规模呈指数增长的过程。
最初,模型很小,可以使用中央处理器(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、能源效率
(通过有线或无线方式)传输数据非常耗能,比机载计算(特别是乘积累加单元)要高大约一个数量级。开发能够自己进行数据处理的物联网系统是最节能的方法。 人工智能的先驱们已经讨论了“以数据为中心”的计算思想(相对于云模型的“以计算为中心”的思想),现在我们开始看到它正在发挥作用。
2、隐私泄露
传输数据可能会导致隐私泄露。 此类数据可能被恶意行为者拦截,并且当存储在单个位置(例如云端)时,其固有的安全性会降低。通过将数据主要保留在设备上并最大程度地减少通信,可以提高数据安全性以及保护隐私信息。
3、数据存储
对于许多物联网设备而言,它们获取的数据毫无价值。想象一下,一个安保摄像头24小时记录着一栋大厦的入口情况。在这一天的大部分时间里,摄像机镜头没有派上用场,因为大厦内外一切正常。 通过设立仅在必要时才激活的更智能化的系统,会降低存储容量需求,并减少了传输到云端所需的数据量。
4、消息延迟
对于标准物联网设备,这些设备将数据传输到云中进行处理,然后根据算法的输出返回响应。从这个意义上讲,该设备只是通向云模型的便捷网关。这样的设备非常笨拙,输出结果的快慢完全取决于互联网的速度。如果你的网速很慢,设备的速度也会变慢。对于具有机载自动语音识别功能的智能物联网设备,由于减少了(如果不是没有)对外部通信的依赖性,可以降低延迟。
这些问题催生了边缘计算的发展,即在边缘设备(云的“边缘”设备)上执行处理工作的想法。这些设备在内存空间、计算能力和功耗方面都受到资源的高度限制,从而激发相关工作者开发更高效的算法、数据结构以及计算方法。
这种改进也适用于较大的模型,在不影响模型精度的前提下,将机器学习模型的效率提高几个数量级。例如,Microsoft开发的Bonsai算法可以小到2 KB,但比典型的40 MB kNN算法或4 MB神经网络具有更好的性能。这个结果听起来可能微不足道,但是模型的规模缩减到万分之一时,与缩减前的精度依然保持相同,着实令人叹为观止。 如此小的模型可以在具有2 KB RAM的Arduino Uno上运行——简而言之,你现在可以利用5美元的微控制器构建上述机器学习模型。
机器学习现在正处于两种计算范式之间的分岔路口:以算力为中心的计算和以数据为中心的计算。在以算力为中心的范式中,由数据中心的实例对数据进行存储和分析;而在以数据为中心的范式中,处理是在数据源本地完成的。尽管我们似乎正在迅速迈向以算力为中心的范式上限,但是以数据为中心的范式的工作才刚刚开始。
物联网设备和嵌入式机器学习模型在现代世界中变得比比皆是(预计到2020年底,活跃设备将超过200亿台)。其中许多设备你甚至可能都没有注意到。智能门铃、智能恒温器、智能手机,只要你说几句话甚至“拿起手机”就可以“唤醒”。
图注:云服务“金字塔”(图片来源:eBizSolutions)
2
TinyML实例
先前,复杂电路是设备执行各种命令所必需的。现在,机器学习使此类硬件“智能”抽象成软件的可能性越来越大,使得嵌入式设备变得越来越简单、轻巧和灵活。
使用嵌入式设备进行机器学习所带来的挑战是相当大的,但是在这方面也已经取得了很大的进展。在微控制器上部署神经网络的关键挑战是如何实现低内存占用率,以及利用有限的功率和算力资源训练神经网络模型。
TinyML最显而易见的应用实例也许就是智能手机。这些设备会持续积极地聆听“唤醒词”,例如Android智能手机的“ Hey Google”或iPhone的“ Hey Siri”。利用智能手机的主中央处理器(CPU)运行程序实现上述功能,对于现代iPhone来说,其主处理器频率为1.85 GHz,将在短短几个小时内耗尽电量。即使对于大多数人一天最多使用几次的应用程序来说,这种耗电速度也难以接受。
为了解决这个问题,开发人员创建了专用的低功耗硬件,该硬件可以用小电池(例如CR2032环形“纽扣”电池)供电。
这些功能使电路即使在CPU未运行时(基本上在屏幕不亮时)也保持运行状态。这些电路消耗的功率仅为1毫瓦,使用标准的CR2032电池可供电长达一年。
看起来好像不太可能,但考虑如何节能确实迫在眉睫。能量是许多电子设备的限制因素。任何需要市电的设备都被限制在有线路的地方,当同一位置有十几个设备运转时,供电系统可能会很快不堪重负。市电也效率低下且价格昂贵。将电源电压(在美国约为120v)转换为典型的电路电压范围(通常约为5 V)会浪费大量能量。任何有笔记本电脑充电器的人在拔掉充电器插头时都可能知道这一点。充电器内变压器的热量在电压转换过程中被浪费掉了。
即使是带电池的设备,由于电池寿命也很有限,因此需要频繁对接。许多消费类设备的设计使得电池仅能维持一个工作日。TinyML设备可以用硬币大小的电池持续工作一年,这意味着可以把它们置于远程环境中,只在必要时进行通信,从而节省能源。
唤醒词并不是我们看到的唯一无缝嵌入智能手机中的TinyML。加速计数据用于确定是否有人刚刚拿起手机,这会唤醒CPU并打开屏幕。
显然,这些并不是TinyML唯一可能的应用场景。事实上,TinyML为企业和爱好者提供了许多扣人心弦的机会,可借此生产更智能的物联网设备。当今世界,数据的重要性日益凸显,将机器学习资源分配到偏远地区内存受限的设备上,可能会对农业、天气预报或地震学等数据密集型行业的发展大有裨益。
毫无疑问,赋予边缘设备执行数据驱动处理的能力,将引发工业过程的范式转变。例如,监测作物生长过程的设备在监测到土壤湿度、特定气体(例如,苹果成熟时释放出乙烷)或特定大气条件(如大风、低温或高湿度)等异常特征信息时,适时发送“求助”信息,将极大地促进作物生长,从而提高作物产量。
另一个示例是装有摄像头智能门铃,该摄像头可以通过面部识别确定哪些人在场。这可以用于安防,或者甚至只是当有人在场时,门铃上的摄像机信号会传输到房屋里的电视上,这样居民们就知道谁在门口。
目前,TinyML的两个主要关注领域如下:
1、关键词识别
大多数人对这个应用程序了如指掌。“Hey Siri”和“Hey Google”是关键字的示例(通常与“热词”或“唤醒词”同义)。这类设备连续收听来自麦克风的音频输入,并被训练成只对特定的声音序列做出响应,这些声音序列与所学的关键词相对应。这些设备比自动语音识别(ASR)应用程序更简单,并且相应地占用了更少的资源。某些设备(例如Google智能手机)利用级联架构来提供扬声器验证以确保安全性。
2、视觉唤醒词
视觉唤醒词是一种基于图像的唤醒词的类比。将其视为图像的二进制分类,以表示存在或不存在。例如,智能照明系统可以被设计成当它检测到人的存在时开启,当人们离开时关闭。类似地,野生动物摄影师可以利用智能系统在特定动物出现时拍照,而当他们监测到人类时,可以使用安全摄像机拍摄照片。下图更广泛地概述了TinyML在当前机器学习中的用例。
图注:TinyML的机器学习用例(图片来源:NXP)
3
TinyML如何运作?
TinyML算法的工作原理与传统的机器学习模型非常相似。通常情况下,在用户的计算机上或云端训练模型。后训练是真正的TinyML工作的开始,这个过程通常被称为“深度压缩”。
图注:深度压缩过程图(图片来源:https://arxiv.org/pdf/1510.00149.pdf)
3.1 模型蒸馏
后训练,即以更紧凑的表征形式创建模型,对模型进行修改。剪枝和知识蒸馏就是实现这一目的的两种技术。
知识蒸馏的基本思想是,较大的网络内部会存在一些稀疏或冗余特征。虽然大型网络具有较高的表示能力,但是如果网络容量未达到饱和,则可以在具有较低表示能力的较小网络(即较少的神经元)中进行表示。2015年Hinton等人将教师模型中嵌入的信息称为“暗知识”,迁移给学生模型。
下图阐释了知识蒸馏的过程。
图注:深度压缩过程示意图(资料来源:https://arxiv.org/pdf/1510.00149.pdf)
在此图中,“老师”是“训练有素”的卷积神经网络模型。老师的任务是将其“知识”迁移到参数较少的较小的卷积网络模型中,即“学生”。此过程称为“知识蒸馏”,用于将相同的知识包含在较小的网络中,从而提供了一种网络压缩的思路,以便可以将其用于更多受内存限制的设备上。
同样,剪枝可以使模型的表示更加紧凑。 广义上讲,修剪尝试删除对输出预测几乎没有用的神经元。这通常与较小的神经权重相关联,而由于在推理过程中它们的重要性较高,因此会保留较大的权重。然后,再训练剪枝后的神经网络结构,对输出结果进行微调。
图注:模型剪枝示意图
3.2 量化
蒸馏的后续步骤是模型量化,将模型后训练成与嵌入式设备的架构兼容的格式。为什么需要量化? 想象一下使用ATmega328P微控制器的Arduino Uno,该微控制器使用8位算术编码。要在Uno上运行模型,理想情况下,模型权重必须存储为8位整数值(而许多台式机和笔记本电脑使用32位或64位浮点表示法)。通过对模型进行量化,权重的存储占用空间将减少4倍(对于从32位到8位值的量化),准确率通常受到的影响很小(通常为1-3%)。
图注:8位编码(用于重构32位浮点数)过程中的量化误差示意图。(图片来源:https://tinymlbook.com/)
由于量化误差的存在,某些信息可能会在量化过程中丢失(例如,在基于整数的平台上,浮点表示形式的值为3.42可能会被截断为3)。 为了解决此问题,人们还提出了将量化感知(QA)训练作为替代方案。QA训练实质上是在训练期间将网络限制为仅使用量化设备上可用的值。
3.3 霍夫曼编码
编码是一个可选步骤,有时会通过以最大有效的方式存储数据——通常通过著名的霍夫曼编码,进一步减小模型大小。
3.4 编译
一旦模型被量化和编码,它就被转换成一种被某种形式的轻量级神经网络解释器可解释的格式,其中最流行的可能是TF-Lite(大小约500kb)和TF-Lite Micro(大小约20kb)。然后将模型编译为C或C ++代码(大多数微控制器使用的语言以有效利用内存),并由解释器在设备上运行。
图注:TinyML应用程序的工作流程(来源:Pete Warden和Daniel Situnayake撰写的TinyML书)
tinyML的大部分技能都用于处理复杂的微控制器领域的问题。TF Lite和TF Lite Micro非常小,因为任何不必要的功能都已被删除。然而,其中包括了一些有用的功能,如调试和可视化。这意味着,如果在部署期间出现错误,很难辨别问题出在哪里。
此外,当模型必须存储在设备上时,模型还必须能够具备推理能力。这意味着微控制器必须有足够大的内存来运行(1)其操作系统和相关库,(2)神经网络解释器,如TF-Lite,(3)存储的神经网络权重和神经网络结构,以及(4)推理过程中的中间结果。因此,量化算法的峰值内存使用率、内存占用量、乘法累加单元(MACs)数量和精度等经常在tinyML研究论文中被引用。
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-bitFloating Point Numbers”中使用8位浮点数训练神经网络。
由于需要在反向传播过程中保持梯度计算的保真度(在使用自动微分时能够达到机器精度),使用8位浮点数来训练神经网络(而不是推理)更具挑战性。
3.6 计算效率如何?
我们还可以对模型进行裁剪,使其计算效率更高。广泛部署在MobileNetV1和MobileNetV2等移动设备上的模型架构就是很好的例子,其本质是卷积神经网络,它们重塑了卷积运算以使其具有更高的计算效率。这种更有效的卷积形式称为深度可分离卷积。还可以使用基于硬件的评测和神经架构搜索针对延迟优化架构。
4
下一代AI革命
能够在资源受限的设备上运行机器学习模型,将为许多新的可能性打开大门。
TinyML也许有助于使标准机器学习更加节能,从而减少人们对数据科学引发环境问题的担忧。此外,TinyML赋予嵌入式设备基于数据驱动算法的新智能,可以用于从预防性维护到森林中的鸟鸣声检测等许多方面。
尽管某些机器学习从业者无疑将继续扩大模型的规模,机器学习算法朝着内存占用率低、计算加速和能源利用率更高的方向发展的趋势正如火如荼。
TinyML仍处于起步阶段,有关该主题的专家很少。我建议有兴趣的读者阅读参考文献中的一些论文,这是TinyML领域中的一些重要论文。这一领域正在蓬勃发展,并将在未来几年内成为人工智能在工业领域的一个新的重要应用。敬请关注!
参考链接:
[1] Hinton, Geoffrey & Vinyals, Oriol & Dean, Jeff. (2015). Distilling the Knowledge in a Neural Network.
[2] D. Bankman, L. Yang, B. Moons, M. Verhelst and B. Murmann, “An always-on 3.8μJ/86% CIFAR-10 mixed-signal binary CNN processor with all memory on chip in 28nm CMOS,” 2018 IEEE International Solid-State Circuits Conference — (ISSCC), San Francisco, CA, 2018, pp. 222–224, doi: 10.1109/ISSCC.2018.8310264.
[3] Warden, P. (2018). Why the Future of Machine Learning is Tiny. Pete Warden’s Blog.
[4] Ward-Foxton, S. (2020). AI Sound Recognition on a Cortex-M0: Data is King. EE Times.
[5] Levy, M. (2020). Deep Learning on MCUs is the Future of Edge Computing. EE Times.
[6] Gruenstein, Alexander & Alvarez, Raziel & Thornton, Chris & Ghodrat, Mohammadali. (2017). A Cascade Architecture for Keyword Spotting on Mobile Devices.
[7] Kumar, A., Saurabh Goyal, and M. Varma. (2017). Resource-efficient Machine Learning in 2 KB RAM for the Internet of Things.
[8] Zhang, Yundong & Suda, Naveen & Lai, Liangzhen & Chandra, Vikas. (2017). Hello Edge: Keyword Spotting on Microcontrollers.
[9] Fedorov, Igor & Stamenovic, Marko & Jensen, Carl & Yang, Li-Chia & Mandell, Ari & Gan, Yiming & Mattina, Matthew & Whatmough, Paul. (2020). TinyLSTMs: Efficient Neural Speech Enhancement for Hearing Aids.
[10] Lin, Ji & Chen, Wei-Ming & Lin, Yujun & Cohn, John & Gan, Chuang & Han, Song. (2020). MCUNet: Tiny Deep Learning on IoT Devices.
[11] Chen, Tianqi & Moreau, Thierry. (2020). TVM: An Automated End-to-End Optimizing Compiler for Deep Learning.
[12] Weber, Logan, and Reusch, Andrew (2020). TinyML — How TVM is Taming Tiny.
[13] Krishnamoorthi, Raghuraman. (2018). Quantizing deep convolutional networks for efficient inference: A whitepaper.
[14] Yosinski, Jason & Clune, Jeff & Bengio, Y. & Lipson, Hod. (2014). How transferable are features in deep neural networks?.
[15] Lai, Liangzhen & Suda, Naveen & Chandra, Vikas. (2018). CMSIS-NN: Efficient Neural Network Kernels for Arm Cortex-M CPUs.
[16] Chowdhery, Aakanksha & Warden, Pete & Shlens, Jonathon & Howard, Andrew & Rhodes, Rocky. (2019). Visual Wake Words Dataset.
[17] Warden, Pete. (2018). Speech Commands: A Dataset for Limited-Vocabulary Speech Recognition.
[18] Zemlyanikin, Maxim & Smorkalov, Alexander & Khanova, Tatiana & Petrovicheva, Anna & Serebryakov, Grigory. (2019). 512KiB RAM Is Enough! Live Camera Face Recognition DNN on MCU. 2493–2500. 10.1109/ICCVW.2019.00305.
原文链接:https://towardsdatascience.com/tiny-machine-learning-the-next-ai-revolution-495c26463868
(转载)