2023 年 65 道机器学习面试问题
机器学习和计算机视觉工程职位的技术面试问题集合。
1)偏差和方差之间的权衡是什么? [来源]
如果我们的模型太简单并且参数很少,那么它可能具有高偏差和低方差。另一方面,如果我们的模型有大量参数,那么它将具有高方差和低偏差。因此,我们需要找到正确/良好的平衡,而不会过度拟合和欠拟合数据。 [来源]
2)什么是梯度下降? [来源]
梯度下降是一种优化算法,用于查找使成本函数 (cost) 最小化的函数 (f) 的参数(系数)值。
当参数无法通过分析计算(例如使用线性代数)并且必须通过优化算法搜索时,最好使用梯度下降。
3)解释过拟合和欠拟合以及如何解决它们? [来源]
ML/DL 模型本质上是学习给定输入(称为训练特征)和目标输出(称为标签)之间的关系。无论学习的关系(函数)的质量如何,其在测试集(与训练输入不同的数据集合)上的性能都需要进行调查。
大多数 ML/DL 模型都有可训练的参数,可以通过学习这些参数来构建输入-输出关系。根据每个模型具有的参数数量,可以将它们分为更灵活(更多参数)到不太灵活(更少参数)。
当模型的灵活性(其参数数量)不足以捕获训练数据集中的潜在模式时,就会出现欠拟合问题。另一方面,当模型对于底层模式过于灵活时,就会出现过度拟合。在后一种情况下,据说模型已经“记住”了训练数据。
欠拟合的一个例子是用一阶多项式(一条简单的直线)估计二阶多项式(二次函数)。同样,用 10 阶多项式估计一条线也是过度拟合的一个例子。
4)如何对抗维度诅咒? [来源]
- 特征选择(手动或通过统计方法)
- 主成分分析(PCA)
- 多维尺度
- 局部线性嵌入
[来源]
5)什么是正则化,为什么使用它,并给出一些常用方法的例子? [来源]
一种不鼓励学习更复杂或更灵活的模型的技术,以避免过度拟合的风险。例子
- 岭(L2 范数)
- 套索(L1 规范)
显而易见的 坏处 的 岭 回归,是模型的可解释性。它将把最不重要的预测变量的系数缩小到非常接近于零。但它永远不会使它们完全为零。换句话说, 最终模型将包括所有预测变量。然而,在这种情况下 套索,L1 惩罚具有迫使某些系数估计为 完全相等 当调整参数 λ 足够大时,为零。因此,套索方法还执行变量选择,据说可以产生稀疏模型。 [来源]
6) 解释一下主成分分析(PCA)? [来源]
主成分分析 (PCA) 是机器学习中使用的一种降维技术,用于减少数据集中的特征数量,同时保留尽可能多的信息。它的工作原理是识别数据变化最大的方向(主要成分),并将数据沿着这些方向投影到较低维的子空间上。
7) 为什么 ReLU 在神经网络中比 Sigmoid 更好、更常用? [来源]
- 计算效率:由于 ReLU 是一个简单的阈值,因此前向和后向路径会更快。
- 梯度消失的可能性降低:ReLU 的梯度对于正值来说是 1,对于负值来说是 0,而 Sigmoid 激活会很快饱和(梯度接近 0),输入稍高或较低会导致梯度消失。
- 稀疏性:当 ReLU 的输入为负时,就会发生稀疏性。这意味着更少的神经元被激活(稀疏激活)并且网络更轻。
[来源1] [来源2]
8) 给定(一维)CNN 每层的步长 S 和内核大小,创建一个函数来计算网络中特定节点的感受野。这只是找出有多少输入节点实际连接到 CNN 中的神经元。 [来源]
感受野是输入中定义的空间部分,将在操作期间使用以生成输出。
考虑大小为 k 的 CNN 滤波器,特定层的感受野只是滤波器使用的输入数量(在本例中为 k)乘以未被卷积滤波器 a 减少的输入维度。这导致感受野为 k*a。
更直观地说,对于尺寸为 32x32x3 的图像,使用滤波器尺寸为 5x5 的 CNN,相应的感受野将是滤波器尺寸 5 乘以输入体积的深度(RGB 颜色),即颜色尺寸。因此,这给了我们一个尺寸为 5x5x3 的感受野。
9) 在图像/矩阵上实现连接组件。 [来源]
10) 用 C++ 实现稀疏矩阵类。 [来源]
11) 创建一个函数来计算积分图像,并创建另一个函数来从积分图像中获取面积和。[src]
12)当尝试从噪声样本中估计平面时,如何去除异常值? [来源]
随机样本共识 (RANSAC) 是一种迭代方法,用于根据一组包含异常值的观测数据来估计数学模型的参数,此时异常值不会对估计值产生影响。 [来源]
13) CBIR 如何运作? [来源]
[解答] 基于内容的图像检索是使用图像收集其内容元数据的概念。与当前基于与图像相关联的关键字的图像检索方法相比,该技术通过计算机视觉技术生成元数据以提取将在查询步骤中使用的相关信息。从检索关键字的特征检测到使用 CNN 提取与已知关键字分布相关的密集特征,可以采用多种方法。
使用最后一种方法,我们不太关心图像上显示的内容,而是更关心已知图像生成的元数据与投影到该元数据空间的已知标签和/或标签列表之间的相似性。
14) 图像配准如何工作?稀疏与密集光流等等。 [来源]
15)描述卷积如何工作。如果您的输入是灰度图像还是 RGB 图像呢?什么决定了下一层的形状?[src]
在卷积神经网络 (CNN) 中,使用称为内核或滤波器的小矩阵将卷积运算应用于输入图像。内核以小步长(称为步幅)在图像上滑动,并与图像的相应元素执行逐元素乘法,然后对结果求和。此操作的输出称为特征图。
当输入是 RGB(或超过 3 个通道)时,滑动窗口将是一个滑动立方体。下一层的形状由内核大小、内核数量、步幅、填充和拨号决定。
16) 告诉我如何根据在物体周围各个角度进行的图像和深度传感器测量来创建物体的 3D 模型。 [来源]
3D 重建有两种流行的方法:
SfM更适合创建大场景的模型,而MVS更适合创建小物体的模型。
17) 实现 SQRT(const double & x) 而不使用任何特殊函数,仅使用基本算术。 [来源]
泰勒级数可用于此步骤,提供 sqrt(x) 的近似值:
18) 反转位串。 [来源]
如果您使用的是 python3 :
19) 尽可能有效地实施非极大值抑制。 [来源]
非极大值抑制 (NMS) 是一种用于消除给定图像中同一对象的多次检测的技术。为了解决这个问题,首先根据分数(N LogN)对边界框进行排序。从得分最高的框开始,删除重叠度量(IoU)大于某个阈值的框。(N^2)
要优化此解决方案,您可以使用特殊的数据结构来查询重叠框,例如 R 树或 KD 树。 (N LogN) [来源]
20) 就地反转链表。 [来源]
21)什么是数据标准化以及为什么我们需要它? [来源]
数据归一化是非常重要的预处理步骤,用于重新调整值以适应特定范围,以确保反向传播期间更好的收敛。一般来说,它可以归结为减去每个数据点的平均值并除以其标准差。如果我们不这样做,那么一些特征(那些具有高幅度的特征)将在成本函数中获得更大的权重(如果较高幅度的特征改变 1%,那么这种变化是相当大的,但对于较小的特征来说,它是相当微不足道)。数据标准化使所有特征的权重相等。
22)为什么我们对图像使用卷积而不仅仅是 FC 层? [来源]
首先,卷积保留、编码并实际使用图像中的空间信息。如果我们只使用 FC 层,我们将没有相对空间信息。其次,卷积神经网络 (CNN) 具有部分内置的平移不变性,因为每个卷积核都充当其自己的滤波器/特征检测器。
23)是什么让 CNN 具有平移不变性? [来源]
如上所述,每个卷积核充当它自己的滤波器/特征检测器。假设您正在进行对象检测,对象位于图像中的哪个位置并不重要,因为无论如何我们都会以滑动窗口的方式在整个图像上应用卷积。
24)为什么分类 CNN 中有最大池化? [来源]
担任计算机视觉领域的职位。 CNN 中的最大池化可以减少计算量,因为池化后的特征图会更小。由于您采用的是最大激活,因此您不会丢失太多语义信息。还有一种理论认为,最大池化有助于为 CNN 提供更多平移不变性。观看 Andrew Ng 的这段精彩视频,了解最大池化的好处。
25)为什么分割 CNN 通常具有编码器-解码器风格/结构? [来源]
编码器 CNN 基本上可以被认为是特征提取网络,而解码器则使用该信息通过“解码”特征并放大到原始图像大小来预测图像片段。
26)残差网络的意义是什么? [来源]
残差连接的主要作用是允许从之前的层直接访问特征。这使得信息在整个网络中的传播变得更加容易。关于此的一篇非常有趣的论文展示了如何使用本地跳跃连接为网络提供一种集成多路径结构,从而为特征提供多条路径来在整个网络中传播。
27)什么是批量归一化以及它为何有效? [来源]
训练深度神经网络很复杂,因为在训练过程中,随着前一层参数的变化,每层输入的分布也会发生变化。然后,我们的想法是对每一层的输入进行标准化,使它们的平均输出激活为零,标准差为一。这是针对每一层的每个单独的小批量完成的,即单独计算该小批量的均值和方差,然后进行归一化。这类似于网络输入的标准化方式。这有什么帮助?我们知道,标准化网络输入有助于它学习。但网络只是一系列层,其中一层的输出成为下一层的输入。这意味着我们可以将神经网络中的任何层视为较小的后续网络的第一层。被认为是一系列相互馈送的神经网络,我们在应用激活函数之前对一层的输出进行归一化,然后将其馈送到下一层(子网络)。
28)为什么要使用许多小的卷积核(例如 3x3)而不是一些大的卷积核? [来源]
VGGNet 论文对此进行了很好的解释。原因有两个:首先,您可以使用几个较小的内核而不是几个大的内核来获得相同的感受野并捕获更多的空间上下文,但使用较小的内核,您使用的参数和计算更少。其次,因为使用更小的内核,您将使用更多的过滤器,您将能够使用更多的激活函数,从而让 CNN 学习到更具辨别力的映射函数。
29)为什么我们需要验证集和测试集?它们之间有什么区别? [来源]
训练模型时,我们将可用数据分为三个独立的集合:
- 训练数据集用于拟合模型的参数。然而,我们在训练集上获得的准确性对于预测模型在新样本上是否准确并不可靠。
- 验证数据集用于衡量模型在不属于训练数据集的示例上的表现。根据验证数据计算的指标可用于调整模型的超参数。然而,每次我们评估验证数据并根据这些分数做出决策时,我们都会将验证数据中的信息泄漏到我们的模型中。评估越多,泄露的信息就越多。因此,我们最终可能会过度拟合验证数据,并且验证分数对于预测模型在现实世界中的行为来说再次不可靠。
- 测试数据集用于衡量模型在以前未见过的示例上的表现。仅当我们使用验证集调整参数后才应使用它。
因此,如果我们省略测试集而仅使用验证集,则验证分数将不能很好地估计模型的泛化能力。
30)什么是分层交叉验证以及我们什么时候应该使用它? [来源]
交叉验证是一种在训练集和验证集之间划分数据的技术。在典型的交叉验证中,这种分割是随机进行的。但在分层交叉验证中,分割保留了训练数据集和验证数据集上类别的比率。
例如,如果我们有一个包含 10% 的 A 类和 90% 的 B 类的数据集,并且我们使用分层交叉验证,那么我们在训练和验证中将具有相同的比例。相反,如果我们使用简单的交叉验证,在最坏的情况下我们可能会发现验证集中没有类别 A 的样本。
分层交叉验证可以应用于以下场景:
- 在具有多个类别的数据集上。数据集越小,类别越不平衡,使用分层交叉验证就越重要。
- 在具有不同分布的数据的数据集上。例如,在自动驾驶的数据集中,我们可能有白天和晚上拍摄的图像。如果我们不能确保这两种类型都出现在训练和验证中,我们就会遇到泛化问题。
31)为什么集成模型的得分通常高于单个模型? [来源]
集成是多个模型的组合以创建单个预测。做出更好预测的关键思想是模型应该犯不同的错误。这样,一个模型的错误将被其他模型的正确猜测所补偿,因此集成的分数将会更高。
我们需要多种模型来创建整体。多样性可以通过以下方式实现:
- 使用不同的机器学习算法。例如,您可以结合逻辑回归、k 最近邻和决策树。
- 使用不同的数据子集进行训练。这称为套袋。
- 为训练集中的每个样本赋予不同的权重。如果迭代地完成此操作,根据集成的误差对样本进行加权,则称为增强。许多数据科学竞赛的获奖解决方案都是集成的。然而,在现实的机器学习项目中,工程师需要在执行时间和准确性之间找到平衡。
32)什么是不平衡数据集?您能列出一些处理方法吗? [来源]
不平衡数据集是指目标类别比例不同的数据集。例如,我们必须检测某种疾病的医学图像数据集通常会包含比正样本更多的负样本,例如,98% 的图像没有疾病,2% 的图像有疾病。
有不同的选项来处理不平衡的数据集:
- 过采样或欠采样。我们可以使用其他分布,而不是从训练数据集中使用均匀分布进行采样,以便模型看到更平衡的数据集。
- 数据增强。我们可以通过以受控方式修改现有数据来添加不太常见的类别中的数据。在示例数据集中,我们可以翻转带有疾病的图像,或者向图像副本添加噪声,使疾病保持可见。
- 使用适当的指标。在示例数据集中,如果我们有一个始终做出负面预测的模型,那么它将达到 98% 的精度。使用不平衡数据集时,还有其他指标(例如精度、召回率和 F 分数)可以更好地描述模型的准确性。
33)你能解释一下监督学习、无监督学习和强化学习之间的区别吗? [来源]
在监督学习中,我们训练一个模型来学习输入数据和输出数据之间的关系。我们需要有标记的数据才能进行监督学习。
在无监督学习中,我们只有未标记的数据。该模型学习数据的表示。当我们有大量未标记数据和一小部分标记数据时,无监督学习经常用于初始化模型的参数。我们首先训练无监督模型,然后使用模型的权重来训练监督模型。
在强化学习中,模型有一些输入数据和取决于模型输出的奖励。该模型学习最大化奖励的策略。强化学习已成功应用于围棋等战略游戏,甚至经典的 Atari 视频游戏。
34)什么是数据增强?你能举一些例子吗? [来源]
数据增强是一种通过以不改变目标或以已知方式改变目标的方式修改现有数据来合成新数据的技术。
计算机视觉是数据增强非常有用的领域之一。我们可以对图像进行许多修改:
- 调整大小
- 水平或垂直翻转
- 旋转
- 添加噪音
- 变形
- 修改颜色每个问题都需要定制的数据增强管道。例如,在 OCR 上,进行翻转会改变文本并且没有任何好处;然而,调整大小和小幅旋转可能会有所帮助。
35)什么是图灵测试? [来源]
图灵测试是一种测试机器是否能够与人类水平智能相匹配的方法。机器是用来挑战人类智力的,当它通过测试时,就被认为是有智能的。然而,即使机器没有充分了解人类来模仿人类,也可以被视为智能机器。
36) 什么是精度?
精度(也称为阳性预测值)是检索到的实例中相关实例的比例
精度 = 真阳性 /(真阳性 + 假阳性)
[来源]
37) 什么是召回率?
召回率(也称为敏感性)是已检索到的相关实例占相关实例总数的比例。召回率=真阳性/(真阳性+假阴性)
[来源]
38) 定义 F1 分数。 [来源]
它是精确率和召回率的加权平均值。它同时考虑假阳性和假阴性。它用于衡量模型的性能。
F1-Score = 2 *(精度 * 召回率)/(精度 + 召回率)
39)什么是成本函数? [来源]
成本函数是一个标量函数,它量化神经网络的误差因子。降低神经网络的成本函数效果更好。例如:MNIST数据集对图像进行分类,输入图像是数字2,神经网络错误地预测为3
40) 列出不同的激活神经元或功能。 [来源]
- 线性神经元
- 二元阈值神经元
- 随机二元神经元
- 乙状神经元
- tanh函数
- 修正线性单元 (ReLU)
41) 定义学习率。
学习率是一个超参数,它控制我们根据损失梯度调整网络权重的程度。 [来源]
42) 什么是动量(关于神经网络优化)?
动量让优化算法记住其最后一步,并将其中的一部分添加到当前步骤中。这样,即使算法陷入平坦区域或小的局部最小值,它也可以摆脱并继续接近真正的最小值。 [来源]
43)批量梯度下降和随机梯度下降有什么区别?
批量梯度下降使用整个数据集计算梯度。这对于凸的或相对平滑的误差流形来说非常有用。在这种情况下,我们会直接转向局部或全局的最佳解决方案。此外,在给定退火学习率的情况下,批量梯度下降最终将找到位于其吸引力盆地中的最小值。
随机梯度下降 (SGD) 使用单个样本计算梯度。对于具有大量局部最大值/最小值的误差流形,SGD 效果很好(我认为不是很好,但比批量梯度下降更好)。在这种情况下,使用减少的样本数量计算出的噪声较大的梯度往往会将模型从局部最小值拉到一个有望更优化的区域。 [来源]
44) Epoch vs. Batch vs. Iteration。
- 时代: 1 次前向传播和 1 次后向传播 全部 训练实例
- 批:一次性处理的示例(向前和向后)
- 迭代:训练样本数/批量大小
45)什么是梯度消失? [来源]
随着我们添加越来越多的隐藏层,反向传播在将信息传递到较低层时变得越来越无用。实际上,随着信息传回,梯度开始消失并相对于网络权重变小。
46) 什么是辍学? [来源]
Dropout 是防止神经网络过度拟合的简单方法。这是神经网络中某些单元的丢失。它类似于自然繁殖过程,大自然通过组合不同的基因(剔除其他基因)而不是加强它们的共同适应来产生后代。
47) 定义 LSTM。 [来源]
长短期记忆——明确设计用于通过维持记住什么和忘记什么的状态来解决长期依赖问题。
48) 列出 LSTM 的关键组件。 [来源]
- 门(忘记、记忆、更新和读取)
- tanh(x)(-1 到 1 之间的值)
- Sigmoid(x)(0 到 1 之间的值)
49) 列出 RNN 的变体。 [来源]
- LSTM:长短期记忆
- GRU:门控循环单元
- 端到端网络
- 记忆网络
50) 什么是自动编码器,仅举几个应用程序。 [来源]
自动编码器基本上用于学习给定数据的压缩形式。很少有应用程序包括
- 数据去噪
- 降维
- 影像重建
- 图像着色
51)GAN 的组成部分是什么? [来源]
- 发电机
- 鉴别器
52) boosting 和 bagging 有什么区别?
Boosting 和 bagging 很相似,因为它们都是集成技术,其中许多弱学习器(仅比猜测好一点的分类器/回归器)组合(通过平均或最大投票)创建一个可以做出准确预测的强学习器。装袋意味着您采用数据集的引导样本(带替换),并且每个样本训练一个(可能)弱学习器。另一方面,Boosting 使用所有数据来训练每个学习器,但之前的学习器错误分类的实例会被赋予更多权重,以便后续学习器在训练过程中更加关注它们。 [来源]
53) 解释 ROC 曲线如何工作。 [来源]
ROC曲线是不同阈值下真阳性率和假阳性率之间对比的图形表示。它通常用作模型敏感性(真阳性)与后果或触发误报(误报)的概率之间的权衡。
54) I 类错误和 II 类错误有什么区别? [来源]
I 类错误是误报,而 II 类错误是误报。简而言之,第一类错误是指声称某件事发生了,而实际上并没有发生,而第二类错误是指你声称什么都没有发生,而实际上某件事发生了。思考这个问题的一个聪明方法是将第一类错误视为告诉男性他怀孕了,而第二类错误则意味着你告诉孕妇她没有怀孕。
55)生成模型和判别模型有什么区别? [来源]
生成模型将学习数据类别,而判别模型将简单地学习不同类别数据之间的区别。在分类任务上,判别模型通常会优于生成模型。
56) 基于实例的学习与基于模型的学习。
-
基于实例的学习:系统记住示例,然后使用相似性度量推广到新案例。
-
基于模型的学习:从一组示例进行概括的另一种方法是构建这些示例的模型,然后使用该模型进行预测。这称为基于模型的学习。 [来源]
57) 何时使用标签编码与单热编码?
这个问题通常取决于您的数据集和您希望应用的模型。但是,在为您的模型选择正确的编码技术之前,仍然需要注意以下几点:
我们在以下情况下应用 One-Hot 编码:
- 分类特征不是有序的(如上面的国家/地区)
- 分类特征数量较少,因此可以有效地应用one-hot编码
我们在以下情况下应用标签编码:
- 分类特征是序数(如 Jr. kg、Sr. kg、小学、高中)
- 类别数量较多,one-hot 编码会导致内存消耗较高
58)LDA和PCA在降维方面有什么区别?
LDA 和 PCA 都是线性变换技术:LDA 是有监督的,而 PCA 是无监督的——PCA 忽略类标签。
我们可以将 PCA 想象成一种寻找最大方差方向的技术。与 PCA 相比,LDA 试图找到一个最大化类可分离性的特征子空间。
59) 什么是 t-SNE?
t-分布式随机邻域嵌入 (t-SNE) 是一种无监督的非线性技术,主要用于数据探索和高维数据可视化。简单来说,t-SNE 让您感受到或直观地了解数据在高维空间中的排列方式。
60)t-SNE 和 PCA 在降维方面有什么区别?
首先要注意的是,PCA 于 1933 年开发,而 t-SNE 于 2008 年开发。自 1933 年以来,数据科学领域发生了很多变化,主要是在计算和数据大小领域。其次,PCA 是一种线性降维技术,旨在最大化方差并保留较大的成对距离。换句话说,不同的事物最终会相距甚远。这可能会导致可视化效果不佳,尤其是在处理非线性流形结构时。将流形结构视为任何几何形状,例如:圆柱体、球体、曲线等。
t-SNE 与 PCA 的不同之处在于仅保留较小的成对距离或局部相似性,而 PCA 则关注于保留较大的成对距离以最大化方差。
61) 什么是 UMAP?
UMAP(统一流形逼近和投影)是一种新颖的降维流形学习技术。 UMAP 是根据黎曼几何和代数拓扑的理论框架构建的。结果是一种适用于现实世界数据的实用可扩展算法。
62)t-SNE 和 UMAP 在降维方面有什么区别?
与 t-SNE 相比,UMAP 输出之间的最大区别在于局部结构和全局结构之间的平衡 - UMAP 通常更擅长在最终投影中保留全局结构。这意味着簇间关系可能比 t-SNE 中更有意义。然而,值得注意的是,由于 UMAP 和 t-SNE 在投影到较低维度时都必然会扭曲数据的高维形状,因此较低维度中的任何给定轴或距离仍然无法以技术方式直接解释例如PCA。
63) 随机数生成器如何工作,例如python 中的 rand() 函数有效吗?
它根据种子生成伪随机数,并且有一些著名的算法,请参阅下面的链接以获取有关此内容的更多信息。 [来源]
64) 鉴于我们想要评估“n”个不同机器学习模型在相同数据上的性能,为什么以下分割机制是不正确的:
rand() 函数每次运行时对数据的排序都不同,因此如果我们再次运行拆分机制,我们得到的 80% 的行将与第一次运行时得到的行不同。这就提出了一个问题,因为我们需要在同一测试集上比较模型的性能。为了确保可重复且一致的采样,我们必须提前设置随机种子或在分割后存储数据。或者,我们可以简单地在 sklearn 的 train_test_split() 函数中设置“random_state”参数,以便在不同的执行中获得相同的训练集、验证集和测试集。
65)贝叶斯统计与频率统计有什么区别? [来源]
频率统计是一个专注于使用样本统计估计总体参数并提供点估计和置信区间的框架。
另一方面,贝叶斯统计是一个框架,它使用先验知识和信息来更新有关参数或假设的信念,并提供参数的概率分布。
主要区别在于,贝叶斯统计将先验知识和信念纳入分析中,而频率统计则不然。
贡献
我们非常欢迎您的贡献。
- 分叉存储库。
- 提交你的 问题 或者 答案。
- 打开 拉取请求。