更大的模型并不总是更好的模型,微型机器学习将是未来的方向

在NASA的推动下,电子产品的小型化成为一个完整的消费品行业。现在我们可以把贝多芬的全部作品放在翻领针上用耳机听。

--天体物理学家兼科学评论员尼尔·德格拉斯·泰森(Neil deGrasse Tyson)

超低功耗嵌入式设备的普遍存在,再加上诸如针对微控制器的TensorFlow Lite的嵌入式机器学习框架的引入,将使AI驱动的IoT设备大规模普及。

--哈佛大学副教授Vijay Janapa Reddi

更大的模型并不总是更好的模型,微型机器学习将是未来的方向
嵌入式设备的微型机器学习(TinyML)

本文的目的是向读者介绍小型机器学习的概念及其未来潜力。在本系列的后续文章中,将对特定的应用程序,实现和教程进行深入讨论。

介绍

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

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

最近,我们已经看到了专用的专用集成电路(ASIC)张量处理单元(TPU)的开发,该模块可以封装约8个GPU的功能。这些设备已经增强了在多个系统之间分布学习的能力,以尝试发展越来越大的模型。

最近,随着GPT-3算法的发布(2020年5月发布)而达到了顶峰,该算法的网络体系结构包含了惊人的1750亿个神经元,是人脑中神经元数量的两倍(约850亿)。这是有史以来创建的第二大神经网络Turing-NLG(于2020年2月发布,包含约175亿个参数)的神经元数量的10倍以上。一些估计称,该模型的培训成本约为1000万美元,并使用了约3 GWh的电力(大约三个小时的一小时核电站的输出)。

尽管GPT-3和Turing-NLG的成就值得称赞,但自然而然地,这引起了业内一些人士对AI行业日益增长的碳足迹的批评。但是,它也有助于激发AI界对更节能计算的兴趣。这样的想法,例如更高效的算法,数据表示和计算,一直是看似无关的领域的关注重点:微型机器学习。

微型机器学习(tinyML)是机器学习与嵌入式物联网(IoT)设备的交叉点。该领域是一门新兴的工程学科,具有革新许多行业的潜力。

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

能源效率。(通过有线或无线方式)传输数据非常耗能,比机载计算(具体而言,乘累加单位)要高大约一个数量级。开发可以执行自己的数据处理的物联网系统是最节能的方法。人工智能的先驱们已经讨论了"以数据为中心"的计算思想(与云模型的"以计算为中心"相对),现在我们开始看到它正在发挥作用。

隐私。传输数据可能会侵犯隐私。此类数据可能被恶意行为者拦截,并且当存储在单个位置(例如云)中时,其固有的安全性降低。通过将数据主要保留在设备上并最大程度地减少通信,这可以提高安全性和隐私性。

存储。对于许多物联网设备而言,它们获取的数据毫无用处。想象一下一个安全摄像机每天24小时记录着建筑物的入口。在一天的大部分时间里,相机镜头没有任何用处,因为什么也没发生。通过拥有仅在必要时才激活的更智能的系统,就需要较低的存储容量,并减少了传输到云所需的数据量。

潜伏。对于标准IoT设备(例如Amazon Alexa),这些设备将数据传输到云中进行处理,然后根据算法的输出返回响应。从这个意义上讲,该设备只是通向云模型的便捷网关,就像您自己和亚马逊服务器之间的信鸽。该设备非常笨拙,完全取决于互联网的速度才能产生结果。如果您的网速较慢,Amazon Alexa也会变慢。对于具有机载自动语音识别功能的智能IoT设备,由于减少了对外部通信的依赖(如果不是这样),因此可以减少延迟。

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

此类改进也适用于较大的模型,这可能导致机器学习模型的效率提高几个数量级,而不会影响模型的准确性。

例如,Microsoft开发的算法可以小到2 KB,但比典型的40 MB kNN算法或4 MB神经网络具有更好的性能。这个结果听起来可能并不重要,但是在尺寸的1/10万分之一的模型上,相同的精度令人印象深刻。如此小的模型可以在具有2 KB RAM的Arduino Uno上运行,总之,你现在可以在5美元的微控制器上构建这样的机器学习模型。

我们正处于一个有趣的十字路口,机器学习在两个计算范式之间分叉:以计算为中心的计算和以数据为中心的计算。在以计算为中心的范例中,数据是通过数据中心中的实例进行存储和分析的,而在以数据为中心的范例中,处理是在数据的原始位置进行的。尽管我们似乎正在迅速迈向以计算为中心的范例的上限,但是以数据为中心的范例的工作才刚刚开始。

物联网设备和嵌入式机器学习模型在现代世界中变得越来越普遍(到2020年底,预计将有200亿以上的活动设备)。其中许多你甚至可能都没有注意到。智能门铃、智能恒温器、智能手机,只要你说几句话,甚至只是拿起电话,都可以"唤醒"。本文的其余部分将更深入地关注tinyML的工作方式以及当前和将来的应用程序。

更大的模型并不总是更好的模型,微型机器学习将是未来的方向
云的层次结构

TinyML的例子

以前,复杂的电路是设备执行各种动作所必需的。现在,机器学习使将这种硬件"智能"抽象为软件变得越来越可能,从而使嵌入式设备变得更加简单,轻巧和灵活。

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

TinyML最明显的例子也许是在智能手机中。这些设备会永久地积极聆听"唤醒词"

例如Android智能手机的" Hey Google"或iPhone的" Hey Siri"。通过智能手机的主中央处理器(CPU)运行这些活动,现代iPhone的主中央处理器(CPU)为1.85 GHz,将在短短几个小时内耗尽电池。对于大多数人每天最多使用几次的这种程度的降级是不可接受的。

为了解决这个问题,开发人员创建了专用的低功耗硬件,该硬件可以用小电池(例如,环形CR2032"硬币"电池)供电。这些功能使电路即使在CPU未运行时(基本上在屏幕不亮时)也保持活动状态。

这些电路消耗的功率仅为1 mW,使用标准CR2032电池可供电长达一年。

看起来好像不对,但这很重要。能量是许多电子设备的限制因素。任何需要主电源的设备都限于带有布线的位置,当同一位置有十几个设备时,这些位置很快就会变得不堪重负。市电也效率低下且价格昂贵。将电源电压(在美国大约为120 V)转换为典型的电路电压范围(通常约为5 V)会浪费大量能量。拥有笔记本电脑充电器的任何人在拔出充电器时都可能知道这一点。充电器内部变压器产生的热量在电压转换过程中被浪费掉了能量。

即使是带电池的设备,电池寿命也有限,因此需要频繁对接。许多消费类设备的设计使电池可持续使用一个工作日。TinyML设备可以使用硬币大小的电池继续运行一年,这意味着它们可以放置在偏远的环境中,仅在必要时进行通信以节省能源。

唤醒词并不是我们看到的无缝嵌入在智能手机中的唯一TinyML。加速度计数据用于确定是否有人刚拿起电话,这会唤醒CPU并打开屏幕。

显然,这些并不是TinyML的唯一可能应用。实际上,TinyML为企业和业余爱好者提供了许多令人兴奋的机会,以生产更智能的IoT设备。在当今世界,数据变得越来越重要的情况下,将机器学习资源分配到偏远地区受内存限制的设备的能力可能会给农业,天气预报或地震等数据密集型行业带来巨大好处。

毫无疑问,赋予边缘设备执行数据驱动的处理能力的能力将为工业过程带来范式转变。举例来说,能够监测农作物并在检测到诸如土壤湿度,特定气体(例如苹果成熟时会散发出乙烷)等特征或特定大气条件(例如大风,低温或高湿度),将大大促进作物生长并因此提高作物产量。

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

目前,tinyML的两个主要重点领域是:

  • 关键字发现。大多数人已经熟悉此应用程序。" Hey Siri"和" Hey Google"是关键字的示例(通常与" hotword"或" wake word"同义使用)。这样的设备连续收听来自麦克风的音频输入,并且被训练为仅响应特定的声音序列,这些特定的声音序列与学习的关键字相对应。这些设备比自动语音识别(ASR)应用程序更简单,并且相应地使用了更少的资源。某些设备(例如Google智能手机)利用来提供扬声器验证以确保安全性。
  • 视觉唤醒词。唤醒词有一个基于图像的类似物,称为视觉唤醒词。将它们视为图像的二进制分类,以表示存在或不存在。例如,可以设计智能照明系统,使得其在检测到人的存在时启动,并在他们离开时关闭。同样,当存在特定的动物时,野生动物摄影师可以使用它来拍照,而当他们发现有人时,可以使用安全摄像机拍摄照片。

下面显示了TinyML当前机器学习用例的更广泛概述。

更大的模型并不总是更好的模型,微型机器学习将是未来的方向
TinyML的机器学习用例

TinyML如何工作

TinyML算法的工作方式与传统机器学习模型几乎相同。通常,通常在用户计算机或云中对模型进行训练。后期训练是真正的tinyML工作开始的地方,在此过程中通常称为深度压缩。

更大的模型并不总是更好的模型,微型机器学习将是未来的方向
深度学习模型压缩流程图

模型蒸馏

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

知识提炼的基础思想是,较大的网络内部具有稀疏性或冗余性。虽然大型网络具有较高的表示能力,但如果网络容量未达到饱和,则可以在具有较低表示能力的较小网络(即较少的神经元)中进行表示。Hinton等,2015将教师模型中嵌入的信息称为"黑暗知识",转移给学生模型。

下图说明了知识提炼的过程。

更大的模型并不总是更好的模型,微型机器学习将是未来的方向

深度压缩过程图。在此图中,"老师"是经过训练的卷积神经网络模型。教师的任务是将其"知识"转移到参数较少的较小卷积网络模型中,即"学生"。此过程称为知识提取,用于将相同的知识包含在较小的网络中,从而提供了一种压缩网络的方式,以便可以将其用于更多受内存限制的设备上。

在此图中,"老师"是训练有素的神经网络模型。教师的任务是将其"知识"转移到参数较少的较小的网络模型中,即"学生"。此过程用于将相同的知识包含在较小的网络中,从而提供一种压缩知识表示的方式,从而压缩神经网络的大小,以便可以将其用于更多受内存限制的设备。

同样,修剪可以帮助使模型的表示更加紧凑。广义上讲,修剪尝试删除对输出预测几乎没有用的神经元。这通常与较小的神经权重相关联,而由于在推理过程中它们的重要性较高,因此会保留较大的权重。然后在修剪后的体系结构上对网络进行再培训,以微调输出。

更大的模型并不总是更好的模型,微型机器学习将是未来的方向
用于提取模型的知识表示形式的修剪

量化

蒸馏后,然后将模型量化后训练成与嵌入式设备的体系结构兼容的格式。

为什么需要量化?想象一下使用ATmega328P微控制器的Arduino Uno,该微控制器使用8位算术。要在Uno上运行模型,理想情况下,模型权重必须存储为8位整数值(而许多台式机和笔记本电脑使用32位或64位浮点表示法)。通过对模型进行量化,权重的存储大小将减少4倍(对于从32位到8位值的量化),准确性通常受到的影响可以忽略不计(通常约为1-3%)。

更大的模型并不总是更好的模型,微型机器学习将是未来的方向
8位编码期间的量化误差插图(然后用于重建32位浮点数)

由于某些信息可能会在量化过程中丢失(例如,在基于整数的平台上,浮点表示形式的值为3.42可能会被截断为3)。为了解决这个问题,还提出了量化感知(QA)培训作为替代方案。QA训练从本质上将训练期间的网络限制为仅使用量化设备上可用的值。

霍夫曼编码

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

汇编

对模型进行量化和编码后,将其转换为可由某种形式的轻型神经网络解释器解释的格式,其中最受欢迎的可能是(〜500 KB大小)和(〜大小为20 KB)。然后将模型编译为C或C ++代码(大多数微控制器使用的语言以有效利用内存),并由解释器在设备上运行。

更大的模型并不总是更好的模型,微型机器学习将是未来的方向
TInyML应用程序的工作流程

tinyML的大多数技能来自处理微控制器的复杂世界。TF Lite和TF Lite Micro非常小,因为已删除了所有不必要的功能。不幸的是,这包括有用的功能,例如调试和可视化。这意味着,如果在部署过程中出现错误,可能很难分辨正在发生什么。

另外,尽管模型必须存储在设备上,但模型还必须能够执行推理。这意味着微控制器必须具有足够大的内存以使其能够运行(1)其操作系统和库,(2)神经网络解释器(例如TF Lite),(3)存储的神经权重和神经体系结构,以及(4)推理过程中的中间结果。因此,tinyML研究论文中经常引用量化算法的峰值内存使用量,以及内存使用量,乘法累加单位(MAC)的数量,准确性等。

为什么不在设备上训练?

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

话虽如此,神经网络已经使用16位和8位浮点数进行了训练。

Suyog Gupta及其同事在2015年发表的第一篇有关降低深度学习中的数值精度的论文是""。本文的结果很有趣,表明32位浮点表示形式可以减少为16位定点表示形式,而精度几乎没有降低。但是,这是使用的唯一情况, 因为平均而言,它会产生无偏结果。

在2018年,Naigang Wang及其同事在其论文"使用8位浮点数"中使用8位浮点数训练了神经网络。由于需要在反向传播期间保持梯度计算的保真度(在使用自动微分时能够实现机器精度),因此使用8位数字而不是推理来训练神经网络要实现的挑战明显更大。

计算效率如何?

还可以对模型进行定制,以使它们的计算效率更高。在移动设备(例如MobileNetV1和MobileNetV2)上广泛部署的模型体系结构就是很好的例子。这些本质上是卷积神经网络,已经重塑了卷积运算以使其具有更高的计算效率。这种更有效的卷积形式称为深度可分离卷积。还可以使用和来针对延迟优化。

下一次AI革命

相关推荐