最差的算法工程师能差到什么程度?

共 5201字,需浏览 11分钟

 ·

2020-10-12 20:35

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达


编辑:Amusi(CVer) |  来源:知乎

https://www.zhihu.com/question/347545092

本文仅作为学术分享,如果侵权,会删文处理


你见过最差的算法工程师能差到什么程度?


作者:Guosheng Hu
https://www.zhihu.com/question/347545092/answer/934820526


真事。


这周面试了一个候选人,面CV/DL/AI的TechLead。简历很牛逼,做过很多CV的工业项目,涵盖detection, OCR, face recognition, fire/smoke detection等好多项目. 给我们讲了45分钟做得项目,讲得很自信。我挑了一个大项目,我说你在这个项目中的贡献是什么?他说整个项目的所有算法部分都是他实现的。


OK,我开始进行深度学习的技术面。


我先问了两个深度学习的中等难度的问题,他都说不知道。有点冷场,那我赶紧问点简单的吧。我说,深度学习网络,进行分类时有哪些loss?他犹豫了一下,回答: relu.

瞬间把见过大场面的我还有同事都震住了。



作者:王喆
https://www.zhihu.com/question/347545092/answer/864222675


我们组一个年轻的印度小哥,UCSD毕业的,按说教育背景也不错,写model serving过程中的一步。每个request开20个线程计算。


我说你一个m*n复杂度的过程,m和n还都小于100,有必要开20个线程计算吗?你那线程开销绝对比并行计算收益大多了好吗。不听,给我说(大概意思):


并行计算比较cool,老老实实写那个过程太boring


行吧,不听不听吧,自己折腾去吧。


过两天给我说load test的时候server的latency翻倍,我一看线程数都超过JVM上限了能不翻倍吗。


讲这个倒不是想取笑这小哥,而是跟大家讨论一个问题,就是什么是比“技术上最差”更糟糕的情况。


如果你只是基础差,但总体上是一个严谨的人,其实到不那么麻烦,就是按部就班的学习,按部就班的积攒工程经验,无论是哪个领导还是老同事应该都是乐于帮助这样的年轻人的,因为总体来说你还是在解决问题,哪怕速度慢一点,你总归在成长,而且是让系统整体混乱程度降低的。


最差的算法工程师其实是什么呢?是自己对技术的感觉很差,但对自己的感觉挺好,试图用一些比较fancy的手段解决问题,但实质上引入了更高的系统复杂度,增加了系统潜在风险,这样的人,其实对整个团队是负能量的存在,始终需要更senior的人帮着擦屁股,这无形增加了整个团队的工作量,这就是最差的算法工程师。


我特别喜欢的一句话是:


“不带评论的观察是人类智慧的最高境界”


希望刚入行的算法同事们能够知道这句话的意义,其实公司不急于让每个人都发表意见,在自己技术能力不那么足的时候,不带评论,不带主观情绪的去学习一段时间,好好思考一下别人为什么要做出这样的技术决策,好好积攒一下自己的技术感觉,这是最重要的。相信度过最初的积累阶段之后,你能够为团队做出,为整个系统做出“熵减”的技术决策。



作者:胡津铭
https://www.zhihu.com/question/347545092/answer/1212688723


先歪个题,从反面回答一下,我碰到什么样的算法工程师会认为他/她是优秀甚至是卓越的大佬,并选择紧紧抱住大腿不松手。之前与@熊风学长还有很多来自不同公司的前辈们讨论过这个问题,本文很多观点也是来源于他们,这里也感谢大家的指点。总得来说,以下几个特点是我特别留意的,如果碰到了我就会认为这位很厉害:


  1. 基础非常扎实。问他/她一些比较经典的算法,能够很清晰地说出算法的特点、适用的场景、坑点、里面的细节等等。

  2. 工程能力很强。我是一位“工程狗”,自己的工程能力很菜,但对工程能力强的同学非常崇拜 Orz 如果碰到一位算法工程师的工程能力很强,仅凭这一点,我就认为他/她基本上一定是大佬Orz

  3. 重视代码的测试。算法岗的工作并不完全就是调参炼丹,往往也是需要去写一些代码的,例如写些spark/sql代码获得特征,写模型等等。既然是写代码,就可以而且应该在其中加上测试。实际上,根据我的经验,如果碰到某个其他地方好用的模型在自己的场景下效果很差(不reasonable得差),那很可能是数据、特征的处理代码有问题,或者模型的代码有问题。这种问题可以用单元测试(断言等)来提前发现,也可以用一些sanity check来发现。

  4. 对场景业务的认识很深刻。软件工程没有银弹,机器学习也没有银弹。用什么样的特征、什么样的预估目标、什么样的评价指标、甚至什么样的模型,这些东西都是要与场景业务结合的。换言之,工业届里,业务先于技术。很多大神在这个方面做得尤其出色。

  5. 在实际场景中,注重先把整个pipeline搭建起来。个人认为,这一点在实际应用中往往应该是最优先的。搭建起来之后,机器学习系统的上下游也都可以工作,也可以更好地判断系统的瓶颈所在,把好刚用在刀刃上。这其实就与做开发的程序设计一样,较早地抽象出比较好的接口、搭建一个系统原型是很重要的。

  6. 能够持续学习新的知识,跟踪最新的成果,对各种模型的motivation有自己的理解,有自己的insight与vision。这里举几个我自己学习过程中碰到的例子来说明一下这点。例如,推荐系统中,在Youtube 16年的推荐paper中,为何step1和step2的优化目标是不一样的?人脸检测中,MTCNN为何要分为多阶段?landmark检测中,3000FPS为何要分为两个阶段?(这些是设计相关的motivation)Google的wide&deep为何在Google store的场景下效果好,而在其他的场景下效果不一定好(这是对场景的motivation理解)?文字检测中,PixelLink为何要引入link?OCR中,CRNN为何要引入一个RNN?机器学习系统中,LightGBM是如何针对xgboost存在的哪些缺点进行改进的?(这些是对改进的motivation理解)我认识的一些大佬们会主动结合文章思考这些问题,有的时候会有与paper所claim的不同的理解(毕竟写paper的story很多时候也不一定靠谱,大家都懂),甚至还会做实验验证自己的理解。然后拿这些问题来考我,在我思考不出来后再告诉我他们的理解与实验结果Orz

  7. 做多数实验之前有自己的假设,根据实验结果会根据实验结果做进一步实验,或修正假设、或进一步探究。

  8. 自己参与的项目,对其中与自己比较相关的内容的细节比较清楚,自己负责的部分能够了如指掌。

  9. 能系统性地分析出机器学习整个系统的瓶颈所在,并提出相应的解决方案。当系统效果不好的时候,知道如何去debug,找到问题所在,改进系统的性能。这方面是我个人尤其欠缺的点。


相应地,这些也是我要努力提升的地方。如果我是面试官,我想我也会从这些方面去考察算法工程师的候选人。当然了,以上几点不一定要面面俱到,例如很多大佬不一定工程能力很强,但仍然可以做出很好的东西。换言之,上述特点的precision应该很高,但recall不一定特别高。不过,在我看来,与以上描述相反的算法工程师,即基础不牢、工程差劲、不做测试、不怎么考虑场景、在搭建起pipeline之前过早地沉迷于某一步的优化、不学习新东西、拿所有实验当黑箱炼丹等等,这样的算法工程师(其实就是我了)在我看来就比较一般。而差劲的算法工程师,在我看来,是不仅这些方面做不好,还瞧不起这些方面的人。



作者:LinT
https://www.zhihu.com/question/347545092/answer/865893798


强答一波,讲讲在学校或网上见到的现象(AI方面,严格来说,这些人放到今天的行业标准下,基本不可能成为一名算法工程师)。

(纯属吐槽,请勿对号入座)


百度百科型选手/PPT选手:常见于各类创新竞赛、课程答辩,张口闭口一定是「人工智能」「神经网络」,上来一定要气压群雄,尽管对各类AI问题的进展没有任何了解,但是在他们这里,各种算法一定是封装好了,准确率100%,拿来就可以用(plug-and-play)的。什么文本情感分析做舆情监控啊,人脸识别智能面试啊,不在话下,章口就来。


博客型选手:大概率尝试过Andrew Ng的网课,但大概率没看下去,手里一定有一本Python深度学习,对原理不求甚解,数学公式大概都不想看,论文不想读,辗转各个博客网站希望找到一个好一点的解读;跑了一通实例代码,很有成就感,可能会在某个博客网站发布一篇博客,标题诸如《自然语言处理入门-XXX》,成功为网络贡献一篇与其他博客雷同率90%的文章,虽然文章名字像是一个系列,但是相信我,他大概率不会再发布同系列的文章了。


Github选手:常常和PPT选手合作,拿到需求,「人脸识别是吧?」,Github一搜,好多仓库,全克隆了再说;挑挑拣拣,调试了半天,依赖装完代码跑通了(没有error),任务完成,功德无量,接下来的任务交给其他队友!


AI+型选手(教师):传统方向出身,没有学过ML/DL,在AI兴起以后,把DL当万精油用,深度学习预测地震啊,深度学习验证软件啊...管它什么数据驱动不驱动,经费拿到手就行了。这类老师对AI的认知可能和PPT选手差不多,比学生多的本领就是写本子、打招呼了。带一个PPT选手加一个Github选手,基本上可以在各类创新竞赛/项目中拿到还不错的成绩。


名词流选手:行走的AI术语词典,讨论问题时就喜欢堆砌名词,但从不解释,故弄玄虚,让外行有一种「不明觉厉」的感觉,其实一些言论根本经不起推敲。


潮流型选手:走在AI潮流前列,除了最新的算法,其他的都是垃圾,「不加attention?你这算法不行!」,「2019年了,还用概率图模型?!」这类人对算法应用场景一无所知,对新算法的狂热程度堪比娱乐圈流量小生的疯狂粉丝们。





何去何从型选手:多半是半路出家,转行想做AI的,但是奈何基础弱,一心只想挣大钱,所以会很迷茫,于是到知乎抛下一个问题:「非cs科班可以学xxx吗?」「本人xx,应不应该xxx?」。奈何这类问题没有什么深度,基本得不到什么可以参考的回答。这类人问题不在没有基础,而在没有主见。


(别打我...)



作者:盛夏的果核
https://www.zhihu.com/question/347545092/answer/840206839


EMMMMMM,原回答不够严谨,下文所说的仅为AI算法工程师。


————————以下为原回答———————————

0级算法工程师——只知道神经网络和几个名词,这一级的人一谈到算法和人工智能,无脑牛逼(或无脑diss)就完事了。


1级算法工程师——拜读过西瓜书/小蓝书/花书,看过算法视频教程,对算法基础知识有一定的了解;掉过几个算法包,跑过几个模型和典型数据。这一级通常是调包侠,调参怪。口头禅:xxx算法模型是真的强!实际上对于算法原理思想一无所知,看的书也只是囫囵吞枣。


2级算法工程师——参加过一两个算法竞赛/项目,跑过知名的几个效果好的算法模型,并且获得了中规中矩的成绩(前10-20%)。此时认为算法不过如此,数据处理、特征构建、模型选择无非那么几种套路,仅仅靠着模型融合和毫无想法的数据处理过程来上分。这一级充斥着大量的校招算法工程师,承担着大中厂算法岗炮灰的角色。


3级算法工程师——参加一些算法竞赛并获得比较靠前的名次,对于使用的模型和方法有叫深入的理解,竞赛中存在独立和较深刻的思考。或者有关于算法项目相关的论文。这一级在基础算法能力上来说已经过关,可以找到还不错的工作。比较容易担忧的是自身的工程能力。


4级算法工程师——除了比较扎实的算法基础外,还有比较不错的工程能力。不仅理论知识过关,同时能将算法结合到业务场景、实际项目当中去,并对算法本身进行一定的更改以适应背景。这一级的人已经能成为offer收割机了,往往能拿到心仪的offer。

(我认为四级已经是绝大多数算法工程师的上限,对于工程师来说继续升级需要的是对相关业务的理解、敏锐度和工程能力了,超越了“算法”本身的范畴)


…………

N级算法工程师

对于现有的算法进行创新和改进/开发算法框架造福AI领域等造成比较大的影响的巨佬。这一级答主根本无法想象那种高度,实属算法领域的大牛级人物。


浏览 37
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报