微信号:infoqchina

介绍:有内容的技术社区媒体

机器学习面试指南,非AI领域也可借鉴的方法论

2018-02-25 10:00 来自操碎了心的

点击关注 InfoQ,置顶公众号

接收程序员的 8 点技术早餐

出处|AI 前线
编辑|Emily
机器学习面试前需要准备哪些要点?面试官会在哪些地方套路你?好的技巧是相通的,本文虽是机器学习面试指南,但能获益的绝不限于 AI 领域技术人。但如果你恰好又是人工智能浪潮下的技术人,欢迎关注微信公众号“AI 前线”,(ID:ai-front),组织上不能没有你。
写在前面

本文是机器学习面试不完全指南,因为面试和经验这些东西也往往都是一家之言,可参考,但并不一定就完全适合你。所以,我们搜集了一些比较靠谱的经验,整合起来放送给你,希望能够对你的职业生涯有所帮助。

一些善意的提醒

相信能够进入面试的朋友,简历一定是优中选优的,所以这部分我们不多作赘述。但是,当面试官让你当面对简历中的项目经验进行描述的时候,请一定记住一条原则:

用可量化的方式去介绍你之前的项目。

举个简单的例子:

1、曾参与训练了 XX 机器学习系统,取得了不错的成果。

2、分别使用 Keras,Tensorflow 和 Node.js 设计并部署了一个深度学习模型,进行目标识别。与传统神经网络(例如 ResNet)相比,该模型具有 1/30 的模型大小,1/3 的训练时间,1/5 的推理时间,以及 2 倍的收敛速度。

如何?是不是明显感觉到第二个更好?因为它量化了你的贡献,并突出了你使用的特定技术(证明你具有相关专业知识)。仅仅需要简单记录你在实验过程中所做的事情。但不要夸大,多花一些时间浏览你的简历以及过去的项目,以确保你在面试现场可以解释得很好。

根据面试的阶段,你可能会被问到不同的事情,你会被问到几乎所有科技工作中可能要求的东西,比如几个简单的编程问题。

很多时候,看似简单的问题反映了面试官真正关心的东西。 你有解决这个问题的好方法吗? 你收集要求还是只是做出假设?你测试了你的代码吗? 你是如何选择你的测试用例的? 你做了什么折衷? 你是否意识到需要做一个权衡?

当被问到机器学习的内容时,面试官首先希望知道你熟悉这个术语,并且知道常用的技术框架。 没有必要知道每种算法的所有细节,但是在回答中需要证明你知道各种框架的基本属性。 你还可能会被问到你将如何处理一个特定的问题。

另外,不要陷入假设每个问题都是机器学习问题的陷阱。 有些面试官经常看到应聘者在回答问题时答非所问,不能因为你懂机器学习,就把所有问题都归结为机器学习的问题。

知识点总结

为了方便各位读者阅读和收藏,我们为大家总结了一些比较实用的知识点,同时在文章的底部还会附上本文参考的几篇文章的链接,各位读者可以自行取阅。

先看看下面这张图:

这是一位机器学习专家给出的机器学习面试前,一个应聘者需要了解的技术要点。右侧的技术要点从上到下分别为:

  1. 线性代数、微积分、概率和统计

  2. 信息理论

  3. 数据分析能力

  4. 机器学习 or 深度学习建模能力

  5. A/B 测试技能

  6. 数据密集型应用系统的设计

  7. 用于计算密集型应用程序的优化知识

  8. 可扩展性和容错性知识

左边的彩色字体分别对应了:机器学习研究员、大数据科学家、机器学习工程师、机器学习架构师。右边相同颜色的方框里面包含的,就是这一职位在面试前需要重点准备的科目,如果年后你就要开始面试了,那么可以趁着这段假期,对照着这张图进行查漏补缺。

以下是机器学习面试常见的基础概念。

线性回归
  • 如何学习参数:最小化损失函数

  • 如何最小化损失函数:梯度下降

  • 正则化:

    • L1(Lasso 回归):可以将某个系数缩小到零,从而执行特征选择;

    • L2(Ridge 回归):以同样的比例收缩所有系数 ; 几乎总是胜过 L1;

    • 合并(弹性网)。

  • 假定特征和标签之间存在线性关系

  • 可以添加多项式和交互特征以增加非线性

逻辑回归
  • 用于二分类问题的广义线性模型(GLM)

  • 将 sigmoid 函数应用于线性模型的输出,将目标压缩到范围 [0,1]

  • 通过阈值做出预测:如果输出> 0.5,预测 1;否则预测 0

  • softmax 函数:处理多分类问题

KNN

给定一个数据点,使用一定的距离度量(例如欧几里德距离)计算 K 个最近的数据点(近邻)。对于分类,可以取大多数近邻的标签;对于回归,我们采用标签值的均值。

对于 KNN 来说,我们不需要训练模型,我们只是在推理时间内进行计算。这可能在计算上很昂贵,因为每个测试样本都需要与每个训练样本进行比较以了解它们有多接近。

有近似的方法可以有更快的推断时间,通过将训练数据集划分成区域。

注意,当 K 等于 1 或其他小数字时,模型容易出现过拟合(高方差),而当 K 等于数据点数或更大的数字时,模型容易出现欠拟合(高偏差)。

SVM
  • 可以执行线性,非线性或异常值检测(无监督)

  • 大间距分类器:不仅有一个决策边界,而且希望边界距离最近的训练点尽可能远

  • 最接近的训练样例被称为支持向量,因为它们是绘制决策边界所基于的点

  • SVM 对特征缩放比较敏感

决策树
  • 非参数,有监督的学习算法

  • 给定训练数据,决策树算法将特征空间划分为区域。为了推断,我们首先观测测试数据点落入哪个区域,并取平均标签值(回归)或多数标签值(分类)。

  • 构造:自上而下,选择一个变量来分割数据,使得每个区域内的目标变量尽可能均匀。两个常见的指标:基尼不纯或信息增益,在实验中两者结果差异不大。

  • 优点:简单地理解和解释,模仿人类决策过程

  • 坏处:

    • 如果我们不限制树的深度,可以容易地过度拟合可能不够鲁棒:训练数据的小改动

    • 可能导致完全不同的树

    • 不稳定性:由于其正交决策边界,对训练集旋转敏感

Bagging

为了解决过拟合问题,我们可以使用称为 bagging(bootstrap aggregating)的集成方法,它减少了元学习算法的方差。bagging 可以应用于决策树或其他算法。

这是一个很好的例子:

  • bagging 是有放回采样。在子采样无放回时,则称为 pasting。

  • bagging 因其对性能的提高而广受欢迎,也因为单独的机器学习模型可以并行训练,并且可以很好地扩展。

  • 当机器学习模型尽可能彼此独立时,集成方法效果最好

  • 投票: 软投票(对所有算法的预测概率取平均值)通常比硬投票更有效。

  • 袋外(out-of-bag)实例(37%)可以作为 bagging 的验证集。

随机森林

随机森林通过增加一些随机性来进一步改善 bagging。在随机森林中,只随机选择一部分特征来构建树(而不是子采样实例)。好处是随机森林减少了树之间的相关性。

假设我们有一个数据集。有一个信息增益很高的特征,以及一些预测性较弱的特征。在 bagging 树中,大多数树将在顶部拆分时使用这个预测性很强的特征,因此使得大部分树看起来相似,并且高度相关。与互不相关的结果相比,对高度相关的结果取平均不会大量降低方差。在随机森林中,每一次划分节点我们只考虑特征的一个子集,并因此通过引入更多不相关的树来进一步减少方差。

在实践中,调整随机森林需要拥有大量的树(越多越好,但需要考虑计算约束)。此外,用 min_samples_leaf(叶节点的样本的最小数量)来控制树大小和过拟合。

特征的重要性:

在决策树中,更重要的特征可能更接近树的顶部。通过计算它在森林中所有树上出现的平均深度,我们可以得到一个特征对于随机森林的重要性。

Boosting 树

原理

Boosting 树以迭代方式建立在弱学习器身上。在每次迭代中,都会添加一个新的学习器,而所有现有的学习器都保持不变。所有的学习器根据他们的表现(例如,准确性)进行加权,并且在加入弱学习器之后,对数据进行重新加权:错误分类的样例获得更多的权重,而正确分类的样例减少权重。因此,未来的弱学习器会更多地关注之前的弱学习器错误分类的样例。

与随机森林(RF)的区别

  • RF 是并行训练,而 Boosting 是按顺序训练

  • RF 降低了方差,而 Boosting 通过减少偏差来减少误差

XGBoost(极端梯度提升):

XGBoost 使用更正则化的模型来控制过拟合,从而使其具有更好的性能。

Stacking
  • 不是使用简单的函数 (例如硬投票) 来集成单个学习器的预测,而是训练一个模型来执行这个集成过程。

  • 首先将训练集分为两个子集:第一个子集用于训练第一层的学习器

  • 接下来,第一层学习器被用于对第二子集进行预测(元特征),并且这些预测被用于在第二层训练另一个模型(以获得不同学习器的权重)

  • 可以在第二层中训练多个模型,但这需要将原始数据集分为三部分

MLP

MLP,多层前馈神经网络。每一层可以有多个神经元,下一层中每个神经元的输入是上一层中所有神经元输出的线性或非线性组合。为了训练网络,逐层反向传播误差。理论上 MLP 可以近似任何函数。

CNN

Conv 层是卷积神经网络的基础结构。Conv 层由一组可学习的滤波器(例如 5 × 5 × 3,宽×高×深)组成。在前向传递期间,我们将滤波器在输入上滑动(或更准确地说,卷积)并计算点积。当网络反向传播误差时,再次进行学习。

初始层可以捕捉低级特征(如角度和边缘),而后面的层可以学习前一层低级特征的组合,因此可以表示高级特征,如形状和目标部分。

RNN 和 LSTM

RNN 是神经网络的另一个范式,有不同层的神经元,每个神经元不只把前一层神经元的输出作为输入,而且把同一层的前一个神经元的输出作为输入。

这看起来很棒,但实际上由于相同矩阵的一系列乘法运算,会造成梯度消失或梯度爆炸,使 RNN 几乎不能运作。为了解决这个问题,我们可以使用 RNN 的一个变种,长短时记忆(LSTM),它能够学习长期的依赖关系。

LSTM 背后的数学算法可能相当复杂,但直观上 LSTM 引入了输入门 - 输出门 - 遗忘门 - 记忆单元(内部状态)

LSTM 模仿人类的记忆过程:忘记旧的东西(旧的内部状态×遗忘门)并重新输入(输入节点×输入门)

word2vec
  • 浅层,双层神经网络,经过训练可以构建词语的语言上下文

  • 以一个大的语料库为输入,产生一个向量空间,一般为几百维,并且语料库中的每个单词指向空间中的一个向量

  • 关键的思想是上下文:经常出现在同一语境中的单词应该具有相同或相反的意义。

  • 两种风格

    • 连续词袋(CBOW):给定周围上下文单词的窗口,模型预测出当前单

    • skip gram:使用当前单词预测周围的上下文单词

生成与判别
  • 判别算法模型 p(y | x; w),即给定数据集和学习参数,得出 y 属于特定类的概率是多少。判别算法不关心数据是如何生成的,它只是对给定的样例进行分类

  • 生成算法尝试对 p(x | y)进行建模,即给定特征的类别,得出它的分布。生成算法模拟如何生成数据。

给定一个训练集,像逻辑回归或感知器这样的算法会试图找到一条直线,即决策边界,将大象和狗分开。然后,将新的动物分类为大象或狗,算法会检查样本在决策边界的哪一边,并据此做出预测。

下面是一种不同的方法。首先,看大象,我们可以建立一个大象看起来像什么的模型。然后,看着狗,我们可以建立一个狗的样子的单独模型。最后,为了对新动物进行分类,我们可以将新动物与大象模型进行匹配,并将其与狗模型进行匹配,看看新动物看起来更像大象还是更像我们在训练集中看到的狗。

参数与非参数
  • 用一组固定数量的参数(与训练样本的数量无关)对数据总结的学习模型称为参数模型。

  • 训练前未确定参数数量的模型。非参数并不意味着他们没有参数。相反,随着数据量的增加,非参数模型(可能)会变得越来越复杂。

以上是机器学习的不完全面试指南,也许跟你自己学习的方法和路线会有些许出入,不要担心,所有的方法都只是参考,真正适合你的,需要你自己去探索,资料求精不求多,存在脑子里面的叫知识,存在硬盘里的叫文档

希望你的职业生涯一片无悔,加油!

参考文章
  • https://github.com/ShuaiW/data-science-question-answer#data-science-question-answer

  • https://github.com/ShuaiW/data-science-question-answer#recommender-system

  • https://www.reddit.com/r/MachineLearning/comments/7w8e0j/d_how_to_prep_for_a_deep_learningmachine_learning/?st=jdi63nwq&sh=61447041

今日荐文

点击下方图片即可阅读

程序员增加收入实用指南




想了解 90% 机器学习面试内容?推荐你订阅《人工智能基础课》,涵盖数学基础、机器学习、深度学习、人工神经网络等 7 大模块重要知识点,让你在面试中有备无患。新注册用户,立减 30 元。


「阅读原文」,免费试读或订阅

 
InfoQ 更多文章 国产紫光DDR4内存模组已发布;B站再发声明否认脱库;Chrome 64将为用户移除跟踪代码,Google的跟踪除外丨 工学博士珍藏的人工智能进阶书单(附PDF链接) 春节假期技术圈都发生了哪些大新闻? 程序员增加收入实用指南 左耳朵耗子:分布式系统架构经典资料
猜您喜欢 [王牌联盟5周年庆] 王牌浏览器额外奖励10%、1元限时秒杀、50万积分送送送! 金融壹账通移动技术周报(第四十七期) 最短路径:Dijkstra 算法和 Floyd 算法 涨知识!遇到不会读的字,怎么用拼音打出来?转起让更多人会! 【第3章第357回】JavaScript 正则表达式的使用