移动端开发工程师的AI突围之路

“古典程序员”集体恐慌

随着2007年第一台iPhone问世,随后Android的猛烈跟进,苹果和谷歌推进了长达10年的移动互联网浪潮。在此期间,移动端开发工程师可谓是风生水起,几乎人们平常生活中接触互联网90%的途径,都是经过一个叫App的东西,基于iOS/Android这两大系统平台。python

然而好日子彷佛也快到头了,随着行业巨头的逐步垄断,小App生存空间日渐萎缩,App排名靠前的几乎都是几家巨头的产品,市场上对移动端开发人员的需求也在降低。同时因为近些年学校里面学生也学,外面培训机构也教,开发人员的供给还在上升,你们彷佛感觉到了一丝丝凉意。程序员

近两年,人工智能的浪潮汹涌而来,“古典”程序员们更是集体陷入了恐慌,不会点深度学习,是否是过两年就找不到工做了算法

今天的AI就像十年前的Android/iOS同样,一晚上之间需求暴涨,人才短缺。市面上的培训课程层出不穷,各类《21天学会深度学习》,《手把手教你神经网络》之类的课程,动辄几千,多者上万,跟当年的Android/iOS真的很像。编程

人工智能可没换一种编程语言那么简单

固然了,做为一个“科班出身”的AI从业人员,我想说仍是有点不同的。Android/iOS更多的是语言上的不一样,或者界面交互方式的创新,本质上的思想和逻辑跟以前的VC/塞班也都同样。性能优化

狭义的人工智能应用,在思考问题的方式上是彻底不一样的,你们考虑的更多的是模型、数据,跟数据结构课里面学的排序/查找也不是一个概念。各类数学概念搞得人晕头转向,能够说,对于普通程序员来讲,AI的学习曲线是很是陡峭的。服务器

以Facial Landmark Detection(人脸特征点定位)为例,输入不少标注了特征点的人脸图片,通过一个应用程序好久的运算,保存一个模型文件。而后用另外一个应用程序,输入一张人脸图片,就能把特征点给自动标注出来,这个过程不管从数学的角度仍是从编程的角度来看,都极其复杂,之后的文章里我会试图解释。

模型只是很小一部分

大多数人工智能的教程里面,主要讲的内容我均可以概括为模型和算法,你常常看到的各类术语,好比决策树、支持向量机、逻辑回归、神经网络,到后来的CNN,RNN,LSTM,GAN等,都是模型。在学术圈模型和算法基本上就是所有,这也是对于普通程序员来讲,最难以理解的部分,就像前面提到的Facial Landmark Detection的例子。网络

对于工业界来讲模型和算法只是一部分,甚至多是一小部分数据结构

你们的模型可能差很少

在深度学习流行以前,学术界解决问题不少都是靠特征设计,这里面会有不少的技巧(trick),不少时候一篇论文的效果好很差,主要不是取决于那几个数学公式,而是代码里面的trick。因此那个时候除非是SVM这种通用的算法框架,不多有人公布本身的代码。架构

而深度学习流行以后,彷佛你们不那么吝惜本身的代码了,不少人都选择了开源。带来的结果是,每一年一批论文和对应的代码发布以后,任何一我的下载一套代码,就能达到State-of-Art。这对研究人员来讲是很是残酷的,可能你辛辛苦苦研究一年刚刚超过去年的水平,人家一公布,你又落后全部人了。框架

而世界上真正有能力设计网络的人并很少,并且训练网络的代价很是的大,大部分AI工做者的主要工做仍是在公认的比较好的基础上,进行小修小补,甚至都不作修改,只是优化优化数据。这就致使了,大部分人的模型都差很少,你折腾半天,可能没比别人强多少。固然我这里不包括那些顶尖的选手,顶尖的AI人才,也不是咱们普通程序员的目标,看看他们的简历你就知道我为何这么说了,并且这样的人一个公司也不须要几个,太贵。。。

开源的那套东西无法直接用

既然开源的东西那么多,为何AI应用仍然有很高的门槛呢。由于开源的东西一般是无法直接用的,缘由总结有两个:

  1. 多数开源代码是没法直接在移动端运行的,Tensorflow Lite是一个强大的存在,必定要紧密关注。
  2. 移动端的运算能力较弱,并且不一样硬件和平台有不少适配问题,这对于一个应用是否可以大规模应用是决定性的。

先推理(Inference)再学习(Training)

什么是Training和Inference

几乎全部机器学习的任务均可以抽象成一件事情,设计一个方程y=f(x),经过Training获得函数f的全部参数。而后再输入一个新的x,获得输出y,这个叫Inference。

我试图用一种最粗糙的方法解释一下这两个过程。
先说Inference,好比我有函数Y=f(X)=aX*X+bX+c。假设a=b=c=1,若是如今有一个输入x=1,那么输出y=3,这就是一次Inference。
再说Training,若是我知道输入x=1的时候,y=10,那说明a=b=c=1确定是错的,利用优化算法,改变a,b,c的值,使得输出y更接近1一些。那么如今有不少的x和对应的y,要找到一组a,b,c,使得整体的错误最小,这就是Training。

你可能暂时不用理解Training

好消息是,真正的人工智能应用中,你只须要使用Inference,也就是f(x)是已知的,是由其余大牛在计算能力很强的一台机器或者一个集群上,训练了几个小时甚至几天获得的。应用在运行的时候,要作的只是把输入送到方程里,获得输出。

掌握了Inference,Training也不会很难

仍是负责任的补充一下,这里讲的是突围,强调效率,先推理再学习不是说学习不重要,Training仍然是人工智能的核心。前面的例子也大致描述了Training的过程,其实Training就是根据Inference结果的错误,不断优化参数,而后再Inference,反复迭代的过程。因此掌握好了Inference,也是为掌握Training打基础。

客户端的机会就在于Inference的优化和部署

如今主流的Training和Inference主要都在服务端

Training不用说,须要大量的计算资源和存储,并且一般离线完成,如今基本上都是在服务端上完成。
主流的Inference,好比你们经常使用到的商品识别(淘宝客户端的拍立淘)、语音识别(天猫精灵)等,核心的运算也都在服务端,由于算法模型巨大,客户端内存可能都放不下,速度也达不到。

边缘计算(Edge Computing)的兴起

近年边缘计算这个词开始兴起,而近几天Google发布的Edge TPU把这件事情推到了极致。所谓边缘,就是在云的边缘,或者外面。要解决的问题有如下两点:

  1. 云端计算资源贵
  2. 网络传输实时性和稳定性问题

你们考虑的解决问题的方法主要是:

  1. 把一些对计算要求不是特别高的运算放到边缘设备上
  2. 对算法自己进行优化和简化
  3. 提高边缘设备的运算能力

这里的边缘设备是一个抽象的概念,包含但不限于:

  1. 手机
  2. 带有处理芯片的摄像头
  3. 架设在本地的小型服务器

从计算资源成原本说,手机最极致,你本身花钱买的,无论算什么都不会耗费服务器的资源,架设在本地的摄像头或者服务器一般也是客户一次性花费,不会带来后续的负担。

从网络角度来讲,实时性取决于算法自己运行的速度,若是太慢,可能还不如上传,但稳定性必定更优。

从业态来讲,新零售兴起的今天,像盒马鲜生这样的领军队伍,也是边缘计算的先行者。

“抖音”——“部署”和“优化”极致典范

抖音你们都知道,他的美颜/长腿/手势识别等技术大大提高了生产力,为社会低成本地创造了无数的大长腿大眼网红。

从AI工做者的角度来看,抖音是把端上人工智能应用的部署和优化发挥到了极致。还以Facial Landmark Detection为例,抖音的美颜可以作那么好,人脸特征点的定位功不可没。目前主流的算法基本都是基于CNN的,运算量极大,并且各类磨皮/瘦脸的图像处理,也很是复杂。这里商汤科技可能结合了多种优化技术,才能达到如此快的效果。CPU的Neon优化和GPU优化应该都有应用。

此外,抖音这种亿级用户的产品,必定会覆盖很是多的手机机型,如此复杂的算法,可以在这么多不一样的手机上运行,这也是一件很不容易的事情。

我再不怀好意地猜想一下,抖音上的人脸,除了用来定位,有可能还会被用来作人脸识别/聚类的训练数据,这里就涉及到了边缘和云之间的协同工做。

而上面说的这些事情,都是当今移动端开发者的机会。

突围之路

基本功

若是是视觉方面,就是图像处理,语音方面就是音频处理。以视觉为例,如今深度学习基本输入都是原始像素,也不用作复杂的特征提取,因此这一块要求不是过高。固然随着应用的深刻,不少东西仍是慢慢要学。

动手把流行的算法移植到手机上

这件事情多是最重要的,就是动手,动手,动手。不少人学习深度学习,就是先把Tensorflow在本身的机器上安装一遍,而后把Tutorial里面的几个例子跑一跑,就完事了。加起来也没几行python代码,其实你什么也没学会,就是照书敲代码。

我说的动手,仍是针对Inference,建议先从Tensorflow Lite开始,一步步把训练好的模型经过量化处理变成简化的模型,而后在Android或者iOS上调用API,作一个App。

Tensorflow官方有开源的sample,是1000类的图像分类,能够在这个基础上改模型,改代码,逐步尝试。好比把1000类变成狗的品种识别,或者实现一个手写数字识别,再复杂一点,作一我的脸检测。后面会专门写一些教程,把不一样算法移植到手机上。

紧密关注Tensorflow Lite的发展

Google发布Tensorflow以后,生态日渐完善,开发社区很是活跃,远远把Caffe甩在了身后。随后发布的TPU,专门针对Tensorflow优化的AI芯片,提供了Cloud服务,Tensorflow Lite也是对移动平台支持最好的Inference框架,近日推出的Edge TPU,一样完美支持Tensorflow Lite,大有一统江湖之势。因此必定要关注Tensorflow的发展。

做为移动端开发人员,Tensorflow Lite是重中之重。目前来看,Tensorflow Lite的优化还主要限于CPU,以后还会有什么发展也是关注重点。Tensorflow Lite的代码量也不是太大,有时间阅读源代码,甚至进行一些优化,都是很是有价值的事情。

学习性能优化的方法

前面提到了,性能优化是客户端智能的重中之重,能够着重学习一下技术:

  1. C++性能优化
  2. Neon/SSE指令集优化
  3. GPU优化

这些技术难度都不低,并且一般跟应用场景自己相关,不容易有通用解决方案,在实际应用中可能会成为核心突破点。

除了手机,玩玩别的设备

边缘计算不仅包含手机,手机重界面和交互,有不少AI应用实际上是不强调界面和交互的,好比安防领域,试试更多的设备,会拓展更多的可能性。好比Nvidia的TX2,Raspberry PI,以及即将上市的Edge TPU。

有时间多看看书

前面几乎没有提到看书,不是看书不重要,而是只看书不动手是没有效果的。在实践中,不明白的地方必定须要网上查或者翻看资料。在这个基础上,系统的学习理论知识,也是颇有必要的。理想状况下,我认为能够重点关注一下几点:

  1. 主流深度神经网络的架构,设计的思想,理解不一样层到底在干什么,对应的代码在哪
  2. 人工智能发展的历程,怎么一步步发展到深度学习的
  3. 曾经流行的一些经典算法,不少思想其实在深度学习中都有应用

多一种思路,更广阔的天地

最后,我想说不少人的焦虑其实大可没必要,人工智能必定是将来,但人工智能不多是所有,术业有专攻,你在本身的领域若是足够强,是很难被取代的。

可是人工智能提供了一种新的思路,就是经过数据和模型,可以把一些之前须要人来判断的事情变成自动的。最重要的就是,之前须要你定义好的if else规则,如今是一个动态可学习的东西,这自己不就是一件很妙的事情吗?

多一门知识,多一种思路,我相信会给每一个人带来更广阔的天地,加油!

相关文章
相关标签/搜索