关于人工智能算法岗位的一点思考
点击上方“CVer”,选择加"星标"置顶
重磅干货,第一时间送达
本文作者:刀刀宁
https://zhuanlan.zhihu.com/p/342801452
本文已由原作者授权,不得擅自二次转载
最近看到这样一篇文章:为什么我不再从事算法的工作了?
http://www.fanyeong.com/2019/08/11/why-i-quit-as-a-algorithm-enginer/
是作者这些年的切身感触,写的非常好,有一定深度。因为最近我腰伤得空也有一些思考,借此机会也写一写吧。
开门见山,先说自己的感受:1)文章的绝大多数观点我都是非常赞同的。2)对于纯算法岗位,未来数量确实会逐步趋少,整个行业会回归理性这点,没有任何异议,因为之前太疯狂了,现在是回调而不是衰败(最近不少大佬从工业界回流学术界也是一种体现吧)。所以大部分准备进入工业界的研究生同学最好做好充分的心理准备,在入学和师门选择时,需要谨慎。3)但对于算法的未来发展,我更加偏向于持乐观态度,因此对引文部分判断略有不同理解,比如“最后做AI的就那么几家”,“算法的市场逐渐饱和、需求太小”等等,后边会慢慢展开。
因此,我这篇文章既是一篇劝退文,又是一篇劝进文,请辩证阅读。先说一下我自己,原来是参加ACM竞赛的,参加过final,大部分算法底子还行。博士课题做的云计算存储底层方面的工作,回头看更多的收获是研究问题的方法论。毕业之后急速转的人工智能,具体说就是机器视觉相关的领域,几年时间如鱼得水,比搞纯底层系统还是适应很多。而我最大感触就是下面这三大错位:
供需双方的期望错位,算法数据的倒挂错位,工程重要性的认知错位。
接下来我按下面三大错位简单聊聊。
技术特点,及产业特点:机器视觉,以及自然语言处理、语音识别等等(感知层为主)人工智能算法,最近几年的基本方法,都是以深度学习为主线的,效果好,架构简单,在很多地方都work;但是是个黑盒子不好解释,同时因为使用方(客户、甲方等)实际对效果期望是比较高的,对当前算法存在的短板部分理解不了,会产生巨大的心理认知错位。因此,人工智能算法很多时候在工业界非常尴尬,人工智障也不是浪得虚名。
当算法研究人员对于自己1%2%的提升欣喜若狂的时候,工业界却完全不以为然,因为有的领域只要不到100%,只要还有剩下的那哪怕万分之一百万分之一的误报和漏报,就没法完全落地,比如自动驾驶。当然不是所有的领域都像自动驾驶这样苛刻,学术界日拱一卒的提升,终归会产生量变到质变的跃升,再通过工业界的落地努力之后,还是可以在一些领域大显身手。所以说,基于深度学习的机器视觉,本质上是工程学科,而不是自然学科。
并且,算法严重依赖数据,做好数据很大程度上就能解决很多学术界还没解决好的问题,学术研究有的时候因为统一评价标准的问题会太集中在几个常用数据集上面了。另外就是可以从目前发展比较快的工业领域可以看出,数据越好收集越好标注的领域发展越快,例如安防、驾驶等就远快于医疗。我之前写过这样一个回答,阐述了我对数据建设的理解和重视:”怎么看2020年深度学习在工业界应用趋势?“。其核心思想就是1)数据很重要,2)数据的长尾幂律分布更加要命。数据很重要就意味数据采集数据收集标注的工作也很重要,比如这里有滴滴和momenta的数据闭环工作的介绍,didi、momenta,也说明了业界对此的认可程度。
同时,有远见的公司都会自己做数据标注,和公司大小没啥关系,因为数据安全也是很重要的一件事情,数据被卡脖子不是件小事。并且各个公司对数据安全的重视程度其实已经到了一种匪夷所思的地步,算法代码都可以开源,训练数据一片都不会给。因为算法本身无法建立足够的竞争壁垒,反而数据却可以。所以,正是这种对于数据安全的重视,会极大的阻碍aiasaservice的发展,因此也绝不会出现做AI的就那么几家这种情况。(当然AIaaS本身发展也是非常可期的)
算法岗位特点:首先,人工智能算法工程师不是只有调用开源包进行调参这么一种类型的岗位!
人工智能的算法岗位是一种垂直性很强的岗位,可以说在某种程度上最突出的那一批算法工程师应该要能做到全栈工程师的感觉出来。而调包调参这个工作只是全栈中的一环,有的时候看其可替代性还有点高。而恰恰现在的就业市场中,这个狭义的岗位,确确实实是最饱和的最烂大街的,这也是为什么引文作者非常感慨的原因。
引文中,作者提到除了算法之外还有开发,我非常同意一个团队可以没有算法但是绝对不能没有开发。但其实在我看来,这两者根本就是不分家的。即便是学术界的算法研究人员,他也得自己开发算法程序进行落地的,更别提工业界的算法工程师了。所以我这里说的狭义岗位是包含算法和开发一起的(但是没有包括研究性质目标是论文等的算法岗位)。
为什么这个狭义岗位最饱和最烂大街呢?第一,工具化程度越来越高,工具的社群化开发特点越来越显著,比如超过TensorFlow成为后起之秀的pyTorch,就是具有更好的社群开发特点,几乎什么层你都能找找开源的,还有更加优秀的mmdetection这种库的加持,叠加效应愈发明显。大量工具带来的后果就是很多开发工作被转移到开源社区了,就不需要算法工程师开发了嘛。第二,前几年行业大热,学生趋之若鹜,读研读博有周期,而现在周期到了。第三,大部分学校在对这个岗位的培养认知还停留在几年前,觉得目标检测还是一个很玄幻的问题,其实现在早就已经到了真•一行import一行run的代码就能搞定问题的时代了,而真正需要培养的素质是使用这些工具化的东西去解决实际问题的能力,以及自己能够根据需求设计轮子、造轮子或者改轮子的能力。所以,在人工智能行业和算法趋近于回归理性这样一种大背景下,单纯的去学习调包调参这件事情,确实会让未来的就业之路愈发的迷茫和未卜。
说了半天狭义的,那么广义的岗位是什么样子的呢?
前面提到,人工智能的算法比较垂直,为啥?我是觉得因为黑盒子封装完一大部分底层算法逻辑之后,剩下来的东西真的太简单了,所以周边的时候就都需要挨个搞定了,哈哈。所以,广义的算法岗位职能,还包括但不限于:深度学习之外的算法模块研发,策略层,业务逻辑层开发;封装和封装优化研发;具体推理硬件上的落地,推理硬件上的加速,训练硬件的加速;数据辅助工具的开发,数据采集收集标注管理流程的开发;模型的测试与发布,以及相应的自动化工作,还有对应生产数据的数据挖掘工作,等等等等。
以上这些东西都想做好,每一个标点符号分割出来的内容,都可能需要一个几个工程师的小组去做。对懂算法的工程师需求量真的小吗?所有的小组都要整合成一个体系,对teamleader的要求,也不低,并且它是个体系,没点工程架构思维,真搞不定。而这些年,在从业人员和围观群众或多或少的强调下,在深度学习技术飞速发展的激励下,我们往往都只看到了算法的科学性的一面,没有看到其工程性的一面,产生了一种认知偏差。
比如指定硬件的小模型加速这种,包括相关的量化加速,芯片专用加速,它本身就是学术界一个独立而庞大的研究方向,论文都一搜一大把,而工程师更多需要结合自己手头实际的硬件和产品特点去做进一步的挖掘,想做得非常好根本不容易。再比如,为了做好单目2D摄像头的目标检测问题中的数据采集问题,甚至可能会用3D多摄像头采集数据通过点云技术建模再通过CG渲染方法来生成大量的天然带标注的2D数据,数据即可以大量生产又不用标注。这相当于一个嵌套的算法链条,所以,有些看起来和业务不相关的技术在有些公司就一定没有用吗?人力需求就一定在萎缩吗?
还有,比如有的算法岗位对候选人的要求中会写:有推荐系统/搜索引擎相关经验者加分;有activelearning/图像搜索相关经验者加分;相信数据的价值,乐于解决长尾问题。这明显是一个非常重视数据的公司的岗位描述。所以,真正限制童鞋们拿offer是除了调包调参之外的知识结构的广度和对整个算法链条的理解深度。更有意思的是,前面说工具化这么严重,轮子现在啥都干了,但是你有没有想过,轮子也是人造的啊,如果能去大厂造工具造轮子改轮子,社会价值其实更大啊。因为那是业界瞩目之所在,多少小厂甚至设立githubwatcher这样的专职岗位,来帮你更快的实现你写的开源代码中潜在的工业价值,多好。更进一步,大家可能会混淆算法研究员和算法工程师的区别,其实本文主要讨论的是以产品或者工程为导向的工程师岗位。当然大厂及高校研究所等以论文等为评价导向的算法研究人员,也是就业方向的一大热门,是研究新轮子应该怎么设计的,目前以及将来都将处于技术生态/鄙视链的顶端。
很多童鞋这里会有疑问,说了半天,这不就是产业“周边”吗?或者叫“周边”岗位吧。嗯,就是这么个意思,而我的核心观点就是,周边非常重要。他们是整个系统的支撑,是处理长尾的利器,是系统向外拓展的触手,是体系中不可或缺、不容忽视的一部分。甚至因为有些岗位的能力要求更高,其不可替代性会远高于所谓核心岗位。
说完广义的,再说回狭义的,所以这个狭义岗位最后会被替代掉吗?我认为也不会。因为实际情况下,场景真的太多了,需求真的太细了。算法的建模,不同方法之间的对比,相同方法的不同参数的对比,快速迭代,小步快跑,这些东西,automl是做不到的,因为这都需要经验的。比如像这种层出不穷的边边角角的小问题:如何让目标检测算法暂停误报?,时不时来一下子,优先级瞬间提高到最高,还是需要经验的救火队员来强有力的支撑一把的。你所在的公司只要不是业务独霸行业一招鲜吃遍天并且没有竞品,那就面临着算法迭代和升级,新需求的挑战和应对,开源算法新升级的适配,等等问题,都会push着你往前推进。
而狭义岗位又有具体几项解决实际问题的能力是必不可少的,1)算法流程的设计建模的能力,这个是非常有意义同时有非常有挑战的一件事情,如果你不是等着别人建好流程之后自己去训练个模型,而是自己设计模型和上下游其他模块之间的关系,自己确定算法调用策略和输出策略,自己处理特殊情况,那恭喜你,你已经具有算法架构能力了;2)调参中的debug的能力,因为深度学习方法是个半黑盒子样子的流程,当出现问题的时候光靠调普通程序样的简单的调试往往解决不了问题,深度学习的程序,很多时候看起来都是正常的跑,但是结果就是掉n个点,所以很多时候良好的基础知识和设计消融实验做ABtest去定位问题所在,都是非常重要的。
所以这里就回到一个工程师自身精进的问题了。这里引用乃岩的文章说吧:DeepLearning的专家如此急缺,它难在何处?-NaiyanWang的回答:实际缺乏的不是DeepLearning的人才,而是可以实际解决问题的人才,而实际可以解决问题的人才不管在什么时代都是稀缺资源。因此我一直认为,在研究生学习阶段,研究问题和解决实际问题的方法,可能比你实际研究的问题本身更加重要。
所以,当人工智能领域趋于理性和正常之后,需求量依旧旺盛,对人的要求依旧很高。末了,这里也还有一篇关于算法工程师定位的文章值得去看一下:互联网从业者2020年终总结。
对于未来的小展望:人工智能技术的变现能力目前还没有到火力全开的地步,因为毕竟还有最后那n%的困难cornercases无法被学术界和工业界克服。并且,所有人工智能算法都紧密的依赖于业务本身,只有业务能够创造价值,依附于其上的算法才能产生价值。
但是有问题不代表需要被否定,这个方向未来一定会在人机交互、生产效率、辅助决策、医疗保险、文化教育等等诸多方面发挥巨大的作用。甚至每一个普通人,不管你愿意不愿意,都会被裹挟着进入它的怀抱之中。
所以在接下来的一段时间,围绕着人工智能算法发展出来的应用,其深度和广度都会持续的被挖掘,并创造更好的社会价值。在这个过程中,其实不光是算法工程师,全行业的从业人员都会参与其中的,商业模式、产品设计、品质控制等等,来一起共同推动整个行业的发展。
因此,对于算法的工作,我还是持有积极的乐观态度的。小伙伴们,加油。
CV资源下载
后台回复:CVPR2020,即可下载代码开源的论文合集
后台回复:ECCV2020,即可下载代码开源的论文合集
后台回复:YOLO,即可下载YOLOv4论文和代码
后台回复:Trasnformer综述,即可下载两个最新的视觉Transformer综述PDF,肝起来!
重磅!CVer-细分垂直交流群成立
扫码添加CVer助手,可申请加入CVer-细分垂直方向 微信交流群,也可申请加入CVer大群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、Transformer、PyTorch和TensorFlow等群。
一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡),根据格式备注,才能通过且邀请进群
▲长按加微信群
▲长按关注CVer公众号
整理不易,请给CVer点赞和在看!
人工智能领域,排名前10的大神级岗位及职责
1、负责系统架构设计,针对行业客户设计场景化的解决方案,并对解决方案的竞争力及商业目标达成负责;
2、技术分享,将人工智能产品/方案的销售技巧传递给销售团队,并支持重点项目的售前工作;
3、通过对行业趋势/市场分析、客户分析、竞争分析等,制定人工智能相关的业务规划,并对规划进行端到端的管理。
职位要求:
1、JAVA基础扎实,精通io、多线程、集合等基础框架;
2、5年以上产品设计或开发经验,精通分布式、缓存、消息、搜索等机制;
3、精通web开发的相关技术,5年及以上使用JAVA进行web开发的经验,2年及以上大型互联网项目架构设计经验;
4、精通数据库技术(MySQL/Oracle),数据库优化及SQL优化,精通Linux平台下常用命令操作、环境部署;
4、执行能力强,具有较好的产品设计和解决方案设计能力;
5、极强的问题分析能力、数据理解能力、逻辑思考能力、沟通能力、学习能力和抗压能力,有团队合作精神
大数据科学家(人工智能)
职位描述:
1、创建数据挖掘和建模相关的核心算法和代码实现;
2、负责研究和应用互联网金融领域模型构建知识和技术;
3、负责数据分析和建模项目的业务需求和技术实现;
4、负责数据模型等数据产品的策略分析和报告等事宜;
5、共同构建及完善各类风险评级模型等风险量化系统、早期风险预警等应用系统的研究规划、需求设计、论证组织、开发测试、推广应用和运行维护。
职位要求:
1、本科及以上学历,数学、物理、统计、金融工程、机器学习、计算机类专业背景;
2、7年以上数据挖掘或机器学习领域经验,至少掌握一门编程语言C++/Java;
3、熟悉各类模型分类与回归算法,熟悉各类变量筛选与降维算法,了解hadoop、hive、分布式仓库者优先考虑;
4、有信用风险建模经验,有海量数据挖掘的项目经验者优先;
5、有互联网数据挖掘经验、金融行业用户评分建模经验优先;
6、具备良好的专业背景、逻辑能力好,有较强的创新思维、执行力和沟通能力。
高级算法工程师
职位描述:
1、负责VRSDK传感器算法开发及优化工作;
2、负责机器视觉系统、图像处理开发及算法优化和性能评估工作;
3、进行人工智能相关前沿算法的研究,包括机器学习、知识应用、智能决策等技术的应用。
职位要求:
1、硕士及以上学历,精通C;
2、熟悉优化代码流程和方法,能够快速优化代码解决性能瓶颈;
3、熟悉陀螺仪、加速度、地磁传感器算法优先考虑;
4、熟悉机器视觉、图像处理优先考虑。
最关键能力要求:
熟悉陀螺仪、加速度、地磁传感器算法优先考虑;数学基础好
人工智能运维工程师
职位描述:
1、负责大数据与AI产品相关运营、运维产品研发;
2、负责相关组件的运维工具系统的开发与建设,保证维护产品的质量稳定,通过技术手段、流程制度提升组件的健壮性,可用性;
3、提供大数据与AI云产品客户支持。
职位要求:
1、3年以上工作经验,熟悉互联网应用的架构;
2、熟练掌握Linux操作系统,shell编程,熟练应用awk、sed、grep、strace、tcpdump、gdb等常用命令;
3、至少熟悉关系数据库、nosql或者非结构化存储中的一种;
4、有hadoophivehbasesparkkafka等开源大数据组件的开发和维护经验者优先;
5、熟悉互联网产品的运维流程,有海量运营产品架构规划、调优的项目经验优先;
6、有云产品相关的开发或运维经验的优先。
全栈工程师
职位描述:
1、独立负责一个重要产品的前后端开发工作;
2、对业务系统进行必要的重构和架构调优,满足新的产品需求,提升开发效率;
3、把控项目的代码质量、持续集成、监控体系等,以保证服务的高可用和代码的高质量。
职位要求:
1、计算机相关专业本科及以上。工作经验1年及以上;
2、熟练掌握React、Redux等框架,以及HTML、CSS技术;
3、对解决不同浏览器兼容性问题有一定的经验;
4、熟练掌握Python,有使用Python开发后端服务的经验;
5、良好的编程习惯,追求极致的代码质量,熟悉常用的设计模式和敏捷开发流程;
6、开朗上进,积极沟通,追求极致,简单可靠。
NLP应用工程师
职位描述:
1、包括但不限于智能应答模块与用户行为预测模块,服务公司数亿计的司机及乘客为其提供良好的人工智能体验;
2、利用机器学习/深度学习/NLP技术完成并优化文本分类,热点问题分析功能,为公司的战略决策提供数据支持;
3、负责智能化平台语料获取,包括互联网/日志等,并进行相应分析分类/聚类,挖掘数据潜在的价值。
职位要求:
1、了解行业内智能客服、并对智能客服保持热情,能够持续投入专研;
2、计算机相关专业硕士及以上学历;
3、三年以上工作经验,优秀者可放宽,至少从事过一年以上数据挖掘以及个性化推荐相关工作;
4、熟悉NLP中的相关技术包括但不限于中文依存句法分析以及指代消解等技术;
5、良好的逻辑思维能力,可以快速定位并解决问题,具有良好的代码编写习惯;
6、编程语言不做限制,会python者优先。
智能机器人研发工程师
职位描述:
1、负责了解智能机器人方向最新的行业动态和市场需求,制定研发计划,并进行任务分解、需求分析、架构设计等工作;
2、负责把控研发产品的技术路线、架构、方案以及阶段成果;
3、负责研发项目的架构设计及部分核心代码的编写,对部门员工和教师团队进行指导和培训;
4、负责解决在项目研发过程中团队所遇到的技术难点;
5、负责控制整体研发项目实现的质量、进度,协调项目组成员之间的合作;
6、参与代码开发规范,技术标准的制定,负责编写相应的技术文档;
7、研发各类通用的基础框架和平台、完善和升级已有的框架及平台;
8、负责智能机器人、嵌入式、物联网的技术跟踪、研究和应用。
职位要求:
1、5年以上开发经验,熟练掌握面向对象设计方法,理解设计模式;
2、3年以上嵌入式、物联网开发经验;
3、精通Linux嵌入式技术、物联网感知层技术,有机器人研发经验优先;
4、熟悉流行的开源和商业中间件产品,熟悉市场应用广泛的第三方技术产品;
5、具备良好的沟通能力和团队精神,对待工作认真负责,学习能力强,拥有优秀的逻辑思维能力与自我管理能力;
6、对技术敏感,对智能机器人相关技术有浓厚兴趣。
智能机器人研发工程师
职位描述:
1、开发/整合运动控制器,通过调整车辆转向和速度,使其完成基于机器学习的运动规划轨迹;
2、利用实验数据建立动态模型和仿真,以评估和解决运动规划轨迹和对控制模型的修改;
3、融合多传感器感知和定位数据,负责无人驾驶决策与规划算法研发、仿真、调试以及测试工作;
4、负责无人驾驶控制系统的研发、仿真、调试以及测试工作;
5、与无人驾驶其他模块工程师协作,配合实现系统集成与调试工作;
职位要求:
1、博士毕业1年以上、或硕士毕业3年以上相关工作经验;
2、具有丰富的Linux系统开发经验;
3、熟练掌握C/C++语言,精通OpenCV和Matlab开发,有很强的算法分析和实现能力,并具备良好的代码和文档风格;
4、熟悉基于卷积神经网络CNN的图像分类与目标检测算法;
5、良好的英语听说读写能力。
商务拓展专家(人工智能方向)
职位描述:
1、基于公司AI发展战略,拓展图像识别、语音处理、视频处理、数据智能、增强现实、智能客服等技术的对外合作,确保各项业务发展基础目标的达成;
2、收集、梳理、消化前沿技术(大数据、人工智能、智慧城市、云计算等)的相关资料,并对与其相关的发展方向和技术趋势等进行分析,形成分析报告;
3、探索前沿技术与公司现有业务领域的整合,并能形成初步解决方案或指明发展方向;
4、为客户提供相关业务咨询和技术咨询,提供相应的解决方案,编写相关技术、业务文档;
5、协助市场拓展、项目实施,为客户或相关商务活动提供专业技术支撑。
任职资格:
1、全日制本科以上学历;
2、熟悉大数据、人工智能、智慧城市、云计算等前沿领域的发展方向、技术趋势、主要概念和应用场景等;
3、具有较强的学习能力、研究分析能力及业务归纳能力,具有较强的逻辑思维能力,思路清晰,知识面广;
4、能够较快的接收和学习新技术、新业务和新事物;
5、具有较强的团队协作能力及沟通协调能力;
6、具有大数据、人工智能、智慧城市或云计算等相关领域从业经验者优先考虑。
最后问题来了,你距离这些人工智能排名前十的大神级岗位还有多远?看完这些人工智能职位职责,你的奋斗目标是否更加清晰了呢?返回搜狐,查看更多