亲历亚马逊、华为机器学习面试,原来考官想听到这些回答

亲历亚马逊、华为机器学习面试,原来考官想听到这些回答

George Seif 在过去面试了很多科技巨头公司,主要目标是数据科学和机器学习相关的职位。“可怕的机器学习面试啊,你觉得你知道一切,直到你被面试官问得目瞪口呆!但其实,你可以做得更好。”在经过一轮又一轮面试之后,他发出了这样的感叹。在这篇文章里,他不仅分享了在面试过程中被问到的面试题,还为读者提供了解答的思路,给出面试官想要听到的答案,希望能够帮助其他同样渴望拿到梦想中的工作的人顺利拿到 offer。

在过去的几个月里,我参加了很多公司的面试,主要是针对数据科学和机器学习的入门级职位。我是一名机器学习和计算机视觉硕士研究生,再过几个月就要毕业了。我以前的大部分经验都是与学术研究有关,也曾在一家初创公司(与机器学习无关)呆过 8 个月。我所面试的这些职位所涉及的工作包括数据科学、通用机器学习以及自然语言处理或计算机视觉。我面试了亚马逊、特斯拉、三星、Uber、华为等大公司,但也有很多创业公司,它们从早期阶段到成熟阶段,有些已经获得融资。

我将与大家分享我被问过的面试题,以及我是如何回答这些问题的。有些问题很常见,也有一些问题很新奇。我将简单列出那些常见的问题,因为在网上可以找到很多相关资源,同时深入地介绍那些不那么常见但却很棘手的问题。我希望在阅读完这篇文章之后,你可以在机器学习面试中取得优异成绩,并得到理想的工作!

  •  偏差和方差之间存在怎样的权衡?
  • 什么是梯度下降?

  • 解释什么是过拟合和欠拟合,以及如何对抗它们?

  • 如何对抗维度诅咒?

  • 什么是正规化,我们为什么要使用它,并提供一些常用方法的例子?

  • 解释什么是主成分分析(PCA)?

  • 在神经网络中,为什么 ReLU 比 Sigmoid 更好、更经常被用到?

  • 什么是数据规范化以及我们为什么需要它? 我觉得这个问题需要特别强调一下。数据规范化是非常重要的预处理步骤,用于重新调整数值的范围,以确保在反向传播期间具有更好的收敛。通常的做法是减去每个数据点的平均值并除以标准偏差。如果我们不这样做,那么一些特征(具有高幅度的特征)将在成本函数中得到更多的加权(如果高幅度的特征变化 1%,实际上变化是相当大的,但对于较小的特征效果就没有那么明显)。数据规范化可以让所有特征均等加权。请解释什么是降维,在哪些地方会用到位置,以及它的好处是什么?降维是通过获得一组重要特征的主要变量来减少特征变量数量的过程。特征的重要性取决于特征变量对数据信息的贡献程度,以及你所使用的技术。而决定使用哪种技术取决于反复的试验和个人偏好。通常是从线性技术开始,然后转向非线性技术。数据集降维的好处是:(1)减少所需的存储空间(2)加速计算(例如在机器学习算法中),更少的维度意味着更少的计算,更少的维度允许使用不适用于高维度的算法(3)删除冗余特征,例如以平方米和平方英里存储地形大小没有任何意义(可能数据收集存在缺陷)(4)将数据维度减少到 2D 或 3D,这样我们就可以绘制和可视化它们,从而获得更多见解(5)太多的特征或太复杂的模型可能导致过拟合。

  • 如何处理数据集中丢失或损坏的数据? 你可以在数据集中找到丢失或损坏的数据,并删除这些行或列,或者用其他值替换它们。pandas 提供了两个非常有用的方法:isnull() 和 dropna(),它们可以帮助你找到丢失或损坏数据的数据列,并删除这些值。如果要使用占位符值(例如 0)来填充无效值,可以使用 fillna() 方法。

  • 你是如何进行探索性数据分析(EDA)的?EDA 的目标是在应用预测模型之前从数据中收集一些见解。基本上,你应该以从粗略到精细的方式进行 EDA。我们从获得一些高级别的全局见解开始,然后检查一些不平衡的类和每个类的均值和方差。检查前几行,了解它们是关于什么的。运行 pandas 的 df.info() 来检查哪些特征是连续的、分类的以及它们的类型(int、float、string)。接下来,删除在分析和预测中用不到的列。这些列可能看起来就是毫无用处的,它们要么具有相同的值(即不会给我们提供太多的信息),要么缺少值。我们还可以使用最常见的值或中位数来填充缺失值。然后,我们可以开始进行一些基本的可视化。先从高级别的东西开始。对于已经分类的且具有少量组的特征,可以为它们绘制条形图。找出最“一般的特征”,为这些特征单独进行可视化,尝试从中获得一些基本见解。现在我们可以开始更具体的可视化了。在特征之间创建可视化,一次两个或三个。特征之间是如何相互关联的?你还可以通过 PCA 来找出哪些特征包含最多信息。将一些特征组合在一起,以查看它们之间的关系。例如,当 A=0 且 B=0 时,类会发生什么?A=1 和 B=0 呢?比较不同的特征。例如,如果特征 A 可以是“女性”或“男性”,那么我们就可以绘制出特征 A 对应的桶,看看男性和女性是否处于不同的桶中。除了条形图、散点图和其他基本图之外,我们还可以绘制 PDF/CDF 和叠加图等。查看一些统计信息,如分布、p 值等。最后是构建 ML 模型的时候了。先从朴素贝叶斯和线性回归这些简单的东西开始。如果你发现这些行不通,或者数据是高度非线性的,就要使用多项式回归、决策树或 SVM。可以根据 EDA 的重要性选择特征。如果你有大量数据,可以使用神经网络。

  • 在处理图像时,为什么使用卷积而不仅仅是 FC 层? 这个问题非常有趣,因为公司通常不会问这样的问题。正如你所料,一家专注于计算机视觉的公司问了这个问题。这个问题的答案由两部分组成。首先,卷积保留、编码并实际使用图像的空间信息。如果我们只使用 FC 层,就没有相关的空间信息。其次,卷积神经网络(CNN)提供了部分内置的平移方差,因为每个卷积核都相当于自己的过滤器和特征检测器。
  • 是什么让 CNN 具备平移不变性? 如上所述,每个卷积核都是自己的过滤器和特征检测器。因此,假设你正在进行对象检测,对象在图像中的位置并不重要,因为我们将以滑动窗口的方式在整个图像上应用卷积。

  • 为什么我们在分类 CNN 中有最大池化(max-pooling)? 这也是我在面试一个计算机视觉相关职位是被问到的一个问题。CNN 中的最大池化可以减少计算,因为在池化后,特征图变得更小了。因为你正在进行最大程度的激活,所以不会丢失太多的语义信息。还有一种理论认为,最大池化有助于为 CNN 提供更多的方差平移。

  • 为什么分段 CNN 通常具有编码器和解码器结构? 编码器 CNN 基本上可以被认为是特征提取网络,而解码器使用这些信息来预测图像片段(通过“解码”特征并放大到原始图像大小)。

  • 残差网络有什么意义? 残差连接的主要作用是允许从前层直接访问特征,这让信息在整个网络中传播变得更加容易。

  • 什么是批量标准化?为什么它能够奏效? 训练深度神经网络是很复杂的,因为在训练期间,随着前一层的参数发生变化,每层的输入分布都会发生变化。然后,我们的想法是标准化每层的输入,使得它们的平均输出激活为零,标准偏差为 1。这是针对每一层的每个小批量进行的,即仅计算该小批量的均值和方差,然后进行标准化。这有点类似于网络输入的标准化。这有什么用?我们知道,规范化网络输入有助于它学习。但网络只是一系列层,一个层的输出成为下一层的输入。这意味着我们可以将神经网络中的任何一个层视为后续子网络的第一个层。我们将其视为一系列相互 feed 的神经网络,我们在应用激活函数之前规范化一个层的输出,然后将其 feed 到后面的层(子网络)。

  • 为什么要使用很多小的卷积核,比如 3x3,而不是更大的卷积核?VGGNet 论文(https://arxiv.org/pdf/1409.1556.pdf) 对此做了很好的解释。有两个原因:首先,你可以使用几个较小的卷积核来获取相同的感知字段并捕获更多的空间上下文,使用较小的卷积核意味着较少的参数和计算。其次,因为对于较小的卷积核,你需要使用更多的过滤器,这样就能够使用更多的激活函数,你的 CNN 就可以学习更具辨别力的映射函数。

  • 你有其他与这个职位相关的项目经验吗? 这个时候,你需要强调你的研究方向与应聘公司业务之间的联系。你是否做过一些事情或学到过一些技能与他们的业务或你申请的职位有关?不一定要 100%匹配,只要有一定联系就可以了,这样可以证明你将能够直接为他们带来价值。

相关推荐