当前位置: 首页 > news >正文

机器学习领域已经百花齐放了,为何还要搞个TinyML?

导读:今天介绍一种你没有玩过的机器学习船新版本,叫TinyML。ML我们都很熟了,而TinyML则是Tiny Machine Learning的缩写,直译为“微型机器学习”,是一种面向特定嵌入式产品的机器学习技术。面向哪种特定嵌入式产品呢?

作者:木羊同学

来源:华章计算机(hzbook_jsj) 

1

下一波机器学习革命

先说回TinyML这个词,也许大家听着感觉耳生,国内对TinyML目前有点后知后觉,还只有零星的介绍。但在行业内,TinyML已经被视作一种具有特定意义的专业术语,而不只是某本书或者某个公司偶然提出来的概念性噱头。

我专门就这方面调查了一下,发现TinyML的行业化发展已经搞得有声有色。在工业界,TinyML已经成立了专门的行业委员会,定期举办TinyML峰会。在今年的TinyML峰会上,英伟达、ARM、高通、谷歌、微软、三星等等大公司悉数登台亮相,行业规模和影响力都可见一斑。在学术界方面,TinyML方向已经出版了一本经典的书,甚至有部分知名大学已经开设有相关的课程。

不过,这就有了问题。机器学习我们都知道,可究竟怎么样才能算作“Tiny”?而且,为什么要在已经百花齐放的机器学习领域,又另外搞出个TinyML来呢?这就要从深度学习的痛点说起。

2

深度学习的“大”问题

TinyML虽然挂了个“ML”名号,不过主要使用的是DL的技术,也就是主打深度学习模型。这个槽点我们姑且放过它,毕竟现在深度学习大行其道,但单叫DL又未免格局太小,没准明天又有其它哪款ML算法逆风翻盘了呢?

总之,TinyML目前的当家花旦就是深度学习模型,但是,转折来了,深度学习模型存在一个大问题,TinyML不能拿来就直接使用,必须先进行一些处理。

那么,深度学习存在什么大问题呢?

大,就是问题。深度学习模型采用的是神经网络结构,规模可以很大,而且正在越来越大。本来呢,深度学习模型规模大倒也不是什么问题,相反还是优势。回想一下,在深度学习流行以后,大家都很爱的一个问题,就是:深度学习为什么比其它机器学习模型效果要好?

这是个很好的问题。很多初学者会理所当然地以为,机器学习也像手机一样,新出来的性能必然要比老的好,深度学习是机器学习最新发展出来的技术,当然要比其它模型效果好。

这里面包含了几个误解。首先,深度学习不“新”。当然,深度学习确实是这几年崛起的新技术,但却不是这几年才横空出世。机器学习领域有几个经典算法,神经网络就是其中之一。而说深度学习是神经网络的继承而发展都未免太过生分了,深度学习就是神经网络加深了网络然后换了个皮,按我说,算是老树开新花。

哪个模型好哪个模型坏也是大家喜欢讨论的问题,其实,这个问题早有定论。机器学习领域有个著名的NFL定理(No Free Lunch Theorem) ,中文一般翻译为没有免费午餐定理。NFL定理包含了相当复杂的数学证明过程,不过简单来说,NFL定理给了我们一个非常清晰的结论:机器学习模型效果好不好,不是由模型本身决定的,而是看数据的具体情况。再简单一点,就是模型本身没有好坏。

既然是这样,那深度学习究竟好在哪里呢,又为什么会在这几年异军突起呢?

最常见的解释是这几年硬件发展了,高性能的硬件便宜了。这个回答不能说不对,但是显然忽略了主角。高性能硬件便宜了,对于所有算法应该都是同样的利好,为什么唯独是深度学习崛起了?很简单,深度学习模型有一个现在看来非常好的特性,这就是模型规模和模型性能保持了“水涨船高”的良好关系。随着深度学习模型规模的不断增加,模型的预测性能也能得到同步提升,简单来说就是正相关。相比之下,其它机器学习模型都没有这个特性,所以很容易达到性能瓶颈,需要费好大的力气找另外的路子才能提升。

为什么说这是一个现在看来非常好的特性呢?因为模型的规模越大,计算量也就越大,需要的计算资源成倍增加。以前硬件成本高,算力并不富裕,多买一杯秋天的奶茶都得扣着手指数半天。在这种算力有天花板的情况下,深度学习,准确来说,那时还叫神经网络模型的这种特性,并不会发挥出多大优势。但是时代变了,现在硬件白菜价了,算力四舍五入以后约等于无限量供应,那深度学习这种只要模型大,效果就能“奥利给”的硬派作风就变得非常讨人喜欢,所以“大力出奇迹”这种暴力美学已经成为现在学界的主流研究方向。

但是,深度学习的这一碾压性优势,到了TinyML领域,就变成了十足的劣势了。

3

Tiny的世界

前面我们简单提到,TinyML是面向特定嵌入式产品。我们对嵌入式产品会有一个一般性的印象:对耗电量十分敏感。在TinyML这里,耗电量的指标就变得更为苛刻了:功耗必须低于1毫瓦。

这是一个非常苛刻的指标,平时跑深度模型必不可少的各种豪横GPU挪一下屁股都得好几百瓦,肯定直接出局了,连很多以节能著称的嵌入式设备也严重超标,包括我们熟知的树莓派。树莓派人称极客玩具,特点就是功耗低。低到什么程度呢?可以忽略不计,所以经常有人开了就再也不关机,除非出现故障或者停电。但即使是树莓派这样的嵌入式设备,功耗也高达数百毫瓦,远远超过了TinyML的标准。

为什么TinyML要定下如此苛刻的标准呢?这和TinyML应用场景密切相关,这类场景主要有两个特点,第一个特点肯定是存在需要智能技术才能完成的任务,譬如说包含有图像识别、音频识别等等任务;第二个特点是需要长时间待机,所以必须能耗很低。很多研究认为,从当前智能设备、物联网设备和嵌入式设备等等的发展来看,TinyML应用场景的这两个特点会成为未来各种设备最基本的两项要求。

最典型的例子就是智能设备的唤醒,现在各种智能助手非常多,知名度最高的应属iOS的Siri,这些智能助手平时处于休眠状态,但只要我们说出特定的唤醒词,如“嘿Siri”,智能助手就马上在前台出现和我们交互。这个智能助手的唤醒过程,就是一个典型的TinyML应用场景,大致流程分三步:首先启动深度学习网络的音频识别任务,然后持续地捕捉环境音频传入模型,模型不断进行识别,一旦识别到唤醒词,则启动智能助手。

TinyML一般是部署在什么设备上的呢?大家可能看到开头的“嵌入式”就会下意识想到树莓派,以为TinyML是一种在树莓派上开发机器学习的技术,其实不是。树莓派功耗超标,没法用来开发TinyML。那用什么开发TinyML呢?一般使用超低功耗微控制器,这就是Tiny的由来。微控制器只能完成运算,而一些外围功能,譬如环境音的拾音功能,则需要搭配特定的传感器组件来完成,所以一般是通过开发板来使用微控制器,通常会选择另一款与树莓派齐名的网红嵌入式产品,叫Arduino。

4

TinyML下的深度学习

最难也是最有趣的地方终于要到了,怎么才能满足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和进入这一领域的第一本书。

 

5

推荐阅读

01

《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。“美亚”嵌入式系统畅销榜首图书。

 

 

02

《移动传感器与情境感知计算》

作者:[美] 玛尼什· J.贾加(Manish J. Gajjar)

译者:陈彦如 张媛媛 陈良银

ISBN:978-7-111-63300-6

卖点:

结合移动计算领域的知识,展示了创新的移动和传感器解决方案,为各类平台提供了增强型个性化的用户体验,其中包括快速增长的移动健康领域和虚拟现实领域。通过阅读本书,你将了解移动和传感器融合如何促进信息物理系统和物联网的发展,以及与物理世界直接交互的应用,书中全面涵盖了平台组件和安全、隐私、电源管理以及与更广泛的生态系统的交互等关键问题。

 

推荐语:

Intel技术专家撰写,基于移动计算的传感器生态系统架构指南,涵盖不同行业的应用实例。

03

《移动平台深度神经网络实战:原理、架构与优化》

作者:卢誉声

ISBN:978-7-111-64100-1

卖点:

(1)业界专家联袂推荐,资深专家手把手教你开发移动平台人工智能系统

(2)精讲移动平台深度学习系统所需核心算法、硬件级指令集、系统设计与编程实战、海量数据处理、业界流行框架裁剪与产品级性能优化策略等

 

推荐语:

谷歌、华为,ARM专家及C++专家侯捷联袂推荐!AIoT时代来临,移动平台正在成为工业实践最重要的阵地!这本书手把手教会你如何把智能装进移动端,开发移动平台人工智能系统解决方案,不止分享知识,还完整呈现深度学习的学习路径!让你的学习之路有方向,不迷茫!

6

关于作者

莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

 

扫码关注作者

更多精彩回顾

书讯 |10月书讯(下)| 双节同庆,读书正当时

书讯 |10月书讯(上)| 双节同庆,读书正当时

资讯 |DB-Engines 10月数据库排名:“三大王”无人能敌,PostgreSQL紧随其后

上新 | 百度官方出品 | 全面解读PaddlePaddle,零基础快速入门深度学习
书单 | 开学季——计算机专业学生必读的10本畅销经典

干货 | 数据分析必读干货:简单而实用的3大分析方法

收藏 | (万字长文)Spring的核心知识尽揽其中

视频 | 大佬出镜推荐不可不读系列——程序员陈彼得

赠书 | 【第26期】Coroutines(协程)我是这样理解的!

点击阅读全文了解更多好书

相关文章:

  • 京东程序员狂欢节,上百本好书一抢而空
  • 《数字孪生体技术白皮书》重磅发布(附完整版下载)
  • 1024长沙程序员节北京移动开发者大会,独家现场报道
  • 为什么数字中台是企业应用新基建?
  • 作者专访 | 从受益者到贡献者,朱凯的 ClickHouse 升级之路
  • 这本书堪称仿真领域的“隆中对”
  • 当Nginx遇到重定向
  • “深入浅出”《Head First Kotlin程序设计》
  • RPA的总成本和总收益分析
  • 前端音视频之WebRTC初探
  • 如何成为一名优秀的策略产品经理
  • 【超干】用户画像产品化涵盖的功能模块以及应用场景
  • WebAssembly前世今生
  • 【独家现场】2020国际金融科技论坛
  • 【第28期】10本精选大数据好书等你来选
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Git学习与使用心得(1)—— 初始化
  • HTTP请求重发
  • java 多线程基础, 我觉得还是有必要看看的
  • k8s 面向应用开发者的基础命令
  • Python 反序列化安全问题(二)
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • vue学习系列(二)vue-cli
  • 电商搜索引擎的架构设计和性能优化
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端设计模式
  • 嵌入式文件系统
  • 通过git安装npm私有模块
  • gunicorn工作原理
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • python最赚钱的4个方向,你最心动的是哪个?
  • 仓管云——企业云erp功能有哪些?
  • # 透过事物看本质的能力怎么培养?
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $(function(){})与(function($){....})(jQuery)的区别
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net 中viewstate的原理和使用
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET使用存储过程实现对数据库的增删改查
  • [100天算法】-二叉树剪枝(day 48)
  • [2018-01-08] Python强化周的第一天
  • [autojs]autojs开关按钮的简单使用
  • [BUUCTF 2018]Online Tool
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [C++]拼图游戏
  • [CF226E]Noble Knight's Path
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [flask] flask的基本介绍、flask快速搭建项目并运行
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)