兵法记载“知彼知己,百战不殆;不知彼而知己,一胜一负;不知彼不知己,每战必殆。”
参加面试时,如果能站在面试官角度换位思考如何考查候选人的水平,一定可以让我们的面试准备更加有效。
过去2年,从小公司、创业独角兽到互联网大厂,我经历了数十场面试,也有幸担任过算法面试官。结合自身经验,和大家分享一些简单实用的判断方法。
研一寒假,修完了学校要求的所有学分后,我开始在实验室悄悄准备面试,寻找实习机会。
当时我刚刷完吴恩达的机器学习课程,《西瓜书》看了前两章,对ML仅有基础概念,能回答“过拟合的原因,偏差方差有什么区别,聚类算法有哪些”之类的问题。
仗着初生牛犊不怕虎,我申请了几家公司的机器学习实习岗。几周过去了,回音寥寥,但还真有一家深圳的创业公司给我发来了电话面试邀请。
这是我第一次参加实习面试,戴着耳机,我紧握简历的双手沁出了汗水,心里在反复念叨简历上密密麻麻的笔记。
面试开始挺顺利,面试官问了一些关于python和项目的问题,我答得还不错。随后面试官问:“你都熟悉哪些机器学习算法呀?”
我:”Emmm,逻辑回归、随机森林吧“。
面试官:“那先聊聊第一个,可以解释一下逻辑回归的原理吗?”
我:“逻辑回归是分类算法,一般用于二分类。算法里用了一个sigmoid函数把数值转换成了概率。”
最怕空气突然安静
面试官:“没了吗?那它是线性还是非线性模型?”
我:“非线性吧,您看它的图是曲线S形的。”(后面复盘才发现,逻辑回归是广义线性模型)
面试官:“那再说说随机森林,有什么特点?”
我:“它是一种集成算法,用了好多棵决策树来投票。”
面试官:“决策树有哪些生成算法?”
我:“这个没注意过。”(复盘:最典型的有ID3、C45、CART树等)
面试官:“那了解GBDT、XGB不?”
我:“听过名字...”
面试官:“.....”
我还在等面试官问“过拟合是什么,怎么处理”,这题咱会呀;结果5分钟后面试直接结束了!
很显然,第一次面试以失败告终。我的基础太差劲,面试官想评价我的机器学习水平不要太轻松。简单询问点算法原理和特点,2-3个回合就能把我问成哑巴。
那次面试后我狠狠地重补了机器学习基础,主要干了这么几件事:
1)阅读李航老师的《统计学习方法》和周志航老师的《西瓜书》,巩固理论;
2)遇到某一种算法公式太多看不明白(SVM等),就去b站上找相应视频,重新学习做笔记;
3)阅读机器学习“神书”《Hands-on Machine Learning with Scikit-Learn》,边学理论边实战;
4)很多算法和概率论、高数关系密切,我又去找了宋浩老师的概率论等课程,重新捡起了“被遗忘”许久的数学知识;
5)在公众号和知乎分享原创文章,把输入尽可能转换为通俗易懂的输出,例如:
认真的聊一聊决策树和随机森林
7分钟搞懂逻辑回归的来龙去脉
盘点高效的KNN实现算法
经过几个月的努力,我终于从机器学习青铜晋级为白银/黄金,拿到了深圳另一家知名创业公司的机器学习offer。
因为我的表现比上次好了很多,给了面试官更大的提问空间。除了原理,面试官还考查了模型间的差异对比、手写公式、应用场景等环节,来确定面试者是否真的能知其然知其所以然。咱还是以随机森林算法为例,还原一下当时的画面:
面试官:“介绍一下随机森林吧。”
我:“好的。这里的“随机”有两方面,一是训练样本有放回地随机采样,二是训练特征随机选择;“森林”代表它由很多决策树组成。随机森林是典型的基于bagging的集成算法,多棵树可以并行训练,效率很高。随机森林能同时用于分类与回归任务,其树型数据结构还可以作为特征选择工具....”
面试官:“构造一棵决策树的理论依据是什么?”
我:“决策树可以由ID3、C45、CART三种算法生成,理论依据分别是信息熵、信息增益、基尼指数。”
面试官:“可以写一下它们的公式吗?”
我:“没问题”(之前在b站看过完整的公式推导视频,还跟着手推了一遍,所以印象很深)
面试官:“好的,那它和XGB有什么区别,大家什么时候更喜欢用XGB呢?”
我:“XGB属于boosting的集成算法,是GBDT的高效工程实现,.....”(聊了约10分钟)
这次面试被问了很多问题,特别是算法原理和细节;一方面面试官的水平可能更加专业了,另一方面因为我的能力提高,给了面试官详细考查的“机会”。
从19年到20年6月,我和不少公司的面试官交流过,期间还有幸帮助实习的创业公司面试了算法岗实习生(约20人)。
时间很快进入暑假,校招开始了。面试算法岗过程中,除了简历上的经历,几乎每家大厂都会考查传统机器学习算法。
流程和故事二大致相同,此外我发现很多面试官都爱关注:是否用机器学习算法解决过实际项目/业务中的问题,为什么选择这个算法,最终上线的结果如何。
如果这个问题能提前考虑到,并在面试中表现出色让面试官满意,证明面试者的理论、实践、项目能力都不算差,机器学习这一环基本可以过关。
在短短1小时左右的面试时间中,优秀的面试官可以快速判断面试者的机器学习等各方面水平。方法可以简单概括为 4W 与 1H,What - Why -When - Where - How。
面试官一般会从最简单的问题开始(What,是什么),由浅入深询问原理(Why,为什么,例如从原理分析为什么ID3/C45不能做回归任务),在什么场景下优先使用(When and Where),如何实现(How,可能需要手推或结合项目)。
在考查面试者机器学习水平的背后,面试官很希望同时考察候选人的学习能力、理论基础,业务水平,能否为公司带来价值。
好的面试官就像一个目光犀利、经验老道的刑警,几轮问题下来就能看透你的真实“身份”。所以同学们不要心存侥幸,指望着面试前1-2周狂补高频考点,就能“炸胡”过面试官哈。
大家趁早把理论基础打扎实,有时间跟着书本或视频推一遍主流机器学习算法,再结合一些coding实践,面试时就能以不变应万变。
觉得还不错就给我一个小小的鼓励吧!