如何去判断一个面试者的深度学习水平?

点击上方“视学算法”,选择加"星标"或“置顶”

重磅干货,第一时间送达如何去判断一个面试者的深度学习水平?

编辑:Amusi  |  来源:知乎

https://www.zhihu.com/question/41233373

本文仅作为学术分享,如果侵权,会删文处理

2021届的秋招即将开始(预计6月中下旬开始,7月8月提前批,9-10月正式批),今年找工作相信又是神仙打架,这里先分享一个AI算法岗求职公式2.0版:

公式2.0:刷题+背题+项目+实习+竞赛+顶会/顶刊(可选)

然后分享一个知乎上热议的话题,大家站在面试官的角度思考,方便让自己查漏补缺。秋招,加油!

如果你是面试官,你怎么去判断一个面试者的深度学习水平?

作者:Naiyan Wang
https://www.zhihu.com/question/41233373/answer/91113816

泻药

一个问题可以考察八成的功力

CNN最成功的应用是在CV,那为什么NLP和Speech的很多问题也可以用CNN来出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性?


再补充一个问题,为什么很多做人脸的paper会最后加入一个local connected conv?

觉得能答对的同学可以私信我答案,我们可以直接进入面试流程哦~

作者:mileistone

https://www.zhihu.com/question/41233373/answer/255954147

大概会问传统机器学习、深度学习、最优化、coding四个方面。  

传统机器学习一定要好好问问,因为很多人只会深度学习的调参技巧,知其然,不知其所以然。传统机器学习算法里面理论相对完备,通过考传统机器学习算法更容易看出应聘者的理论能力。  

传统机器学习考察点:

1、bias与variance的含义,并结合ensemble method问哪种方法降低bias,哪种方法降低variance 

2、lr与svm的区别与联系 

3、gbdt与adaboost的区别与联系 

4、手推svm,svm麻雀虽小五脏俱全 

5、pca与lda的区别与联系,并推导 

6、白化的原理与作用 

7、给一个算法,例如lr,问这个算法的model、evaluate、optimization分别是啥  

深度学习考察点:  

1、手推bp 2、梯度消失/爆炸原因,以及解决方法 

3、bn的原理,与白化的联系 

4、防止过拟合有哪些方法 

5、dnn、cnn、rnn的区别与联系 

6、机器学习与深度学习的联系  

7、batch size大小会怎么影响收敛速度  

最优化考察点:  

1、sgd、momentum、rmsprop、adam区别与联系 

2、深度学习为什么不用二阶优化 

3、拉格朗日乘子法、对偶问题、kkt条件  

coding考察点:  排序、双指针、dp、贪心、分治、递归、回溯、字符串、树、链表、trie、bfs、dfs等等

作者:竹间智能 Emotibot
https://www.zhihu.com/question/41233373/answer/170708156


深度学习虽然并不是新鲜事物,尤其近几年发展迅速,但还远称不上是一个“成熟”领域。就算是“传统”机器学习,其中所包含的思想和方法也千差万别。因此,我们并不强求面试者必须要懂哪些tricks或者某类特定的方法。坦白说没有面试官(在我们看来,就算是Hinton本人)能对机器学习/深度学习的每个领域了如指掌,所以我们会尽量避免用一些自己主观的理解去考别人。

因此,我们的原则是希望面试者有比较好的机器学习基础,比较优秀的编程能力,以及分析和解决实际问题的能力(或者说,critical thinking)。当然,对深度学习的理解和实际经验会是一个加分项,但是crash course或者用于炫技的冷知识并不能取代扎实的基本功(比方说把Andrew Ng的机器学习课程吃透,将Deep Learning一本书学好)。

冒着听起来过分自大的风险,我想分享一下我们关心的一些问题:

1. 在使用一种方法(无论是深度学习或是“传统”方法)的时候,面试者对它的优点和局限性是否都有所认识。在面对不同的问题的时候,我们希望面试者可以通过独立思考做出一个informed choice,而不是因为“上周看了一篇paper是这样做的”或者“BAT/FLAG就是这样做的”。

2. 面试者是否有完整的机器学习项目经验。这意味着从理解需求开始,到收集数据、分析数据,确定学习目标,选择算法、实现、测试并且改进的完整流程。因为我们希望面试者对于机器学习在实际业务中所带来的影响有正确的判断能力。当然,如果是可以通过python/或是结合Java/Scala来完成所有这些事情就更好啦。

3. 面试者是否具备基本的概率/统计/线性代数的知识——数学期望,CLT,Markov Chain,normal/student’s t distribution(只是一些例子),或是PCA/SVD这些很基础的东西。另外(最理想的),希望面试者对于高维空间的一些特性有直觉上的认识。这部分并不是强行要求背公式,只要有理解就可以。毕竟这不是在面试数学系的教职——我们只是希望面试者可以较好地理解论文中的算法,并且正确地实现、最好可以做出改进;另外,在深度学习的调参过程中,比较好的数学sense会有助于理解不同的超参数对于结果的影响。

4. 面试者是否有比较好的编程能力,代码习惯和对计算效率的分析能力(这个一般会按照最基本的算法工程师的要求来看,从略)

5. 面试者在机器学习方面,对基本的概念是否有所了解(譬如说,线性回归对于数据的假设是怎样的),以及对于常见的问题有一定的诊断能力(如果训练集的正确率一直上不去,可能会出现哪些问题——在这里,我们希望面试者能够就实际情况,做一些合理的假设,然后将主要的思考逻辑描述清楚)。我们会根据面试者所掌握的方法再比较深入地问一些问题,而且我们希望面试者不仅仅是背了一些公式/算法,或是在博客/知乎上看到了一些名词(比如VC维度,KKT条件,KL divergence),实际上却不理解背后的理论基础(有时候这些问题确实很难,但“知道自己不知道”和“不知道自己不知道”是差别很大的)。打个比方,如果面试者提到核技巧,那么给到一个实际的线性不可分的数据(譬如XOR,或者Swiss Roll),面试者能清楚地设计,并通过实际计算证明某个kernel可以将此数据转化到一个高维并线性可分的空间吗?

6. 在深度学习方面,我们希望面试者具备神经网络的基础知识(BP),以及常见的目标函数,**函数和优化算法。在此基础上,对于常见的CNN/RNN网络,我们当然希望面试者能够理解它们各自的参数代表什么,比较好的初始参数,BP的计算,以及常见超参数的调整策略——这些相信Ian Goodfellow的Deep Learning一书都有非常好的介绍——我们也希望面试者能够在具体领域有利用流行框架(我们主要用tensorflow——但是这并不是必须的)搭建实际应用的经验。当然,我们希望面试者读过本领域的paper,并且手动验证过他们的想法,并且可以对他们方法的优缺点进行分析。当然,如果面试者有更多兴趣,我们可以探讨更深入的一些问题,比如如何避免陷入鞍点,比如通过引入随机噪音来避免过拟合,比如CNN的参数压缩,比如RNN对于动力系统的建模,比如基于信息理论的模型解释,等等等等,在这些方面,我们是抱着与面试者互相切磋的心态的。

7. 通常上面我们说的都是监督学习,往往结果是回归或分类。当然,也许面试者还精通RL/transfer learning/unsupervised learning这些内容,那么我们可以逐一讨论。

此外,如果面试者应聘的是某一个特定领域的职位,那么当然地,我们会希望他同时具备很强的领域知识,这里就不展开说明了。

在很短的时间内想要全面地了解一个人确实非常困难。调查显示,往往面试官自以为很准的“感觉”,其实是一个糟糕的performance predictor。我希望可以结合相对客观的基础问题,以及面试者自身的特长,来对面试者的理论和实战能力做一个判断。基础扎实,有实战经验并且有一技之长的面试者通常会是非常理想的候选人

最后的一点小tip,我真诚地希望面试者对问题有自己的思考和理解、有自己的体系,argument都是能够自洽的。坚持自己的观点并与面试官争论,远远好过为了刷面试而去背诵所谓标准答案(或者来知乎上找面试tips)。

欢迎大家批评指正。

本回答来自竹间智能深度学习科学家 赵宁远

者:zibuyu9

https://www.zhihu.com/question/41233373/answer/91113816

问TA做过得最得意的项目,在叙述过程中随意问几个细节问题,就很容易判断出来了。

作者:Flood Sung
https://www.zhihu.com/question/41233373/answer/256204350


看了那么多回答,我自己都答不上来。但,那并不代表深度学习学的不深,只是深度学习也很大啊。Deep Reinforcement Learning,Meta Learning, Imitation Learning, robot learning。估计这些现在没几个面试官懂吧。是不是应该让你推一推A3C,DQN,DDPG,TRPO,PPO呢?或者直接问请说说AlphaGo的整个算法实现??

大家往往觉得拷问某些基础,细节可以反映深度学习的水平,但我觉得深度学习那么大,方向那么多,有些细节对你很重要,有些则不是。研究视觉的不见得要懂NLP是不是。懂一些当然好,但是没有实践其实也没有用。

在我眼里,判断一个人深度学习水平最直接的体现就是看他做过的项目,写过的代码,看过的论文,发过的论文。

还有更重要的,快速学习能力。对一个全新的领域,可以快速in。所以只拷问知识层面显然太low。

如何去判断一个面试者的深度学习水平?

请给我一个在看如何去判断一个面试者的深度学习水平?