如何快速get到AI工程师面试重点,这12道题必备!

作者 | JP Tech

译者 | 刘畅

编辑 | Jane

出品 | AI科技大本营(ID:rgznai100)

 

【导读】2020 年的三月春招要来了,现在想要 Get 一个算法工程师的实习或全职机会,已经不是一件易事了。如果现在着手复习,茫茫题海不能毫无重点,我们要先抓住那些刚需必备的面试题。这次,作者收集了 12 个 AI 工程师职位的面试问题,助你攻下你心仪的 offer。

 

1、介绍一下 BN 层的含义

 

这是非常好的一个问题,因为它能显示出候选者在使用神经网络模型时,掌握的知识面够不够全面。这个问题可以有不同的回答,但需要囊括以下主要的思想:

 

             

 

BN层是一种有效的训练神经网络模型方法。此方法的目标是将特征(经过激活后每一层的输出)归一化为标准偏差为1的零均值状态。因此,非零均值时它是如何影响模型训练呢:

 

第一,需要理解的是非零均值是指数据未分布在0值附近,相反大多数数据具有大于零或小于零的值。结合高方差问题,数据可能变得非常大或非常小。在训练深层的神经网络时,此问题很常见。当特征的在固定的间隔(从小到大)内分布的不够稳定时,它将对网络的优化过程产生影响。众所周知,优化神经网络需要使用导数计算。假设一个简单的层计算公式为y =(Wx + b),则y对w的导数如下:dy = dWx。因此,x的值直接影响导数的值(当然,神经网络模型中的梯度的概念不是这么简单,但从理论上讲,x会影响导数)。因此,如果x带来不稳定的变化,则导数可能太大或太小,从而导致模型学习的不够稳定。这也意味着在使用批归一化时,我们可以在训练时使用更大的学习率。

 

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

 

第三,BN层也可以是一种正则化方法,有助于最大程度的减少过拟合。当使用BN层,不需要使用过多的dropout层。因为当我们drop down网络时,不必担心丢失太多的信息。当然,仍然建议同时使用两种技术。

 

2、介绍偏差和方差的含义以及它们之间的trade-off

什么是偏差?可以理解,偏差是当前模型的平均预测与预测的实际结果之间的差异。具有高偏差的模型表明它不太关注训练数据。这会使模型过于简单,并且在训练和测试过程中均无法达到良好的准确性。这种现象称为欠拟合。

 

方差可以简单地理解为模型输出在数据点上的分布(或聚类)。方差越大,该模型就越有可能更关注训练数据,并且无法对未见过的数据进行泛化。结果,该模型会在训练集上获得非常好的结果,但是对于测试数据,结果却非常差。这种现象称为过拟合。

 

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

 

             

 

在上图中,圆心是一个可以完美预测的模型。实际上,这只是理想状态。随着模型预测分布离圆心越来越远,预测结果越差。

 

我们可以更改模型,以便可以尽可能多地增加落入圆心的模型。这当然需要在“偏差”和“方差”值之间保持平衡。如果我们的模型过于简单且参数很少,那么它可能具有较高的偏差和较低的方差。

 

另一方面,如果我们的模型具有大量参数,那么它将具有高方差和低偏差,这是我们在设计算法时计算模型复杂度的基础。

               

3、假设深度学习模型已经学到了一千万个人脸向量,如何通过查询最快地找到一个新人脸?

 

这个问题与深度学习算法在实践中的应用有关,这个问题的关键是对数据进行索引的方法。这是将One Shot Learning用于面部识别问题的最后一步,但这是将应用程序部署在实践中最重要的一步。

 

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

              

但是,随着本文开头图像数量的增加,在每次识别中计算1000万个矢量的距离并不是一个明智的解决方案,这会使系统变慢。我们需要考虑在真实向量空间上为数据建立索引的方法,以使查询更加方便。

 

这些方法的主要思想是将数据划分为用于查询新数据的简单结构(可能类似于树形结构)。当有新数据可用时,在树中进行查询有助于快速找到距离最近的向量。

               

这里提供几种方法,如局部敏感hash。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

(*本文为AI科技大本营编译文章,转载微信联系 1092722531)

精彩公开课

推荐阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值