首页 > 编程知识 正文

ai面试题目(高级ai工程师)

时间:2023-05-06 08:07:33 阅读:92625 作者:2766

作者

译者刘畅

编辑|简

展出| AI技术基地营(ID:rgznai100 ) () ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )至) ) )。

【reed】2020年3月春季的招募即将到来。 现在,要得到算法工程师的实习和全职机会并不容易。 现在开始复习的话,就不能将重点放在广阔的题海上了。 首先,我们必须抓住刚刚需要的问题。 这次,作者收集了12个AI工程师职位的面试问题,帮助了攻击你心中的报价。

1、介绍BN层的含义

这是一个非常好的问题。 因为在使用神经网络模型时可以表明候选人没有足够的知识。 这个问题有各种各样的回答,但需要囊括以下主要思想。

BN层是一种有效训练神经网络模型的方法。 该方法的目标是将作为每个激活层的输出的特征归一化为标准偏差为1的零平均状态。 因此,如果是非零平均值,会如何影响模型训练呢?

第一,非零平均是指数据不分布在零值附近,相反,需要理解的是大部分数据具有大于零值或小于零值的值。 与高度分散的问题结合起来,数据可能会变得非常大或很小。 在训练深层的神经网络时,这个问题很常见。 如果在特征的一定间隔(从小到大)内分布不稳定,它会影响网络的优化过程。 众所周知,要优化神经网络就必须使用导数计算。 如果简单的层公式为y=(wxb ),则y对w的导数如下: dy=dWx。 因此,x的值直接影响导数的值(当然,神经网络模型中的梯度概念并不简单,但理论上x会影响导数)。 因此,如果x发生不稳定的变化,则导数可能过大或过小,模型的学习可能不充分稳定。 这还意味着在使用批处理规范化时,可以在培训时使用更高的学习率。

第二,BN层可以避免x值经过非线性激活函数饱和的现象。 因此,激活后可以避免过高或过低。 这有助于减少对初始参数的依赖。

第三,BN层也是正则化方法,有助于将过拟合抑制在最小限度。 使用BN层时,不需要使用过多的dropout层。 因为我们使用drop down网络的时候,不用担心失去太多信息。 当然,建议同时使用两种技术。

2、介绍偏差和方差的含义以及它们之间的折衷

什么是偏压? 可以理解偏差是现在模型的平均预测和预测的实际结果的差异。 偏倚模型表明对培训数据不太关注。 这使得模型过于简单,在训练和测试的过程中无法达到良好的准确性。 这种现象称为不足。

方差可以简单地理解为模型输出在数据点的分布(或聚类)。 方差越大,该模型关注训练数据的可能性越高,越不能泛化从未见过的数据。 结果是,该模型在训练集中得到了非常好的结果,但在测试数据中得到了非常差的结果。 这种现象称为过拟合。

这两个概念之间的关联如下图所示。

在上图中,圆的中心是可以完美预测的模型。 其实,这是理想的状态。 随着模型的预测分布远离圆的中心,预测结果会变差。

可以更改模型,以便尽可能增加落入中心的模型。 当然,必须保持“偏差”和“方差”的值的平衡。 如果模型太简单,参数太少,则偏差可能较高,方差可能较低。

另一方面,在我们的模型具有很多参数的情况下,它具有高方差和低偏差,这是我们在设计算法时计算模型复杂度的基础。

3、假设深度学习模型已经学习了1千万人的面部向量,如何在查询中最快找到新人的面部?

这个问题涉及到深度学习算法在实践中的应用,这个问题的关键是对数据建立索引的方法。 这是将One Shot Learning用于面部识别问题的最后一步,但这是将APP应用于实践中最重要的一步。

基本上,对于这个问题,应该首先介绍一下One Shot Learning的脸部识别方法。 这可以简单地理解为将每个脸部变为一个向量,但新的脸部识别就是找到与输入脸部最接近(最相似)的向量。 这通常是使用具有称为三组损失的自定义损失函数的深度学习模型完成的。

但是,随着本文开头图像数的增加,一次识别计算1000万个向量的距离不是明智的解决方案,会使系统变慢。 为了使查询更简单,必须考虑如何在实际向量空间中对数据进行索引。

这些方法的主要思路是将数据划分为查询新数据的简单结构(可能类似于树结构)。 通过在树中执行查询,可以在新数据可用时快速查找最近的向量。

这里提供了一些方法,例如局部敏感的散列。 Faiss等

4、将问题分类

中,准确率指标是否完全可靠?通常使用哪些指标来评估模型?

对于分类问题,有许多不同的评估方法。对于准确率,仅将正确预测的数据点数量除以总数据即可。这听起来很合理,但实际上,对于不平衡的数据问题,该数据并不足够。假设我们正在建立一个针对网络攻击的预测模型(假设攻击请求大约占请求总数的1/100000)。

如果模型预测所有请求都是正常的,则准确性也高达99.9999%,该数字在分类模型中通常不可靠。上面的准确性计算通常会向我们显示正确预测了百分之几的数据,但没有指出每个类别详细的分类信息。相反,我们可以使用混淆矩阵。基本上,混淆矩阵显示了实际上有多少个数据点属于一个类,并且预计会落入某类中。它具有以下形式:

除了表示和定义分类每个阈值相对应的TP和FP指标变化之外,我们还有一个称为ROC曲线的图表。基于ROC,我们可以知道该模型是否有效。

越接近左上角,结果越理想,如图中橙线所示。即TP值高,而FP值低。

5、如何理解反向传播?解释一下其作用机理。

该问题属于神经网络的基础知识,回答时需要指明以下几点:

1、前向计算过程是帮助模型计算每层的权重,结果计算将得出结果yp。接下来将计算损失函数的值;损失函数的值将显示模型的好坏。如果损失函数不够好,我们需要找到一种方法来减小损失函数的值。训练神经网络实质上是使损失函数最小化。损失函数L(yp,yt)表示模型的输出值yp与数据标签的实际值yt之间的差异程度。

2、为了减少损失函数的值,我们需要使用导数。反向传播可以帮助计算网络每一层的导数。根据每层导数的值,使用优化器(Adam,SGD,AdaDelta...)去更新网络的权重。

3、反向传播使用链式规则或者导数函数来计算从最后一层到第一层,每一层的梯度值。

6、激活函数的意义是什么?激活函数的饱和点是多少?

激活函数的意义

激活函数的诞生是为了打破神经网络的线性。这些函数可以简单地理解为决定信息是否通过神经元的过滤器。在神经网络训练期间,激活函数在调整导数斜率中起着重要作用。在接下来的部分中将进一步讨论诸如Sigmoid,Fishy或ReLU等激活函数

但是,我们需要了解,这些非线性函数的性质使神经网络有可能学习比仅使用线性函数更复杂的函数表示形式。大多数激活功能是连续且可区分的功能

这些函数是连续函数,也就是说,如果输入具有较小且可微的变化(在其定义的域中的每个点都有导数),则输出中的变化很小。当然,如上所述,导数的计算非常重要,这是我们的神经元是否可以训练的决定性因素。

激活函数的饱和范围

诸如Tanh,Sigmoid和ReLU之类的非线性激活函数均具有饱和区间。

激活函数的饱和范围是无论输入值如何改变,函数的输出也不会改变的间隔。改变的间隔存在两个问题,即在神经网络的前向上,在饱和区间内,不同的输入将得到相同的输出。导致整个模型中的数据流相同,这种现象是协方差shifting。第二个问题是在反向时,饱和区间的导数为零,因此网络几乎学不到任何东西。这就是为什么我们需要把值范围设置在零均值的原因。

7、模型的超参数是什么?与模型参数有什么不同。

什么是模型参数?

机器学习本质是需要数据,假设我们的数据是天气信息,例如温度,湿度,温度等,而机器要完成的是在上述因素与爱人是否生气之间找到联系?现在假设我们使用变量y来表达我们的爱人是生气还是不生气?变量x1,x2,x3…表示天气元素。我们将关系归因于找到函数f(x),如下所示:

其中的系数w1,w2,w3..w_1,w_2,w_3 ..w1,w2,w3 ..就是所谓的模型参数。因此,当我们说找到问题的最佳模型时,是指我们已经在现有数据集上找到了最适合该问题的模型参数。

什么是模型超参数?

模型超参数其实不是模型参数。这是两个完全不同的概念,如果从训练数据本身对模型进行建模,则模型的超参数将完全不同。它的目的如下:

训练过程中,帮助模型找到最合适的参数

通常是模型训练人员亲自挑选

可以基于几种启发式策略进行定义

超参数举例如下:

学习率

支持向量机的C和sigma参数

KNN中的k系数

8、学习率太高或者太低会怎么样?

当模型的学习率设置得太低时,模型训练速度将非常慢,因为它每次对权重的更新都很小。在达到局部最佳点之前,需要进行许多次的更新。

如果学习率设置得太高,权重每次更新变化太大,模型有可能不会收敛。在每一次权重更新的步骤中,模型容易跨过局部最优,然后一直在局部最优点附近波动。

9、当输入图像大小增加一倍时,CNN的参数量增加多少倍?为什么?

对于面试者来说,这是一个极具误导性的问题,因为大多数人会朝着CNN参数量将增加多少倍的方向思考。但是,让我们看一下CNN的结构:

我们可以看到,CNN模型的参数量取决于滤波器的数量和大小,而不取决于输入图像的大小。因此,将图像输入大小加倍并不会改变模型的参数量。

10、有哪些处理不平衡数据的方法?

这是一个测试面试者解决真实数据问题的能力。通常,实际数据每个类别的数据量方面会有很大差异。对于实际的数据集,可能会出现数据不平衡的情况。现在,我们可以考虑以下技术:

选择正确的度量标准来评估模型:如上文所述,对于不平衡的数据集,使用准确率进行评估是不够全面的。应该选择合适的评价标准,例如精度,召回率,F1分数,AUC

对训练数据集进行重采样:除了使用不同的评价标准外,人们还可以应用技术来获取不同的数据集。从不平衡集中创建平衡数据集的两种方法是欠采样和过采样,其方法是重复,bootstrap或SMOTE。

集成许多不同的模型:创建更多数据来泛化模型在实践中并不总是可行的。例如,你有一个包含1000个数据的稀有类,一个包含10,000个数据样本的大类。因此,我们可以尝试训练10个模型,而不是去再找9000个稀有类的数据样本进行模型训练。每个模型都使用1000个稀有类和1000个大类进行训练。然后使用集成技术去获得最佳结果。

重新设计模型-损失函数:使用惩罚技术严厉惩罚损失函数中的大类,以帮助模型本身更好地学习稀有类别的数据。使得损失函数的值在所有类别中更为全面。

11、在训练深度学习模型时,Epoch,batch和Iterration都是什么概念?

这些是训练神经网络时非常基本的概念,但现实是,在区分这些概念时,很多面试者感到困惑。你可以像下面这样来回答问题:

Epoch:代表整个数据集的迭代(所有内容都包含在训练模型中)。

Batch:由于我们无法一次将整个数据集送入神经网络,因此我们将数据集分为几批较小的数据集。

Iteration:是运行一个epoch所需的batch数。假设我们有10,000张图像作为数据,并且批处理的大小(batch_size)为200。那么一个epoch将包含50个Iteration(10,000除以200)。

12、数据生成器的概念是什么?我们什么时候需要使用它?

在编程中,生成函数也很重要。数据生成函数可帮助我们直接生成数据以适合每个训练批次中的模型。

利用数据生成函数有助于训练大数据。由于数据集并不一定总是需要全部加载到RAM中,这会浪费内存,而且,如果数据集太大,则可能导致内存溢出,并且输入数据的处理时间会更长。

原文链接:

https://medium.com/@itchishikicomm/12-deep-learning-interview-questions-you-should-not-be-missed-part-3-47a1dbf879f1

https://medium.com/@itchishikicomm/12-deep-learning-interview-questions-you-should-not-be-missed-part-2-8f42deeb4483v

https://medium.com/@itchishikicomm/12-deep-learning-interview-questions-you-should-not-be-missed-part-3-47a1dbf879f1

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。