131

2018 年应届硕士毕业生如何拿到知名互联网公司深度学习 offer? - 知乎

 6 years ago
source link: https://www.zhihu.com/question/59683332/answer/281642849
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

应届硕士毕业生如何拿到知名互联网公司算法岗(机器学习、数据挖掘、深度学习) offer?

最近人工智能岗位很火,而且目测这一场革命会持续很久。近两年,很多想学习机器学习,想找相关算法岗的同学越来越多,也就面临着更多的竞争压力。不管是名校还是…
5,487
831,525
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏
HKUST CS MPhil , 计算机视觉、机器学习
知乎日报收录

最近投了一堆机器学习/深度学习/计算机视觉方向的公司,分享一下自己的经验,希望对大家有帮助。

个人背景: 华科本科 + 港科大硕士(MPhil)

拿到的offer有腾讯优图,阿里AI lab,今日头条,滴滴研究院,商汤科技,旷视(face++),大疆,快手。绝大部分是ssp(super special),给到了普通硕士能给到的最高档。

最新修改:经人提醒,我意识到直接po公司的原题是非常不好的行为。所以我修改一下答案,只能指明大概的考察范围。在此对我的所有面试官表示抱歉,未经同意贴出了所有的面试题。

写在前面的话

这个回答的适用对象主要还是本科和硕士。PhD找工作的套路跟硕士还是很不一样的,所以这个回答的经验对于手握几篇一作顶会的PhD大神并没啥参考意义。

我也和我们实验室几个找工作的PhD学长学姐聊过,他们的面试主要是讲自己的research,有的甚至就是去公司给个talk,跟本科硕士的校招流程完全不同。现在也是AI方向PhD的黄金时代,没毕业就被各大公司主动联系,待遇也比我这种硕士高很多很多。

一. 整体建议

一定要找内推。

内推一般有两种,第一种力度比较弱,在公司的内推系统上填一下你的名字,加快一下招聘流程;第二种力度比较强,直接把简历送到部门负责人手上。个人比较建议第二种,会省事很多。

原因如下:

(1)现在做机器学习的人实在太多了,在不找内推的情况下,流程会特别特别慢。即使你的简历比较优秀,也可能淹没在茫茫大海中,不一定能被懂行的人看到。

(2)现在很多公司的笔试其实挺有难度的,就算是大神也有翻车的可能性。

(3)对于大公司而言,即使通过了简历筛选、笔试那一关,你也很难保证你的简历被合适的部门挑中。很可能过关斩将后,发现给你安排的面试官并不是太对口。尤其是深度学习这样比较新的领域,一般部门的面试官多半也是近期自学的,对这个也是一知半解。所以如果是想去BAT这些大公司里面专门做AI的部门,按照正常校招流程走是不合适的,一定要找到那些部门的员工内推。

在我看来,如果是跪在简历筛选、笔试这些上面,连面试官都没见到,就实在太可惜了。为了避免这一点,请认真找内推。最好能联系到你想去的公司部门里的负责人,直接安排面试。

二. 面试经验

面试遇到的题目,可以分为几个大类:

(1)代码题(leetcode类型),主要考察数据结构和基础算法,以及代码基本功

虽然这部分跟机器学习,深度学习关系不大,但也是面试的重中之重。基本每家公司的面试都问了大量的算法题和代码题,即使是商汤、face++这样的深度学习公司,考察这部分的时间也占到了我很多轮面试的60%甚至70%以上。我去face++面试的时候,面试官是residual net,shuffle net的作者;但他们的面试中,写代码题依旧是主要的部分。

大部分题目都不难,基本是leetcode medium的难度。但是要求在现场白板编程,思路要流畅,能做到一次性Bug-free. 并且,一般都是要给出时间复杂度和空间复杂度最优的做法。对于少数难度很大的题,也不要慌张。一般也不会一点思路也没有,尽力给面试官展现自己的思考过程。面试官也会引导你,给一点小提示,沿着提示把题目慢慢做出来也是可以通过面试的。

以下是我所遇到的一些需要当场写出完整代码的题目:

/*******************************************************************

经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。

*******************************************************************/

不过这部分有些是LeetCode原题,在这里我简单地举几个例子,附上LeetCode题目链接:

Maximum Product Subarray

Maximal Square

Subsets

(2)数学题或者"智力"题。

不会涉及特别高深的数学知识,一般就是工科数学(微积分,概率论,线性代数)和一些组合数学的问题。

下面是我在面试中被问到过的问题:

/*******************************************************************

经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。

*******************************************************************/

这部分有些题也在知乎上被讨论过,这里附上相应的知乎链接

如果一个女生说,她集齐了十二个星座的前男友,我们应该如何估计她前男友的数量?

如何理解矩阵的「秩」?

矩阵低秩的意义?

如何理解矩阵特征值?

奇异值的物理意义是什么?

为什么梯度反方向是函数值下降最快的方向?

(3)机器学习基础

这部分建议参考周志华老师的《机器学习》。

下面是我在面试中被问到过的问题:

/*******************************************************************

经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。

*******************************************************************/

列一下考察的知识点,并附上相关的优质知乎讨论。

逻辑回归,SVM,决策树

逻辑回归和SVM的区别是什么?各适用于解决什么问题?

Linear SVM 和 LR 有什么异同?

SVM(支持向量机)属于神经网络范畴吗?

如何理解决策树的损失函数?

各种机器学习的应用场景分别是什么?例如,k近邻,贝叶斯,决策树,svm,逻辑斯蒂回归和最大熵模型。

主成分分析,奇异值分解

SVD 降维体现在什么地方?

为什么PCA不被推荐用来避免过拟合?

随机森林,GBDT, 集成学习

为什么说bagging是减少variance,而boosting是减少bias?

基于树的adaboost和Gradient Tree Boosting区别?

机器学习算法中GBDT和XGBOOST的区别有哪些?

为什么在实际的 kaggle 比赛中 gbdt 和 random forest 效果非常好?

机器学习中用来防止过拟合的方法有哪些?

机器学习中使用「正则化来防止过拟合」到底是一个什么原理?为什么正则化项就可以防止过拟合?

(4)深度学习基础

这部分的准备,我推荐花书(Bengio的Deep learning)和

学长的《解析卷积神经网络-深度学习实践手册》

/*******************************************************************

经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。

*******************************************************************/

列一下大概的考察点和相关的知乎讨论。

卷积神经网络,循环神经网络,LSTM与GRU,梯度消失与梯度爆炸,激活函数,防止过拟合的方法,dropout,batch normalization,各类经典的网络结构,各类优化方法

卷积神经网络工作原理直观的解释?

卷积神经网络的复杂度分析

CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

bp算法中为什么会产生梯度消失?

梯度下降法是万能的模型训练算法吗?

LSTM如何来避免梯度弥散和梯度爆炸?

sgd有多种改进的形式(rmsprop,adadelta等),为什么大多数论文中仍然用sgd?

你有哪些deep learning(rnn、cnn)调参的经验?

Adam那么棒,为什么还对SGD念念不忘 (1)

Adam那么棒,为什么还对SGD念念不忘 (2)

全连接层的作用是什么?

深度学习中 Batch Normalization为什么效果好?

为什么现在的CNN模型都是在GoogleNet、VGGNet或者AlexNet上调整的?

Krizhevsky等人是怎么想到在CNN里用Dropout和ReLu的?

(5)科研上的开放性问题

这部分的问题没有固定答案,也没法很好地针对性准备。功在平时,多读paper多思考,注意培养自己的insight和intuition

下面是我在面试中被问到过的问题:

/*******************************************************************

经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。

*******************************************************************/

这部分在知乎上也有很多讨论,不具体列了。

(6) 编程语言、操作系统等方面的一些问题。

C++, Python, 操作系统,Linux命令等等。这部分问得比较少,但还是有的,不具体列了

(7)针对简历里项目/论文 / 实习的一些问题。

这部分因人而异,我个人的对大家也没参考价值,也不列了。

三. 平时应该怎么准备

在大多数情况下,你能拿到什么样的offer,其实已经被你的简历决定了。如果平时没有积累相关的经历和成果,很难只靠面试表现就拿到非常好的offer。所以建议大家平时积累算法岗所看重的一些干货。

下面几点算是找AI相关工作的加分项:

(1)一作的顶级会议论文

(2)AI领域知名公司的实习经历(长期实习更好)

(3)相关方向有含金量的项目经历

(4)计算机视觉竞赛,数据挖掘竞赛的获奖或者优秀名次。现在这类竞赛太多了,就不具体列了。

(5)程序设计竞赛的获奖(例如OI/ACM/topcoder之类的)

当然,名校、高GPA这些是针对所有领域都有用的加分项,同样也是适用于这个领域的。

所以我的建议就是,如果自己所在的实验室很厉害,资源丰富,就专心做科研,发paper; 如果所在的实验室一般,没法产出相关的优秀成果,可以考虑自己做比赛和找实习。有一份知名公司的实习经历之后,找工作难度会下降很多。

最后,祝有志于AI这个领域的人都能拿到满意的offer.

匿名用户

最近找实习,投了一堆机器学习 + 计算机视觉的公司。虽然经历不一定有普遍性,但 po 出来做个参考吧。

个人硬件:TOP 4 本科 + ACM-ICPC 区域赛 + 海外科研经历 + CV类顶会N篇(一作M篇) [ N >= 3, M >= 2]

国内面试情况:图森【过】,商汤【过】,旷世【等消息,应该是过了】,依图【过】

国外面试情况:FAIR【拒】,DeepScale【过】,AutoX【等二轮】,Google Brain【等结果中】,旷世【没回复】

实习也没什么sp/ssp的,薪酬范围基本都是8k ~ 15k,国内单位人民币,国外单位美元。

面试大方向

已经说的差不多了,基本所有公司都是 编程基础[1] + ML/DL 基础[2] + 一些你过去的 project[3] 。

因为我投的几篇会议都是 DL 相关,所以面试官基本默认我 [2] 已经很熟悉。同时因为有 ACM-ICPC 经历,加之有给某个开源框架贡献代码,所以 [1] 大部分情况也可以免。面试过程大多是我介绍以前做的 project,然后面试官就里面一些细节提问。过程大多很愉快,很少有被 diss 的情况。

关于拿 offer,几点建议吧

  1. 一定要有拿得出手的经历,个人投下来的感觉是 顶会一作论文 > 顶会论文 > 相关 project ≈ ACM 经历 ≈ 阅读文献能力 >> GPA。 如果硬件条件没达标的话,除非是强内推,不然录用可能很小。
  2. 需要证明自己的工程能力。现在 CV 届盛行开源之风,不少论文都是接着前人的代码改一改就跑。但在公司里,要做的项目不一定有现成代码。工程能力不够就意味着没法出活,商业公司一般不喜欢这样的人。
  3. 面试前好好准备一下。我本以为面试是小意思,毕竟 paper 和 project 之前做过展示,面谈时只要再做一遍就好;代码这块有 ACM 经历锤炼,同时也刷完了 leetcode 所有题。结果面国外某公司的时候刚好撞到枪口----自己的论文刚好是基于面试官的工作做的,被一路追问细节差点语塞。面国内某公司的时候被面试官问了一个很简单的算法题,结果好久没碰算法题了,卡了二十分钟才写出来真想自挂东南枝。

其他的话,等全部结果出来再说吧,希望圣诞能给我面试带来好运。

PS:内推很重要,深度学习算是偏核心的岗位了,这种 offer 大多来来自内推而不是投简历。

PSS:目前面下来压力最大的是 FAIR 和 图森,面这两家的同学祝你们好运哟 ༼´◉◞౪◟◉༽

浙江大学 控制科学与工程博士

首先和你导师商量下是否有同意去实习,是否同意你长期实习,长期实习会大大增加录取概率。

根据我的面试经验,其实公司们比较关心的就两三个东西,最核心的两条腿就是理论专业度和coding能力,理论专业度就是你对DL或者你的研究领域的了解程度,当面试官问你一个DL的问题时,你能够侃侃而谈谈笑风生,优缺点对比分析原理分析都明明白白,能够通过实验结果去挖掘出问题所在,去提出解决这个问题的方案,这个自然是很有加分的,这些东西就取决于你的论文和实验的积累量。另外一条腿就是coding能力,这个coding能力既包括你DL框架复现论文的能力已经优化产品代码的能力,我们做实验总是喜欢去找开源代码调通然后跑实验,在我进入公司实习之后,我终于不得不的去战胜这些惰性,总之有各种原因不允许你像在实验室一样优哉游哉的git clone别人的代码,我为了验证论文里算法是否有效,我自己复现了很多模型,完全是重头写起,当然也用了公司自己积累的一些轮子,但是在训练model这个核心环节基本都是自己复现的,另外一个coding就是工程coding能力,怎么把训练的model封装成一个可用的SDK,再开发为可以用的产品,这些就取决于工程的coding能力,很惭愧我做的是research intern,所以这方面能力挺弱的,面试的时候这类问题也基本都是放弃的,这些去刷题就好,公司面试也只能从这个角度去尽量考察你。

关于这两条腿你都强自然是好的,我也问过几个公司,怎么看待我这种DL很强而开发coding能力基本为0的人,公司们的回答是那就看你的优点是否能足够掩盖你的缺点。另外除了这两条腿,你的潜力、天赋以及是否踏实这些品质也是很重要的,这个就看你的简历是否能展现出来或者面试官是否能够挖掘出来了。

以上是公司比较关心的一些东西,这些空空的东西大家也都知道。下面有一些可能会有帮助的实际东西,在找实习的前期,尽量找到人可以内推,内推应该都是有奖金的,所以大家应该很乐意内推,这个你可以去知乎上勾搭,很多公司的大佬们都会上知乎的,对我司感兴趣的也可以去看我的个人介绍然后上官网或者找人内推,我就不内推了,我推荐了几个最后都没得到面试机会,伤心,我司的要求是还是很高的,我看到很多简历都很不错但都没进来。

下一步就是简历了,简历最关键的无非就是项目和论文了,项目证明了你的工程能力,最好就是和DL/CV相关的,相关的写到最前面,并且分三步走,做了什么,怎么做,解决了什么问题或者取得什么成绩,把项目介绍清楚,用了什么相关的DL技术也可以点出来,我收到有些简历就是一个项目名字,没了,这种简历显然不过关的,另外还有就是项目经历很多,最后一个和DL相关的都没有,APP开发搭建网页一大堆,这个我都会让TA再仔细思考下有没有能搭点边的,哪怕是用opencv做的视觉项目也比这些好,实在没有那也没办法,那就去kaggle上刷些top排名吧,能够进top20%基本上都会给个面试机会吧,所以项目经历是包括比赛的,和DL或者ML相关的比赛都可以去刷一下。另外一个就是论文了,论文最直接反映了你的理论专业度、研究能力和思考问题的能力,这个也没啥说的,就看个人的研究实力了,有就是有,没有也急不出来。

然后如果得到了面试机会,那么面试官基本就是针对你的简历来问的,尤其是和DL相关的项目经历,非相关的可能就一带而过,经常会问你选一个你最满意的项目,介绍下做了什么,你的特色所在,和别人不同的地方, 做的过程中遇到了什么问题,你是怎么解决的之类的。然后会根据你的项目去问一下常问的问题,比如过拟合怎么解决啊,BN为什么效果这么好啊,这些基本的问题知乎上很多都提到过,这些都是可以去准备的,一般稍微懂点DL的人都能回答出来,不懂的人背一背也能回答出来,所以我不是很care这类题目。更深的是面试官会根据你的项目、比赛和论文去问一些针对性的问题,比如你研究某个课题,问你这个课题目前有哪些主流网络模型或者模型学派,比如问你两个模型的区别和优缺点,比如问你某个模型的机制原理,你有哪些想法去提高某些算法,等等花样百出,考的就是你的理论内功,你要相信你的面试官完全有能力把你的几斤几两给掂量出来。理论过后会了解你的DL coding能力,即所谓的框架实现模型的能力,你是否修改过源码并在GIT上做过PR,是否自己复现的模型等等,这个考的是你的框架外功,不排除面试时公司让你用你熟悉的框架写个什么model出来。最后一个就是工程coding的能力了,这个刷题吧,DL公司问的也就是那些东西,数据结构排序算法,反正我都基本遇到就直接放弃的,所以也没啥能够提供帮助的。然后为了考察的你的潜力和天赋,智力题数学题也经常会考的,比如让你算个什么奇奇怪怪现象的概率,比如给你一个场景用数学去建模然后解决,给你一个场景设计一个最优化问题并解最优化,各式各样。下面是我遇到的一些可以公布的题目吧,不说哪个公司了,而且应该也不会再问这些东西了吧:

1、证明6个人里面一定能找出3个人互相认识或者互相都不认识

2、桌上有很多纸牌,其中有50张正面,现在蒙住你的眼睛,请把它们分成两堆,正面向上的数量一样

3、现在有很多学生的成绩信息,以及各大学校招生的条件,怎么设计目标函数和求解算法,得到一个最优的分配方案

4、投篮命中率为50,第一次出现连续进三次的所用次数的期望

1、用递归算法把单向链表反向

2、动态申请二元数组内存,动态释放二元数组内存

深度学习题:

1、写出三个损失函数,并分析特点和使用场景

2、写出常见的正则化和防止过拟合的技术,平时调参的经验

3、深度学习是否是万能的,深度学习未来发展的方向,你的观点

4、VGGNet,GoogleNet,Resnet的特点和对比

5、分析梯度弥散和梯度爆炸的原因,及其解决手段

计算机视觉题:

1、伪代码实现直线检测

2、实现一种插样resize函数

3、代码实现图像旋转函数

4、列举出你知道的特征算子及其特点,例如SITF,LBF等

5、用EM理论推导GMM

总之说那么多,其实能够拿到什么水平的实习,说道理最终看的就是你的个人实力了,不同公司可能能够提供特性不一样的工作岗位,比如小的创业公司可以提供一些较前瞻性的research工作岗位,比如我这种一条腿的残渣,当然最起码你的model复现能力,Python处理数据的能力不要弱吧,大的如阿里腾讯可能更喜欢理论开发都不弱的全栈工程师

当初拿到实习在知乎上得到了很多学长的帮助,不过也无法报答他们,希望这个东西能够对别人有些帮助吧,也算是间接的回报了,公司对实习生是很欢迎也同时很宽容的,基础差一点就自律好一点,公司不会把太多压力放在实习生上,知名公司应该还不至于要让实习生挑大梁吧,所以无论基础好坏,都可以去尝试一下投一下简历。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK