首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

微型机器学习:下一次AI革命

由美国宇航局推动开始的电子产品小型化成为整个消费品行业(的趋势)。现在我们把贝多芬的完整作品带在领章上使用耳机听。—天体物理学家、科学评论员尼尔-德格拉斯-泰森(Neil deGrasse Tyson)[......]超低功耗嵌入式设备的普及,再加上像TensorFlow Lite for Microcontrollers这样的嵌入式机器学习框架的引入,将使人工智能驱动的物联网设备大规模扩散。— 哈佛大学副教授 Vijay Janapa Reddi

嵌入式设备的微小机器学习(TinyML)概述

这是关于微型机器学习系列文章的第一篇。本文的目的是向读者介绍微型机器学习的理念及其未来的潜力。关于具体应用、实现和教程的深入讨论将在该系列后续文章中进行。

简介

在过去的十年里,由于处理器速度的提高和大数据的出现,我们见证了机器学习算法的规模成倍增长。最初,模型小到可以使用中央处理单元(CPU)内的一个或多个内核在本地机器上运行。

不久之后,使用图形处理单元(GPU)进行计算成为处理较大数据集的必要条件,并且由于引入了基于云的服务,如SaaS平台(如Google Colaboratory)和IaaS(如Amazon EC2 Instances),变得更加容易实现。此时,算法仍然可以在单机上运行。

最近,我们看到了专门的应用专用集成电路(ASIC)和张量处理单元(TPU)的发展,它们可以包装出约8个GPU的功率。这些设备已经增强了在多个系统之间分布式学习的能力,以尝试建立得到更多更大的模型。

最近,随着GPT-3算法(2020年5月发布)的发布,这种情况达到了顶峰,它拥有一个包含1750亿个神经元的惊人网络架构—比人类大脑中存在的神经元数量(约850亿)多出一倍。这比有史以来创建的下一个最大的神经网络Turing-LG(2020年2月发布,包含约175亿个参数)的神经元数量多10倍以上。有估计称,该模型的训练成本约为1000万美元,耗电量约为3GWh(约为三座核电站一小时的发电量)。

虽然GPT-3和Turing-LG取得的成绩值得称赞,当然也自然导致了一些业内人士对人工智能行业日益增长的碳足迹提出了批评。不过,这也有助于激发人工智能学界对更加节能计算的兴趣。这样的想法,比如更高效的算法、数据表示和计算,几年来一直是一个看似不相关领域的焦点:微型机器学习。

微型机器学习(tinyML)是机器学习和嵌入式物联网(IoT)设备的交叉领域。该领域是一门新兴的工程学科,有可能给许多行业带来革命性的变化。

tinyML的主要行业受益者是在边缘计算和节能计算领域。TinyML源于物联网(IoT)的概念。传统的物联网概念是将数据从本地设备发送到云端进行处理。一些人对这个概念提出了一定的担忧:包括隐私、延迟、存储和能效等等。

能源效率。传输数据(通过电线或无线)是非常耗能的,比机载计算(具体来说是乘积单元)耗能约一个数量级。开发能够自己进行数据处理的物联网系统是最节能的方法。AI先驱们讨论这种 "以数据为中心 "的计算理念(相对于云模式的 "以计算为中心")已经有一段时间了,现在我们开始看到它的发挥。

隐私。传输数据可能会被侵犯隐私。这些数据可能会被恶意行为者拦截,而且当数据被储存在一个单一的位置(如云端)时,其本质上变得不那么安全。通过将数据主要保存在设备上并尽量减少通信,这可以提高安全性和隐私性。 

存储。对于很多物联网设备来说,它们获取的数据是没有价值的。想象一下,一个监控摄像头每天24小时记录一栋大楼的入口。在一天中的很大一部分时间里,摄像头的录像是没有用处的,因为没有任何事情发生。通过拥有一个更智能的系统,只有在必要的时候才会激活,就需要更低的存储容量,并减少传输到云端所需的数据量。

延时。对于标准的物联网设备,比如亚马逊Alexa,这些设备将数据传输到云端进行处理,然后根据算法的输出返回响应。从这个意义上说,该设备只是通向云模型的便捷网关,就像自己和亚马逊服务器之间的信鸽。这个设备很笨,完全依靠网速来产生结果。如果你的网络速度很慢,亚马逊的Alexa也会变得很慢。对于具有板载自动语音识别功能的智能物联网设备来说,由于减少了(甚至没有)对外部通信的依赖,所以延迟会降低

这些问题导致了边缘计算的发展,即在边缘设备(位于云的 "边缘 "的设备)上执行处理活动的想法。这些设备在内存、计算和功率方面受到资源的高度限制,从而引发了更高效的算法、数据结构和计算方法的发展。 

这样的改进也适用于更大的模型,这可能会使机器学习模型的效率提高一个数量级,而对模型的准确性没有影响。举个例子,微软开发的 Bonsai 算法可以小到 2 KB,但其性能甚至可以比典型的 40 MB kNN 算法,或者 4 MB 神经网络更好。这个结果听起来可能并不重要,但在大小只有1/10000的模型上,同样的精度是相当惊人的。这么小的模型可以在Arduino Uno上运行,Arduino Uno的可用内存为2 KB,简而言之,你现在可以在一个5美元的微控制器上建立这样一个机器学习模型。

我们正处在一个有趣的十字路口,机器学习正在两种计算范式之间分叉:以计算为中心的计算和以数据为中心的计算。在以计算为中心的范式中,数据是由数据中心的实例进行储备和分析的,而在以数据为中心的范式中,处理是在数据的原始本地完成的。虽然我们似乎正在迅速走向以计算为中心范式的上限,但以数据为中心范式的工作才刚刚开始。

在现代世界中,物联网设备和嵌入式机器学习模型正变得越来越无处不在(预计到2020年底,活跃设备将超过200亿台)。其中很多你可能根本没有注意到。智能门铃、智能恒温器、当你说两句话时就会 "唤醒 "的智能手机,甚至只是拿起手机。本文的剩余部分将更深入地关注 tinyML 的工作原理,以及当前和未来的应用。

  云端的层次结构(资源:eBizSolutions)

TinyML的例子

之前,复杂的电路是设备执行各种动作的必要条件。现在,机器学习使得将这种硬件 "智能 "抽象成软件的可能性越来越大,使得嵌入式设备越来越简单、轻巧、灵活。

嵌入式设备中的机器学习应用所面临的挑战是相当大的,但在这一领域已经取得了很大的进展。在微控制器上部署神经网络的关键挑战是低内存占用、有限的功率和有限的计算。

也许TinyML最明显的例子是在智能手机内。这些设备永远主动聆听 "唤醒词",如Android智能手机的 "Hey Google",或iPhone上的 "Hey Siri"。通过智能手机的主要中央处理单元(CPU)来运行这些活动,现代iPhone的CPU主频为1.85GHz,将在短短几个小时内耗尽电池。对于大多数人每天最多使用几次的东西来说,这种程度的消耗是不可接受的。

为了解决这个问题,开发者们创造了专门的低功耗硬件,能够由小电池(如圆形CR2032 "硬币 "电池)供电。这使得这些电路即使在CPU不运行时也能保持活跃,基本上只要屏幕不亮就可以。

这些电路的功耗可以低至1毫瓦,使用标准CR2032电池可以供电长达一年。

看上去似乎不像是,但这是个大问题。能源是许多电子设备的限制因素。任何需要市电的设备都被限制在有线路的地点,当十几个设备出现在同一个地点时,很快就会变得不堪重负。市电是低效且昂贵的。将市电电压(在美国的工作电压约为120V)转换为典型的电路电压范围(通常为约5V),会浪费大量的能源。任何有笔记本充电器的人在拔掉充电器时可能都会知道这一点。在电压转换过程中,充电器内部变压器产生的热量在电压转换过程中被浪费掉了能量。 

即使是带电池的设备也会受到电池寿命有限的影响,这就需要频繁的对接。很多消费类设备的设计都是电池只能维持一个工作日。TinyML设备可以用硬币大小的电池继续工作一年,这意味着它们可以被放置在偏远的环境中,只有在必要时才进行通信以节约能源。

唤醒词并不是我们看到的唯一无缝嵌入智能手机的TinyML。加速计数据被用来判断是否有人刚刚拿起手机,从而唤醒CPU并打开屏幕。

显然,这些并不是TinyML唯一可能的应用。事实上,TinyML为企业和业余爱好者提供了许多令人兴奋的机会,可以生产出更智能的物联网设备。在一个数据变得越来越重要的世界里,将机器学习资源分配到远程位置中受内存限制设备的能力可能会对数据密集型行业产生巨大的好处,如农业、天气预测或地震学。

毫无疑问,赋予边缘设备以执行数据驱动处理的能力,将为工业流程带来模式转变。举个例子,如果设备能够监测农作物,并在检测到土壤湿度、特定气体(例如,苹果成熟时会释放乙烷)或特定大气条件(例如,大风、低温或高湿度)等特征时发出 "帮助 "信息, 将极大地促进作物生长,从而提高作物产量。

作为另一个例子,智能门铃可能会安装一个摄像头,可以使用面部识别来确定谁在现场。这可以用于安全目的,甚至可以用于当有人在场时将门铃的摄像头输送到房屋中的电视,以便居民知道谁在门口。   

tinyML目前主要关注的两个方面是:

关键字发现。大多数人已经熟悉这个应用程序。"Hey Siri "和 "Hey Google "是关键词的例子(通常与“ hotword”或“ wake word”同义使用)。这类设备连续聆听来自麦克风的音频输入,并被训练成只对特定的声音序列做出反应,而这些声音序列与学习到的关键词相对应。这些设备比自动语音识别(ASR)应用更简单,利用的资源也相应较少。某些设备(例如Google智能手机)利用级联架构来提供扬声器验证以确保安全性。

视觉唤醒词。有一种基于图像的类似于唤醒词的方法,称为视觉唤醒词。把这些词看作是对图像的二进制分类,以说明某些东西要么存在,要么不存在。例如,一个智能照明系统可能被设计成当它检测到一个人的存在时启动,当他们离开时关闭。同样,野生动物摄影师可以利用这一点在特定的动物存在时拍照, 或者当他们发现有人时,可以使用安全摄像机拍摄照片。   

下面是TinyML当前机器学习使用案例的更广泛概述。

  TinyML的机器学习用例(来源图片:NXP)。

TinyML如何工作?

TinyML算法的工作方式与传统的机器学习模型基本相同。通常情况下,模型是在用户的计算机上或云端进行常规训练。训练后才是真正的tinyML工作开始的地方,这个过程通常被称为深度压缩。

  深度压缩过程示意图。来源:ArXiv。

模型蒸馏

训练后,然后以创建具有更紧凑表示形式的模型的方式改变模型。剪枝和知识蒸馏是用于此目的的两种此类技术。  

知识蒸馏的基本思想是,大型网络内部具有一定的稀疏性或冗余性。虽然大型网络具有较高的表征能力,但如果网络容量没有饱和,它可以在一个较小的网络中以较低的表征能力(即较少的神经元)来表示。Hinton等(2015)将教师模型中的嵌入信息称为 "暗知识",以转移到学生模型中去。

下图说明了知识蒸馏的过程。

深度压缩过程的示意图。在这个图中,"老师 "是一个训练有素的卷积神经网络模型。教师的任务是将其 "知识 "转移到一个参数较少的卷积网络模型,即 "学生 "身上。这个过程被称为知识蒸馏,用于将相同的知识封装在一个较小的网络中,提供了一种压缩网络的方法,使它们可以在更多内存限制的设备上使用。来源:ArXiv。

在这张图中,"老师 "是一个经过训练的神经网络模型。老师的任务是将其 "知识 "转移到一个参数较少的小网络模型—"学生 "身上。这个过程用于将相同的知识封装在一个较小的网络中,提供了一种压缩知识表示的方法,从而压缩了神经网络的大小,使它们可以在更多的内存限制的设备上使用。

同样,修剪也有助于使模型的表示更加紧凑。广义上讲,剪枝试图去除那些对输出预测提供很少效用的神经元。这通常与小的神经权重有关,而大的权重则由于其在推理过程中的重要性更大而被保留。然后在修剪后的架构上对网络进行再训练,以微调输出。

为提炼模型的知识表征而进行修剪的示意图

量化

经过蒸馏,模型在训练后被量化为与嵌入式设备架构兼容的格式。

为什么要进行量化呢?想象一个使用ATmega328P微控制器的Arduino Uno,它使用8位算术。要在Uno上运行模型,理想情况下,模型权重必须存储为8位整数值(而许多台式电脑和笔记本电脑使用32位或64位浮点表示)。通过量化模型,权重的存储量减少了4倍(从32位到8位值的量化),而精度的影响通常可以忽略不计(通常在1-3%左右)。

8位编码过程中量化误差的说明(然后用于重建32位浮点数)。(来源:TinyML书)

在量化过程中,一些信息可能会因为量化误差而丢失(例如,在浮点表示法上为3.42的值在整数平台上可能被截断为3)。为了解决这个问题,量化感知(QA)训练也被提出来作为一种替代方案。QA训练主要是在训练过程中约束网络只使用量化设备上可用的值(见Tensorflow示例)。

赫夫曼编码

编码是一个可选的步骤,有时会通过最大效率的方式存储数据来进一步减小模型的大小:通常是通过著名的Huffman编码。

编译

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

TInyML应用程序的工作流程(来源:Pete Warden和Daniel Situnayake撰写的 TinyML)

tinyML的大部分技巧都是在处理复杂的微控制器世界。TF Lite和TF Lite Micro之所以如此之小,是因为任何不必要的功能都已被删除。不幸的是,这包括有用的能力,如调试和可视化。这意味着,如果在部署过程中出现错误,就很难分辨出发生了什么。

此外,虽然模型必须存储在设备上,但模型还必须能够进行推理。这意味着微控制器必须有足够大的内存,以便能够运行(1)其操作系统和库,(2)神经网络解释器(如TF Lite),(3)存储的神经权重和神经架构,以及(4)推理过程中的中间结果。因此,在tinyML的研究论文中,经常引用量化算法的峰值内存使用量,以及内存使用量、乘积单元(MAC)数量、精度等。

为什么不在设备上训练?

在设备上进行训练会带来额外的复杂性。由于数值精度的降低,要保证充分训练网络所需的精度水平变得非常困难。标准台式计算机上的自动微分方法大约精确到机器精度。计算导数的精度达到10^-16是令人难以置信的,但利用8位值的自动微分会导致较差的结果。在反向传播过程中,这些导数会被复合并最终用于更新神经网络参数。在数值精度如此之低的情况下,这种模型的精度可能会很差。 

也就是说,神经网络已经使用16位和8位浮点数进行训练。

第一篇研究在深度学习中降低数值精度的论文是2015年Suyog Gupta及其同事的论文“Deep Learning with Limited Numerical Precision”。这篇论文的结果很有意思,它表明32位浮点表示法可以减少到16位定点表示法,而精度基本没有下降。然而,只有在使用随机舍入时才会出现这种情况,因为平均而言,它会产生的无偏结果。

2018年,王乃刚及其同事在“Training Deep Neural Networks with 8-bit Floating Point Numbers”一文中,使用8位浮点数训练了一个神经网络。由于在反向传播过程中需要保持梯度计算的保真度(使用自动微分能够达到机器精度),因此使用8位数字而不是推理来训练神经网络要实现的挑战要困难得多。 

计算效率如何?

也可以对模型进行定制,使其计算效率更高。广泛部署在移动设备上的模型架构,如MobileNetV1和MobileNetV2就是很好的例子。这些本质上是卷积神经网络,它们重塑了卷积运算以使其具有更高的计算效率。这种更高效的卷积形式被称为深度可分离卷积。还可以使用基于硬件的性能分析和神经网络结构搜索来优化体系结构的延迟,本文不涉及这些问题。

下一场AI革命

在资源有限的设备上运行机器学习模型的能力为许多新的可能性敞开了大门。发展更加节能的标准机器学习,这将有助于消除对数据科学对环境影响的担忧。此外,tinyML允许嵌入式设备具有基于数据驱动算法的新型智能,这可以用于从预防性维护到在森林中探测鸟声等任何事情。 

虽然一些机器学习从业者无疑会继续扩大模型的规模,但一种新的趋势正在向更节省内存、计算和能源的机器学习算法发展。TinyML还处于萌芽阶段,这方面的专家很少。我建议有兴趣的读者查阅参考文献中的一些论文,这些论文都是tinyML领域的一些重要论文。这个领域发展迅速,在未来几年内将成为人工智能在工业领域的一个新的重要应用。请关注这个领域。

本文转自雷锋网,如需转载请至雷锋网官网申请授权。

  • 发表于:
  • 原文链接http://news.51cto.com/art/202011/630863.htm
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券