关于人工智能算法岗位的一点思考

点击上方“CVer”,选择加”星标“置顶

重磅干货,第一时间送达《关于人工智能算法岗位的一点思考》

本文作者:刀刀宁

https://zhuanlan.zhihu.com/p/342801452

本文已由原作者授权,不得擅自二次转载

最近看到这样一篇文章:为什么我不再从事算法的工作了?

为什么我不再从事算法的工作了?

是作者这些年的切身感触,写的非常好,有一定深度。因为最近我腰伤得空也有一些思考,借此机会也写一写吧。

开门见山,先说自己的感受:
1)文章的绝大多数观点我都是非常赞同的。
2)对于纯算法岗位,未来数量确实会逐步趋少,整个行业会回归理性这点,没有任何异议,因为之前太疯狂了,现在是回调而不是衰败(最近不少大佬从工业界回流学术界也是一种体现吧)。所以大部分准备进入工业界的研究生同学最好做好充分的心理准备,在入学和师门选择时,需要谨慎。
3)但对于算法的未来发展,我更加偏向于持乐观态度,因此对引文部分判断略有不同理解,比如“最后做AI的就那么几家”,“算法的市场逐渐饱和、需求太小”等等,后边会慢慢展开。

因此,我这篇文章既是一篇劝退文,又是一篇劝进文,请辩证阅读。先说一下我自己,原来是参加 ACM 竞赛的,参加过 final,大部分算法底子还行。博士课题做的云计算存储底层方面的工作,回头看更多的收获是研究问题的方法论。毕业之后急速转的人工智能,具体说就是机器视觉相关的领域,几年时间如鱼得水,比搞纯底层系统还是适应很多。而我最大感触就是下面这三大错位:

供需双方的期望错位,算法数据的倒挂错位,工程重要性的认知错位。

接下来我按下面三大错位简单聊聊。

技术特点,及产业特点:

机器视觉,以及自然语言处理、语音识别等等(感知层为主)人工智能算法,最近几年的基本方法,都是以深度学习为主线的,效果好,架构简单,在很多地方都 work ;但是是个黑盒子不好解释,同时因为使用方(客户、甲方等)实际对效果期望是比较高的,对当前算法存在的短板部分理解不了,会产生巨大的心理认知错位。因此,人工智能算法很多时候在工业界非常尴尬,人工智障也不是浪得虚名。

当算法研究人员对于自己 1% 2% 的提升欣喜若狂的时候,工业界却完全不以为然,因为有的领域只要不到 100% ,只要还有剩下的那哪怕万分之一百万分之一的误报和漏报,就没法完全落地,比如自动驾驶。当然不是所有的领域都像自动驾驶这样苛刻,学术界日拱一卒的提升,终归会产生量变到质变的跃升,再通过工业界的落地努力之后,还是可以在一些领域大显身手。所以说,基于深度学习的机器视觉,本质上是工程学科,而不是自然学科。

并且,算法严重依赖数据,做好数据很大程度上就能解决很多学术界还没解决好的问题,学术研究有的时候因为统一评价标准的问题会太集中在几个常用数据集上面了。另外就是可以从目前发展比较快的工业领域可以看出,数据越好收集越好标注的领域发展越快,例如安防、驾驶等就远快于医疗。
我之前写过这样一个回答,阐述了我对数据建设的理解和重视:”怎么看2020年深度学习在工业界应用趋势?“。其核心思想就是1)数据很重要,2)数据的长尾幂律分布更加要命。数据很重要就意味数据采集数据收集标注的工作也很重要,比如这里有滴滴和 momenta 的数据闭环工作的介绍,didi、momenta,也说明了业界对此的认可程度。

同时,有远见的公司都会自己做数据标注,和公司大小没啥关系,因为数据安全也是很重要的一件事情,数据被卡脖子不是件小事。并且各个公司对数据安全的重视程度其实已经到了一种匪夷所思的地步,算法代码都可以开源,训练数据一片都不会给。因为算法本身无法建立足够的竞争壁垒,反而数据却可以。
所以,正是这种对于数据安全的重视,会极大的阻碍 ai as a service 的发展,因此也绝不会出现做AI的就那么几家这种情况。(当然 AIaaS 本身发展也是非常可期的)

算法岗位特点:

首先,人工智能算法工程师不是只有调用开源包进行调参这么一种类型的岗位!

人工智能的算法岗位是一种垂直性很强的岗位,可以说在某种程度上最突出的那一批算法工程师应该要能做到全栈工程师的感觉出来。而调包调参这个工作只是全栈中的一环,有的时候看其可替代性还有点高。而恰恰现在的就业市场中,这个狭义的岗位,确确实实是最饱和的最烂大街的,这也是为什么引文作者非常感慨的原因。

引文中,作者提到除了算法之外还有开发,我非常同意一个团队可以没有算法但是绝对不能没有开发。但其实在我看来,这两者根本就是不分家的。即便是学术界的算法研究人员,他也得自己开发算法程序进行落地的,更别提工业界的算法工程师了。所以我这里说的狭义岗位是包含算法和开发一起的(但是没有包括研究性质目标是论文等的算法岗位)。

为什么这个狭义岗位最饱和最烂大街呢?第一,工具化程度越来越高,工具的社群化开发特点越来越显著,比如超过 TensorFlow 成为后起之秀的 pyTorch ,就是具有更好的社群开发特点,几乎什么层你都能找找开源的,还有更加优秀的 mmdetection 这种库的加持,叠加效应愈发明显。大量工具带来的后果就是很多开发工作被转移到开源社区了,就不需要算法工程师开发了嘛。第二,前几年行业大热,学生趋之若鹜,读研读博有周期,而现在周期到了。第三,大部分学校在对这个岗位的培养认知还停留在几年前,觉得目标检测还是一个很玄幻的问题,其实现在早就已经到了真•一行 import 一行 run 的代码就能搞定问题的时代了,而真正需要培养的素质是使用这些工具化的东西去解决实际问题的能力,以及自己能够根据需求设计轮子、造轮子或者改轮子的能力。所以,在人工智能行业和算法趋近于回归理性这样一种大背景下,单纯的去学习调包调参这件事情,确实会让未来的就业之路愈发的迷茫和未卜。

说了半天狭义的,那么广义的岗位是什么样子的呢?

前面提到,人工智能的算法比较垂直,为啥?我是觉得因为黑盒子封装完一大部分底层算法逻辑之后,剩下来的东西真的太简单了,所以周边的时候就都需要挨个搞定了,哈哈。所以,广义的算法岗位职能,还包括但不限于:深度学习之外的算法模块研发,策略层,业务逻辑层开发;封装和封装优化研发;具体推理硬件上的落地,推理硬件上的加速,训练硬件的加速;数据辅助工具的开发,数据采集收集标注管理流程的开发;模型的测试与发布,以及相应的自动化工作,还有对应生产数据的数据挖掘工作,等等等等。

以上这些东西都想做好,每一个标点符号分割出来的内容,都可能需要一个几个工程师的小组去做。对懂算法的工程师需求量真的小吗?所有的小组都要整合成一个体系,对 team leader 的要求,也不低,并且它是个体系,没点工程架构思维,真搞不定。
而这些年,在从业人员和围观群众或多或少的强调下,在深度学习技术飞速发展的激励下,我们往往都只看到了算法的科学性的一面,没有看到其工程性的一面,产生了一种认知偏差。

比如指定硬件的小模型加速这种,包括相关的量化加速,芯片专用加速,它本身就是学术界一个独立而庞大的研究方向,论文都一搜一大把,而工程师更多需要结合自己手头实际的硬件和产品特点去做进一步的挖掘,想做得非常好根本不容易。
再比如,为了做好单目 2D 摄像头的目标检测问题中的数据采集问题,甚至可能会用 3D 多摄像头采集数据通过点云技术建模再通过 CG 渲染方法来生成大量的天然带标注的 2D 数据,数据即可以大量生产又不用标注。这相当于一个嵌套的算法链条,所以,有些看起来和业务不相关的技术在有些公司就一定没有用吗?人力需求就一定在萎缩吗?

还有,比如有的算法岗位对候选人的要求中会写:有推荐系统/搜索引擎相关经验者加分;有active learning/图像搜索相关经验者加分;相信数据的价值,乐于解决长尾问题。这明显是一个非常重视数据的公司的岗位描述。所以,真正限制童鞋们拿 offer 是除了调包调参之外的知识结构的广度和对整个算法链条的理解深度。
更有意思的是,前面说工具化这么严重,轮子现在啥都干了,但是你有没有想过,轮子也是人造的啊,如果能去大厂造工具造轮子改轮子,社会价值其实更大啊。因为那是业界瞩目之所在,多少小厂甚至设立 github watcher 这样的专职岗位,来帮你更快的实现你写的开源代码中潜在的工业价值,多好。更进一步,大家可能会混淆算法研究员和算法工程师的区别,其实本文主要讨论的是以产品或者工程为导向的工程师岗位。当然大厂及高校研究所等以论文等为评价导向的算法研究人员,也是就业方向的一大热门,是研究新轮子应该怎么设计的,目前以及将来都将处于技术生态/鄙视链的顶端。

很多童鞋这里会有疑问,说了半天,这不就是产业“周边”吗?或者叫“周边”岗位吧。嗯,就是这么个意思,而我的核心观点就是,周边非常重要。他们是整个系统的支撑,是处理长尾的利器,是系统向外拓展的触手,是体系中不可或缺、不容忽视的一部分。甚至因为有些岗位的能力要求更高,其不可替代性会远高于所谓核心岗位。

说完广义的,再说回狭义的,所以这个狭义岗位最后会被替代掉吗?我认为也不会。因为实际情况下,场景真的太多了,需求真的太细了。算法的建模,不同方法之间的对比,相同方法的不同参数的对比,快速迭代,小步快跑,这些东西,automl 是做不到的,因为这都需要经验的。比如像这种层出不穷的边边角角的小问题:如何让目标检测算法暂停误报?,时不时来一下子,优先级瞬间提高到最高,还是需要经验的救火队员来强有力的支撑一把的。你所在的公司只要不是业务独霸行业一招鲜吃遍天并且没有竞品,那就面临着算法迭代和升级,新需求的挑战和应对,开源算法新升级的适配,等等问题,都会 push 着你往前推进。

而狭义岗位又有具体几项解决实际问题的能力是必不可少的,1)算法流程的设计建模的能力,这个是非常有意义同时有非常有挑战的一件事情,如果你不是等着别人建好流程之后自己去训练个模型,而是自己设计模型和上下游其他模块之间的关系,自己确定算法调用策略和输出策略,自己处理特殊情况,那恭喜你,你已经具有算法架构能力了;2)调参中的 debug 的能力,因为深度学习方法是个半黑盒子样子的流程,当出现问题的时候光靠调普通程序样的简单的调试往往解决不了问题,深度学习的程序,很多时候看起来都是正常的跑,但是结果就是掉 n 个点,所以很多时候良好的基础知识和设计消融实验做 ABtest 去定位问题所在,都是非常重要的。

所以这里就回到一个工程师自身精进的问题了。这里引用乃岩的文章说吧:Deep Learning 的专家如此急缺,它难在何处?- Naiyan Wang的回答:实际缺乏的不是Deep Learning的人才,而是可以实际解决问题的人才,而实际可以解决问题的人才不管在什么时代都是稀缺资源。
因此我一直认为,在研究生学习阶段,研究问题和解决实际问题的方法,可能比你实际研究的问题本身更加重要。

所以,当人工智能领域趋于理性和正常之后,需求量依旧旺盛,对人的要求依旧很高。末了,这里也还有一篇关于算法工程师定位的文章值得去看一下:互联网从业者2020年终总结。

对于未来的小展望:

人工智能技术的变现能力目前还没有到火力全开的地步,因为毕竟还有最后那 n% 的困难 corner cases 无法被学术界和工业界克服。并且,所有人工智能算法都紧密的依赖于业务本身,只有业务能够创造价值,依附于其上的算法才能产生价值。

但是有问题不代表需要被否定,这个方向未来一定会在人机交互、生产效率、辅助决策、医疗保险、文化教育等等诸多方面发挥巨大的作用。甚至每一个普通人,不管你愿意不愿意,都会被裹挟着进入它的怀抱之中。

所以在接下来的一段时间,围绕着人工智能算法发展出来的应用,其深度和广度都会持续的被挖掘,并创造更好的社会价值。在这个过程中,其实不光是算法工程师,全行业的从业人员都会参与其中的,商业模式、产品设计、品质控制等等,来一起共同推动整个行业的发展。

因此,对于算法的工作,我还是持有积极的乐观态度的。小伙伴们,加油。

CV资源下载

后台回复:CVPR2020,即可下载代码开源的论文合集

后台回复:ECCV2020,即可下载代码开源的论文合集

后台回复:YOLO,即可下载YOLOv4论文和代码

后台回复:Trasnformer综述,即可下载两个最新的视觉Transformer综述PDF,肝起来!

重磅!CVer-细分垂直交流群成立

扫码添加CVer助手,可申请加入CVer-细分垂直方向 微信交流群,可申请加入CVer大群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、TransformerPyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡),根据格式备注,才能通过且邀请进群

《关于人工智能算法岗位的一点思考》

▲长按加微信群

《关于人工智能算法岗位的一点思考》

▲长按关注CVer公众号

整理不易,请给CVer点赞和在看《关于人工智能算法岗位的一点思考》

    原文作者:Amusi(CVer)
    原文地址: https://blog.csdn.net/amusi1994/article/details/112457352
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞