机器学习下一波的爆发点:TinyML
↑↑↑点击上方蓝字,回复资料,10个G的惊喜
导读:今天介绍一种你没有玩过的机器学习船新版本,叫TinyML。ML我们都很熟了,而TinyML则是Tiny Machine Learning的缩写,直译为“微型机器学习”,是一种面向特定嵌入式产品的机器学习技术。面向哪种特定嵌入式产品呢?
先说回TinyML这个词,也许大家听着感觉耳生,国内对TinyML目前有点后知后觉,还只有零星的介绍。但在行业内,TinyML已经被视作一种具有特定意义的专业术语,而不只是某本书或者某个公司偶然提出来的概念性噱头。
我专门就这方面调查了一下,发现TinyML的行业化发展已经搞得有声有色。在工业界,TinyML已经成立了专门的行业委员会,定期举办TinyML峰会。在今年的TinyML峰会上,英伟达、ARM、高通、谷歌、微软、三星等等大公司悉数登台亮相,行业规模和影响力都可见一斑。在学术界方面,TinyML方向已经出版了一本经典的书,甚至有部分知名大学已经开设有相关的课程。
不过,这就有了问题。机器学习我们都知道,可究竟怎么样才能算作“Tiny”?而且,为什么要在已经百花齐放的机器学习领域,又另外搞出个TinyML来呢?这就要从深度学习的痛点说起。
TinyML虽然挂了个“ML”名号,不过主要使用的是DL的技术,也就是主打深度学习模型。这个槽点我们姑且放过它,毕竟现在深度学习大行其道,但单叫DL又未免格局太小,没准明天又有其它哪款ML算法逆风翻盘了呢?
总之,TinyML目前的当家花旦就是深度学习模型,但是,转折来了,深度学习模型存在一个大问题,TinyML不能拿来就直接使用,必须先进行一些处理。
那么,深度学习存在什么大问题呢?
大,就是问题。深度学习模型采用的是神经网络结构,规模可以很大,而且正在越来越大。本来呢,深度学习模型规模大倒也不是什么问题,相反还是优势。回想一下,在深度学习流行以后,大家都很爱的一个问题,就是:深度学习为什么比其它机器学习模型效果要好?
这是个很好的问题。很多初学者会理所当然地以为,机器学习也像手机一样,新出来的性能必然要比老的好,深度学习是机器学习最新发展出来的技术,当然要比其它模型效果好。
这里面包含了几个误解。首先,深度学习不“新”。当然,深度学习确实是这几年崛起的新技术,但却不是这几年才横空出世。机器学习领域有几个经典算法,神经网络就是其中之一。而说深度学习是神经网络的继承而发展都未免太过生分了,深度学习就是神经网络加深了网络然后换了个皮,按我说,算是老树开新花。
哪个模型好哪个模型坏也是大家喜欢讨论的问题,其实,这个问题早有定论。机器学习领域有个著名的NFL定理(No Free Lunch Theorem) ,中文一般翻译为没有免费午餐定理。NFL定理包含了相当复杂的数学证明过程,不过简单来说,NFL定理给了我们一个非常清晰的结论:机器学习模型效果好不好,不是由模型本身决定的,而是看数据的具体情况。再简单一点,就是模型本身没有好坏。
既然是这样,那深度学习究竟好在哪里呢,又为什么会在这几年异军突起呢?
最常见的解释是这几年硬件发展了,高性能的硬件便宜了。这个回答不能说不对,但是显然忽略了主角。高性能硬件便宜了,对于所有算法应该都是同样的利好,为什么唯独是深度学习崛起了?很简单,深度学习模型有一个现在看来非常好的特性,这就是模型规模和模型性能保持了“水涨船高”的良好关系。随着深度学习模型规模的不断增加,模型的预测性能也能得到同步提升,简单来说就是正相关。相比之下,其它机器学习模型都没有这个特性,所以很容易达到性能瓶颈,需要费好大的力气找另外的路子才能提升。
为什么说这是一个现在看来非常好的特性呢?因为模型的规模越大,计算量也就越大,需要的计算资源成倍增加。以前硬件成本高,算力并不富裕,多买一杯秋天的奶茶都得扣着手指数半天。在这种算力有天花板的情况下,深度学习,准确来说,那时还叫神经网络模型的这种特性,并不会发挥出多大优势。但是时代变了,现在硬件白菜价了,算力四舍五入以后约等于无限量供应,那深度学习这种只要模型大,效果就能“奥利给”的硬派作风就变得非常讨人喜欢,所以“大力出奇迹”这种暴力美学已经成为现在学界的主流研究方向。
但是,深度学习的这一碾压性优势,到了TinyML领域,就变成了十足的劣势了。
前面我们简单提到,TinyML是面向特定嵌入式产品。我们对嵌入式产品会有一个一般性的印象:对耗电量十分敏感。在TinyML这里,耗电量的指标就变得更为苛刻了:功耗必须低于1毫瓦。
这是一个非常苛刻的指标,平时跑深度模型必不可少的各种豪横GPU挪一下屁股都得好几百瓦,肯定直接出局了,连很多以节能著称的嵌入式设备也严重超标,包括我们熟知的树莓派。树莓派人称极客玩具,特点就是功耗低。低到什么程度呢?可以忽略不计,所以经常有人开了就再也不关机,除非出现故障或者停电。但即使是树莓派这样的嵌入式设备,功耗也高达数百毫瓦,远远超过了TinyML的标准。
为什么TinyML要定下如此苛刻的标准呢?这和TinyML应用场景密切相关,这类场景主要有两个特点,第一个特点肯定是存在需要智能技术才能完成的任务,譬如说包含有图像识别、音频识别等等任务;第二个特点是需要长时间待机,所以必须能耗很低。很多研究认为,从当前智能设备、物联网设备和嵌入式设备等等的发展来看,TinyML应用场景的这两个特点会成为未来各种设备最基本的两项要求。
最典型的例子就是智能设备的唤醒,现在各种智能助手非常多,知名度最高的应属iOS的Siri,这些智能助手平时处于休眠状态,但只要我们说出特定的唤醒词,如“嘿Siri”,智能助手就马上在前台出现和我们交互。这个智能助手的唤醒过程,就是一个典型的TinyML应用场景,大致流程分三步:首先启动深度学习网络的音频识别任务,然后持续地捕捉环境音频传入模型,模型不断进行识别,一旦识别到唤醒词,则启动智能助手。
TinyML一般是部署在什么设备上的呢?大家可能看到开头的“嵌入式”就会下意识想到树莓派,以为TinyML是一种在树莓派上开发机器学习的技术,其实不是。树莓派功耗超标,没法用来开发TinyML。那用什么开发TinyML呢?一般使用超低功耗微控制器,这就是Tiny的由来。微控制器只能完成运算,而一些外围功能,譬如环境音的拾音功能,则需要搭配特定的传感器组件来完成,所以一般是通过开发板来使用微控制器,通常会选择另一款与树莓派齐名的网红嵌入式产品,叫Arduino。
最难也是最有趣的地方终于要到了,怎么才能满足TinyML的要求,要在不到1毫瓦功耗的微控制器上部署深度学习模型呢?
先介绍部署深度学习模型的一般流程。要使用深度学习模型,第一步自然是需要训练模型,这一步实际包括三大项任务:收集数据,搭建模型以及使用数据训练模型。这三项任务是机器学习任务和深度学习任务的三个非常重要的环节,主要的任务时间就是用来完成这三项工作,内容很多,展开都可以分别写一本书,也是出研究成果的热门方向。
不过,对于TinyML来说,这三项虽然重要,但都属于常规动作,重头戏放在后边。但是,这里有一个问题。收集数据和搭建模型就不用说了,使用数据训练模型可是一件重体力劳动,尤其是训练深度学习的模型。前面我们说,深度学习模型有个现在来看非常好的特性,那就是模型规模和模型性能正相关,但是这也带来一个问题,模型的规模一旦大起来,计算量自然就要增加,虽然现在硬件便宜了,算力可以约等于无限量供应,但算力可也是需要电力来驱动的,这一连串的最终结果是,深度学习模型都一个接一个地成了业界有名的电老虎,譬如人称史上规模最大的GPT-3模型,一次训练成本就高达1300万美金。而TinyML要求的功耗不得超过1毫安,不但在能耗上上了紧箍咒,为了达到类似要求,相应的硬件资源,譬如内存等等,也会进行严格限制,所以,我们即使用小一点的深度学习模型,对于TinyML的小身板来说,也已经是庞然大物,想要在功耗如此低的设备上完成模型训练,必然是不可能的任务。
那怎么办呢?TinyML采取的办法是分离,模型训练这些重体力活还是照旧放到GPU上跑,没有了1毫安的紧箍咒,自然可以放飞了玩,只要最后把训练好的模型吐给我就行。所以对于TinyML来说,第一步是载入模型。
载入模型本身很简单,写成代码的话也就几行完事,不过可能准备工作反而比较多。首先,我们的模型是在通用平台上训练,而最终需要在微控制器上使用,模型运行的环境有所不同。目前,业界在嵌入式深度学习方面,名气最大的工具当数Google推出的TensorFlow Lite,是深度学习两大阵营之一的TensorFlow的嵌入式版本。TensorFlow Lite针对嵌入式平台进行了专门的优化设计。不过,对于微处理器来说,要完全支持TensorFlow Lite还是太难了,于是Google又推出了TensorFlow Lite for Microcontrollers,也就是微处理器版的TensorFlow Lite。
要通过TensorFlow Lite for Microcontrollers载入使用TensorFlow训练的模型,需要考虑平台之间存在差异的问题,譬如运行模型需要全套的算子,而TensorFlow Lite只支持TensorFlow的部分算子,这就可能需要做一些额外的处理才能让模型正常跑起来。
载入模型之后,接下来就流程就和我们前面介绍的基本一致,把微处理器和传感器打通,把外部数据传给模型,最后吐出结果。不过因为TinyML设备的硬件资源捉襟见肘,尤其是内存,可能还需要做一些额外的调整工作。
TinyML很可能是机器学习下一波的爆发点,当然各种技术细节也很多,要想更系统地了解这方面内容,我推荐阅读《TinyML:基于TensorFlow Lite在Arduino和超低功耗微处理控制器上部署机器学习》。这是目前我看到市面唯一一本专门介绍TinyML的书,同时也是一本新书,2019年出的英文版,2020年就出了中文版,机工华章社跟进非常快,点个赞!这本书是TinyML领域当前最有名气的一本书,极具权威性,作者Pete Warden就是TensorFlow Lite开发团队的核心成员,对于TinyML和如何开发TinyML产品,有许多具有指导性的观点。这本书还由浅入深并且安排了许多实践案例,特别适合作为了解TinyML和进入这一领域的第一本书。
《TinyML:基于TensorFlow Lite在Arduino和超低功耗微控制器上部署机器学习》
作者:(美)皮特•沃登(Pete Warden)
(美)丹尼尔•西图纳亚克(Daniel Situnayake)
译者:魏兰,卜杰 译 王铁震
ISBN:978-7-111-66422-2
卖点:
1)内容过硬。谷歌TensorFlow团队创始成员领衔撰写,谷歌工程师翻译并审校;
2)大咖推荐。Arduino联合创始人、Arm副总裁联袂推荐;
3)题材新颖。TinyML里程碑级著作,手把手教你在Arduino和微控制器上部署ML;
4)知识体系完善。适合各层次学生及从业人员,无需任何机器学习或者微控制器开发经验。
推荐语:
谷歌TensorFlow团队创始成员领衔撰写,谷歌工程师翻译并审校,Arduino联合创始人、Arm副总裁联袂推荐!TinyML里程碑级著作,手把手教你在Arduino和微控制器上部署ML。“美亚”嵌入式系统畅销榜首图书。
老铁,三连支持一下,好吗?↓↓↓