跳槽季·机器学习面试不彻底指南

本文由 「AI前线」原创,原文连接: 跳槽季·机器学习面试不彻底指南
做者|Vincent
编辑|Emily

AI 前线导读:”春节就这么一眨眼过去了,眼看着就到了“金三银四”的跳槽黄金季节了,想必在去年饱经磨砺的你已经有了新的方向和目标,此时正在摩拳擦掌、蓄势待发,世界人工智能将来的发展重任眼看着就要落在了大家的肩上!可是!当大家凭借强大的简历经过了企业的筛选,来到面试环节,面对面试官那深邃而忧郁的目光,你可以招架几个回合?因此,咱们整理了一些机器学习面试前你须要准备的要点,供你参考,干货满满哟~”git


概述github

本文是机器学习面试不彻底指南,由于面试和经验这些东西也每每都是一家之言,可参考,但并不必定就彻底适合你。因此,咱们搜集了一些比较靠谱的经验,整合起来放送给你,但愿可以对你的职业生涯有所帮助。面试

一些善意的提醒算法

相信可以进入面试的朋友,简历必定是优中选优的,因此这部分咱们很少做赘述。可是,当面试官让你当面对简历中的项目经验进行描述的时候,请必定记住一条原则:编程

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

举个简单的例子:网络

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)进行建模,即给定特征的类别,得出它的分布。生成算法模拟如何生成数据。

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

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

参数与非参数

  • 用一组固定数量的参数(与训练样本的数量无关)对数据总结的学习模型称为参数模型。
  • 训练前未肯定参数数量的模型。非参数并不意味着他们没有参数。相反,随着数据量的增长,非参数模型(可能)会变得愈来愈复杂。

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

但愿你的职业生涯一片无悔,加油!

参考文章

github.com/ShuaiW/data…

github.com/ShuaiW/data…

www.reddit.com/r/MachineLe…

更多干货内容,可关注AI前线,ID:ai-front,后台回复「AI」、「TF」、「大数据」可得到《AI前线》系列PDF迷你书和技能图谱。

相关文章
相关标签/搜索