面试官如何判断面试者的机器学习水平?
这个问题其实很有意思,很难有个定量的定论。以下是 我个人对于ML engineer/research scientist的能力的理解,用几个和其他回答不同的方面来说一说如何来看待在这个职位中的“水平”。也算是做了两年hiring manager后的一些看法总结,不一定全面,希望大家指摘。关于纯技术的内容,有很多回答说了很多,所以我在最后一个维度再来略谈一下技术。需要说明的是,以下的很多维度对比较资深的研究员和工程师更重要,而如果你刚刚毕业或者经验比较少,更重要的还是把技术掌握扎实。在以下的这些内容中,我会以一些例子来说明这些维度,我们姑且叫这位面试者小张吧。
第一个维度是:公司策略
这是一个我认为至关重要的维度,并且这关系着一个工程师或者研究员在一家公司中可以走得多远。公司策略这里指的是一家公司的发展方向,想要着重投放资源来扶持的领域。而对于工程师或者研究员来说,他们的目标就是要理解,他们的技术方向和公司策略是否能够贴合。如果不能,他们的技术方向作为新方向能够带来什么。如果可以,那在那些方面可能是可以带来帮助的。
我来举个例子,假设小张在面试一家Computer Vision为核心的Security技术公司,而小张的研究方向是做控制理论(control theory)的。那作为公司而言,小张即便是非常著名,并且水平极高的,那公司在招聘过程中也会有犹豫。因为公司并不知道小张对于公司的价值在哪里。而作为一个资深的有经验的研究员,小张需要做到的是,如何为公司创造价值,也就是找出新的发展方向。那比如说,小张发现这家公司最近开始在机器人上面的一些sensor和camera做投入,他就可以结合perception和控制理论做一些方向性的探索,给到公司并未想到过的价值。
当然,大多数时候,你的面试不会如上述的例子一般,在公司策略和自己的方向之间有很大的跨度,但是知道自己对于公司策略的价值,会是你将自己的脚踏入心仪公司的一大步。这里,公司通常所关注的面试人的水平,其实是在于他们对于全局的把控能力,是否能够将自己所学融入进全局的大方向里。这对于工程师或者研究员来说,可不只是画饼的能力,对于有经验的面试官来说,一个能做到这一点的面试者,是展现了极强领导力的。因为面试官经验丰富,对于项目和方向的可行性,他们听到后心里大概就会有个数。
这个地方有人会问,那在很多公司,实在太大了,他们什么都做,这时候如何判断自己的价值呢?那我们就得看产品方向了。
第二个维度是:产品方向
上文我们讲到,一个人对于公司策略的理解以及她认为自己对于公司策略的价值会是非常重要的一点,但如果面试的是大厂,虽然每家公司有自己的mission,公司内部所需要的技术也会各式各样,很难笼统地定义自己的价值。这时候,非常重要的一点就是找到自己所面试公司所对应的产品方向,并且找到自己的定位。
一般来说,对于大厂,每家公司都有数不清的事业群和部门。那对于面试者来说,他们其实面试的不是一整家公司,而就是他们所接触的这个部门。上文所说的这些对于单一产品或者单一部门来说都是一样有用的。但我还需要补充一点。
一个部门所负责的产品和公司总体策略相比,一个重要的区别在于,部门与部门之间是有边界的,而公司总体策略不需要顾虑太多这个方面,只要能有空间可以竞争就可以了。在这里,一个非常重要的点在于,如何在划定的发挥空间内了解到自己的价值。我们再用第一部分的例子为例来看一下现在这个情况。现在我们假设面试官是一家公司内以computer vision技术为主的一个部门,而有另一个部门在做机器人相关的工作。那这时小张再用同一套的体系去理解自己的价值就会有些不合适了。
在划定空间内,小张首先需要了解清楚对于这个部门,到底什么是他们的边界,再根据这个边界来限定自己的价值。假设这个部门的职责在于发展computer vision在camera上面detection的能力,并且和各部门合作让各部门使用自己的detection功能,那小张在这个部门的个人价值可以是帮助这个部门更好的理解其他部门的需求,并且去负责一个从perception端到control端之间的接口。并且从长久来看小张可以作为一家公司的fixer,也就是解决重要产品的衔接问题和规划未来整合的趋势。
在这里,产品部门所看重的小张的水平在于,在部门划定的范围内将自己所学贡献在产品所需的能力。一个能够挖掘出方向并且看到产品所需的机器学习工程师或者研究员,是每一家公司梦寐以求的员工。
当然了,上述的例子有些夸张的成分,但确实是很多人经常遇到的,比如在换技术方向的同学们。
第三个维度是:职位定位
在聊完了在大环境下的个体水平和价值后,我们来讲一讲一个职位必须面对的一个问题,定位。一般来说,机器学习岗位通常分为三大类,应用岗,应用研究岗和纯研究岗。大家可以这样来对应,如果你的目标是对应一个产品把一个已知的算法用上去,那是应用岗。为了一个特定产品的一个特定问题来设计一个算法,那就是应用研究岗。而去研究通用算法,那就是纯研究岗。
那对于这三个职位中的每一个,水平的定义是不一样的。换言之,如果是应用岗,即便小张是一个大牛,发了无数的paper,但是如果被问到了解决一个产品问题怎么做却想不到一个实际的架构,而是说了很多可适用的高深理论,但可行性和如何实现完全没有想法,那也只能说是水平不行。反之亦然,研究岗需要极强的理论功底,如果只有实现的能力,没有构思新理论方向的能力也是不行的。
所以对于公司来说,一个很重要的点在于,面试者的强项是不是和这个职位的定位吻合,而水平本身也会因为职位的吻合度有很大的浮动。
第四个维度是:问题解决
有很多面试者喜欢聊技术聊得很深,但是复杂技术就真的是好事吗?在这里,我觉得有一个重要的概念是对于一个工程师或者研究员特别重要的,那就是解决问题的能力。复杂算法和技术的存在原因是因为简单算法无法解决这些问题,不是因为是希望让面试者在面试中夸夸其谈的。如何用最简单的方法解决最复杂的问题是工程师或研究员水平的最高境界。
假设小张在面试过程中被问到了这样一个问题:我们现在需要解决一个问题,如果我们检测到了机器人面前有遮挡物,我们需要保证机器人不会撞到它。我们用一种夸张的方式来看看三种面试回答,并且来评判一下他们的好坏。
1. 我觉得如果我们检测到了遮挡物,在每一个检测到遮挡物的time step中,不采用能够使得机器人经过障碍物的policy
2. 我们让机器人做很多次随机操作,然后用offline reinforcement learning来学得一个policy,然后上线测试。或者我们可以做online的RL,然后用policy gradient来得到一个continuous control policy来绕开遮挡物
3. 我们遇到了遮挡物便停下。
在以上三个回答中,我会做以下排序1 > 2 > 3。原因是,1用最简单的方法规避了遮挡物,2虽然会解决问题,但是把问题本身无限复杂化了,3没有解决问题。
当然在面试当中不太会真的有那么夸张的回答区别,但是用最简单的方式解决最复杂的问题不论是在应用还是在理论研究中都是不变的真理。所以单纯让别人觉得你的解决方案很复杂很高深并不是很高明的选择。
第五个维度是:关系处理
在工作关系中,解决问题的很重要一环,可能是最重要的一环,是如何将自己的想法输送出去,并且是舒服得输送出去。这对于机器学习的同学们尤其的重要,因为我们做的东西很抽象,对于不是这个领域的同学们并没有那么容易理解。那尤其关键的一个点就是如何处理作为工程师或者研究员和别的合作伙伴的关系是非常非常重要的一点了。
假设小张最后被问到了这样一个问题。我们的机器人现在在最后实验过程中,我们发现你实现的算法的inference部分使得机器人在反应速度上从50Hz降到了40Hz。最后的机器人运行效率部门要求删除这段优化算法。你会怎么办?
这其实是机器学习的同学们经常会遇到的一个问题,你想要实现一个算法,但是产品不契合,或者遇到了这样或那样的political/production issue。这种时候,如何做出一些牺牲,并且多做沟通使得自己可以在原来的困境中尽可能多地走一步,会是相当重要的。这时的一种回答方法是,我会找机器人运行效率部门沟通看看能否我重新训练一个更加小的model,使得反应速度变快并且和机器人运行效率部门一起去做总体的优化,并且保证机器人运行效率部门可以分享这一部分的credit。即和机器人运行效率部门分享不牺牲反应速度的同时提升机器人本身的能力的这部分impact。这样便可以从关系的角度出发,在自己牺牲一部分credit的同时使得全局最优化,并且建立一些有效的关系。当然这只是一种回答方法,这里有无数种办法,但重点在于要让别人知道你会在公司内处理关系。
关系处理对一个资深的研究员或者工程师来说是至关重要的。一个容易合作的研究员或者工程师,非常容易会得到全公司的欣赏,并且很容易将自己的想法付诸实践。反之,寸步难行。对于面试者来说,能够展现自己处理关系的能力,在面试中相当的重要,是体现自己水平的关键一步。
第六个维度是:技术
讲了那么多,总算讲回技术了。技术是以上所有内容的根本,如果对于自己的技术不自信,以上这些很难实现。那对于技术来说有那些是必须的,而哪些是可要可不要的呢?
首先,有一些任何公司都肯定会问的东西:Supervised Learning和Unsupervised Learning中的常规算法。基本就是Dr. Andrew Ng在CS229里面讲的内容。一定要能够融会贯通,并且能够规避掉那种最最低级的错误,比如设计算法的时候出现feature leakage,在做数据处理的时候出现data leakage。像这种问题基本出现就说明平时经验不足了。
第二,必须熟知自己的领域:对于自己的领域必须了然于胸而且要有足够自信。对于自己的领域,那所有最新的进展和一些技术方向必须要跟上时代,设计算法时由简入深,不要一口气吃个胖子。要有条理,有自己的框架。
第三,可有可无的是各个方向上的State of the art:对于自己领域外的技术方向可以有所涉猎和了解,并且多多学习,有时候即便对自己的平时工作也会有所启发。我是做RL的,但是平时学习的时候会接触很多推荐系统,CV,NLP,Operations Research,Information Theory相关的内容。这些内容有很多能够帮到我平时对于RL方向的思考。
最后也是最重要的一点,必须要有自己的思维体系,并且能够自圆其说。自圆其说这边指的是有理论依据并且逻辑自洽。如果连自己都无法说服,那别人就更别说了。
最后总结
说了那么多,很大程度上想说明一点,机器学习,不管是做研究还是做应用,很重要的一个点还是要有解决实际问题的能力,从公司的角度,更是一个机器学习工程师或者研究员的商业价值。在思考面试者机器学习水平的时候,很大程度上还是要从技术以外的角度去思考,可能能够帮助你思考到招聘的真正目的。我也是一个技术的忠实拥趸,但是一个领域的突破最后还是脱离不了人类的实际问题。所以以上更多是从这个角度出发去讲讲怎么看待机器学习水平这个问题。
希望这样一个不同的角度能够给你带来帮助。
我在另一个类似的问题中做了一些对于深度学习水平的补充:
如果你是面试官,你怎么去判断一个面试者的深度学习水平?来源:知乎 www.zhihu.com
作者: 朱哲清Bill
【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。 点击下载
此问题还有 83 个回答,查看全部。
延伸阅读:
如果你是面试官,你怎么去判断一个面试者的深度学习水平?
如何准备机器学习工程师的面试 ?