你见过最差的算法工程师能差到什么程度?
共 3543字,需浏览 8分钟
·
2020-07-31 23:00
向AI转型的程序员都关注了这个号???
机器学习AI算法工程 公众号:datayx
这周面试了一个候选人,面CV/DL/AI的TechLead。简历很牛逼,做过很多CV的工业项目,涵盖detection, OCR, face recognition, fire/smoke detection等好多项目. 给我们讲了45分钟做得项目,讲得很自信。我挑了一个大项目,我说你在这个项目中的贡献是什么?他说整个项目的所有算法部分都是他实现的。
OK,我开始进行深度学习的技术面。
我先问了两个深度学习的中等难度的问题,他都说不知道。有点冷场,那我赶紧问点简单的吧。我说,深度学习网络,进行分类时有哪些loss?他犹豫了一下,回答: relu.
瞬间把见过大场面的我还有同事都震住了。
面试另外一个人,我说目前我们检测主要用yolo,他反问了一句,怎么不用tensorflow?
......
算法工程师的目标既不是精通各种框架,会调各种包,也不是会发paper就是成功,而是有能力解决实实在在被提出的算法问题。
这里的问题可能来源于业务,也可能来源于长远的战略部署,甚至可能来源于一次大领导的拍脑袋。不管怎么说,个人觉得能独立分析,拆解,建模和解决算法问题的算法工程师就是胜任的,否则再怎么花里胡哨都是差劲的。
从反面回答一下,我碰到什么样的算法工程师会认为他/她是优秀甚至是卓越的大佬,并选择紧紧抱住大腿不松手。
本文很多观点也是来源于不同公司的前辈们讨论过这个问题,这里也感谢大家的指点。总得来说,以下几个特点是我特别留意的,如果碰到了我就会认为这位很厉害:
基础非常扎实。问他/她一些比较经典的算法,能够很清晰地说出算法的特点、适用的场景、坑点、里面的细节等等。
工程能力很强。我是一位“工程狗”,自己的工程能力很菜,但对工程能力强的同学非常崇拜 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之前过早地沉迷于某一步的优化、不学习新东西、拿所有实验当黑箱炼丹等等,这样的算法工程师(其实就是我了)在我看来就比较一般。而差劲的算法工程师,在我看来,是不仅这些方面做不好,还瞧不起这些方面的人。
阅读过本文的人还看了以下文章:
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx
机大数据技术与机器学习工程
搜索公众号添加: datanlp
长按图片,识别二维码