65个机器学习面试问题助您备战2024年技术面试
MLQuestions项目收录65个机器学习和计算机视觉工程师技术面试问题。涵盖偏差-方差权衡、卷积神经网络等主题,并新增自然语言处理问题。提供在线课程和推荐书籍等准备资源。问题内容包括机器学习基础、深度学习技术和计算机视觉算法,适合求职者全面备战2024年技术面试。
机器学习和计算机视觉工程职位的技术面试问题集合。
如果我们的模型过于简单,参数很少,那么它可能会有高偏差和低方差。另一方面,如果我们的模型有大量参数,那么它会有高方差和低偏差。因此,我们需要在不过拟合和欠拟合数据的情况下找到正确/良好的平衡。
梯度下降是一种优化算法,用于找到使成本函数(cost)最小化的函数(f)参数(系数)的值。
当参数无法通过分析方法(如线性代数)计算,必须通过优化算法搜索时,梯度下降最为适用。
机器学习/深度学习模型本质上是学习给定输入(称为训练特征)和目标输出(称为标签)之间的关系。无论学习到的关系(函数)质量如何,其在测试集(不同于训练输入的数据集合)上的表现都需要进行调查。
大多数机器学习/深度学习模型都有可训练参数,这些参数将被学习以建立输入-输出关系。根据每个模型的参数数量,可以将它们从更灵活(参数更多)到更不灵活(参数更少)进行排序。
当模型的灵活性(其参数数量)不足以捕捉训练数据集中的潜在模式时,就会出现欠拟合问题。另一方面,当模型对潜在模式过于灵活时,就会出现过拟合问题。在后一种情况下,人们说模型"记住了"训练数据。
欠拟合的一个例子是用一阶多项式(简单直线)来估计二阶多项式(二次函数)。同样,用10阶多项式来估计直线将是过拟合的一个例子。
正则化是一种抑制学习更复杂或灵活模型的技术,以避免过拟合的风险。 例子:
主成分分析(PCA)是机器学习中用于降低数据集特征数量同时保留尽可能多信息的降维技术。它通过识别数据变化最大的方向(主成分),并将数据沿这些方向投影到低维子空间来实现。
感受野是输入中用于生成输出的操作过程中定义的空间部分。
考虑大小为k的CNN滤波器,特定层的感受野只是滤波器使用的输入数量,在这种情况下为k,乘以不被卷积滤波器减少的输入维度a。这导致感受野为k*a。
更直观地说,在32x32x3大小的图像的情况下,使用5x5滤波器的CNN,相应的感受野将是滤波器大小5乘以输入体积的深度(RGB颜色),即颜色维度。这样就得到了5x5x3维的感受野。
随机样本一致性(RANSAC)是一种迭代方法,用于从包含异常值的观测数据集中估计数学模型的参数,其中异常值不会对估计值产生影响。
基于内容的图像检索是使用图像来收集其内容元数据的概念。与当前基于图像关联关键词的检索方法相比,此技术通过计算机视觉技术生成元数据,提取在查询步骤中使用的相关信息。有多种可能的方法,从特征检测以检索关键词,到使用CNN提取密集特征,这些特征将与已知的关键词分布相 关联。
使用后一种方法时,我们不太关注图像上显示的内容,而更关注已知图像生成的元数据与已知标签和/或标签列表在这个元数据空间中投影的相似性。
在卷积神经网络(CNN)中,卷积操作通过一个称为核或滤波器的小矩阵应用于输入图像。核以小步长(称为步幅)在图像上滑动,与图像的相应元素进行逐元素乘法,然后求和结果。这个操作的输出称为特征图。
当输入是RGB(或超过3个通道)时,滑动窗口将是一个滑动立方体。下一层的形状由核大小、核数量、步幅、填充和扩张决定。
有两种流行的3D重建方法:
SfM更适合创建大型场景的模型,而MVS更适合创建小物体的模型。
可以使用泰勒级数来近似sqrt(x):
如果你使用Python 3:
data = b'\xAD\xDE\xDE\xC0'
my_data = bytearray(data)
my_data.reverse()
非极大值抑制(NMS)是一种用于消除给定图像中同一物体多次检测的技术。 为了解决这个问题,首先根据边界框的分数进行排序(N LogN)。从分数最高的框开始,移除重叠度量(IoU)大于某个阈值的框(N^2)。
为了优化这个解决方案,你可以使用特殊的数据结构(如R树或KD树)来查询重叠的框(N LogN)。
数据归一化是一个非常重要的预处理步骤,用于将值重新缩放到特定范围内,以确保在反向传播期间更好的收敛。通常,它归结为减去每个数据点的均值并除以其标准差。如果我们不这样做,那么一些特征(那些具有高幅度的特征)在代价函数中的权重会更大(如果一个高幅度特征变化1%,那么这个变化是相当大的,但对于较小的特征来说,这种变化并不显著)。数据归一化使所有特征的权重相等。
首先,卷积保留、编码并实际使用图像的空间信息。如果我们只使用全连接层,我们就没有相对空间信息。其次,卷积神经网络(CNN)具有部分内置的平移不变性,因为每个卷积核都作为其自身的滤波器/特征检测器。
如上所述,每个卷积核都作为其自身的滤波器/特征检测器。所以假设你在做物体检测,物体在图像中的位置并不重要,因为我们无论如何都会以滑动窗口的方式在整个图像上应用卷积。
最大池化使你能够减少计算量,因为池化后的特征图更小。你不会损失太多语义信息,因为你取的是最大激活值。还有一种理论认为,最大池化在一定程度上为CNN提供了更多的平移不变性。
编码器CNN基本上可以被认为是一个特征提取网络,而解码器使用这些信息通过"解码"特征并上采样到原始图像大小来预测图像分割。
残差连接的主要作用是允许直接访问前面层的特征。这使得信息在整个网络中的传播变得更加容易。一篇非常有趣的论文展示了使用局部跳跃连接如何给网络一种集成多路径结构,为特征提供多条路径在整个网络中传播。
训练深度神经网络的复杂性在于,由于前层参数的变化,每一层输入的分布在训练过程中会发生变化。因此,我们的想法是将每一层的输入归一化,使其具有零均值和单位标准差的输出激活。这是对每个层的每个小批量单独进行的,即计算该小批量的均值和方差,然后进行归一化。这类似于网络输入的标准化方式。这有什么帮助?我们知道规范化网络的输入有助于学习。但网络只是一系列层,其中一层的输出成为下一层的输入。这意味着我们可以将神经网络中的任何层视为较小的后续网络的第一层。从一系列相互馈送的神经网络的角度来看,我们在应用激活函数之前对一层的输出进行归一化,然后将其输入到下一层(子网络)。
这在VGGNet论文中有很好的解释。有两个原因:首先,你可以使用几个小核而不是几个大核来获得相同的感受野并捕获更多的空间上下文,但使用小核时使用的参数和计算量更少。其次,因为使用小核时你将使用更多的滤波器,你将能够使用更多的激活函数,从而学习到更具辨别性的映射函数。
在训练模型时,我们将可用数据分为三个独立的集合:
因此,如果我们省略测试集而只使用验证集,验证分数将不能很好地估计模型的泛化能力。
交叉验证是一种在训练集和验证集之间划分数据的技术。在典型的交叉验证中,这种划分是随机进行的。但在分层交叉验证中,划分保持了训练集和验证集中类别的比例。
例如,如果我们有一个数据集,其中A类占10%,B类占90%,并且我们使用分层交叉验证,我们将在训练集和验证集中保持相同的比例。相比之下,如果我们使用简单的交叉验证,在最坏的情况下,我们可能会发现验证集中没有A类的样本。
分层交叉验证可以应用于以下场景:
集成是将多个模型组合以创建单一预测的方法。制作更好预测的关键思想是模型应该犯不同的错误。这样,一个模型的错误将被其他模型的正确猜测所补偿,从而集成的分数将更高。
我们需要多样化的模型来创建集成。可以通过以下方式实现多样性:
不平衡数据集是指目标类别比例不同的数据集。例如,一个需要检测某种疾病的医学图像数据集通常会有更多的负样本than正样本—比如说,98%的图像没有疾病,2%的图像有疾病。
有不同的选择来处理不平衡数据集:
在监督学习中,我们训练一个模型来学习输入数据和输出数据之间的关系。我们需要有标记的数据才能进行监督学习。
在无监督学习中,我们只有未标记的数据。模型学习数据的表示。当我们有大量未标记数据和少量标记数据时,无监督学习经常用于初始化模型参数。我们首先训练一个无监督模型,然后使用该模型的权重来训练监督模型。
在强化学习中,模型有一些输入数据和依赖于模型输出的奖励。模型学习一个最大化奖励的策略。强化学习已成功应用于战略游戏,如围棋,甚至经典的雅达利视频游戏。
数据增强是一种通过修改现有数据来合成新数据的技术,其方式是目标不变,或以已知方式改变。
计算机视觉是数据增强非常有用的领域之一。我们可以对图像进行许多修改:
图灵测试是一种测试机器匹配人类智能水平 能力的方法。使用一台机器来挑战人类智能,当它通过测试时,就被认为是智能的。然而,一台机器可能被视为智能,而不需要充分了解人类以模仿人类。
精确率(也称为正预测值)是检索到的实例中相关实例的比例。 精确率 = 真正例 / (真正例 + 假正例) [来源]
召回率(也称为敏感度)是已检索到的相关实例占相关实例总数的比例。 召回率 = 真正例 / (真正例 + 假负例) [来源]
它是精确率和召回率的加权平均值。它同时考虑了假正例和假负例。它用于衡量模型的性能。 F1值 = 2 * (精确率 * 召回率) / (精确率 + 召回率)
成本函数是一个标量函数,用于量化神经网络的误差因素。成本函数越低,神经网络的性能越好。例如:使用MNIST数据集来分类图像,输入图像是数字2,但神经网络错误地将其预测为3。
学习率是一个超参数,用于控制我们根据损失梯度调整网络权重的程度。
动量让优化算法记住上一步的结果,并将其中的一部分添加到当前步骤中。这样,即使算法陷入平坦区域或小的局部最小值,也能摆脱并继续朝真正的最小值前进。
批量梯度下降使用整个数据集计算梯度。这对于凸函数或相对平滑的误差流形很有效。在这种情况下,我们会直接朝最优解(局部或全局)移动。此外,给定一个退火学习率,批量梯度下降最终会找到其吸引盆地中的最小值。
随机梯度下降(SGD)使用单个样本计算梯度。SGD适用于具有许多局部最大值/最小值的误差流形。在这种情况下,使用较少样本计算的较为嘈杂的梯度往往会将模型从局部最小值推出,进入可能更优的区域。
随着我们添加越来越多的隐藏层,反向传播在将信息传递到较低层时变得越来越不有效。实际上,当信息向后传递时,梯度开始消失,相对于网络权重变得很小。
Dropout是防止神经网络过拟合的简单方法。它是指在神经网络中丢弃一些单元。这类似于自然繁殖过程,大自然通过结合不同的基因(丢弃其他基因)而不是加强它们的共适应来产生后代。
长短期记忆(Long Short Term Memory)- 专门设计用于解决长期依赖问题,通过维护一个状态来决定记住什么和遗忘什么。
自编码器基本上用于学习给定数据的压缩形式。几个应用包括:
提升和装袋都是集成技术,它们将多个弱学习器(分类器/回归器,其性能仅略优于随机猜测)结合(通过平均或最大投票)创建一个能够做出准确预测的强学习器。装袋意味着你对数据集进行有放回的bootstrap抽样,每个样本训练一个(可能是弱的)学习器。另一方面,提升使用所有数据来训练每个学习器,但被前面的学习器错误分类的实例会被赋予更高的权重,以便后续的学习器在训练时更加关注这些实例。
ROC曲线是一种图形表示,用于对比不同阈值下的真正例率和假正例率。它通常用作模型敏感性(真正例)与误报率或触发假警报概率(假正例)之间权衡的代理。
第一类错误是假阳性,而第二类错误是假阴性。简而言之,第一类错误意味着声称发生了某事而实际上并没有发生,而第二类错误意味着你声称什么都没发生而实际上发生了某事。 一个巧妙的方式来理解这一点是,将第一类错误想象成告诉一个男人他怀孕了,而第二类错误是告诉一个怀孕的女人她没有怀孕。
生成模型将学习数据的类别,而判别模型只会学习不同数据类别之间的区别。在分类任务中,判别模型通常会优于生成模型。
基于实例的学 习:系统通过记住例子,然后使用相似度度量来泛化到新的案例。
基于模型的学习:从一组例子中泛化的另一种方法是构建这些例子的模型,然后使用该模型进行预测。这被称为基于模型的学习。
这个问题通常取决于你的数据集和你想应用的模型。但在选择正确的编码技术时,仍有几点需要注意:
我们使用独热编码当:
我们使用标签编码当:
LDA和PCA都是线性变换技术:LDA是有监督的,而PCA是无监督的 - PCA忽略类别标签。
我们可以将PCA想象为一种寻找最大方差方向的技术。与PCA相比,LDA试图找到一个最大化类别可分性的特征子空间。
t-分布随机邻居嵌入(t-SNE)是一种无监督的非线性技术,主要用于数据探索和高维数据的可视化。简单来说,t-SNE可以让你对高维空间中数据的排列有一个感觉或直观认识。
首先需要注意的是,PCA是在1933年开发的,而t-SNE是在2008年开发的。自1933年以来,数据科学领域发生了巨大变化,主要体现在计算能力和数据规模方面。其次,PCA是一种线性降维技术,旨在最大化方差并保留大的成对距离。换句话说,不同的事物最终会相距很远。这在处理非线性流形结构时可能会导致较差的可视化效果。可以将流形结构 理解为任何几何形状,如圆柱体、球体、曲线等。
t-SNE与PCA的不同之处在于,它只保留小的成对距离或局部相似性,而PCA关注保留大的成对距离以最大化方差。
UMAP(统一流形近似和投影)是一种新颖的用于降维的流形学习技术。UMAP基于黎曼几何和代数拓扑的理论框架构建。其结果是一种实用的可扩展算法,可应用于现实世界的数据。
与t-SNE相比,UMAP输出的最大区别在于局部结构和全局结构之间的平衡 - UMAP通常更善于在最终投影中保留全局结构。这意味着簇间关系可能比t-SNE更有意义。然而,重要的是要注意,由于UMAP和t-SNE在将高维数据投影到低维时都必然会扭曲数据的高维形状,低维中的任何给定轴或距离仍然不能像PCA等技术那样直接解释。
它基于种子生成伪随机数,有一些著名的算法,请参阅以下链接获取更多相关信息。 [来源]
def get_splits():
df = pd.DataFrame(...)
rnd = np.random.rand(len(df))
train = df[ rnd < 0.8 ]
valid = df[ rnd >= 0.8 & rnd < 0.9 ]
test = df[ rnd >= 0.9 ]
return train, valid, test
#模型1
from sklearn.tree import DecisionTreeClassifier
train, valid, test = get_splits()
...
#模型2
from sklearn.linear_model import LogisticRegression
train, valid, test = get_splits()
...
rand()函数每次运行时都会对数据进行不同的排序,所以如果我们再次运行划分机制,我们得到的80%的行将与第一次运行时得到的不同。这带来了一个问题,因为我们需要在相同的测试集上比较我们模型的性能。为了确保可重现和一致的采样,我们必须提前设置随机种子或在数据划分后存储数据。另外,我们也可以简单地设置sklearn的train_test_split()函数中的'random_state'参数,以便在不同的执行中获得相同的训练、验证和测试集。
频率主义统计是一个框架,专注于使用样本统计量估计总体参数,并提供点估计和置信区间。
另一方面,贝叶斯统计是一个使用先验知识和信息来更新对参数或假设的信念的框架,并为参数提供概率分布。
主要区别在于贝叶斯统计将先验知识和信念纳入分析,而频率主义统计则不会。
LSTM(长短期记忆)模型由RNN单元组成,旨在更有效地跨时间步长存储和操作信息。相比之下,Transformer模型包含一堆编码器和解码器层,每层由自注意力和前馈神经网络组件组成。
循环卷积模型是一种专门设计用于使用图像序列(更常见的也称 为视频)进行预测的模型。这些模型用于计算机视觉中的目标检测任务。RCNN方法结合了区域提议技术和卷积神经网络(CNN),以识别和定位图像中的对象。
欢迎贡献。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的 市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK ,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号