摘要:在此期间,移动端开发工程师可谓是风生水起,几乎人们日常生活中接触互联网的途径,都是通过一个叫的东西,基于这两大系统平台。而上面说的这些事情,都是当今移动端开发者的机会。
“古典程序员”集体恐慌
随着2007年第一台iPhone问世,随后Android的猛烈跟进,苹果和谷歌推动了长达10年的移动互联网浪潮。在此期间,移动端开发工程师可谓是风生水起,几乎人们日常生活中接触互联网90%的途径,都是通过一个叫App的东西,基于iOS/Android这两大系统平台。
然而好日子似乎也快到头了,随着行业巨头的逐步垄断,小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应用仍然有很高的门槛呢。因为开源的东西通常是没法直接用的,原因总结有两个:
多数开源代码是无法直接在移动端运行的,Tensorflow Lite是一个强大的存在,一定要紧密关注。
移动端的运算能力较弱,而且不同硬件和平台有很多适配问题,这对于一个应用是否能够大规模应用是决定性的。
先推理(Inference)再学习(Training) 什么是Training和Inference几乎所有机器学习的任务都可以抽象成一件事情,设计一个方程y=f(x),通过Training得到函数f的所有参数。然后再输入一个新的x,得到输出y,这个叫Inference。
我试图用一种最粗糙的方法解释一下这两个过程。你可能暂时不用理解Training
先说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。
好消息是,真正的人工智能应用中,你只需要使用Inference,也就是f(x)是已知的,是由其他大牛在计算能力很强的一台机器或者一个集群上,训练了几个小时甚至几天得到的。应用在运行的时候,要做的只是把输入送到方程里,得到输出。
掌握了Inference,Training也不会很难还是负责任的补充一下,这里讲的是突围,强调效率,先推理再学习不是说学习不重要,Training仍然是人工智能的核心。前面的例子也大体描述了Training的过程,其实Training就是根据Inference结果的错误,不断优化参数,然后再Inference,反复迭代的过程。所以掌握好了Inference,也是为掌握Training打基础。
客户端的机会就在于Inference的优化和部署 现在主流的Training和Inference主要都在服务端Training不用说,需要大量的计算资源和存储,而且通常离线完成,现在基本上都是在服务端上完成。
主流的Inference,比如大家常用到的商品识别(淘宝客户端的拍立淘)、语音识别(天猫精灵)等,核心的运算也都在服务端,因为算法模型巨大,客户端内存可能都放不下,速度也达不到。
近年边缘计算这个词开始兴起,而近几天Google发布的Edge TPU把这件事情推到了极致。所谓边缘,就是在云的边缘,或者外面。要解决的问题有以下两点:
云端计算资源贵
网络传输实时性和稳定性问题
大家考虑的解决问题的方法主要是:
把一些对计算要求不是特别高的运算放到边缘设备上
对算法本身进行优化和简化
提升边缘设备的运算能力
这里的边缘设备是一个抽象的概念,包含但不限于:
手机
带有处理芯片的摄像头
架设在本地的小型服务器
从计算资源成本来说,手机最极致,你自己花钱买的,不管算什么都不会耗费服务器的资源,架设在本地的摄像头或者服务器通常也是客户一次性花费,不会带来后续的负担。
从网络角度来说,实时性取决于算法本身运行的速度,如果太慢,可能还不如上传,但稳定性一定更优。
从业态来说,新零售兴起的今天,像盒马鲜生这样的领军队伍,也是边缘计算的先行者。
“抖音”——“部署”和“优化”极致典范抖音大家都知道,他的美颜/长腿/手势识别等技术大大提升了生产力,为社会低成本地创造了无数的大长腿大眼网红。
从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的代码量也不是太大,有时间阅读源代码,甚至进行一些优化,都是非常有价值的事情。
学习性能优化的方法前面提到了,性能优化是客户端智能的重中之重,可以着重学习一下技术:
C++性能优化
Neon/SSE指令集优化
GPU优化
这些技术难度都不低,而且通常跟应用场景本身相关,不容易有通用解决方案,在实际应用中可能会成为核心突破点。
除了手机,玩玩别的设备边缘计算不只包含手机,手机重界面和交互,有很多AI应用其实是不强调界面和交互的,比如安防领域,试试更多的设备,会拓展更多的可能性。比如Nvidia的TX2,Raspberry PI,以及即将上市的Edge TPU。
有时间多看看书前面几乎没有提到看书,不是看书不重要,而是只看书不动手是没有效果的。在实践中,不明白的地方一定需要网上查或者翻看资料。在这个基础上,系统的学习理论知识,也是很有必要的。理想情况下,我认为可以重点关注一下几点:
主流深度神经网络的架构,设计的思想,理解不同层到底在干什么,对应的代码在哪
人工智能发展的历程,怎么一步步发展到深度学习的
曾经流行的一些经典算法,很多思想其实在深度学习中都有应用
多一种思路,更广阔的天地最后,我想说很多人的焦虑其实大可不必,人工智能一定是未来,但人工智能不可能是全部,术业有专攻,你在自己的领域如果足够强,是很难被取代的。
但是人工智能提供了一种新的思路,就是通过数据和模型,能够把一些以前需要人来判断的事情变成自动的。最重要的就是,以前需要你定义好的if else规则,现在是一个动态可学习的东西,这本身不就是一件很妙的事情吗?
多一门知识,多一种思路,我相信会给每个人带来更广阔的天地,加油!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/19779.html
摘要:乘着云计算强劲发展的东风,百度云继续加固生态化护城河。百度云编织的生态巨网事实上,百度云在生态和落地方面的加速度很明显。从年开放运营至今,百度云俨然已经编织了一张巨大的生态之网,具体可以从三个方面来细看。乘着云计算、AI强劲发展的东风,百度云继续加固生态化护城河。12月6日,在2018百度ABC Inspire企业智能大会上,百度副总裁、百度云总经理尹世明宣布ABC企业智能合作伙伴联盟正式成...
摘要:北京时间月日月日,由和中国国际人才交流基金会联合主办的第七届全球软件案例研究峰会简称在北京国家会议中心圆满落幕。本届峰会,来自阿里美团百度平安银行等企业的讲师分别从企业转型及研发效能方面分享敏捷和的实践细节和操作经验。 北京时间11月30日-12月3日,由msup和中国国际人才交流基金会联合主办的第七届全球软件案例研究峰会(简称:TOP100summit)在北京国家会议中心圆满落幕。T...
阅读 2382·2021-11-25 09:43
阅读 1207·2021-11-24 09:39
阅读 700·2021-11-23 09:51
阅读 2350·2021-09-07 10:18
阅读 1797·2021-09-01 11:39
阅读 2732·2019-08-30 15:52
阅读 2543·2019-08-30 14:21
阅读 2819·2019-08-29 16:57