看完上次的《AI泡沫破灭,入坑者何去何从》的软文,不少同学问我关于AI就业怎么着手怎么看的问题。那我就谈一下关于AI就业的思路,给即将入坑或者准备入坑的同学做个参考。
如果非要用一句话来概括我的观点的话,那就是“务实,扬长避短!”这个观点我不止表达过一次了。
在AI领域中,我们大多数就业的同学有一个误区,就是认为AI就等于“深度学习”,AI工程师就等于会深度学习。可是当他们听到别人戏称深度学习工程师是“调参工程师”以后就会变得心里非常矛盾。这也就使得即将入行的同学越发迷茫,觉得AI方向有前景,想学,但是又担心学不到,学不会,到头来只能调调参数了事。
其实AI领域是围绕着高质量自动化完成一个具象的需求所做的工程落地实践过程。在整个落地过程中,深度学习只是其中实现需求的一种方法和手段,甚至只是整个实现过程的一个小环节。这就好比制造汽车的过程中,引擎制造、传动系统制造、防抱死系统制造、电路系统制造等等一起高质量地配合才能完成完整的高质量汽车制造,而绝非仅仅应该关注引擎制造一个环节,任何一个环节都有很多值得研究和优化的空间,做好了都是对AI落地领域的良好实践,都有其存在的价值。AI领域都有哪些重要的环节和工种呢?我就按照我熟悉的领域做一个介绍给大家做以参考。不同的公司的定位略有区别,不过生产环节就这么多,围绕着这个来考虑自己的发展规划应该没啥问题。
上面这张图基本是按照需求与数据流的方向来做的岗位切分。
产品经理
处于整个生产环节最前端部分的应该是产品经理了。作为一个不像谷歌那么强势的非技术驱动型公司来说,产品经理敏锐的嗅觉应该是征服市场最好的风向标。在AI时代,作为一个好的产品经理,想象力应该更丰富一些,他应该知道哪些事情原来是不能做的但是现在有了AI就可以做了,做起来有多困难,做出来对于行业竞争对手的竞争壁垒有没有有多大。这些将直接引领公司在产品定位以及产品细节上改造的方向。作为AI产品经理,除了应该懂产品设计、消费心理学以外,当然还要多了解AI实现的基本原理和AI的前沿动态。原先的产品经理类同学只需要多补充相关知识就可以了,途径就是买一些真的入门的科普类书籍和关注一些前沿的公众号,另外就是和懂行的朋友多请教。
爬虫工程师
对于AI的实现来说,有很多样本素材是要从网上获取的——比如做自然语言处理方向,你就免不了要去爬取维基百科,作为一个视觉方向的公司你就免不了要去下载各类图片的样本集。爬虫工程师的角色正是这样一个角色,他需要使用Python、Java或者其它任何一类他熟悉的语言去帮助团队收集样本。一个优秀的爬虫工程师除了爬虫技术要过关以外,还要懂得业务,这样才知道如何去高效地收集样本数据——比如什么样的不需要爬取,能否在交付样本之前做一些必要过滤(预处理)。这样高素质的爬虫工程师肯定哪个团队都欢迎。当然最好是能掌握一些像朴素贝叶斯、分类任务的神经网络这样的基础知识会有帮助
标注员
标注员理论上讲是所有AI相关岗位中门槛最低的,至少在很多简单场景下是这样的。标注员的作用主要是把样本的图片或者文字打上标签。通常每个公司都会有一些相应的工具给标注员使用,用以快速标注一张图的分类信息,或者标出一张图上什么物体在什么位置(目标识别任务)。也有比较复杂的,比如做自然语言处理的企业就需要一些语言方面专业的人才来标注一句话中哪些部分是主语、哪些是状语或宾语补足语等,视企业的业务场景而定。
数据分析
数据分析岗侧重的是对数据的统计和报表工作。这类岗位几乎在任何一个互联网企业都是需要的,甚至很多从事现代化生成的传统企业也是需要的。这类岗位也会有别的名字称谓,比如大数据分析、大数据开发、报表……需要的能力主要是SQL语言的能力、统计学基础,还有一些机器学习的算法基础,最好还能可视化制作报表(会用HUE工具,HIVE工具,或者会用ECharts工具等)。
算法工程师
算法工程师是这所有岗位中几乎类别最庞杂的。从方向上分有,CV算法工程师——做视觉相关的算法模型,NLP算法工程师——做自然语言相关算法模型,推荐算法工程师——做推荐算法的(在电商和互联网企业中很普遍),特征工程工程师——对于大量数据做特征处理降维的(只不过有时候会被算在NLP算法工程师或者推荐算法工程师里面而不做细分)。还有其他的分类不胜枚举。
如果你要再细分也是可以的,就拿CV算法工程师来说,有的就偏重于人脸识别任务,有的偏重于目标识别任务,有的偏重于做SLAM任务……
刚入坑的同学我建议不要做得太杂,机器学习基础要打好,深度学习基本原理要理解要实践。具体就业的时候还是要切中其中的一个方向做一些项目落地的实战,这样出去说话才有底气。不要泛泛地什么都去一股脑地研究,那是要投入大量实践成本的。
单纯入门的话,机器学习和Scikit-Learn,深度学习和Tensorflow肯定是必备的知识基础了。
移动开发
移动开发同样需要工程师来配合,因为很多AI模型是需要跑在手机上的。这类AI方向的移动开发工程师不仅要懂安卓和苹果的开发技术,还要懂得一些移动AI开发的技巧。比如,一个深度学习模型训练出来都好几百MB大,那有哪些技术可以把模型压缩到只有几MB而且精度还没什么损失。比如,哪些模型天生就适合在移动设备上使用。比如,手动在手机上实现一个模型的推理过程应该调用哪些库效率更高等等。从普通的移动开发要转AI移动开发这几个技巧应该算是基本功,过了就算入行了。如果你已经掌握了安卓开发或苹果手机开发的能力,那就补充一下“Tensorflow”、“Tensorflow-Lite”、“MobileNet”、“SqueezeNet”、模型压缩等相关知识吧。
全栈/架构师
AI行业中的全栈或者架构师通常不是转行一下能够转过来的。在一个重要的AI产品落地的过程中或者一个需要多部门配合的AI产品推进的过程中是需要一个AI全栈/架构师来拿主意指引方向的。这样一个角色的要求就很高了,通常要有8到10年左右的开发经验,因为它需要知道一个产品落地在服务器后端、前端、手机端各方面开发的主要技术风险,需要懂得使用各种大数据工具、队列工具、数据库工具配合产品落地中的性能优缺点。没有8到10年的开发经验这些坑是踩不全的。此外,他同样需要有对机器学习和深度学习足够深的理解,知道在什么情况下应该把产品拆解成什么样的模型组合,分化成什么样的回归、分类等问题的组合,需要收集多少数据量,收集数据的性价比如何,模型训练的周期是多久。最终产品落地时性能可否被用户接受,可否在已知技术范围内优化,以及成本是否满足产品需求……有一个环节出现问题都可能导致产品的失败或者延期,所以这类职位还是要求很苛刻的。
在招聘网站上,这类岗位可能会被叫做“AI架构师”、“人工智能总监”、“人工智能部门Leader”等等,只要做的事情是我刚才说的这些,那就属于一类定位。成长需要积累,服务器开发的经验、数据库优化的经验、机器学习深度学习训练调整的经验等,大家注意积累那这种职位几年后就可能是你的囊中之物了。
测试工程师
测试工程师不是AI相关岗位原生的需求,是所有产品的需求。我列在这里只是为了告诉大家,测试工程师同样缺人——整个产业链都在发展,每个环节的人员需求都在增加。偏重AI岗位的测试工程师什么样呢?我觉得应该这么回答:本身这个角色的目的就是为了验证产品可用程度如何,除了人肉点击以外你能把自己测试的过程高效地自动化地完成吗?如果能,那你就非常符合这个时代的需求。你可别不把这事情放在眼里,因为AI能代替传统程序员的一部分职能,那就一定能代替传统测试工程师的职能。如果要说怎么来适应这个时代的需求,我觉得除了要懂得测试中的黑白盒测试、边界测试、压力测试等原理以外,还要能够实现大规模自动化测试(有脚本工具可以学、有模型可以训练),这才是优秀的测试工程师。自动化测试以前是有HP公司的QTP工具的,现在可以用Serenity等开源工具,或者用Python自己来写。
服务器开发、运维工程师
服务器开发和运维工程师在传统互联网行业是两个不同的岗位,一个面向的是业务需求,一个面向的是稳定性需求。不过在AI领域中,这两个岗位在我看来会越来越接近。一个模型的上线,一个WebAPI的上线,里面都会夹杂着网络调用、模型调用,都会夹杂着高并发对服务器压力的问题,内存泄露隐患的问题,模型性能瓶颈优化的问题等。代码写出来质量高不高,交付后稳定不稳定是根本无法割裂开讨论的。因此也就需要这批人能够懂得Java、Python、Go,懂得负载均衡、高可用,懂得MySQL、Redis、懂得Docker、K8s等。
介绍了这些岗位是为了让大家有个数,可以视自己目前掌握的各种知识技能、兴趣,和对未来自己能力的期望判断来逐步入行。我是不建议每个人都一股脑去挑战做算法工程师的,可以在工作中逐步积累学习,逐步渗透。