来自知乎
https://www.zhihu.com/question/342267611
作者:Zhiming
https://www.zhihu.com/question/342267611/answer/805723045
大家可能没有分清楚两个概念...算法工程师和算法研究员是两个职位,现在可能不是很明显,但是我相信这应该就是以后的趋势。
算法工程师的本质还是工程师,从推荐系统方向来说,除了要求你读paper,复现paper之外,还需要会使用Spark这种大数据处理工具,会写shell脚本,跑个数据能不能开多线程跑,模型代码出了bug怎么定位...这些都是计算机系的基本功,更不用说模型上线就是一个复杂的C++工程了。企业对于一个工程师的要求简单来说就是”能干活“,”把活干好“,所以只停留在书本上是没办法成为一个”工程师“的。
还有很关键的一点,算法工程师研究算法的终极目的是服务业务,所以对业务有没有很深刻的理解非常重要,没有办法落地的算法,没有拿到指标收益的算法,即便再fancy,在学术界再amazing,在工业界也是吃不开的。
算法研究员就不说了,这个岗位我觉得本来就应该博士起步吧...
作者:沈世钧
https://www.zhihu.com/question/342267611/answer/805532525
从理论上分析,算法岗大爆炸(就业难)是必然的,只是时间早晚的问题。
以我所在的事业部为例,算法工程师和软件工程师的比例达到了1:4。
因为,对一个公司来说,算法是基础,在此之上能够开发出各种应用。这就注定了,软件开发的需求要远远大于算法的需求。
就拿人脸识别算法来说,算法部门只需要推出一个版本的算法(以SDK的形式),软件研发部门就可以在此基础上,开发出诸如视频监控、闸机等各种应用。
而对底层算法来说,无论是对外的接口,还是内部的架构(例如深度学习),都有着相当的统一性。因此,就算法来说,维持一个精干的,高水平的团队,对全公司的业务支持来说,是完全可行的。
这也是为什么,在算法招聘市场上,用人单位会对应聘者的资质要求那么高(学校、资历、论文等等)。就是因为算法有很强的理论性,以及技术统一性。一个精干的团队,如果有一两个一流的专家,最终的产出,就完全可以吊打那些虽规模巨大,但皆由平庸之辈构成的团队。
这也是为什么这两年在深度学习领域,出现了很多在学术界、产业界都声名鹊起的科学家(例如深度学习三巨头,吴恩达等)。这也在某种程度上说明,在深度学习领域,“英雄”对行业的推动还是决定性的。
这也就决定了,那些在技术前沿竞争的大公司,在招聘算法工程师时,一定会坚持“宁缺毋滥”的原则,因为多了也没有用。
但软件工程师就不一样了。
虽然就软件工程师(例如Java后端工程师)的技能来说,也存在通用的地方。但对一个在市场上打拼的公司来说,客户(各种项目)的需求千差万别,各种促销活动迎接不暇(例如双十一),用户体验需要不断改善。因此,对“业务”软件工程师的需求也必然是巨大的。
虽然就关键技术来说,一个高水平的软件工程师所产生的生产力数倍于平庸者。但就开发日常来说,有太多的工作都是高度重复,缺少技术含量的活(例如增删改查)。
但另一方面,虽然这些工作技术含量不高,但代码终究还是要程序员一行一行垒出来的。所以,对企业来说,就不得不长期维持一个规模巨大的软件开发团队,从而造就了一个规模巨大的就业市场。
除非有一天,软件开发也能被AI替代(理论上是可以的)。
算法研究的基础是数学。按照当前的技术发展,本科数学是不够用的。因此,在招聘市场,算法岗的最低学历也得是硕士。
但是,在当前的深度学习领域,就公开框架的学习,理论结果(各种出版物、论文等)的研究。对一个受过系统数学教育,智力正常的研究生,完全没有障碍。
而且,随着这两年AI的大火,相关的技术和理论已成为了一门“显学”,公开的技术和资料越来越多,可谓“太阳底下无秘密”,先入者的红利早已不存在了。
也就是说,在早前,在人工智能(主要是机器学习)还相对神秘的时候。一个研究生,掌握了基本理论,能理解及搭建开源框架,就能找一份好工作。但现在水涨船高了,靠通过机械学习而掌握的这些知识是远远不够的。
因为门槛低,所以掌握的人就多,加上算法团队更倾向于规模不大,但高度精英化的团队。所以就导致了“僧多粥少”的局面。
而现在在各大公司,基本的深度学习框架已经搭建完成,往前走,就只有两个方向。
一个是继续收集数据,喂给搭建好的深度学习框架,从而让当前的算法不断进化。
例如,对人脸识别来说,各家基本的准确率已差别不大。大家的竞争已经朝向了一些边缘问题(例如活体检测等)。
当然,这方面还是需要不少人力去做的。但是,这些工作的技术含量却显然不高。在业界,有很多公司已经不愿再投入太多研发在上面,要么从第三方买数据,要么是把这些工作外包出去。
也就是说,喂数据,调参数这种工作,正逐渐从高端就业市场剔除出去。
另一方向是,在深度学习领域,各大公司的发力重点是把技术往更前沿推,研究新的理论,实现新的框架。
例如当前的主流学习框架还是基于数据,有人守护的学习模式。但未来的趋势应是自学习,无人守护的模式。
而做到这一点,后来者想要入行,就不能单靠机械的学习了。而是要基于天赋、灵感,甚至是运气。这也注定了能站在这个层次的人必然是少数。
基于上面的分析,我们可以得出的结论,未来,创造性的,高收入的算法职位,随着时间发展,一定会越来越少。后来者想要入行,也会越来越难。
未来,随着深度学习框架的下沉,高价值应用领域(例如人脸识别、自动驾驶)被逐渐瓜分,整个AI行业,必然会越来越呈现出精英化的趋势。
说来也讽刺,今天,我们对未来的一个预测是,随着对人工智能的普及,越来越多的劳动岗位被机器替换。未来,还需要劳动的只是少部分天赋异常的精英。
但没想到的是,人工智能时代虽然还没有来到,但在人工智能的研究领域,这个预言却首先实现:平庸的AI从业者正逐渐失去工作。
作者:De signer
https://www.zhihu.com/question/342267611/answer/806879765
说下我的经历和心路历程,我是转行想做算法,开始不知道怎么学习,照着网上资料。
看了ESL前5章后过程中看ESL时,LASSO那里不是太懂,就看了原paper,proximal algo和angle regression,了解了一些subgradient,感觉不能再深入,容易陷进去。就换了本书,开始看PRML(大部分),过程中看了凸优化,多元概率论,线性代数,一些简单的群论。然后听说花书(Deep Learning)比较新,就开始看,发现其实都差不多,然后看了基础就停了。这个过程中发现对算法越来越感兴趣。一是它可以帮我思考一些解决问题的模式,另一方面可能是难度适中,学着不累吧。
光看书也不行,毕竟大多讲的都是很老的经典算法,现在流行的神经网络那些书里面讲的太少。就开始学习深度学习。啊,什么,没什么理论,看着像规则,就是连连线。。大多书都是讲怎么用python和tensorflow来实现。好吧,那先学了一个python,tensorflow,跑了一跑简单的模型,用了用GPU,发现真的很快,有点激动。
但这不行啊,这太简单了。然后我找了一些用深度学习做应用的paper,想从中了解一下深度学习大家都是怎么用的,不至于这么随意吧。然后从中确实学到了一些可以算是经验的东西,比如深度学习大多都是从end2end角度,把想法拿到loss的loss工程,和把想法设计到结构的结构工程。loss工程比较直观;结构工程,比如attention这个,我怎么看怎么像为了解释而解释。。我根本不信对所有情况这种解释性人都可以理解。好吧,我暂且信了。。但是有些结构听着还不错,比如残差结构,BN,dropout,CNN
不过神经网络个人理解还不是很到位,想不明白很多问题,很多靠猜,比如对某些层内增加一些其他操作会怎么样。听说这个东西就是靠过参化而不过拟合才能有好的效果。最后了解一些经典结构
之后试图想看看一些可解释的文章,不太信那些试验性的可解释性文章,于是看了一些SGD类的,比如用DE来解释SGD的动力学过程。此过程中还去学了DE。。顺便还学了一些热力学。混沌。反正还是没太明白。以后再学吧。
由于还有一些比较火的,比如RL,GAN,想到面试肯定会问这些。就又学了这些东西。GAN这里就学了皮毛,但是对操作分布有了更深的认识。如何通过衡量分布来进行生成学习。manifold中分布导致JS KL 的局限性,W-distance引入,L-Liptchsz约束,mode collapse,loss设计中曲率对参数更新的影响。
RL中了解到MDPs,一种新的学习模式。model free与model base中对优化方法的选择,MD,TD
MC; off-policy-> on policy转化。bellman Equation,value based的核心V,DQN一些变种;policy-based,PPO,PRTO;A-C;DDPG感觉和GAN好像哦。
上面这些也是花了很多时间,大概2个月。之后听说找算法要coding能力,看源码。我信了。
开始看TF源码,我一个非计算机看起来还真是难啊,先看了c++11一些基本知识,发现和python很像。OK开始看。开始从framework看起。op, kernel, device, resource, node, graph,到runtime session,executor。过程中学习了很多。
了解了如何定义新op,如何实现一个特定设备上的kernel,op到node到function,顺带学了一些设计模型。感觉这个是我学习过程中最难的,swig如何生成中间代码连接python前端和c++后端。python构建fullgraph到master剪枝到clientgraph,再到OP_placer,根据设备分裂client graph注册到设备partitiongraph,然后启动executor执行图。发现其实TF优化点还有很多。图优化和内核优化。太多了。
最后听说最重要的是刷题,完了。马上就要找工作了。我再开始看数据结构,刷leetcode。发现好累,刷不动了。
结果就是笔试都过不了。
放弃了。
躺在床上想想这过去的2.5个月,好像做了一个梦。一觉起来,我什么都不记得了。
还是复习我的专业课,凝聚态物理。找个工厂的好。
作者:非易
https://www.zhihu.com/question/342267611/answer/807259468
最近在阿里巴巴实习,推荐系统方向。看到身边的一些正式员工在面试的时候,根据他们的聊天,得出是一些简单的结论,供大家参考:
有顶会paper是加分项,给人在面试之前就会有很大的好感和重视,但是如果面试表现不好,就会有很大反差,会让人觉得你的论文是别人给你提供的方案,你只是实施者,而不是在一轮轮失败中自己摸索出的解决方案,缺乏独立解决问题的能力;
对于硕士出来找工作,刷算法题是十分有必要的,基本上都会有code面,而且是在第一,第二轮,面不过直接挂,hc少,都是择优录取。
博士找工作,最好是找熟人内推,或者是开会期间和公司的人聊,这样才会拿到好的offer。否则还是要刷点题的。
面试表现很重要,非常重要。这一条和第一条内容有点重合。现在投核心部门算法岗的人,博士肯定人均顶会一作,硕士即便没有顶会一作也都有比赛的top3成绩等。所以面试官开始问你做的东西,你肯定能回答的不错。但是后面肯定会结合你的方向,问一些具体场景的问题,问你怎么解决,能不能给出一个比较high-level的思路,这个就很重要。面试官这时候考察的是你的思考方式,思维能力,在这个环节表现的好,会非常非常加分。因为比赛可以抱大腿,论文可以靠老板,面对到具体问题时,怎么思考,这是考验一个人的思维方式和知识储备,需要一个人有独立解决能力的能力。
能去实习先实习,起码我所在的部门,不少hc都留给实习生,当然实习生也不一定留下来,所以校招也有机会,但是实习能抢占先机。
不要慌,去年我看同学找工作的时候,知乎上就已经开始唱衰互联网寒冬,最后水平一般的同学拿的批发价都是30w,厉害的能拿到40w。今年也一样,有实力不用慌,没实力学校好也不用太慌。
此外,多说一句,算法岗并不是发paper写论文,根据我观察周围的员工,大多是在做业务,写SQL,把一些已经很成熟的工具拿过来部署,上线看效果,并不是每天去尝试最新比较fancy的模型。除非是一些经过验证的,比如BERT这样的很出名的方法会用上来,大部分情况下,用的算法并不是特别先进。
暂时根据他们的谈话和我的观察,想到这些,祝大家都能拿到满意的offer。
●编号1012,输入编号直达本文
●输入m获取文章目录
程序员数学之美
更多推荐《25个技术类公众微信》
涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。