如何准备机器学习工程师的面试 ?

来源:https://www.zhihu.com/question/23259302

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

作者:刘志权
https://www.zhihu.com/question/23259302/answer/24300412

我面试过5-6家互联网公司的数据挖掘和分析、机器学习相关职位的工程师。被问到下面一些问题。

SVM的原理,SVM里面的核
K-means,如何用hadoop实现k-means
naive bayes和logistic regression的区别
LDA的原理和推导
做广告点击率预测,用哪些数据什么算法
推荐系统的算法中最近邻和矩阵分解各自适用场景
用户流失率预测怎么做(游戏公司的数据挖掘都喜欢问这个)
一个游戏的设计过程中该收集什么数据
如何从登陆日志中挖掘尽可能多的信息

这些问题我回答的情况,分几种。一种是在面试官的提示下,算是勉强完成了答案。一种是在面试官的提示下,答了一点但是答得不够好。一种是面试官不提示也没有反馈,我回答了但是我不知道回答得怎样。

我非常后悔的一点是我现在才想起来总结。有一个题是游戏玩家流失率预测,我被问过两次。但是每次我都说是个分类问题。最近我突然想起来去网上查了下,有两个点,数据不平衡问题和时间序列分析。我网上查到是一个大学教授和人人游戏合作的课题。我然后查了下这个老师的publication。没发现相关的论文。可能公司不让发表吧。

这些问题的特点是很基础很简单,因为实际中很少用复杂的算法,复杂的算法不好控制,而且理论要求高。另一个特点是注重考查实际工程能力,我经常被问到自己实现了哪些算法。还有的问题很契合实际。

我觉得如果现在再给我准备的机会。我会准备下面几点。
首先是计算机基础知识和算法,这些都是会正常考察的。有些公司考的少,有些公司正常考察。
针对机器学习这部分,需要理论扎实,还需要自己动手实现代码。另外hadoop,mpi,最近比较火的spark,应该都是加分项。另一个是接触下实际的数据分析系统。我在学校里面看的论文,都是讲算法的多,讲应用系统的少。这个可以靠之前的实习,也可以看些比较实用的论文。

PS我面试的都是国内互联网公司和游戏公司。

作者:李庆斌
https://www.zhihu.com/question/23259302/answer/121283012

可以参考我的这篇文章《机器学习面试的那些事儿》https://zhuanlan.zhihu.com/p/22387312,有时间再补充点其他的内容。

假设我们做过一个垃圾邮件分类器的项目。为了建立这个分类器,我们首先对数据进行清理及预处理,如缺失数据的处理、数据的归一化等。在获得初始特征向量后,用PCA进行了特征选择。利用特征选择得到的特征向量及对应数据,训练一个随机森林的分类器作为我们的垃圾邮件分类器。针对的这样一个项目,有这样几个点可以进行挖掘和准备。

1. 项目简介

如何向面试官介绍你做过的项目,这是一个非常基础、非常常见但是又充满技巧的问题。首先,项目简介不应过于冗长,力争用最短的几句话勾勒出项目的框架。其次,数据科学相关项目通常是业务与技术并存,因此,既要突出项目过程中解决的技术难题及应用的相关技术,又应该兼顾项目带来的业务上的影响。

2. 模型简介

这类问题同样是机器学习面试中最普遍最常见的一类问题,面试的形式一般为介绍一个你最喜欢的模型,或是介绍项目中应用的某种模型。与项目简介相同,模型简介也应力求简洁,用最简短的几句话,讲清楚模型是用了什么样的原理完成了怎样的目标。wikipedia中关于随机森林的定义给我们提供了一个非常好的学习模板,可以用来借鉴:

Random forests is a notion of the general technique of random decision forests that are an ensemble learning method(怎样的方法) for classification, regression and other tasks(解决了什么问题), that operate by constructing a multitude of decision trees at training time and outputting the class that is the mode of the classes (classification) or mean prediction (regression) of the individual trees(基本原理).

但是,wikipedia中大部分模型的描述更偏书面化的表达,并不适合原封不动地照搬到面试中。我们需要将它转化为更口语化的表达。

3. 模型的优缺点

模型的优缺点与模型简介是紧密相关的,可以将两个问题结合起来一起准备。比如之前我们谈到了什么是随机森林,紧接着可以谈一下随机森林有什么优点,如:a. 对于很多数据集表现良好,精确度比较高;b. 不容易过拟合;c. 可以得到变量的重要性排序;d. 既能处理离散型数据,也能处理连续型数据,且不需要进行归一化处理;e. 能够很好的处理缺失数据;f. 容易并行化等等。同时,将理论与实践结合也是非常好的切入点,如随机森林的诸多优点是如何体现在垃圾邮件分类器项目中,这样的结合能更好的展示出面试人对于模型的理解及掌控。

4. 模型原理及相关技术细节

模型简介与模型优缺点的问题属于概念性问题,偏向于考察面试人是否了解某种模型,而更进一步的则是对于模型原理及相关技术细节的考察,比如模型假设、目标函数、优化过程、算法收敛性等。所谓知其然,又知其所以然,这是对于面试人的进一步要求。

例如,在模型的优缺点中,我们提到了随机森林可以对变量重要性进行排序。相应地,我们应该能够解释随机森林是如何对变量重要性进行排序,有哪几种常见的排序指标,比如利用OOB误分率的改变或者分裂时信息增益的变化等。当然,问题并非到此终止,基于上面提到的两种常见的变量重要性排序指标,又可以衍生出新的问题。例如,针对OOB误分率这个指标,解释一下什么是OOB,随机森林中OOB是如何计算的,它有什么样的优缺点;针对信息增益,同样会有很多与之有关的问题,如什么是信息增益,如何计算信息增益,什么是熵,什么是GINI指数,他们之间的区别是什么,他们之间的区别会对建树产生怎样的影响等。

再如,在垃圾邮件分类器项目中,有一部分数据存在缺失,而随机森林具有处理缺失数据的优点,建模的过程中我们充分利用了这一特性。那么,与之相关的问题可能会是,随机森林为什么会有这个优点?随机森林是怎样对缺失数据进行训练及预测?

5. 模型的横向比较

模型原理及相关技术细节的考察属于对机器学习知识深度考察的范畴,与之对应的是机器学习知识广度方面的考察。广度上的考察主要有两大部分,一方面是从理论上对不同算法进行横向比较,如模型假设,优化方法等。另一方面,是结合实际案例对不同算法进行横向比较,这要求面试人不仅仅要熟知不同模型的原理及技术细节,更需要将抽象的理论与具体的实践结合,在实际案例中对算法进行比较。

在垃圾邮件分类器项目中,随机森林被用作最终的分类器模型。面试官可能会就此提出以下问题:为什么选择随机森林而非其他模型,比如朴素贝叶斯或者支持向量机。一般来说,面试者可以从数学理论和工程实现两个方面进行比较回答。从理论上讲,数据表现出来的特征,以及模型所基于的假设都是很好的突破口;从工程实现上讲,实现的难易程度,是否易于scale都是可以考虑的点。

6. 开放性问题

除了对机器学习知识深度和广度上的考察,开放性问题也是面试中经常会遇到的问题,对于初学者来说这也是最难准备的一类问题。一方面这类问题很难在教科书中见到,没有固定的问题清单;另一方面,这类问题没有标准答案,很多时候是对过往经验的总结。针对这一类问题,更多的是靠平时工作学习过程中多思考、多总结、多积累,临阵抱佛脚很难起到效果。

再次回到垃圾邮件分类器项目,这个项目中有多个开放性问题可以被提问。比如,1. 邮件数据存在缺失,通常情况下,如何对缺失数据进行处理?2. 垃圾邮件分类是一个非平衡数据集分类的问题,针对这一类问题,我们应该如何进行建模。3. 项目中,PCA被用于特征选择,除此而外,还有哪些方法可以用来进行特征选择?

7. 准备材料

在准备机器学习的过程中,我主要用了如下的材料:

A. Stanford CS229 Machine Learning.

B. CMU 10-701 Introduction to Machine Learning.

C. The Elements of Statistical Learning. By Trevor Hastie, Robert Tibshirani and Jerome Friedman.

D. Pattern Recognition and Machine Learning. By Christopher Bishop.

A.和B.是Stanford和CMU机器学习课程的课件,里面涵盖了各种常用算法,应该力求掌握这些算法。C.和D.是经典中的经典,难度适中,内容没有太理论,语言也没有太晦涩,是机器学习内功修炼的不二法门。

关于材料再说句题外话,我之前是个资料收集整理爱好者,总是在努力充实自己的资料库,总是担心遗漏任何有用的材料。但是后来才逐渐意识到,资料求精不求多,存在脑子里面的叫知识,存在硬盘里叫文档

作者:Oyster Kwok
https://www.zhihu.com/question/23259302/answer/28388275

先总结几点,再谈个人经历。
1. 基本的Model要懂
Kmeans必须懂 KNN懂原理不用写 SVM、MR和Pagerank多看看,遇到问题多用这些方法讨论(不关乎信仰,面试官都懂)

2. 高层次的Model是关乎信仰的,不需要浪费时间在上面
比如LDA。以前信贝爷,觉得高大上。做过才知道坑有多深,出paper搞点黑数据可以,真正业界要用效果甚不稳定。HMM可以做语句分析优化,别的地方用也不显著。绝大多数时候搞个word net,做个tf idf就足够了,不行自己再加些hardcode,效果也比所谓的model好,性能也高。
另一说就是面试官不期望你懂这么高级的模型,就跟他们不能因为你不会拉小提琴而觉得你智商不够把你拒掉一样。

3. 人品、自信、反客为主的面试思路
以我的个人经历(Observation)(详见文末),不懂但人品好就拿到了Offer,懂但人品不好就拿不到Offer。(请随意Predict)
个人比较成功的面筋是看好面试官的cd间隔放大招:比如看简历沉没的时候主动说high light一下,有条件就把线上的project拿出来秀;代码写完主动说说能有什么改进思路,把面试官拐跑,就不会被他带到挖好的坑上来了。

4. 数据敏感性
比如预估数据规模和运行时间。

经历过以下几种case,不知是否match。
1. 10年,北京,刚毕业。申请国外phd跪了。魂友指明路去T大某ML实验室历练。提前两周看了下,感觉最懂的也只有贝叶斯公式了(其余只知道个缩写看着眼熟)约了时间也只能硬着头皮去了。结果老板就看了看简历,只问我啥时候可以过去。=_=

2. 一年半后,在美读硕。经济压力山大,暑假前就开始找实习(真心困难,因为当时招ML或者Data Scientist的都只招Fulltime或者经老板介绍的PhD)简历投了也没人鸟,感觉还是懂iOS Android的吃香。好不容易遇到个start-up,面试时候我主动展示之前做的项目,挺满意,让我写个Page Rank,30分钟拍好Over。(允许看wiki看公式)老板不懂/不信LDA,反正SVM各种搞。

3. 有同学拿到EBay电面,抓我去帮忙递纸条,问的概率论基础,线性回归,码字符串处理,都是基本功。

4. 后来面了次Yelp,电面第二轮,代码拍太快了,导致他有时间问了第二个Follow up question,投票统计相关,我提了两种normalize方案,都不太完善,后来就不要我了。

5. FB一直没理我,估计是之前在Graph上面抓数据超了两次limit被封过ID(他们自己文档不写清楚)Google问的都是基本码农问题,跟ML关系不大。因为面的Test,码完让我自己出数据,我出多了,被鄙视,锯。

6. 去面Bing。Super Day面了6个人,前面问算法,后面吃着混沌面问的Query分析。最后没给Offer,因为收了N记2万5员工用完招人名额。(据说还给EVP打了报告,没批。算了)

最后忠告:
攒人品。
信自己的数学和逻辑直觉,不要信Model。
信不信贝爷和得不得永生是相对独立事件。
所以“信贝爷得永生”在贝爷的公理范围内至少是悖论。

作者:章鱼小丸子
https://www.zhihu.com/question/23259302/answer/887885900

从个人经历来说,经历过无数大大小小的面试,被面过、也面试过别人。最近在跟刚毕业的应届生接触下来,发现几个通病,这几个问题只要提前稍稍做好准备,就可以避免的,希望对面试的应届生有些帮助。

现象一:简历中有太多无关的经历。比如你去面试算法工程师岗,唯一的一条工作经历是外企的项目经理助理,写了一堆什么安排会议流程,协助统筹管理之类的。跟面试职位毫无关系,在BAT这样的公司,岗位专业化程度很高,说白了就是找干活的,有一些技术热情就更好了。无关的经历反而让面试官会觉得你未来职业发展没想清楚,拉低印象分。

现象二:项目经历中的问题回答不上来。只是做了一些简单的实验,面试官无法深挖出更多。通常几句就聊完了。比如项目中写到用到PCA做降维,PCA降维原理基本能回答出来,但问起为什么不用其他降维方法,PCA和LDA的区别是什么,就卡壳了。可以看出在项目中面试者只是简单的执行者,没有积极主动的去尝试更多的方法。

现象三:项目经历介绍,磕磕绊绊,逻辑不清楚,没有自信。这个尤其在一些性格内向面试者中很常见。请提前写好自己的介绍稿,并且背下来。把项目的应用场景、技术原理的要点、项目难点,你的工作部分写下来。不用花多少时间,就可以达到更好的效果。

如何准备面试呢?

个人经历总结,技术层面从三个方面来准备,基础、广度、深度。基础是考察面试者的计算机基础、机器学习理论基础、工程能力。广度可以看出面试者在其领域是否有兴趣和成长为leader类更多角色的潜力。深度是考察面试者研究探索能力、做更难技术的潜力。

基础一方面是写代码能力和经典数据结构算法,一方面是机器学习理论。从现状来看,第一类问题更经常被考到。原因跟机器学习发展的大趋势有关,机器学习深度学习技术已经从学术界向产业界过渡,推荐、NLP、CV下很多场景已经套路化工程化。关于写代码能力和经典数据结构算法面试我不累述了,知乎很多这样的帖子,面试前花几天到一个星期准备下就行。

广度就是对前沿算法、通用算法的关注度,建议面试前把相关领域算法做了简单的分类,提前了解下网络结构和特点。比如CV图像领域,分为图像检测、图像分割、目标跟踪、语义分割等。图像检测最新的算法有yolov3、cascade rcnn,他们之前主要区别是什么,自己花几天到一个星期熟悉下,以免被问到。

深度,在面试中需要着重准备下,我看大部分应届生非常容易忽视这部分,也就是你简历中写到的项目经验。熟悉你简历中每个项目的整体原理、理论、实验细节。重要的事情说三遍!!!如果你的项目是草草完成的,复盘重新做一遍,或者干脆不要写在简历里。

除了技术方面,还需要准备什么?

在BAT面试中,有些面试官面试喜欢挖掘面试者潜在动机,意愿,意志力等。问题一般比较刁钻。比如你觉得自己在算法方面擅长什么,不擅长什么,你如何评价自己的算法能力?你人生中经历过什么重大的挫折?你觉得你有什么优点、缺点?你在项目中遇到了...的难点在哪,你如何解决这个难点的?

这类的深坑问题,我建议你面试前准备一些,并且写下你属于你的积极正能量的标准答案。比如评价自己的算法能力,面试官用来考察你是否适合这个职位,这个可能直接影响到你是否能拿到这个offer。因为算法岗也细分很多岗位,研究型、工程型、业务应用型等。

作者:时间旅客
https://www.zhihu.com/question/23259302/answer/1136153589

19年参加校招算法工程师岗位,拿到多个大厂offer,来分享一下经验。(可能有一点点偏题,我的项目都以深度学习为主)

我觉得最重要的就是面试的态度,谦虚且自信。遇到不会的问题也沉着冷静,别慌张。面试官也不会期待所有问题都能回答上来,只要有亮点即可。因为机器学习工程师这个岗位也分具体的偏向,如果研究能力强可以安排你多研究算法,如果工程能力强可以偏工程,如果都中等偏上也有用武之地,就怕两边都达不到中等水平,那就难了。

太长不看版:百面机器学习,leetcode top interview,剑指offer,软件工程师常考问题

分享一下自己整理的一些机器学习/深度学习题目:

机器学习

  1. SVM和LR的区别和联系

  2. LR可不可以做非线性分类

  3. bagging和boosting的区别

  4. 决策树,GBDT

  5. 介绍一下xgboost,xgboost和GBDT的区别

  6. l1正则化和l2正则化

  7. 如何处理类别不均衡问题

  8. 如何判断分类器的好坏(分类器的评价指标)

  9. 介绍Kmeans算法

  10. 特征工程的方法

深度学习

  1. 防止过拟合的方法,dropout的原理

  2. 常用的激活函数,sigmoid的缺点,relu的缺点

  3. 平时用什么优化方法,adam的缺点及解决方法

  4. 介绍平时调参的经验

  5. 介绍BatchNorm

  6. RNN的缺点,LSTM的作用,LSTM和GRU

  7. 除了LSTM和GRU是否了解其它循环单元

  8. 如何处理OOV问题

  9. 介绍word2vec的作用,缺点

  10. 常用的文本分类方法,优缺点

  11. 残差网络resnet介绍,解决什么问题

  12. CNN在图像中1*1卷积的作用

  13. 一维卷积的作用

  14. 介绍transformer,为什么比LSTM好,怎么获取顺序信息

  15. 介绍BERT,ELMO等

机器学习/深度学习这里,《百面机器学习》看两遍就可以了,如果有多余时间可以看一遍西瓜书或者统计学习方法。

除了机器学习/深度学习水平之外,还要考察工程能力,以及代码编写。代码编写准备的方法比较统一,就是刷题。至少要刷完《剑指offer》的所有以及leetcode的"top interview questions"。需要注意的是写题并不是写对了就可以了,还要尽量保证代码的工整性,以及复杂度、异常处理、边界值等等。

工程能力就是考察“机器学习工程师”岗位除了“机器学习”的相关能力了。考察的点很多,比如操作系统,线程/进程,编程语言特点等等,这块通常面试算法工程师的同学都比较薄弱,需要多准备。分享几个常考到的:

  1. 进程/线程的区别,python中怎么实现,谈谈GIL

  2. python2和python3的区别

  3. python中浅拷贝和深拷贝

  4. python的生成器是什么

这块我去年秋招时准备的不多,所以想不起来太多问题,以后想到再补。

作者:赵惜墨 https://www.zhihu.com/question/23259302/answer/62751814

会逻辑回归就够了,其他的大致看看,编程扎实一点,特征怎么抽怎么处理的详细了解一下,就够了,没那么多扯犊子东西。

主要靠练,准备的话看看C加加,熟悉一下自己的项目。

作者:靠靠靠谱
https://www.zhihu.com/question/23259302/answer/702126830

做过面试官也做过候选人,最大的心得是:面试的要点不是展示你有多牛逼,一定是尽量减少硬伤。

面试的时间短,最后给出的评价很大程度取决于面试官的bias(面试官的知识面,喜欢问啥)和主观判断(面试官铁柱觉得你这点都不会现在就可以去凉快了,面试官翠花却觉得没关系可能是一紧张嘴残了)。然而大多数的工作其实是大多数人都可以胜任的,只要没有硬伤,能过的概率就很高了。

接下来说说硬伤。根据公司的结构划分不同,公司对machine learning的工程师的期待也不同。有的看中行业经验(怎样让某个模型能scale或者进product),有的看中科研经验(进来发paper),有的两个都想要。但是共通的硬伤都会有:

  1. 简历夸大其词:多见于包调得太多了不知道自己在调啥…以及参加网课和bootscamp的项目,实战经验不多但是做的项目每个都能开个公司的那种,无人车人脸识别检测这个那个,用的开源模型但对算法不知道太多。这些项目是好事,但不要包装得太过了。碰到这个领域大佬面你的话,很容易翻车。

  2. ML基础概念不清:面试官觉得很基础的问题,比如啥是svm/logistics regression/random forest/knn/k-means,候选人支支吾吾。或者是deep learning背景,写个multilayer perception也很困难。这个“基础”是比较主观的定义,但是ml课堂能讲的模型,最好都能知道。

  3. 死鸭子嘴硬型:不知道/记不清都是很正常的,告诉面试官自己了解多少,剩下的面试官可能会给更多提示或者换一个话题。非说自己懂但是满嘴跑火车真的很想让人原地焊死你的车门。

  4. 不愿意动脑:面试考察的是解决问题的能力,不会的话就积极思考,甚至直接问面试官要更多提示,千万别说我不会然后等面试官换问题…

  5. 让人感觉不诚心来面试的:比如明明是一轮coding非要写pseudo code,这不是存心为难我胖虎吗。

面试官会倾向于问自己熟悉的问题,由于无法预测面试官是做哪方面的,所以基础的知识方方面面都要准备一下。一般除了coding是必备的,还会有ML,stats,case study/product design。得空再细细讲啦。

作者:飘哥
https://www.zhihu.com/question/23259302/answer/634874161

本文结合自身的经历和身边朋友的分享尝试解答。

首先我们来看有哪些公司会做machine learning?

这些公司都有什么样machine learning的职位?

很多公司都在招聘machine learning的岗位,国外有google和facebook,apple,linkedin,Microsoft,twitter,amazon,snapchat,uber,Airbnb,dropbox.等公司国内有百度,阿里巴巴,腾讯,网易,美图,京东,360,toutiao,滴滴,sensetime等。

国外公司中第一梯队是最牛的两家公司,谷歌和facebook,这两家公司大家都很熟悉,他们的要求也是最高的,它要求你什么都必须会,面试中他们的问题如果你没有回答出来,基本上就挂了。

第二梯队的公司就是苹果,领英,微软,推特,亚马逊这些非常非常优秀的公司,像苹果Siri团队他也做和google voice一样的东西,siri做的非常好,钱给的一点也不少,就是package可能没有google给的这么高,如果大家想去试一试,这也是非常非常好的选择。

第三梯队就是美国的这些独角兽,比如说像uber,Airbnb,dropbox,pinterest等公司,这些公司的Ai的壁垒很高,像uber做无人车,Airbnb要做排序,他们都成立了自己的ai lab,由于刚刚成立也是求贤若渴,推荐大家如果找工作的时候可以去看一看,以上这些是美国的公司。

如果是国内的公司,最有名的就是bat三家,像百度阿里巴巴腾讯,这三家在ai上都有很大的投入,然后像网易,美图,京东,360这些也是国内非常优秀的企业。国内的独角兽现在趋势非常猛的,像头条滴滴和商汤科技也是有非常牛的东西,国内公司的特点是有钱,但是他要确认是如果你能够拿到他们的offer的话,经常给的钱也不会谷歌,facebok给的少,做一个大package的选择,对比美国公司也是不错的。

我们来看一下这些公司会做什么东西。基本上是5个方面:

speech recognition(语音识别):像google voice团队,苹果的Siri团队,像腾讯的wechat都在做。

Natural language processing(nlp,自然语言处理):包括Google translate,像领英的回复的和很多功能都是用到这个技术。

Computer vision(计算机视觉):人脸识别,像Facebook和Google photo,苹果都有这个功能,

Reinforcement learning(强化学习):就是用深度学习打游戏,比如说像阿法狗团队啊,像深蓝都是做这一块,

Ranking:像推特,像airbnb2很多通过排序来提高用户体验的团队,在用machine learning做ranking的。

我们的问题来了,我需要达到什么样的水平才能进到公司里面去了,企业招聘machine learning一般会有两种类型的工作,对应着两种不同的要求:

第一种Research labs(highest standard bt):

Ø Gogole brain(google research),fair,deepmind

Ø Msr,adobe research,。。。。

Ø Baidu research,Alibaba idst,tencent ai,toutiao ai

其中research labs是要求最高的,也是最变态的,是属于变态型的标准,典型的就是Google brain,是google research里面的团队,包括fair像deepmind,这三个公司(团队)的招聘是最变态的。

其他像微软研究院,adobe research是非常优秀的,国内像百度的research,阿里腾讯头条的ai lab,也都是要求非常高的,一般来说都是需要有PHD这样的degree,面试要看你发了多少篇paper,你是哪个学校毕业的,包括你的老板推荐信。

下面我列了Facebook scientist job-description的要求:

Minimum Qualification

Ø Ph.D. and publications in machine learning, AI, computer science, statistics, applied mathematics, data science, or related technical fields.

Ø Experience leading a team in solving analytical problems using quantitative approaches.

Ø Experience manipulating and analyzing data from different sources.

Ø Experience in theoretical and empirical research and for answering questions with research.

Ø Ability to communicate research for public audiences of peers.

Ø Knowledge in a programming language.

大家可以看到要求还是非常高的,比如说最低要求是你必须有machine learning或者ai上必须有非常深的经验,在理论上还有数据分析上也都有很多的要求,他需要你要独当一面。如给你一个machine learning的问题,你基本上自己就可以把他搞定,就能做出非常优秀最前沿的工作,对这个要求非常高的,如果同学是大牛可以去试一试,否则咱们一般的同学这个就不用讨论了。

第2种是我们可以够得着,但是这个要求也是非常高的,就是做machine learning solutions的职位。像Google内部 如Google photo,google 街景,google paly等团队都在做这个。还有像领英,uber ,Airbnb,nvidia,twitter,yelp,apple,包括像bat里面的的搜索以及其他各个部门都是用machine learning。

例如facebook ml engineer的招聘要求是最好能有5年以上machine learning的工作经验或者有PHD,要求coding非常好,要求对machine learning和推荐系统很熟悉,所以这要求也是非常高的,但他每天要做的事情没有第一岗位那么变态,不需要你去做前沿的技术,但是需要你对machine learning的知识很熟悉,你能把machine learning的知识能运用到日常,解决一些实际的问题。这也是一个非常高的要求。

比如说如果你能够提高它的用户点击率和用户的体验的话,那么你的年终奖就能拿到很多钱。

那我们面试一般会考什么呢?根据上面的两种职位对应有两种面法。如果是第1种面法的话,以下两个都考,

第一个面试内容是phd的background 或则ml project before,还有prepare a ppt for 30-35min。

第二个面试内容是questions depentd on the company and team。

如果是第2种比较简单一点的面法,一般是只考上面提到的第二个面试内容。

一般第1个面试环节是talk,介绍一个你做的一个项目,比如说你有phd back ground介绍一下,你phd做的是什么呀?或者machine learning做的什么呀?主要突出是你做的跟别人与众不同的地方,就是要做出来一些特色,然后你这东西为什么做得很好啊?有没有些demo或者发了多少篇paper。

第2个面试是n轮的machine learning,用来知识,就说我的团队,siri的团队需要你对语音识别比较懂,我有这么一个问题,你能不能答出来像Google Facebook的很多团队,像我们刚才提到Siri,都会问你一些知识性的问题。

既然是这样那么企业会考什么问题呢?一般来说就这几个方面,我们分别介绍一下:

第1个speech recognition

像苹果Siri团队,google voice团队,会问那你怎么设计一个speech recognition系统,就是算法或者神经网络结构方面,你有什么看法或者是有什么想法吗?有什么inset吗?

第2个natural language processing(nlp),自然语言处理。像google translate,Facebook,领英也是用的非常多的。比如问Google translate是怎么做出来的?,问你领英的邮件自动回复,hr给你发的信息你感不感兴趣是怎么完成的。

第3个计算机视觉, 像Google Facebook,snapchat,apple用的非常多,包括很多非常优秀的无人车团队也是会问这些问题,比如说人脸识别怎么做呀?或者无人车团队问你路上的红绿灯是怎么检测的。

第四个是ranking,Google,twitter, Facebook,yelp和头条都会问你相关问题,比如头条问你,我们的新闻是怎么排序能够让用户把他最喜欢看的新闻放在最开始。

第五个reinforcement learning,首先简单的介绍一下,强化学习和machine learning的区别,强化学习是说计算机在游戏或者是在环境中machine learning再是要参与其中的,比如说人脸识别只要识别出人脸就可以了,强化学习像AlphaGo团队打游戏,需要他看懂现在的局面,自己主动的去走一步棋。然后去想办法赢你?就说计算机要去take action。deep mind,fair,google brain三个团队是这方面最牛的。他们哪里有非常优秀的工作,像百度的idea,腾讯ai,阿里巴巴有很多这方面的团队和工作。这方面的典型问题是,你怎么设计一个reinforcement learning(强化学习的系统)去玩一个游戏,像打砖块这种游戏你是怎么搞定的。

第六个是general ml knowledge,比如说我现在已经有了一个machine learning系统,那么我们评估这个系统现在好不好?准确率高不高呢?召回怎么样呢?如我用昨天或者到之前的数据训练了一个machine learning模型,今天这个系统忽然不work了?这是为什么?怎么解决这个问题?再比如像supervised learning 和unsupervised learning,就是监督学习和非监督学习的区别是什么?

既然问这些问题,那么我们应该怎么准备呢?如果你有非常多的时间,best practice就是,

第一个基本功一定要扎实:一定要对概率,微积分基本的东西非常熟悉,

第二上一些相关课程,再有可以上一些学校的machine learning的课程,

第三个读一些相关的材料,论文,

第四个阅读源码,网上有非常多优秀的开源的平台包括tensorflow,pytorch,mxnet,大家可以在github上down下来学一学,

第五个要实践,自己做一些machine learning的项目,针对面试的话,我们先自己设计一个模型把它写出来,跑的很不错,然后怎么样再通过一些方法,去进一步提升体验,我们甚至可以带着demo和相关的PPT到面试的现场,也是会加分的。

第六个要练习表达,因为面试是通过嘴来表述你的工作,不需要写很多代码,就需要你讲的很清楚,所以怎么能把你的work或者machine

learning 知识能够说得很明白,也是大家平常需要锻炼的地方。

有的同学说我现在时间不是很够,仅仅有一个月甚至三个礼拜就要面试了,来不及准备怎么办?

第一点就是那你可以上一些machine learning课程,至少可以把一些课件down下来快速的过一遍,就是了解一些知识,像coursera,udacity等,有非常多优秀的资料,我们也可以看一看对面试或什么做相应的准备,

第二快速复习一些基本的知识。

对于课件我强烈推荐吴恩达老师的斯坦福的课程,、machine learning的书,

推荐《machine learning》kevin murphy

推荐:《machine learning》Ian,Goodfellow

我主要是给大家介绍一下套路,希望对大家有帮助。

作者:刑无刀 https://www.zhihu.com/question/23259302/answer/24156736

常用模型和算法,至少有那么一两个能推导,能说出适用范围,能自己实现,有过应用。
另外,要有算法工程师的气质,那种对任何事物都愿意且能够深入思考的倾向。
据说,如果是应聘大公司初级工程师的话,刷题貌似有那么一丢丢用处,仅仅是一丢丢。

作者:匿名用户
https://www.zhihu.com/question/23259302/answer/30461057

1.实现一个分布式的矩阵向量乘的算法。
好吧 这个我学过 blabla讲了一堆 也不知道对不对
2. 最速下降法和共轭梯度法 wolfe条件 最速下降法和共轭梯度法的收敛速度如何判断。。。
两种方法的概念答上来了 wolfe条件没准备到 收敛速度大概回答了一下 我印象中只记得共轭梯度的误差估计了  
3. 约束优化的KKT条件 KKT条件在边界区域的搜索行为的物理意义是什么。
KKT条件ok 物理意义没答上来
4. 实现一个分布式的topN算法。
topN看过 不过分布式嘛。就是追着你问 问到你不会为止
5. 为什么可以使用logistic回归。
这个我不懂。好吧 hr让我去看看《离散选择方法》这本书。算是学到了
6. 你了解的机器学习算法有哪些。
这个简单。
7.选一个你熟悉的算法 详细推导公式过程。
推公式我在行 不过hr貌似不感冒
8.一个实际应用的问题 因为没有背景 所以只好放弃
然后就没有然后了
还是好好看书吧

作者:音十弋
https://www.zhihu.com/question/23259302/answer/751800999

作为一个入行2年的算法,蜜汁负责了整个公司大量的新人面试工作,也面了一些博士,总的来说也有500份简历了,总结几点比较不喜欢的green hand:

1. 自己简历的经历经不起推敲,问多两句,就能感受到不是你自己做的,或者你就在case里负责买早饭,点咖啡

2 .不喜欢一味填鸭的同学,拿自己的注水猪肉一直聊,我对那个不太感冒,虽然我接受每个人的简历都会有一些没什么用的经历,但是请掏出你压箱底的东西我们再探讨

3.遇到问题就尴尬,我经常会问他们在以前case里的一些漏洞,但是往往得到的回答是,我当时没仔细想,当时太匆忙了,就没然后了,我想听到的是,我当时没有考虑到,我现在想来,也许我可以xxx去改进,给我一个继续提升的思路

4.不会就说不会,不要装懂,只懂一些的知识,不要夸大放在简历上,因为被问到说不会很减分,会让人对你整个简历的真实性打折扣

5.遇到我提问的场景,有没接触过的领域和知识,请尝试用自己以学知识来刻画新知识的框架,这种触类旁通的能力,很重要

6.代码!写熟练了再来,别随便扔个le-co easy僵在原地,我不用你很强,因为这东西能练,但最好能看

作者:匿名用户
https://www.zhihu.com/question/23259302/answer/217298428

文武两个方面吧,武的方面:传统的bp,cnn,lstm 基本代码要能用python和c++写下来,他们肯定会问的, 传统的机器学习方式,随机森林、决策树、逻辑回归、svm、gbdt 贝叶斯也都有可能问,但是最讨厌的就是问工程经验,很多学生没有好机器,可能连块gpu的卡都没有,这个跟公司比不了,比如我之前去intel实习AI,什么都随便用,就是有钱。

文的方面:不用跟面试官讲自己发过什么论文,人家不care,尽管那可能是你读博或读硕士的辛苦结晶,主要是这些人可能听不懂,当他们觉得在你面前讲论文没底气的时候,就会逼着你把bp推导一遍找找面子,也有可能让你推导一下lstm的前向后向,如果这些没有难住你,就会让你写贝叶斯公式,讲svm,这些都是我们面试时要面对的,不要抱怨背下来应付就行了。

作者:长孙无忌
https://www.zhihu.com/question/23259302/answer/657039870

因为最近刚刚经历了多轮面试,总结一下整个准备和面试过程。主要是想分享一下,一个普通的ML从业者如何拿到一个还算可心的offer,且吐槽一下其中一些不爽经历。

目标:硅谷大厂和独角兽,ML Engineering Lead, 或者Staff/Principal ML Engineer。

因为有些团队和职位比较敏感,这里都用大厂ABC,独角兽ABC来代替,且ABC和公司名字里的字母没有对应关系。

个人经历是这样的,北美普通CS的Ph.D毕业(非常青藤), 研究和传统ML相关(没有特别牛的paper,都是二流会议二流期刊)。之后有不到10年工作经验,也都是和ML相关,主要偏视觉。有大厂A家工作经历。

  • 面试官心理学

最近几年带了团队,也面了不少人(100+),对自己的面试也有一些作用。通过面别人,了解面试官心理和面试官的期待。这里简要说一下,我作为面试官得到的一些经验。

1.最重要的一点,面试者和面试官不是敌人,面试者想找工作,而面试官想给你工作,作为面试官,我特别希望把offer发出去,尽快进人。因为招聘很累面试更累,频繁的面试会影响工程进度。所以面试官的心理是特别想帮助面试者通过面试的。

2.基于上面的结论,在遇到问题的时候,可以和面试官交流,让面试官帮助你引导一下思路。这些我认为是加分项。因为实际工作组肯定会遇到个体无法解决的问题,需要寻求其他同事帮助。合理的交流方式是很必要的(让人不抗拒,开开心心的帮助你是一门技巧)。

3.知之为知之,不知为不知。没有人是全知全能,做ML和视觉一定要认清这一点。这个领域很大,统计学,概率学,数值分析,传统的机器学习,深度学习,传统的机器视觉,矩阵空间和矩阵优化,模式识别,编解码,还有数学等等。再NB的人也会被一些问题问住。不懂直接说,别装懂然后在那卡住很久,浪费双方的时间。这是理论知识,还有工程经验也是一样。如果项目的一部分不是你做的,而是你同事做的,直接讲。装懂的话会被带歪,越问越虚,然后整个面试就挂了。

4.理论和Coding一样重要。有些人,尤其是老印,经常会吹上天啥都做过,一到coding就卡住。我的面试理念是,无论多高的级别,发过什么paper,只要你还做具体工程项目,一定要面coding。Coding分两种,一种是面普通的工程算法设计(寻路算法等),一种是面专业知识coding(比如,ML要写一些简单的分类器)。如果你说你所有模型都是调用sklearn使用,那这个面试基本也不需要往下走了。

5.扎实的数学功底和计算机科学功底。作为一个CS的博士,有的时候不可避免的会对转专业来做CS的人有所怀疑。对于转专业(机械工程,物理,生物计算,信息学,数学,统计)会增加一些考量基础知识的问题。数学比如,数学的求导。dy/dt = -y 那么y是什么?泰勒展开的公式是什么适用范围。计算机科学比如,浮点数在计算机的存储形式和精度,两个浮点数相减在计算机里是怎么计算的。程序里面内存stack和heap有什么区别如何分配。如果转专业的同学连这些基本知识都不知道的话,还想进算法团队吗?更有甚者,我在白板上写了一个数学公式来让他求导,他连数学符号都看不懂。对于这样面试者,面试官心态已经崩溃了。PS: 作为考量基础知识的问题绝对都是最基本最常用的,准备的时候也不用钻牛角尖。

  • 面试准备篇

工程编码:某大厂的HR介绍了一个刷题的网站,interviewbit。感觉界面挺友好的,就没有刷leetcode。用了一个月时间,每天刷两小时interviewbit,在上面的积分排行刷到了3000名以内。基本感觉够用了。“感觉够用”的界定标准就是,当你看到一个新的问题,可以快速分类成哪一类问题(二叉树遍历,动态规划等等)或者联想到最知名算法(majority-voting, kruskal等等)。并且一般都可以在30分钟内解出来。

项目设计:把之前做过所有的项目,相关的项目的设计文档(都是自己写的),专利文档(给律师看的原始稿),重新看一遍。并且思考一下从现在的眼光来看,哪些是可以改进的。

基础数学:重温一下这几本书,线性代数(基本的矩阵计算,行列式计算),可微分方程(如果这本书卡住,说明还需要复习一下微积分本身。这个在深度学习里是很重要的基础,可以用来设计loss/cost function, 特殊的层。),数值分析(这本书对于理解模型的精度损失很重要,在模型量化的时候)。这几本书太厚了,直到我入职新公司了还没有读完。不过没关系,可以挑重点来看,比如哪些章节和目前你做的领域最相关的。

传统机器学习:白板上可以手写出来的(70行以内)机器学习算法没有那么多。一定要每一个都手写一遍。不要借助于python里面各种便利的库和向量操作。建议C++手写。我的学习计划是把简单的机器学习算法都用C++实现一遍,再优化一遍。包括, k-means, kNN, naive-bayes classifier,KVM, decision tree, linear regression, logistic regression,neural network。通过这个过程,既熟悉和理解了这些算法,又熟悉了C++的向量操作,比如accumulate, inner_product等。

深度机器学习:因为我本身工作是做CNN的。常用的有caffe和tensorflow。平时也看甚多相关的paper。所以这块的准备反而是最少的。

  • 面试篇

面试Scientist岗的基本配置是:

2轮scientist面试,基本上是研究背景讨论,基础理论问题,一个和研究背景相关或者不相干的设计问题

2轮manager面试,一个(小老板)偏工程,一个(大老板)偏行为

2轮engineer面试,纯算法实现,类似于leetcode这种

有的时候,scientist面试问题会和你做的过项目,研究领域不太相关。这个时候只能根据基本知识和理解硬上。

engineer面试则会很容易死在一些小问题上,尤其是面试官是一个只有一两年工作经验的工程师。

  • Offer Review篇

面试了2个大厂, A和B,一个做ML框架,一个做视觉解决方案。2个独角兽公司C和D,一个做无人车ML,一个做视觉解决方案。

结果,A据了,理由是研究背景不符。对方的面试官读了一个在职博士,刚毕业一年左右,整体面试体验很差,问的问题天马行空没有连续性,也没有什么互动。

C面试终止,因为流程太长,我的其他offer已经下来了,等不及这个,就和hr说停止面试流程。而且我对无人车这个领域不太感冒。这个领域离成熟商用还有点远,而且目前做这个的公司太多。

B发了Offer。Scientist岗。package 430k。200k的base,target bonus30k,股票200k。signon 20k。

D发了Offer。Scientist Lead岗。package 520k。250k的base, target bonus 50k, 股票220k。signon 20k。

两个offer互相compete一下,B给提到450k, signon多给10k。D的总包没变,signon多给25k。

大厂B的好处是,已经上市,股票给4年,总计800k的收入是妥妥的。

D给的是期权,总计给5年是1.1M,中间可能还会融几轮,是一个财务自由的机会。

最终选择了D家的Offer。

作者:王建周
https://www.zhihu.com/question/23259302/answer/26073606

一、一些常见的机器学习算法
1. 如果有背景,item和cf协同过滤的优缺点,如何从计算公式证明,各种情况的惩罚,hadoop上mr的实现,包括各种情况的惩罚。
2. 线性回归的梯度下降和牛顿法求解公式的推导
3. 贝叶斯分类器的优化和特殊情况的处理
决策树的的训练……

二、单机的算法如数据结构
1.最简单的top n
2 偶尔会有一些简单的poj
3.数据结构

三、系统设计,包括算法和工程系统
1. 如一个热门微博排行榜等

作者:数据科学人工智能
https://www.zhihu.com/question/23259302/answer/250575886

最近一直在做面试,谈一下个人的一些体会,给有志于机器学习的小伙伴们做参考。

1.基本的算法要吃透,比如数据挖掘十大算法这个level的,理论上可以手动推导(白板推导),代码上要可以熟练调包(案例分析)。

2. 简历上的项目要熟悉,最起码要自圆其说。还有就是,简历上写算法要谨慎,要谨慎,要谨慎,重要的事情说三遍,不然就是给自己挖坑。

3. 纯粹的编程题也不能落下,刷题还是有必要的。如果是Python, 那么pandas numpy 还有sklearn的常用函数和操作 还是要熟悉的。

作者:FATRI
https://www.zhihu.com/question/23259302/answer/336922848

通常面试官会问一些问题以大致了解应聘者在相关领域的理解力。如果你经历过 学习--实践--教学--再实践 这个循环, 你会对这个领域有深刻的理解,并能将复杂的理论用简单的语言描述出来。比如,

  • 描述一下机器学习和统计之间的关系

  • kernel methods 之间有什么区别

  • 机器学习关键在于曲线拟合,对吗?

  • 解释一下bias和variance

  • 如何避免overfitting?

  • 神经网络和傅立叶变换之间有什么关系吗?

  • 简单讲讲evaluation metrics,像 f1 / recall / precision等

除了了解各种理论(SVM, PCA, MDP, CNN, LSTM...),掌握编程技巧和规范,并能熟练应用各种框架(TensorFlow, Caffe, Keras...)之外,分布式对与进行大量数据操作至关重要,

  • 简单讲讲MapReduce

  • 随便选择一种算法,解释一下如何进行并行运算

  • 描述一下Hadoop和Spark之间的关系

当然,如果你有实际的项目经验或Kaggle比赛的经历并能将整个过程详细的讲出来,包括如何应用机器学习,如何对算法进行优化,如何安排时间等等,那会大大加深面试官对你的印象。

☆ END ☆

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值