移动平台深度神经网络实战:原理、架构与优化
上QQ阅读APP看书,第一时间看更新

1.6 走进移动世界的深度学习

深度学习的世界丰富多彩,而当我们的开发领域延伸到了移动平台、嵌入式平台或边缘计算平台上时,又会有一系列崭新的问题亟待我们去解决。移动平台是本书将要探讨的核心议题,我们在书的开头就引出移动平台开发深度学习系统的基本概念、难度及其挑战。通过本节的简单介绍,期望读者能够以目标为导向来继续阅读本书。

1.6.1 移动平台机器学习概述

很多机器学习算法,尤其是深度学习,计算量是非常巨大的,因此可以说这类机器学习类应用一直主要将计算任务放在服务器或者工作站上执行,而且还需要借助机器的性能作为支撑。

但是越来越多的机器学习应用场景开始在移动平台登场,像边缘计算以及海量数据收集成为可能,甚至主流,更多实际问题是需要在移动平台这个场景下进行解决的。比如,现在非常普遍的人脸识别技术,如果每次都把照片或者视频传输到服务器再做识别,那么传输延迟也会有极大压力。因此,在移动平台直接集成机器学习框架并完成机器学习任务势在必行,也成为事实上的大势所趋。

1.6.2 难度和挑战

相较于我们在传统的云端服务器或工作站上进行的机器学习训练和计算,移动平台尤其特殊。这导致移动平台的机器学习框架和传统PC端机器学习框架开发有着巨大差异,也就是其内在开发难度更高。因此,我们需要用不同的思维方式和优化策略来对机器学习框架进行调优,选用适用移动平台的框架进行优化和产品开发,正是本书希望传达给读者的。

除此之外,在移动平台进行机器学习研发工作的最大问题是其计算力非常有限。在功耗问题为大前提的情况下,无论是移动平台集成的CPU还是GPU都和桌面端的计算力相差甚远,而且移动平台目前主要由ARM架构技术构建,而并非x86体系结构。传统深度学习框架都对PC端有深度的优化,但是如果不经调整而直接将PC端的计算框架用在移动平台,极有可能导致计算速度缓慢,甚至因为内存或者体系结构的原因无法在移动平台执行。

移动平台的第2个问题是存储资源有限。一个不经处理的深度学习模型的文件大小很有可能有数十甚至上百MB,这对于一个移动平台应用而言体积实在太大。如此之大的模型如果直接加载到移动平台内存中,再算上计算所需的临时内存空间,就会让移动平台的内存无法承受。

因此,目前所有框架都会考虑如何对移动平台做优化和适配。比如现在的TensorFlow和MXNet都对移动平台做了很多优化,一方面利用ARM的指令集加速,另一方面减少模型体积,使得现在在移动平台执行深度学习预测任务变得简单。

但是人的欲望是永远无法满足的。我们再以人脸识别为例,当你可以做到5帧/s的时候,客户很可能会希望你能做到10帧/s,当你可以做到10帧/s的时候,客户会希望你能做到20帧/s,速度越快越能扩大深度学习应用的适用场景。而普遍使用的深度学习框架的优化只能做到普遍性的优化,对于特定场景的优化无能为力。

因此,越来越多的厂商投入人力和物力进行移动平台深度学习框架的研发。这些框架往往不考虑训练,只考虑预测时的优化,因此可以放开手做很多优化,最后都能得到比TensorFlow等框架好得多的性能。

但是,我们也不能完全依赖于框架,还需要从模型本身出发,想办法减少网络层数,做稀疏量化等各种辅助措施,才能最后得到更好的效果。同时,为了提升速度我们还经常需要牺牲准确率,毕竟鱼与熊掌不可兼得,这就更考验产品和工程的平衡能力了。

因此,移动平台机器学习是一个非常重要但是又颇具难度的领域,但是为了机器学习能够在更多应用场景落地,我们不得不向这些难题发起挑战。我们会在后续章节针对这些优化问题逐一做深入阐述。