找回密码
 立即注册
查看: 1088|回复: 20

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

[复制链接]
发表于 2021-7-4 06:05 | 显示全部楼层 |阅读模式
你见过最差的算法工程师能差到什么程度?
发表于 2021-7-4 06:15 | 显示全部楼层
算法领域强者如云,我拿着问题咨询了一位大公司的朋友,希望给自己定定位。该朋友为人幽默,而且水平十分高,差不多能够一个指头秒杀我那种,他对这个答案的回答是:
"我听过一个江湖潜规则,每一个大公司团队都会招一个特别不着调,水平也不行,智商也比较低的算法工程师,用来背低绩效。
当组里成员感到职业发展太难的时候,就会下意识看看那个人,这样,心里就会有莫大的安慰。
我当时下意识地看看周围的同事,发现他们都不符合这些描述。"
发表于 2021-7-4 06:19 | 显示全部楼层
强答一波,讲讲在学校或网上见到的现象(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?」。奈何这类问题没有什么深度,基本得不到什么可以参考的回答。这类人问题不在没有基础,而在没有主见。
注:以上纯属抖机灵,请勿对号入座。
发表于 2021-7-4 06:24 | 显示全部楼层
我有一个前同事,在linkedin上写着:
精通AI,CNN,机器人,量子计算机。
在职近三个月,每天在公司白天睡觉,老板来了就敲几行。
有一天他知道自己试用期难以通过,自己跑路了。
在他留下的电脑里,只留下一个还没提交代码文件。
打开一看,只有几行
import numpy as np
import pandas as pd
import tensorflow as tf
print 'fuck fuck fuck'我至今一直在想这人咋忽悠通过面试的。
<hr/>2019.12.16补充:
有人给我发了一套图,完全符合其状况






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-7-4 06:26 | 显示全部楼层
坐标法国,某银行投行。
前年年初,项目主管招进一个data scientist,突尼斯美女,在法国念的博士,机器学习专业,简历上精通Python和R,人工智能算法工程师,某专业大数据咨询公司咨询师。被塞在了我手下,帮我处理数据做深度学习。
一上来先找我要了两篇论文啃。这在法国同事中不常见。顿时觉得,这个博士不光有颜,还有实力。
一个礼拜后我开始让她动数据,布置了几个小任务。半个小时后她过来问我,为什么一个10k的文档读出来size很小。
我至今都记得这两行萌到销魂的代码:
file = "d:\\data\\test.json"
len(file)九个月以后她辞职了,被一个法国自动驾驶公司高薪聘走。
走之前问我的最后一个问题是,K-Fold和Cross Validation有什么区别。也怪我,为啥常常混着用这两个词。
从此下定两个决心:第一,从此以后所有面试的我都亲自去面;第二,打死我也不相信法国的自动驾驶技术了。
<hr/>好意外,很多朋友对这个回答感兴趣,那我集中回复一下:
    做算法不等于写代码。
回复的朋友应该是想说,做算法的不等于写读写文件、发送请求这些功能性代码吧。
纯计算机算法出身,刷完了leetcode或者codingame的所有题目,甚至在topcoder或者codejam拿到冠军,你都有可能没有碰过文件操作,虽然可能性微乎其微。但是一个做机器学习算法的没动过文件,这基础也有点差得太离谱了。
当然,如果是只参加kaggle比赛的还是有可能只会写不会读的,毕竟读文件的那两行代码在kernel里已经被写好了。
另外,我带了她九个月,并不完全是根据这两行代码得出的她基础差这个结论。


2. K-fold和Cross validation的区别。
K-fold的全称就是K-fold cross validation。
Cross validation一般有两种,一种是holdout,一种是k-fold。
holdout把数据集分成training,validation和test。这种太基础,很多AI项目都会这样来划分。所以在我们项目里,k-fold等于cross validation等于k-fold cross validation。
只不过我介绍算法的时候,会称为cross validation,因为字面含义比较清晰;调试的时候,喜欢用k-fold,因为动了k。
简单来说,提到莱奥或者梅西,当然可能指不同的人,但是在巴塞罗那足球队的语境里,都是在说Barca No. 10。只不过队友会唤他莱奥,解说会叫他梅西,我会称他球王。


3. 法国工程师。(一家之言,而且仅限计算机领域的讨论)
同事应该是凭借美女博士的光环赢得的项目主管(也许还有博士导师?)的芳心,毕竟项目主管不懂技术,觉得一个博士文凭说明一切。
可惜,法国的博士答辩,评审团是由非本专业的教授组成的。同事40分钟的答辩时间里,有将近半个小时在用男女学生分类这个最基本的AI场景介绍什么是机器学习和人工智能。估计下面坐着的评审团想着自己居然听懂了这么复杂的一个领域,一乐呵,就让她过了。
而且她本科和硕士是在突尼斯国内读的,博士才去的法瑞边境某个我没听过的学校,并不能代表大部分法国博士毕业生的正常水平。
事实上我之前在某大数据公司的博士同事,和我现在身边的大部分工程师同事的能力都相当优秀,我从他们身上学到了不少东西。
只不过,法国虽然数学足够厉害,给计算机算法这个高度依赖数学的领域提供了强大的理论支持,然而IT工业界对算法的重视程度普遍不高。
去年我在被现在就职的银行内转的时候(之前是在这里做咨询),还和一个技术面的面试官就面试题应不应该考算法有过争论。我认为我之前上机做的笔试题目考察的都是写工业代码的能力,而我更喜欢做的是算法和优化。虽然笔试分数还不错,但是我没有表现出真正的水平。面试官反问我,难道之前我做咨询的时候用到过什么精妙的算法吗。我只能把我之前写的一段动态规划加分治的优化代码给他看,然后告诉他,我用这段代码把我们组处理数据的速度提高了三十倍。他就不说话了。
也许法国人对量子计算机时代的到来信心太足了吧。


4. 美女。
我们大组之前有两位公认的大美女,都来自突尼斯。身边的男同事们,一见到这两位,我几乎都能听到他们咽口水的声音。前年年底前后脚走了。
两位之一,我的这位同事,辞职之后离职之前的三个月,基本每天有至少两个小时在陪某几位男同事们聊天。用的阿拉伯语,听不懂。反正那个时候我也是在做咨询,干好自己的任务就好,别人的事情主管都不管,我更管不着。
毕竟我已婚,提不起兴致。
毕竟老婆大人也逛知乎。
<hr/>看到评论里针对cross validation这一部分还有一些争论,那我还是再修改一下,防止有朋友拿我这段本来只是想调侃一下的并不算严谨的答案去回答面试问题。
    Hold out: 在训练前,把数据集根据一定比例分成training和test,模型通过training来训练,test来评估。训练的时候常常继续把training分成training和validation,使用validation的反馈来帮助调整参数。严格来说,并不完全可以算作cross validation。k-fold cross validation(k折交叉验证): 数据量不够大时,或者想追求更精确的训练结果时,可以将数据集均匀分成k份,每次用其中的一份数据集作为test,其它的k-1份作为training,学习k次,最后得到k个模型,用k个模型预测的平均值作为结果。leave-p-out cross validation(留p交叉验证): 遍历数据集中所有可能的p个数据的组合,分别做测试集,每次使用剩下的数据作为训练集。不是特别常用,因为复杂度太高,得到的模型个数是阶乘级别。
另外有一些延伸的奇技淫巧,包括但不限于:
    leave-one-out cross validation(留1交叉验证): 每次只使用一份数据,而不是一份数据集来作为测试集。等于p为1的留p验证,也等于k为数据集大小的k折验证。Iterated K-fold validation with shuffling: 每次都进行数据随机排列,然后进行完整的k-fold。适用于数据量小的情况。嵌套k-fold,不怎么常见,但是可以了解一下。在工业级别的项目上,目前我还没使用过这个。
至于不同方法的分类,有的根据是否完全遍历(exhaustive),有的根据是否交叉循环,没有统一的标准。就好像足球运动员可以根据位置分成前锋和后卫,也可以根据国籍分成南美和欧洲,没有哪个分类的方法是错的或者是唯一的。具体使用哪一种或者哪几种,是一个分析了数据量、数据类型和模型复杂度以后的综合决定。
这样回答不敢说没有漏洞,但是应该稍微严谨一点了。
发表于 2021-7-4 06:35 | 显示全部楼层
首先我个人觉得,算法工程师的目标既不是精通各种框架,会调各种包,也不是会发paper就是成功,而是有能力解决实实在在被提出的算法问题。
这里的问题可能来源于业务,也可能来源于长远的战略部署,甚至可能来源于一次大领导的拍脑袋。不管怎么说,个人觉得能独立分析,拆解,建模和解决算法问题的算法工程师就是胜任的,否则再怎么花里胡哨都是差劲的。
先说一下本文4个样本的背景,甲乙丙丁都是一线大厂的正式员工(包括知名外企),工龄从刚入职到3年不等,不过都不是自己团队的
只是各种原因而接触到的NLP算法工程师。为了避免对号入座,将以下内容中的部分关键词打码


出现一个奇怪现象后,我让他把训练loss画出来,结果他不知道怎么画。然后他不会用xx,我告诉他那就把日志中的loss点提取出来,用*来画。结果他问我*从哪里下载,有没有学习教程
注:*是一个非常常用的python库
然后又一次,发给他一个非常简单的代码,他想改一下其中一个预处理逻辑,我告诉他在哪里改,他直接说看不懂,求帮他改。我问别人,那他拿着工资每天干什么呢,答曰,可能会写写paper?
结果最后那篇paper也不是他写的。


乙比甲好一些,乙想解决一个问题,于是我给他甩了一篇paper,然后他很多地方看不懂,于是这些细节我一点点给他讲。讲完后他要借鉴其中一个idea用代码实现,这个idea写起来就一二十行。他绕不清矩阵计算,让我教他写,我给他5分钟写完,他很努力的理解了,恍然大雾,拿去跑了,然后跑完觉得很棒,自己又想了一个可能的实现方案,然后问我另一个方案可行性,这两个方案在数学上是等价的,于是讲了等价后,开始问我另一个方案的每行代码应该怎么实现。
小哥哥,你是故意来搭讪的吧?


有一天我把甲的故事分享给了另一家大厂的小伙伴,小伙伴说,还好,他们组刚入职一个新人,第一次做技术分享,给大家讲了半小时的word2vec就结束了,据说,该同学非常费力的直译了论文原文一些内容,专业名词翻译错了他都不清楚,并且表示负采样没看懂,而且不重要,所以就不讲了
问了一下丙后来怎么样了,说被调去做java了,小伙伴反馈丙做java开发还出活挺快的。


丁的故事来源于一个很要好的小伙伴,差点让小伙伴当场离职。丁是另一家很多人都想去的大厂的。丁的能力则是在甲乙丙之上,各种leetcode题刷的贼溜,textcnn之类的也都很熟,今年年初ta的mentor让ta用bert跑一下业务上的一个*分类任务,结果其一跑就是X个月,调了X个月后的结论是不如textcnn好用,线下稍微好一些,线上一塌糊涂。后来我一个刚去的小伙伴接手了ta的工作后,发现数据集里,预处理脚本里,训练脚本和评估脚本里全都有bug,从头到尾完全就是错的。小伙伴给ta修完bug后上升了近XX个点。
注:*取值小于5,X取值大于3,XX取值两位数
丁至今还是在岗的,因为ta的mentor也不太懂这块,mentor认为是bert代码太过复杂导致的,情有可原。


那么问题来了,甲乙丙丁是怎么通过各大厂面试的?靠刷题?靠学校背景?靠不可描述?这个问题我至今没想明白
最后,如果不想成为差劲的算法工程师,请关注微信订阅号“夕小瑶的卖萌屋”!!!
发表于 2021-7-4 06:42 | 显示全部楼层
真事。
这周面试了一个候选人,面CV/DL/AI的TechLead。简历很牛逼,做过很多CV的工业项目,涵盖detection, OCR, face recognition, fire/smoke detection等好多项目. 给我们讲了45分钟做得项目,讲得很自信。我挑了一个大项目,我说你在这个项目中的贡献是什么?他说整个项目的所有算法部分都是他实现的。
OK,我开始进行深度学习的技术面。
我先问了两个深度学习的中等难度的问题,他都说不知道。有点冷场,那我赶紧问点简单的吧。我说,深度学习网络,进行分类时有哪些loss?他犹豫了一下,回答: relu.
瞬间把见过大场面的我还有同事都震住了。
发表于 2021-7-4 06:47 | 显示全部楼层
我们组一个年轻的印度小哥,UCSD毕业的,按说教育背景也不错,写model serving过程中的一步。每个request开20个线程计算。
我说你一个m*n复杂度的过程,m和n还都小于100,有必要开20个线程计算吗?你那线程开销绝对比并行计算收益大多了好吗。不听,给我说(大概意思):
并行计算比较cool,老老实实写那个过程太boring

行吧,不听不听吧,自己折腾去吧。
过两天给我说load test的时候server的latency翻倍,我一看线程数都超过JVM上限了能不翻倍吗。
讲这个倒不是想取笑这小哥,而是跟大家讨论一个问题,就是什么是比“技术上最差”更糟糕的情况。
如果你只是基础差,但总体上是一个严谨的人,其实到不那么麻烦,就是按部就班的学习,按部就班的积攒工程经验,无论是哪个领导还是老同事应该都是乐于帮助这样的年轻人的,因为总体来说你还是在解决问题,哪怕速度慢一点,你总归在成长,而且是让系统整体混乱程度降低的。
最差的算法工程师其实是什么呢?是自己对技术的感觉很差,但对自己的感觉挺好,试图用一些比较fancy的手段解决问题,但实质上引入了更高的系统复杂度,增加了系统潜在风险,这样的人,其实对整个团队是负能量的存在,始终需要更senior的人帮着擦屁股,这无形增加了整个团队的工作量,这就是最差的算法工程师。
我特别喜欢的一句话是:
“不带评论的观察是人类智慧的最高境界”

希望刚入行的算法同事们能够知道这句话的意义,其实公司不急于让每个人都发表意见,在自己技术能力不那么足的时候,不带评论,不带主观情绪的去学习一段时间,好好思考一下别人为什么要做出这样的技术决策,好好积攒一下自己的技术感觉,这是最重要的。相信度过最初的积累阶段之后,你能够为团队做出,为整个系统做出“熵减”的技术决策。
发表于 2021-7-4 06:50 | 显示全部楼层
先歪个题,从反面回答一下,我碰到什么样的算法工程师会认为他/她是优秀甚至是卓越的大佬,并选择紧紧抱住大腿不松手。之前与 @熊风 学长还有很多来自不同公司的前辈们讨论过这个问题,本文很多观点也是来源于他们,这里也感谢大家的指点。总得来说,以下几个特点是我特别留意的,如果碰到了我就会认为这位很厉害:
    基础非常扎实。问他/她一些比较经典的算法,能够很清晰地说出算法的特点、适用的场景、坑点、里面的细节等等。工程能力很强。我是一位“工程狗”,自己的工程能力很菜,但对工程能力强的同学非常崇拜 Orz 如果碰到一位算法工程师的工程能力很强,仅凭这一点,我就认为他/她基本上一定是大佬Orz重视代码的测试。算法岗的工作并不完全就是调参炼丹,往往也是需要去写一些代码的,例如写些spark/sql代码获得特征,写模型等等。既然是写代码,就可以而且应该在其中加上测试。实际上,根据我的经验,如果碰到某个其他地方好用的模型在自己的场景下效果很差(不reasonable得差),那很可能是数据、特征的处理代码有问题,或者模型的代码有问题。这种问题可以用单元测试(断言等)来提前发现,也可以用一些sanity check来发现。对场景业务的认识很深刻。软件工程没有银弹,机器学习也没有银弹。用什么样的特征、什么样的预估目标、什么样的评价指标、甚至什么样的模型,这些东西都是要与场景业务结合的。换言之,工业届里,业务先于技术。很多大神在这个方面做得尤其出色。在实际场景中,注重先把整个pipeline搭建起来。个人认为,这一点在实际应用中往往应该是最优先的。搭建起来之后,机器学习系统的上下游也都可以工作,也可以更好地判断系统的瓶颈所在,把好刚用在刀刃上。这其实就与做开发的程序设计一样,较早地抽象出比较好的接口、搭建一个系统原型是很重要的。能够持续学习新的知识,跟踪最新的成果,对各种模型的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做多数实验之前有自己的假设,根据实验结果会根据实验结果做进一步实验,或修正假设、或进一步探究。自己参与的项目,对其中与自己比较相关的内容的细节比较清楚,自己负责的部分能够了如指掌。能系统性地分析出机器学习整个系统的瓶颈所在,并提出相应的解决方案。当系统效果不好的时候,知道如何去debug,找到问题所在,改进系统的性能。这方面是我个人尤其欠缺的点。
相应地,这些也是我要努力提升的地方。如果我是面试官,我想我也会从这些方面去考察算法工程师的候选人。当然了,以上几点不一定要面面俱到,例如很多大佬不一定工程能力很强,但仍然可以做出很好的东西。换言之,上述特点的precision应该很高,但recall不一定特别高。不过,在我看来,与以上描述相反的算法工程师,即基础不牢、工程差劲、不做测试、不怎么考虑场景、在搭建起pipeline之前过早地沉迷于某一步的优化、不学习新东西、拿所有实验当黑箱炼丹等等,这样的算法工程师(其实就是我了)在我看来就比较一般。而差劲的算法工程师,在我看来,是不仅这些方面做不好,还瞧不起这些方面的人。
发表于 2021-7-4 06:54 | 显示全部楼层
年中,面了一个河南理工的兄弟。
把faster rcnn原封不动用Google translate翻成中文,然后发在了一个野鸡中文期刊上,写在了简历上,加粗加黑。
我问:faster比fast快在哪里?
他回:因为对新显卡的支持比较好。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-21 03:25 , Processed in 0.079399 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表