作者 | Lin Lee
编辑 | Levene
专栏 | 九章算法
机器学习的知识点涵盖的范围很广。机器学习的面试一般也都是采用理论与实践紧密结合的方式。所以对于初学者来说,这无疑大大增加了面试准备的难度。
那么我们要如何准备机器学习面试才能最后通过面试,斩获offer呢?
首先你要清楚你面试的境况—
为什么你申请的公司会有这样一个职位开放着
这是在准备面试过程中极为重要的一个问题,因为如果你知道自己会被问到什么,你就能更好地了解自己能给公司带来什么价值。
举个例子,如果一个公司正在招聘一位机器学习工程师,那么你要知道他们可能是正试图解决一个复杂问题,一个传统算法难以适用或者用传统方法根本无法解决的问题。
当你在申请这个职位时,你还可以想象自己已经得到这份工作后的情景。要做到这一点,你需要尽可能多的了解关于这家公司和这个职位的相关信息。
并问自己:我能为这家公司解决一个怎样的核心问题?
在寻找这个问题答案的过程中,你能了解到更多关于这个问题的信息,比如:现有的解决方案、近几年发展的新趋势等。并且在这个过程中,你甚至还能看清这个问题具体的难点和挑战在哪里。
如果你明确地知道自己申请的职位是属于哪个团队的,选择一个合适的问题可能会更简单一点;如果不知道的话,就挑选一个对公司来说比较重要的问题。除此以外,你还可以思考这家公司目前面临着怎样的挑战,然后试着推测他们可能会问的问题。
在找出问题之后,下一步
你就应该思考你需要怎样的数据来解决这个问题。
其中一些数据可能是现成的,而另外一些数据可能需要你写一些额外的代码来收集。
试着去深入了解这家公司的基础建设和业务,比如:它们使用什么栈,它们有什么APIs(应用程序接口),它们已有的数据库,等等。
现今大多数公司都会有自己的博客,用来讨论它们遇到的困难、采取的解决方案以及分享它们成功和失败的案例。所以你可以通过公司的博客来更深入地了解公司的运营方式,以及你即将面试的公司已经有了怎样的产品和服务等。
现在你需要做一个相当大的思维跳跃:
如何将机器学习应用到这个问题场景中去?
给定你想实现的目标和你需要的有效数据,你能够把它转换为一个机器学习问题吗?
使用哪种模型会比较合适?怎么测试和评估这个模型?
举个例子,大多推荐系统如Netflix和Amazon最初面临的挑战都是聚类而不是预测,也就是说,一旦你能将用户分别划分成有相似喜好的群组和行为相近的群组,再给他们推荐产品就变得简单多了。
这个思维过程有助于你在面试中更好地讨论公司最关心的问题。没有面试官指望你能在面试时能把一个他们已经研究了几个月甚至几年的问题给完全解决。但是面试官都喜欢对他所真正关心的问题展示出兴趣、活力和好奇心的应聘者。
根据面试官和面试环节的不同,你可能会被问到更技术性的问题,你应该尝试用这个机会来展示自己对公司的了解和对角色的定位。
当被问及到更开放性的问题时,例如:“请描述一个你曾经在做项目时遇到的技术难题,以及你是是如何解决它的?”最好选择一个跟公司有关的话题来回答。
我们在这里将机器学习工程师需要掌握的基本技能分为五类:
1 | 计算机科学基础与编程能力 |
2 | 概率与统计 |
3 | 数据建模与评估 |
4 | 应用机器学习算法与库 |
5 | 软件工程和系统设计 |
▲ 你怎么判断一个链表中是否有循环?
▲ 给定一棵二叉查找树中的两个元素,求它们的最近公共祖先。
▲ 写一个栈排列函数
▲ 如何计算比较排序算法的时间复杂度?你能证明吗?
▲ 如何在加权图中找到两个节点间最短路径?如果有些权值是负的怎么办?
▲ 求一个字符串中所有的回文子串。
对于所有这些问题,你都要能够推导出你的方法的时间和空间复杂度,并且尽可能用最低复杂度解决问题。
只有通过大量的练习才能对这些不同类型的问题烂熟于胸,这样你就能够在面试时快速给出一个有效的解决方案。
常用的算法面试准备平台有 Lintcode、LeetCode、Interview Cake等。
▲ 给出一个群体中男性和女性各自的平均身高,整个群体的平均身高是多少?
▲ 最近一项调查显示,在意大利1/3的汽车是费拉里斯(法拉利跑车),这其中一半的车都是红色。那么如果你在意大利的街头看到一辆红色的汽车驶来,请问它是费拉里斯的可能性有多大?
▲ 你想在网站上找到一个最合适的位置放广告,你可以选择广告字体的大小(小号、中号、大号),你也可以选择广告放置的位置(顶部、中部、底部)。那么至少需要多少页面访问量(n)和广告点击量(m),你才能有95%的自信说其中的一个设计比其他设计都好?
很多机器学习算法以概率论与统计学作为基础。所以对这些基础知识有清晰的概念非常重要,同时,你也要能够将这些抽象的公式与实际联系起来。
▲ 奶农正试图了解影响牛奶品质的因素。他记录了每天的气温(30-40°C)、湿度(60-90%)、饲料消耗(2000-2500公斤)、牛奶产量(500-1000升)。
假设问题是要预测每天的牛奶产量,你会如何处理数据并建立模型?
这是一个什么类型的机器学习问题?
▲ 你的公司正在开发一个面部表情识别系统,这个系统接受像素为1920*1080的高清图片作为输入,接收到输入的图片后它就能告诉用户图片中的人脸处于以下哪种情绪状态:平常、高兴、悲伤、愤怒和恐惧。若图片中没有人脸时系统要能够分辨这种情况。
这属于什么类型的机器学习问题?
如果每个像素点由 3 个值来表示(RGB),那么输入数据的原始维度有多大?有办法降维吗?
你会如何对系统的输出进行编码?为什么?
▲ 在过去几个世纪里搜集到的气象数据显示温度呈循环上升和下降。对于这样的数据(年平均温度值序列),你会如何建模来预测未来 5 年的平均气温?
▲ 你的工作是收集世界各地的文章,并将来源不同的相似文章整合成一篇文章。你会如何设计这样一个系统?会用到哪些机器学习技术?
▲ 你在用一个给定的数据集训练一个单隐层神经网络时,发现权重在迭代训练中波动很大(变化巨大,常在正负值间摇摆),你需要调整什么参数来解决这个问题?
▲ 支持向量机的训练在本质上是在最优化哪个值?
▲ LASSO 回归用 L1-norm 作为惩罚项,而岭回归(Ridge Regression)则使用 L2-norm 作为惩罚项。这两者哪个更有可能得到一个稀疏(某些项的系数为 0)的模型?
▲ 当测试一个10层神经网络的反向传播时,你发现前三层的权值完全没有变化。接下来的几层(4-6)权值变化的非常缓慢。这是为什么?该如何解决?
▲ 你现在有一些关于欧洲小麦产出的数据,包括年降雨量(R,英寸),平均高度(A,米)和小麦产量(O,公斤/平方千米)。你经过粗略分析认为小麦产量与降雨量的平方以及平均海报的对数之间存在关系,即: O = β0+ β1 × R2 + β2 × loge(A)。你能使用线性回归模型计算出系数(β)吗?
你可以通过参加一些数据科学和机器学习的比赛来了解各种各样的问题和它们之间的细微差别。多多参加这些比赛,并尝试应用不同的机器学习模型。
▲ 你在运行一个电子商务网站。当用户点击商品详细信息时,你要根据用户过去所购商品特征推荐5个用户感兴趣的商品,同时在页面底部显示。为完成这个功能你需要什么服务器和数据库?假设它们是可用的,写一个程序来获得这5个推荐商品。
▲ 你会从一个在线视频播放网站(如YouTube)上搜集什么数据来估测用户参与度和视频人气度?
▲ 一个非常简单的垃圾邮件检测系统工作原理如下:它每次处理一封邮件并统计每个不同单词出现的频率(Term frequency),然后将这些频率与之前被标注为垃圾/正常邮件的那些频率进行比较。为扩大这一系统处理大量的电子邮件,你能设计一种能在计算机集群上运行的 Map-Reduce 方案吗?
▲你想实现用户实时使用可视化,就像热敏图一样。为实现这个功能,在客户端与服务器端你需要什么组件/服务器/API?
很多正在准备机器学习面试的朋友往往都会沉浸在如何准备技术层面的问题上,却极少思考为什么这家公司会有这个职位,为什么公司想要用机器学习作为解决方案,为什么他们对你感兴趣?等等。
九章算法 帮助更多中国人找到好工作
春季课程免费试听
《面向对象专题班》
美西1月13日 周六 10:00-12:00
《算法面试高频题班》
美西1月13日 周六 16:00-18:00
《机器学习从0到1》
美西1月14日 周日 13:30-15:30
《九章算法班》
美西1月13日 周六 18:30-20:30
报名点击文末“阅读原文”