面试问题
什么是分层交叉验证以及我们何时应该使用它?
交叉验证是一种在训练集和验证集之间划分数据的技术。在典型的交叉验证中,这种分割是随机进行的。但在 分层 交叉验证时,分割保留了训练数据集和验证数据集上类别的比率。
例如,如果我们有一个包含 10% 的 A 类和 90% 的 B 类的数据集,并且我们使用分层交叉验证,那么我们在训练和验证中将具有相同的比例。相反,如果我们使用简单的交叉验证,在最坏的情况下我们可能会发现验证集中没有类别 A 的样本。
分层交叉验证可以应用于以下场景:
- 在具有多个类别的数据集上。 数据集越小,类别越不平衡,使用分层交叉验证就越重要。
- 在具有不同分布的数据的数据集上。 例如,在自动驾驶的数据集中,我们可能有白天和晚上拍摄的图像。如果我们不能确保这两种类型都出现在训练和验证中,我们就会遇到泛化问题。
为什么集成模型的得分通常高于单个模型?
集成是多个模型的组合以创建单个预测。做出更好预测的关键思想是模型应该犯不同的错误。这样,一个模型的错误将被其他模型的正确猜测所补偿,因此集成的分数将会更高。
我们需要多种模型来创建整体。多样性可以通过以下方式实现:
- 使用不同的机器学习算法。例如,您可以结合逻辑回归、k 最近邻和决策树。
- 使用不同的数据子集进行训练。这就是所谓的 套袋。
- 为训练集中的每个样本赋予不同的权重。如果迭代地完成此操作,根据集成的误差对样本进行加权,则称为 提升。
许多数据科学竞赛的获奖解决方案都是集成的。然而,在现实的机器学习项目中,工程师需要在执行时间和准确性之间找到平衡。
什么是正则化?您能举一些正则化技术的例子吗?
正则化是任何旨在提高验证分数的技术,有时会以降低训练分数为代价。
一些正则化技术:
- L1 尝试最小化模型参数的绝对值。它产生稀疏参数。
- L2 尝试最小化模型参数的平方值。它产生具有较小值的参数。
- 辍学 是一种应用于神经网络的技术,在训练期间随机将一些神经元的输出设置为零。这迫使网络通过防止神经元之间复杂的交互来学习更好的数据表示:每个神经元都需要学习有用的特征。
- 提前停止 当验证分数停止提高时,即使训练分数可能会提高,也会停止训练。这可以防止训练数据集的过度拟合。
申请加入 Toptal 的发展网络
什么是不平衡数据集?您能列出一些处理方法吗?
不平衡数据集是指目标类别比例不同的数据集。例如,我们必须检测某种疾病的医学图像数据集通常会包含比正样本更多的负样本,例如,98% 的图像没有疾病,2% 的图像有疾病。
有不同的选项来处理不平衡的数据集:
- 过采样或欠采样。 我们可以使用其他分布,而不是从训练数据集中使用均匀分布进行采样,以便模型看到更平衡的数据集。
- 数据增强。 我们可以通过以受控方式修改现有数据来添加不太常见的类别中的数据。在示例数据集中,我们可以翻转带有疾病的图像,或者向图像副本添加噪声,使疾病保持可见。
- 使用适当的指标。 在示例数据集中,如果我们有一个始终做出负面预测的模型,那么它将达到 98% 的精度。使用不平衡数据集时,还有其他指标(例如精度、召回率和 F 分数)可以更好地描述模型的准确性。
为什么我们需要验证集和测试集?它们之间有什么区别?
训练模型时,我们将可用数据分为三个独立的集合:
- 训练数据集用于拟合模型的参数。然而,我们在训练集上获得的准确性对于预测模型在新样本上是否准确并不可靠。
- 验证数据集用于衡量模型在不属于训练数据集的示例上的表现。根据验证数据计算的指标可用于调整模型的超参数。然而,每次我们评估验证数据并根据这些分数做出决策时,我们都会将验证数据中的信息泄漏到我们的模型中。评估越多,泄露的信息就越多。因此,我们最终可能会过度拟合验证数据,并且验证分数对于预测模型在现实世界中的行为来说再次不可靠。
- 测试数据集用于衡量模型在以前未见过的示例上的表现。仅当我们使用验证集调整参数后才应使用它。
因此,如果我们省略测试集而仅使用验证集,则验证分数将不能很好地估计模型的泛化能力。
您能解释一下监督学习、无监督学习和强化学习之间的区别吗?
在监督学习中,我们训练一个模型来学习输入数据和输出数据之间的关系。我们需要有标记的数据才能进行监督学习。
在无监督学习中,我们只有未标记的数据。该模型学习数据的表示。当我们有大量未标记数据和一小部分标记数据时,无监督学习经常用于初始化模型的参数。我们首先训练无监督模型,然后使用模型的权重来训练监督模型。
在强化学习中,模型有一些输入数据和取决于模型输出的奖励。该模型学习最大化奖励的策略。强化学习已成功应用于围棋等战略游戏,甚至经典的 Atari 视频游戏。
有哪些因素可以解释深度学习的成功和最近的兴起?
过去十年深度学习的成功可以用三个主要因素来解释:
- 更多数据。 大量标记数据集的可用性使我们能够训练具有更多参数的模型并获得最先进的分数。在数据集大小方面,其他机器学习算法的扩展性不如深度学习。
- 图形处理器。 与在 CPU 上训练相比,在 GPU 上训练模型可以将训练时间减少几个数量级。目前,尖端模型是在多个 GPU 甚至专用硬件上进行训练的。
- 算法的改进。 ReLU 激活、dropout 和复杂的网络架构也是非常重要的因素。
什么是数据增强?你能举一些例子吗?
数据增强是一种通过以不改变目标或以已知方式改变目标的方式修改现有数据来合成新数据的技术。
计算机视觉是数据增强非常有用的领域之一。我们可以对图像进行许多修改:
- 调整大小
- 水平或垂直翻转
- 旋转
- 添加噪音
- 变形
- 修改颜色
每个问题都需要定制的数据增强管道。例如,在 OCR 上,进行翻转会改变文本并且没有任何好处;然而,调整大小和小幅旋转可能会有所帮助。
什么是卷积网络?我们可以在哪里使用它们?
卷积网络是一类使用卷积层而不是全连接层的神经网络。在全连接层上,所有输出单元都具有连接到所有输入单元的权重。在卷积层上,我们有一些在输入上重复的权重。
卷积层相对于全连接层的优点是参数数量要少得多。这使得模型具有更好的泛化能力。例如,如果我们想要学习从 10x10 图像到另一个 10x10 图像的转换,如果使用全连接层,我们将需要 10,000 个参数。如果我们使用两个卷积层,第一个有 9 个滤波器,第二个有 1 个滤波器,内核大小为 3x3,我们将只有 90 个参数。
卷积网络适用于数据具有清晰维度结构的情况。时间序列分析是使用一维卷积的一个例子;对于图像,使用2D卷积;对于体积数据,使用 3D 卷积。
自 2012 年 AlexNet 赢得 ImageNet 挑战以来,计算机视觉一直由卷积网络主导。
什么是维度诅咒?您能列出一些处理方法吗?
维数灾难是指训练数据具有大量特征,但数据集没有足够的样本来让模型从如此多的特征中正确学习。例如,包含 100 个样本、100 个特征的训练数据集将很难学习,因为模型会发现特征和目标之间的随机关系。然而,如果我们有一个包含 100k 个样本和 100 个特征的数据集,模型可能可以学习特征和目标之间的正确关系。
有不同的选择可以对抗维度的诅咒:
- 特征选择。 我们可以训练较小的特征子集,而不是使用所有特征。
- 降维。 有许多技术可以减少特征的维数。主成分分析 (PCA) 和使用自动编码器是降维技术的示例。
- L1 正则化。 由于 L1 产生稀疏参数,因此有助于处理高维输入。
- 特征工程。 可以创建总结多个现有功能的新功能。例如,我们可以获得平均值或中位数等统计数据。
面试不仅仅是棘手的技术问题,因此这些内容仅供参考。并非每个值得雇用的“A”候选人都能回答所有问题,也不能保证回答所有问题。归根结底,招聘仍然是一门艺术、一门科学,而且涉及大量工作。