分享

作为面试官,如何判断一个面试者的深度学习水平?

 timtxu 2017-05-20

编者按:作为一个快速成长的AI初创企业,竹间智能很欣喜地看到,正有越来越多的普通人关注人工智能领域。但不可否认,无论是AI创业还是对深度学习的研究,已经产生了一些泡沫。为此我们邀请了竹间智能深度学习科学家赵宁远,来为大家讲述一下,一个合格的深度学习工程师应该具有的素质与能力。希望对有意加入这一领域的年轻人有所帮助。

图片来源于网络

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

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

经过快两年的发展,竹间智能已经成长为一个拥有一百多位AI工程师与研发人员的大家庭。在NLU与人类情感、情绪识别上也取得了一些突破,很多我曾经面试过的年轻工程师已经成为业务骨干。所以冒着听起来过分自大的风险,想来分享一下在这方面我所关心的一些问题:

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都是能够自洽的。坚持自己的观点并与面试官争论,远远好过为了面试而去背诵所谓的标准答案。

欢迎批评指正。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多