AIoT时代来临,移动平台正在成为工业实践最重要的阵地!
在经历了云计算技术的兴起,大数据处理与分析浪潮的洗礼之后,人工智能与机器学习技术逐渐成为了科技行业的热点,而移动技术如芯片技术爆发式进化以及5G通信技术的到来,让移动平台成为机器学习技术落地的最佳实践平台,是工业界应用最看重的场景。
那么我们怎样才能让实验室中的模型应用到解决实际问题中,如何行之有效地开发移动端机器学习应用,如何进行系统的机器学习理论梳理并付诸实践?这些问题的提出成为了笔者撰写《移动平台深度神经网络实战:原理、架构与优化》一书的初衷。
从萌生想法开始到付诸行动,再到最后完稿,整个历程耗时远超原有计划。优化移动端框架和引擎优化对移动端(移动设备、可穿戴设备和边缘计算设备等)来说殊为不易。优化问题之大,探讨范围之广不易估计,如何在有限的篇幅当中尽可能地寻找一条主线来贯穿知识内容体系成为了编写过程中首要解决的问题,那么结合前述章节的框架和技术,从采集数据、处理数据到使用数据,并结合成熟的移动平台机器学习框架来实现一个可以工作的机器学习产品应该会是一个不错的主线。
通过编程实战的方式实现功能化和产品化的输出往往是很多人希望通过学习某个知识体系达到的一个最终结果和状态,在我身边有不少人在接触机器学习相关技术的时候,由于了解到深度学习能在很多领域和方面解决实际问题,并且在大数据时代背景下这种应用变得越来越多,往往会一股脑地涌入深度神经网络高地,经过与他们的交流和探讨,有一个问题就变得特别突出和明显,那就是他们对很多深度学习当中所使用的技术来源以及设计的依据往往并不清晰,这样的深度学习就像建立在地基不稳之上的建筑,使用深度学习技术解决问题似乎成了可能,但涉及优化等关键技术问题的时候,这样的状态往往会变得捉襟见肘。其实,系统化的学习和掌握一个领域的技术往往十分重要,在了解了一个知识体系的来龙去脉之后,反而能够让一个人站在更高的层面上思考问题,带来更有广度、包容和灵活的架构设计与解决方案,学习机器学习如此,为了掌握移动平台深度学习技术亦是如此。
计算机的基础最终还是数学,体会数学之美,了解并掌握高等数学、线性代数、概率论、数理统计等基本的数学知识就显得尤为重要。接着,理解机器学习能够解决的问题、使用场景和任务,在此基础上了解并掌握传统机器学习算法,如常见的分类算法、回归算法、聚类算法、关联分析算法、集成算法等,以及贝叶斯模型、逻辑回归等诸如此类的基本算法,这些内容对学习和掌握深度学习是至关重要的前导知识,否则学习深度学习就如无根之木,很难有好效果。深度学习对工程实践技能同样具有较高要求,尤其是当希望将深度学习应用到现实中解决实际问题时,只有具有足够的工程技能才能让算法更好地落地,达到我们想要的效果,在学习基础数学和算法知识的基础上,我们需要熟悉内存管理、线程控制、指令优化等技术,这些都会对最后的应用效果有很大影响。
除了算法和系统开发本身,我们还需要关注数据。无论什么算法都会对数据有基本的要求,数据量太少或者数据质量不高(比如噪声过多)的数据势必会对训练产生负面效果。因此在日常学习和工作中,我们得注意如何采集我们真正需要的数据,并在训练之前对数据进行适当的清洗,确保在训练过程中使用的数据是足够干净的,这样才能得到更好的训练效果。不仅如此,收集高质量的数据集并利用适当的工具简化和加速数据清洗的过程也十分重要,我们常常使用Spark、Storm和Hurricane实时处理系统来自动化这一系列工作,因此熟练掌握利用这些便捷的工具框架的方法也是准备机器学习计算的必经之路。
我们还需要注意现在随着移动设备和5G通信的发展,嵌入式移动环境已经成为机器学习的重要阵地,有越来越多的问题希望在移动端来解决,而不是单单依靠我们的服务器。而传统的深度学习框架在这种环境下显得过于臃肿,速度也不尽如人意,因此越来越多的公司开始推出适用于移动环境的轻量级框架,这些框架在设计上比传统框架更为精简,体积也相对小很多,同时对模型进行了裁剪,同时针对移动端计算进行了大量优化,确保体积和速度都能够的到极大提升。因此我们必须了解这些移动端框架,才能在移动端环境实现算法的落地,达到更好的效果。
虽然现在的移动端框架已经非常完善了,但是人们对于性能的要求是永无止境的,总会有更为严苛的系统执行环境,而且新的网络架构越来越多,不一定能直接在这些框架中使用,因此我们必须了解轻量级框架的原理,并根据自己的需求进行修改与裁剪。
同时针对一些特殊的环境和需求,我们必须知道如何通过底层方式进行针对性的优化,这就需要我们深入了解移动端的常用优化技巧,而目前最常用的移动环境就是ARM,在没有GPU加速的情况下,在ARM环境中完成运算加速(包括标量计算、矢量计算、浮点和定点计算等)的唯一方法就是通过Neon指令集,因此只有了解并掌握了Neon指令集才能有效地根据实际情况完成更多的性能提升。还是那句话,优化是我们讨论移动平台机器学习系统或深度学习系统的核心问题。
在编写本书的过程中,笔者得到了侯捷老师的帮助,感谢他在全书结构、篇幅和内容上给出的宝贵建议。同时也得到了彭垚、风辰以及陈炜的帮助与肯定;尤其是,在编写过程中与Google资深软件工程师顾仁民老师以及多位业界专家进行请教和探讨,修正了原稿中阐述不当、解释性错误,并对内容的结构安排作出了调整,最终为读者呈现出这一篇的内容。这一篇内容带领读者经历从移动平台的性能优化,使用Hurricane实时处理系统来进行数据采集与训练相关问题的讨论开始,再到引入TensorFlow Lite及其代码体系的介绍、集成方法、核心代码与框架裁剪分析,最终实现一个可工作产品的全过程。
作者简介:
卢誉声
Autodesk数据平台和计算平台资深工程师,负责平台架构研发工作。工作内容涵盖大规模分布式系统的服务器后端、前端以及SDK的设计与研发,在数据处理、实时计算、分布式系统设计与实现、性能调优、高可用性和自动化等方面积累了丰富的经验。擅长C/C++、JavaScript开发,此外对Scala、Java以及移动平台等也有一定研究。著有《移动平台深度神经网络实战:原理、架构与优化》、《分布式实时处理系统:原理架构与实现》,并译有《高级C/C++编译技术》和《JavaScript编程精解(原书第2版)》等。
福利时间:本次联合【机械工业出版社华章公司】为大家带来3本正版新书。留言谈谈你对5G、AIOT或深度学习的理解,12月10日20点前,评论点赞数前3名的读者将获赠正版图书1本。没中奖的读者也可以识别下方二维码购买。