刘腾飞-申请算法工程师实习要注意什么

https://zhuanlan.zhihu.com/p/159243232

蚂蚁金服的实习申请早已经结束了,今年我总共收到 30 多份简历,质量都比较高,最终接收了 3 个实习生。观察最近几年的申请趋势,非常明显的变化是:算法实习生的竞争越来越激烈,门槛也越来越高。最近仍有同学私信问我,申请算法工程师(实习或者正式)岗位需要注意什么,或者如何做准备?我觉得可以简单写一下我的理解,以问答的形式,说明一下我们在挑选简历以及面试过程中会关注什么,虽然我的回答会带有比较强烈的个人倾向,未必是最正确、最全面的答案,但是可能对有需要的同学会有一点启发。

1、算法工程师到底是做什么的?

大多数公司招聘的算法工程师都是应用型工程师,基本不需要研发新的算法(当然,具备新算法的研发能力,会相当加分),只需要用到现有的机器学习算法去解决实际的业务问题。

从解决问题的角度,算法工程师需要做的事情是:(1)分析业务问题,并把它抽象和转化为一个算法问题;(2)寻找一种合适的解决该问题的算法方案;(3)通过实验来验证方案的可行性,并形成解决问题的最终方案。

从实际操作的角度,算法工程师需要做的事情包括:解决方案设计、数据预处理、特征设计和清洗、模型训练、模型结果评估、模型部署上线、模型维护和迭代更新。其中,模型训练这步需要事先准备好需要用到的算法工具,在一些基础设施比较好的公司,这类算法工具或者组件可能是现成的。否则的话,算法工程师还需要事先编写相关算法的代码。

2、申请算法工程师岗位的候选人通常需要具备什么样的专业能力?

从算法能力的角度,我通常希望候选人具有“ T 字型”知识结构。所谓 T 字型,指的是一横一纵。“横”表示的是希望候选人基础知识扎实,能够对机器学习的基本概念、问题类型都比较清楚,在算法广度上有一定保证。这里需要了解的包含但是不限于:数据预处理的知识(比如:缺失数据补全、归一化、数据降维)、机器学习基本问题以及相关概念(比如:回归问题、分类问题、聚类问题、有监督/半监督/无监督)、常规分类算法以及相关概念(比如:逻辑回归、随机森林、Xgboost、偏差与方差、Bagging/Boosting/Stacking)、常规分类算法的评估方法(比如:AUC、F1、准确率、覆盖率)、常规的聚类算法(比如:K-Means, GMM, dbscan, 谱聚类)、常规的深度学习算法以及相关概念(比如:DNN/CNN/RNN/LSTM、Relu/Sigmoid、梯度消失与梯度爆炸、反向传播算法),等等。基本上,这里提到的机器学习的基础知识在常规的机器学习课程或者参考书(比如:周志华老师的西瓜书)都会有涉及,如果稍微系统的学习过机器学习,对这些概念都不会陌生。

"纵"表示的是希望候选人在某一个算法方向上有特长,比如:NLP 算法、CV 算法、迁移学习算法、异常检测算法、或者图相关算法,等等。基本上,如果候选人在校期间有自己的研究领域,基本上都会有一块自己熟悉领域的算法。既然是作为特长,那希望候选人不仅仅是了解这个熟悉领域的一个或者两个典型算法,而是对整个领域的算法类别,各类算法的优劣,算法历史发展的沿革,都能有比较深度的了解,对这个领域的关键算法的细节也都比较清楚。细节是魔鬼,有时候熟与不熟往往体现在细节的掌握上。

除去算法能力,我们也希望候选人具备较好的工程能力,能够熟悉一种或者几种主流的编程语言,比如 Python、Java、C++(面向对象的编程语言一般只要熟悉一种,其他的都是相通的)。给定一个算法方案,算法工程师要能够自己编程实现。如果对编程语言还不太熟悉的,可以考虑直接学习 Python 。

3、除去专业能力之外,其他还有什么能力或者特质也会影响面试的结果?

这个问题听上去有点玄学,除去算法能力,确实还有其他能力或者特质会极大影响面试的结果,比如,沟通能力。

沟通能力,可能又分为不同层次。初阶的沟通能力是指在面试过程中,候选人能否条理清晰、简洁明了的介绍自己的工作,回答面试官的问题。常见的错误包括:回答问题太啰嗦、不能迅速的抓住问题的关键点、思路混乱、逻辑不清。初阶的沟通能力是可以学习、训练的。比如,想知道自己说话是不是啰嗦,可以把自己做演讲或者跟人做交流沟通的过程用手机录下来,自己回看,可能会发现自己有这样那样的小问题。再比如,想让自己介绍工作的时候条理更为清晰,可以按照一定的逻辑结构去事先组织好材料。

我曾经读过一本书,教人如何做即兴演讲(感兴趣的可以看看这本书的豆瓣介绍:《即兴演讲》),里面提到的一个核心方法论是:要想做好即兴演讲,可以事先按照不同的场景准备好不同的模版、套路(通常是类似起、承、转、合的几个结构模块),在具体需要做即兴演讲的前几分钟迅速按照模版组织语言。这个方法论也可以应用到面试准备中,比如,在面试介绍自己过往项目经历的时候,可以按照常规的 “STAR” 模版来组织语言。STAR 中的四个字母分别代表 Situation、Task、Action、Result。简单的描述就是,你在什么情形(situation)之下接收了一项什么样的任务(task),你做了什么样的行为(action)并最终取得了怎么样的结果(result)。这个模版简单易用,清晰明了,可以一试。

高阶的沟通能力是指候选人可以在短时间内跟陌生人熟悉起来,能够很好的把控沟通的气氛,甚至是很快的跟陌生人建立起某种信任感和熟悉感。说起来有点玄学,高阶的沟通能力可能更多的跟候选人的性格相关,是否可以后天训练,我也想知道。

4、从面试官的角度,什么样的简历会更受青睐?

如同前面的描述,我们希望候选人在算法能力上“基础扎实,且有特长”,如果这些信息能够在简历上体现出来,有相关证据可供佐证,那这样的简历显然会更有说服力,自然会更受青睐。

那算法能力如何在简历上体现出来呢?由易到难,可能有如下几种方式:(1)机器学习相关课程的作业项目简述;(2)参与的实验室相关研究课题简述;(3)之前其他算法实习或者算法相关工作的简述;(4)算法相关比赛成绩(比如:Kaggle 比赛、阿里的天池、腾讯的广告大赛等等);(5)发表的学术文章。从今年的简历情况看,有着良好的比赛成绩以及 CCF-A 类文章的候选人比往年要多,这可能表示着一种趋势。

多说一句,算法比赛最近几年越来越多,有的难度高,有的难度一般。我建议有时间的同学多参加各种比赛,一来可以从实践中学习相关的算法知识,积累实操经验,二来如果能获得比较好的成绩,会是很好的简历加分项。

5、申请算法工程师实习或者正式岗位,还需要注意什么?

就一点,希望可以好好的、大大方方的写一封实习申请邮件。我收到过太多奇奇怪怪的邮件:昵称莫名其妙、标题不清不楚、有标题无正文、邮件内容极其口语化、缺少基本邮件礼仪。怎么写一封求职邮件,相信知乎上有很多很好的经验分享,可以学习一下。

6、如果不是相关专业毕业的,如何转行成为算法工程师?

一般而言,算法工程师的专业背景主要是计算机、统计 和 数学。其他专业的话,转行的难度会稍微大一些。对于这些专业的同学,我更建议扬长避短,找更适合自己的职业。

如果执意选择算法岗位,我建议给自己长一点的转型时间,可以先找一个相对容易申请的公司的算法岗位,然后同时学习算法知识,培养一下自己的工程能力。等两三年的实践和积累之后,慢慢尝试更好的公司的算法岗位。

至于如何系统的学习算法知识,建议按照口碑较好的机器学习书籍来学,比如,周志华老师的西瓜书。如果想挑战更难一些的,推荐 Kevin Murphy 的 《Machine Learning: A Probabilistic Perspective》,这个是我认为的最好的机器学习教科书。

7、最后的最后,为什么要选择这一行?

Facebook 的 CEO Sheryl Sandberg 几年前的演讲里有一句话广为流传:“ If you're offered a seat on a rocket ship, don't ask what seat! Just get on.”,这句话是她当初去面试 Google 时,当时的 Google CEO Eric Schmidt 给她的一个有关职业规划的建议。

这个建议的内在逻辑,可能也适用于为什么要选择算法工程师这个职位的问题。从最近几年的市场薪酬水平来看,算法工程师的岗位一直处于比较 top 的位置,可能远远多于排名靠后一些的岗位。这个数据或许已经证明了它的 “rocket” 的地位。 也许有人担心这里会有泡沫,有供大于求的情况了。我觉得这个担心有一定道理,但是为时尚早,等薪酬水平降下来再说。

暂时想到这么多,如果有新的问题,我会持续更新。

2020-07-14

猜你喜欢

转载自blog.csdn.net/Zhou_Dao/article/details/108690174