算法岗和开发岗有什么区别
链接:https://www.zhihu.com/question/490150407
编辑:深度学习与计算机视觉
声明:仅做学术分享,侵删
作者:如雪https://www.zhihu.com/question/490150407/answer/2164415753
围城外的人,可能会以为开发岗是工地里搬砖的,而算法岗是类似建筑师指导别人搬砖的。但实际上,这种感觉肯定是不对的。互联网公司发展到现在,算法岗和开发岗本质更像是两种不同型号的螺丝钉,只是处于流水线位置不同而已。并且,很多算法岗需要做的工程量也越发像开发岗看齐,已经远不是当个“调包侠”就能过关的了。
先说下开发岗和算法岗在职责上的区别,以一般的推荐/广告系统为例,有数据库->召回->粗排->精排->混排->前端等上下游模块。
开发岗需要做的是根据具体需求来搭建/维护对应的线上模块,写代码实现线上逻辑。具体而言,开发岗更像纯粹的“工程师”,需要根据需求来进行功能开发、测试、代码上线,比如在召回等某个模块修改个代码逻辑以推进某个业务上线。由于每项工作都是目标确定,工作量也是可以直观衡量的,所以工作确定性很强,产出也比较确定。一旦需求比较多时,就会堆时间加班解决,而加班多工作量肯定会更多,成绩一般也更突出。所以,开发岗更多是“身体累”。
算法岗的目标主要是通过各种手段提升对应指标,比如推荐系统的点击率、转化率、用户停留时长等。举上面例子来说,是通过优化召回、粗排、精排等策略/模型结构,优化模型训练数据,对接新业务优化业务指标等各种不同方式来提升指标。到了现在算法已经接近瓶颈时,算法会过得非常难受,每个优化点不一定会有用(大多是无效的),需要反复提出新方案、优化、排查指标、再提出新方案不断循环直到拿到某个收益点。有时改几行代码结果带来收益,有时又投入巨大工作量也没收益,所以,这方面工作量和工作目标上更不好量化,算法岗更多是“心累”。
在能力上,算法需要了解很多算法领域的知识,但是对工程能力的要求也逐渐与开发岗看齐。
算法需要熟悉各类机器学习/深度学习算法知识、各类策略、比较前沿的新算法/模型,除此之外,现在对算法的工程能力要求也是越来越高,基本的架构(比如上面说的公司内部推荐/广告算法各个模块的代码)、架构开发基础(C++,Java等)、数据开发(spark等、flink)。主要原因一方面是简单的模型优化已经很难拿到收益了,新开发的算法逐渐更复杂,想要让模型更合乎预期就需要对架构很熟悉方便模型设计、指标排查、提出新方案等,另一方面,也是为了快速迭代,开发同学需求太多做不完的时候,算法岗不可能干等着别人开发,自己动手完成一部分简单开发能够保证工作正常推进。
开发岗则需要对架构知识、开发基础等各种知识比算法同学更深入,具体哪部分技术重要取决于具体的开发岗位。
最后谈下这二者面试情况,大体上说算法岗有一定泡沫,内卷比较严重,开发岗位置更多。
由于前几年ai太火,各个专业都往“算法”上转,当年削尖脑袋进算法各方向的学生这两年也开始批量毕业。因此,显而易见的是算法岗面试会更内卷一些,尤其是cv、nlp等偏研究性质且落地场景不多的算法岗位。目前推荐/广告算法还不算卷,主要原因是没有平台导致很少学校会专门研究这两个方向。面试上主要还是看以往的算法项目经验及对算法本身的理解、算法基础知识、刷题等。
开发岗种类比较多,比如后端、前端等,而且根据不同业务可能又会使用不同的技术栈(比如一些用C++,另一些用go等)。开发岗是硬需求,每个公司都需要且数量不少,所以内卷程度会比算法轻。面试上,也都大同小异,主要也是问过往项目,基础知识(对应开发方向的)以及刷题。
至于未来发展,个人努力是比不过时代潮流的,碰到好的业务好的领导算法能够很容易带来业务增长,那么个人上升速度也会很快。开发岗也是同理,选择一个好的平台,好的团队比选择开发岗还是算法岗更重要。
上面主要是以互联网公司中推荐/广告算法岗位和开发岗进行比较的,其他还有偏研究类型的cv、nlp等算法岗,这里就不再多说了。
作者:AI蜗牛车https://www.zhihu.com/question/490150407/answer/2173649548
有这么几个维度的不同,其中有我个人的总结,以及和周围一些做开发的同学聊的。
1.薪资待遇
前几年的时候算法岗可能要比开发岗位薪资待遇更多。
这几年逐渐趋于平齐,但是还是有很多公司依然是同等级情况下,算法>开发。
并且可以参照很多人才计划,例如阿里星,美团北斗,快star,还有腾讯大咖。
大多数都是给了算法类,其实也有一些给了所谓的“开发”,但我个人觉得那些不算开发,应该叫研发,就是里面其实有很多高并行,以及调度算法在,比如分布式存储方向等等,但是这类方向在学校很难接触到(然而是目前企业稀缺的)
2.工作类型
算法岗有纯粹的research,那种就是读论文,搞模型,写论文的,偏向高校的学术研究。
这种工作可能和开发类差距非常之大。
但是如果是算法“工程师”,其实所谓算法工程师的理解其实就是用算法工程解决问题。
而开发,一般来说就是用开发逻辑解决问题。
本质上都是解决问题工程师,然而算法可能算法的环节,思想更多,开发亦然。
可以看看这个回答:
https://www.zhihu.com/question/485065074/answer/2109345799
3.技术栈
这个区别我个人感觉很关键。
开发的话本身技术栈相对来说宽泛,比如只要我后端学的牛,我可以去面很多核心部门。
然而对于算法来说,方向偏细分,比如你想拿到不错的offer,最好的前提是方向match,match的话可能事半功倍,但是话说回来,这其实是相对来说很难得,比如时空序列,也有气象背景和交通的,细节还是有差距的,比如cv的细分领域更多了去了,推荐也分文本的,视频流的等等,所以总体面试可能就较局限(相对开发来说)
4.岗位需求
开发无疑是更多的,算法无疑是更少的,并且这两年早已没之前那么大泡沫。
这个其实也能理解,比如做一个app,如果是一个软件首先你需要把这个开发系统构建起来,就需要很多开发的人,而算法可能是之后的事情。
5.难度
算法无疑是更难的。
会发现周围在大佬中比率更高的方向都是AI,最终从事算法岗工作的基本上大多数都是在周围眼中相对来说优秀的,当然开发也有很多大佬,这里只能用相对来说。
并且各行各业中的高学历(这里指清北),很多学习数学和经管,以及物理专业的都来从事这个方向,别看他们也是非科班,但是有的学习能力足够强,再加上学习AI其实大家都是从头开始,还不像开发需要知道那么多计算机基础知识,只需要英文以及数学过关,其他就是看自己的学习和理解能力了,所以他们并不会弱势,反而很多人学的很牛逼,导致整体占坑多了。
作者:Amberskyhttps://www.zhihu.com/question/490150407/answer/2158935592本人工作title是算法工程师,实际工作中大约是50%的算法+50%的开发,平时也会和朋友讨论何谓算法,何谓开发。
从我一个入职不到一年的菜鸡算法角度来看,算法岗玩的是数学关系,开发岗玩的是逻辑关系。
开发岗的职责是搭建一个产品的所有逻辑,从底层的到顶层的。前端页面之间的跳转逻辑,后端与数据库之间的交互逻辑,前后端的交互逻辑,这些是开发岗需要做的。比方说我的产品是某视频平台,那么打开呈现的界面,点击视频进入到播放页面,注册账号修改信息等操作,都是开发岗完成的。
算法岗的职责,顾名思义就是算法,算法分很多种,机器学习,数据挖掘,NLP,CV,推荐等都是常见的算法领域。算法岗很多情况下是某个产品的核心,在产品中负责某个非常细分的点,或是为某个关键功能提供支持。回到视频平台的场景,每次刷新推荐页都有新的视频出现,如何确定刷新过后推荐给用户什么视频,是推荐算法做的事。一个算法会经历很多轮迭代,会有很多算法工程师抓着头皮想着怎么优化,多做些特征工程?参数再调优一下?换个更合适的模型?等等。这些操作,更多的是数学关系,比方说需要关注数据集的分布情况,相关性矩阵,模型损失函数等。
当然也有很多算法是研究方向,我举的例子不过是一小部分。
毕业不久眼界也比较狭隘,如有不准确之处也望大佬们指正轻喷。
作者:kuadohhttps://www.zhihu.com/question/490150407/answer/2164598780
在目前大环境下,从收入方面出发,算法和开发基本没有啥区别。(17年前后随着深度学习爆火,起薪上一开始是算法岗更高)
下面从算法岗的角度谈谈自己的理解。算法岗主要针对的是无法通过直接编程进行解决的问题(主要是非结构化的输入,如图像,语音,文字等的识别。如果通过人为地写if-else规则去处理这类输入,程序将变得繁琐冗长且不一定能够覆盖所有情况),需要将它转化为一个数学问题进行建模后,结合标注的数据进行该数学问题求解,用得到的数学模型(某个函数y=f(x)一般是个概率函数)。
而开发岗负责的就是能够结构化的输入了,需要处理的情况也是相对固定的。以一个人脸识别接口为例,开发岗负责的部分可能会包括,将需要识别饿图像进行压缩,然后通过网络发送到服务器上解压缩,然后将图像输入算法模块得到的结果通过网络传回客户端。如何承受短时间大量的人脸图像输入同时服务器不宕机,客户没感觉到卡顿,就是常见的后端开发岗需要解决的问题了。
像别的答案提到的那样,开发岗往往是身体累,而算法岗是心累。开发岗面对的问题往往是比较明确的(怎么更快地处理输入并保持准确),能通过代码分析和debug找到问题所在,然后通过扎实的CS基础知识解决或者堆机器解决,举个简单的例子,比如说我有一份几十pb的数据需要找到top100,但是我内存放不下,可以通过堆排序的思想进行处理;或者有钱的直接使用很多机器进行分布式处理快速解决。
但是对于算法的一些问题,因为目前常用的算法模型是一个黑盒,往往是难以定位和解决的,没有一套所有情况都适用的方案。比如说一个动物识别程序将某只哈士奇识别成了狼,这种badcase的原因是没有一个明确的理论另外分析的,解决的方法一般也只是对这类情况增加更多的训练样本或者尝试更先进的网络结构。总结就是算法面对的不确定性更大。
作者:关建淳Arvinhttps://www.zhihu.com/question/490150407/answer/2166902713
先来说说算法岗,通常涉及到算法的岗位有两个,分别是算法设计和算法实现,现在有不少团队把这两个岗位进行合并,做算法设计的同时也要负责实现。但是也有一些团队是分开的,做算法设计的不管实现过程。从工作的复杂性上来说,算法工程师的工作强度还是比较大的,但是算法工程师的职业周期也比较长。
很多算法工程师最终成长为企业的首席科学家,或者是首席技术官等岗位,可以说算法工程师的发展前景是非常可观的。
再来说说开发岗。其实软件团队的大部分岗位都是开发岗位,有前端开发、后端开发、移动端开发等,可以说大部分程序员做的都是开发岗的工作。与算法岗位不同的是,开发岗位人数多,占比大,而且大部分开发岗位的职业周期都比较短,一般开发岗位在做到一定年龄(比如35岁)之后都会转型。
一部分会转向项目经理等管理岗位,一部分会转型做架构师,还有一部分转型为行业咨询专家等,当然,也有一部分开发人员转型为算法工程师。
算法岗和开发岗哪个前景更好?其实只要技术到位,这两个岗位未来的发展前景都不可限量。
如何成为一名优秀的程序员,做好以下两点非常重要:一方面要立足本职工作,另一方面也要紧跟技术发展趋势,通过岗位提升和自主学习不断完善自身的知识结构,从而提升自己的职场竞争力。
☆END☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「woshicver」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓
算力的计算,AI芯片与其他芯片的区别
所谓的AI芯片,一般是指针对AI算法的ASIC(专用芯片)。传统的CPU、GPU都可以拿来执行AI算法,但是速度慢,性能低,无法实际商用。
比如,自动驾驶需要识别道路行人红绿灯等状况,但是如果是当前的CPU去算,那么估计车翻到河里了还没发现前方是河,这是速度慢,时间就是生命。如果用GPU,的确速度要快得多,但是,功耗大,汽车的电池估计无法长时间支撑正常使用,而且,老黄家的GPU巨贵,经常单块上万,普通消费者也用不起,还经常缺货。另外,GPU因为不是专门针对AI算法开发的ASIC,所以,说到底,速度还没到极限,还有提升空间。而类似智能驾驶这样的领域,必须快!在手机终端,可以自行人脸识别、语音识别等AI应用,这个必须功耗低,所以GPUOUT!
所以,开发ASIC就成了必然。
说说,为什么需要AI芯片。
AI算法,在图像识别等领域,常用的是CNN卷积网络,语音识别、自然语言处理等领域,主要是RNN,这是两类有区别的算法。但是,他们本质上,都是矩阵或vector的乘法、加法,然后配合一些除法、指数等算法。
一个成熟的AI算法,比如YOLO-V3,就是大量的卷积、残差网络、全连接等类型的计算,本质是乘法和加法。对于YOLO-V3来说,如果确定了具体的输入图形尺寸,那么总的乘法加法计算次数是确定的。比如一万亿次。(真实的情况比这个大得多的多)
那么要快速执行一次YOLO-V3,就必须执行完一万亿次的加法乘法次数。
这个时候就来看了,比如IBM的POWER8,最先进的服务器用超标量CPU之一,4GHz,SIMD,128bit,假设是处理16bit的数据,那就是8个数,那么一个周期,最多执行8个乘加计算。一次最多执行16个操作。这还是理论上,其实是不大可能的。
那么CPU一秒钟的巅峰计算次数=16X4Gops=64Gops。
这样,可以算算CPU计算一次的时间了。
同样的,换成GPU算算,也能知道执行时间。因为对GPU内部结构不熟,所以不做具体分析。
再来说说AI芯片。比如大名鼎鼎的谷歌的TPU1.
TPU1,大约700MHz,有256X256尺寸的脉动阵列,如下图所示。一共256X256=64K个乘加单元,每个单元一次可执行一个乘法和一个加法。那就是128K个操作。(乘法算一个,加法再算一个)
另外,除了脉动阵列,还有其他模块,比如激活等,这些里面也有乘法、加法等。
所以,看看TPU1一秒钟的巅峰计算次数至少是=128KX700MHz=89600Gops=大约90Tops。
对比一下CPU与TPU1,会发现计算能力有几个数量级的差距,这就是为啥说CPU慢。
当然,以上的数据都是完全最理想的理论值,实际情况,能够达到5%吧。因为,芯片上的存储不够大,所以数据会存储在DRAM中,从DRAM取数据很慢的,所以,乘法逻辑往往要等待。另外,AI算法有许多层网络组成,必须一层一层的算,所以,在切换层的时候,乘法逻辑又是休息的,所以,诸多因素造成了实际的芯片并不能达到利润的计算峰值,而且差距还极大。
可能有人要说,搞研究慢一点也能将就用。
目前来看,神经网络的尺寸是越来越大,参数越来越多,遇到大型NN模型,训练需要花几周甚至一两个月的时候,你会耐心等待么?突然断电,一切重来?(曾经动手训练一个写小说的AI,然后,一次训练(50轮)需要大约一天一夜还多,记得如果第一天早上开始训练,需要到第二天下午才可能完成,这还是模型比较简单,数据只有几万条的小模型呀。)
修改了模型,需要几个星期才能知道对错,确定等得起?
突然有了TPU,然后你发现,吃个午饭回来就好了,参数优化一下,继续跑,多么爽!
计算速度快,才能迅速反复迭代,研发出更强的AI模型。速度就是金钱。
GPU的内核结构不清楚,所以就不比较了。肯定的是,GPU还是比较快的,至少比CPU快得多,所以目前大多数都用GPU,这玩意随便一个都能价格轻松上万,太贵,而且,功耗高,经常缺货。不适合数据中心大量使用。
总的来说,CPU与GPU并不是AI专用芯片,为了实现其他功能,内部有大量其他逻辑,而这些逻辑对于目前的AI算法来说是完全用不上的,所以,自然造成CPU与GPU并不能达到最优的性价比。
谷歌花钱研发TPU,而且目前已经出了TPU3,用得还挺欢,都开始支持谷歌云计算服务了,貌似6点几美元每小时吧,不记得单位了,懒得查。
可见,谷歌觉得很有必要自己研发TPU。
目前在图像识别、语音识别、自然语言处理等领域,精度最高的算法就是基于深度学习的,传统的机器学习的计算精度已经被超越,目前应用最广的算法,估计非深度学习莫属,而且,传统机器学习的计算量与深度学习比起来少很多,所以,我讨论AI芯片时就针对计算量特别大的深度学习而言。毕竟,计算量小的算法,说实话,CPU已经很快了。而且,CPU适合执行调度复杂的算法,这一点是GPU与AI芯片都做不到的,所以他们三者只是针对不同的应用场景而已,都有各自的主场。
至于为何用了CPU做对比?
而没有具体说GPU。是因为,我说了,我目前没有系统查看过GPU的论文,不了解GPU的情况,故不做分析。因为积累的缘故,比较熟悉超标量CPU,所以就用熟悉的CPU做详细比较。而且,小型的网络,完全可以用CPU去训练,没啥大问题,最多慢一点。只要不是太大的网络模型。
那些AI算法公司,比如旷世、商汤等,他们的模型很大,自然也不是一块GPU就能搞定的。GPU的算力也是很有限的。
至于说CPU是串行,GPU是并行
没错,但是不全面。只说说CPU串行。这位网友估计对CPU没有非常深入的理解。我的回答中举的CPU是IBM的POWER8,百度一下就知道,这是超标量的服务器用CPU,目前来看,性能已经是非常顶级的了,主频4GHZ。不知是否注意到我说了这是SIMD?这个SIMD,就代表他可以同时执行多条同样的指令,这就是并行,而不是串行。单个数据是128bit的,如果是16bit的精度,那么一周期理论上最多可以计算八组数据的乘法或加法,或者乘加。这还不叫并行?只是并行的程度没有GPU那么厉害而已,但是,这也是并行。
不知道为啥就不能用CPU来比较算力?
有评论很推崇GPU。说用CPU来做比较,不合适。
拜托,GPU本来是从CPU中分离出来专门处理图像计算的,也就是说,GPU是专门处理图像计算的。包括各种特效的显示。这也是GPU的天生的缺陷,GPU更加针对图像的渲染等计算算法。但是,这些算法,与深度学习的算法还是有比较大的区别,而我的回答里提到的AI芯片,比如TPU,这个是专门针对CNN等典型深度学习算法而开发的。另外,寒武纪的NPU,也是专门针对神经网络的,与TPU类似。
谷歌的TPU,寒武纪的DianNao,这些AI芯片刚出道的时候,就是用CPU/GPU来对比的。
看看,谷歌TPU论文的摘要直接对比了TPU1与CPU/GPU的性能比较结果,见红色框:
这就是摘要中介绍的TPU1与CPU/GPU的性能对比。
再来看看寒武纪DianNao的paper,摘要中直接就是DianNao与CPU的性能的比较,见红色框:
回顾一下历史
上个世纪出现神经网络的时候,那一定是用CPU计算的。
比特币刚出来,那也是用CPU在挖。目前已经进化成ASIC矿机了。比特大陆了解一下。
从2006年开始开启的深度学习热潮,CPU与GPU都能计算,发现GPU速度更快,但是贵啊,更多用的是CPU,而且,那时候GPU的CUDA可还不怎么样,后来,随着NN模型越来越大,GPU的优势越来越明显,CUDA也越来越6,目前就成了GPU的专场。
寒武纪2014年的DianNao(NPU)比CPU快,而且更加节能。ASIC的优势很明显啊。这也是为啥要开发ASIC的理由。
至于说很多公司的方案是可编程的,也就是大多数与FPGA配合。你说的是商汤、深鉴么?的确,他们发表的论文,就是基于FPGA的。
这些创业公司,他们更多研究的是算法,至于芯片,还不是重点,另外,他们暂时还没有那个精力与实力。FPGA非常灵活,成本不高,可以很快实现架构设计原型,所以他们自然会选择基于FPGA的方案。不过,最近他们都大力融资,官网也在招聘芯片设计岗位,所以,应该也在涉足ASIC研发了。
如果以FPGA为代表的可编程方案真的有巨大的商业价值,那他们何必砸钱去做ASIC?
说了这么多,我也是半路出家的,因为工作需要而学习的。按照我目前的理解,看TPU1的专利及论文,一步一步推导出内部的设计方法,理解了TPU1,大概就知道了所谓的AI处理器的大部分。然后研究研究寒武纪的一系列论文,有好几种不同的架构用于不同的情况,有兴趣可以研究一下。然后就是另外几个独角兽,比如商汤、深鉴科技等,他们每年都会有论文发表,没事去看看。这些论文,大概就代表了当前最先进的AI芯片的架构设计了。当然,最先进,别人肯定不会公开,比如谷歌就不曾公开关于TPU2和TPU3的相关专利,反正我没查到。不过,没事,目前的文献已经代表了最近几年最先进的进展了。