当前位置: 首页 > 科技观察

不容错过的12道深度学习面试题

时间:2023-03-17 21:32:01 科技观察

攻略这12道题目是目前面试中最热门的题目。面试官和求职者都可以看看。这些是我在面试AI工程师职位时经常问的问题。事实上,并不是所有的面试都需要使用所有这些问题,因为这取决于应聘者以前的经验和项目。通过大量的面试,尤其是与学生的面试,我收集了12个深度学习领域最热门的面试问题,今天将在这篇文章中与大家分享。我希望收到您的许多意见。好吧,事不宜迟,让我们开始吧。1.IntroducethemeaningofBatchNormalization这是一个非常好的问题,因为它涵盖了候选人使用神经网络模型需要知道的大部分内容。你可以用不同的方式回答,但需要明确以下要点:BatchNormalization是训练神经网络模型的有效方法。该方法的目标是将特征(每层激活后的输出)归一化为均值为0和标准差为1。所以问题是非零均值如何影响模型训练:首先,它可以可以理解,非零均值意味着数据不是分布在0附近,而是数据中的大部分值都大于零或小于零。结合高方差问题,数据变得非常大或非常小。在训练多层神经网络时,这个问题很常见。特征没有分布在一个稳定的区间内(从小到大),会影响网络的优化过程。众所周知,优化神经网络需要使用导数计算。假设一个简单的层计算公式为y=(Wx+b),则y对w的导数为:dy=dWx。因此,x的值直接影响导数的值(当然神经网络模型中梯度的概念没有那么简单,但理论上x会影响导数)。因此,如果x带来不稳定的变化,它的导数可能太大,也可能太小,使得学习到的模型不稳定。这也意味着我们可以在使用BatchNormalization时在训练期间使用更高的学习率。BatchNormalization可以避免x值经过非线性激活函数后趋于饱和的现象。因此,它保证了激活值不会太高或太低。这样方便了权值的学习,有些权值在不用的时候可能永远学不会,但是用了以后,基本上都可以学习了。这有助于我们减少对参数初始值的依赖。BatchNormalization也是一种有助于最小化过度拟合的正则化形式。使用BatchNormalization,我们不需要使用太多的drops,这是有道理的,因为我们不需要担心丢失太多信息。我们在实际使用的时候,还是建议结合使用这两种技术。2.解释偏差和方差的权衡关系什么是偏差?可以理解,偏差是当前模型的平均预测与我们需要预测的实际结果之间的差异。具有高偏差的模型表明它对训练数据的关注较少。这使得模型过于简单,并且在训练和测试中都没有达到很好的准确性。这种现象也称为欠拟合。方差可以简单理解为模型输出在一个数据点上的分布。方差越大,模型就越有可能密切关注训练数据,而不是对它从未遇到过的数据进行泛化。所以,该模型在训练数据集上取得了很好的效果,但与测试数据集相比效果很差,这就是过拟合现象。下图可以看出这两个概念的关系:上图中,圆心是完美预测准确值的模型。事实上,你从来没有找到这么好的模型。随着我们离圆心越来越远,我们的预测也越来越差。我们可以改变模型,让我们尽可能地增加落入圆心的模型猜测的数量。需要在偏差值和方差值之间取得平衡。如果我们的模型太简单且参数很少,那么它可能具有高偏差和低方差。另一方面,如果我们的模型有大量参数,那么它将具有高方差和低偏差。这是我们在设计算法时计算模型复杂度的基础。3.如果深度学习模型已经有1000万张人脸向量,如何通过查询找到新的人脸?这道题是关于深度学习算法在实践中的应用。这道题的关键是数据索引的方法。这是将OneShot学习应用于人脸识别问题的最后一步,但也是将其部署到实践中最重要的一步。基本上,要回答这个问题,首先应该描述一下OneShotlearning用于人脸识别的一般方法。可以简单理解为将每张人脸转化为一个向量,而新的人脸识别就是寻找与输入人脸最接近(最相似)的向量。通常,人们会使用具有三元组损失函数的深度学习模型来实现这一点。然而,随着图像数量的增加,在每次识别中计算到1000万个向量的距离并不是一个明智的解决方案,从而使系统变得更慢。为了使查询更方便,我们需要考虑在实向量空间上对数据进行索引的方法。这些方法的主要思想是将数据划分成一种便于查询新数据的结构(可能类似于树结构)。当有新数据可用时,在树中查询有助于快速找到最近的向量。有几种方法可以用于此目的,例如LocalitySensitiveHashing—LSH、ApproximateNearestNeighbors—AnnoyIndexing等。4.对于分类问题,准确度指标是否完全可靠?您通常使用哪些指标来评估您的模型?对于一个类问题,有多种不同的评价方法。在准确性方面,该公式只是将正确预测的数据点数除以总数据。这听起来很合理,但实际上,这个数量不足以解决不平衡数据问题。假设我们正在构建一个网络攻击的预测模型(假设攻击请求占请求总数的1/100000)。如果模型预测所有请求都是正常的,它也能达到99.9999%的准确率,这个数字在分类模型中通常是不可靠的。上面的准确性计算通常向我们展示了正确预测的数据百分比,但没有详细说明每个类是如何分类的。相反,我们可以使用混淆矩阵。基本上,混淆矩阵显示了有多少数据点实际上属于一个类并且被预测属于一个类。它具有以下形式:除了表示对应于定义分类的每个阈值的真阳性和假阳性指标的变化外,我们还有一个ROC图。根据ROC曲线,我们可以知道模型是否有效。理想的ROC曲线是离左上角最近的橙色线。真阳性率高,假阳性率低。5.你是如何理解反向传播的?解释它是如何工作的?此问题旨在测试您对神经网络工作原理的了解。你需要明确以下几点:正向过程(forwardcalculation)是帮助模型计算每一层权重的过程,由此产生的计算会产生yp的结果。此时会计算出损失函数的值,损失函数的值会体现模型的好坏。如果损失函数不够好,我们需要想办法降低损失函数的值。训练神经网络本质上是最小化损失函数。损失函数L(yp,yt)表示yp模型的输出值与yt数据标签的实际值的差异程度。为了降低损失函数的值,我们需要使用导数。反向传播帮助我们计算网络每一层的导数。基于每一层的导数值,优化器(Adam、SGD、AdaDelta...)应用梯度下降来更新网络的权重。反向传播使用链式法则或导数函数来计算从最后一层到第一层的每一层的梯度值。6.激活函数是什么意思?激活函数的饱和范围是多少?激活函数的含义激活函数是为了打破神经网络的线性特性而产生的。这些功能可以简单理解为使用过滤器来判断信息是否通过神经元。在神经网络训练中,激活函数在调节导数的斜率方面起着重要作用。以下部分将进一步讨论一些激活函数,例如sigmoid、fishy或ReLU。然而,我们需要了解的是,这些非线性函数的特性使神经网络能够学习比仅使用线性函数更复杂的函数表示。大多数激活函数是连续可微函数。这些函数是连续函数,也就是说,如果输入变量很小且可微(在其定义域内的每一点都可导),那么输出就会有很小的变化。当然,正如上面所说,导数的计算是非常重要的,是决定我们的神经元能否被训练的决定性因素。提几个常用的激活函数,比如Sigmoid、Softmax、ReLU。激活函数的饱和区间非线性激活函数,如Tanh、Sigmoid、ReLU,都有饱和区间。可以很容易理解,触发函数的饱和范围是指即使输入值发生变化,函数的输出值也不会发生变化的区间。变化区间存在两个问题,即在神经网络的前向传播中,这一层的值逐渐落入激活函数的饱和区间,会逐渐出现多个相同的输出。这将导致整个模型中的数据流相同。这种现象称为协方差偏移。第二个问题是在反向传播中,导数在饱和区为零,因此网络几乎什么也学不到。这就是为什么我们需要将值的范围设置为均值为0,如批量归一化部分所述。7.模型的超参数是什么?它与参数有何不同?模型的参数是什么?回到机器学习的本质,我们需要一个机器学习的数据集。没有数据我们如何学习?一旦数据可用,机器需要在数据堆中找到输入和输出的连接。假设我们的数据是温度、湿度、温度等天气信息,要求机器做的是找到上述因素与你老婆是否生气之间的联系。这听起来无关紧要,但机器学习的作用非常愚蠢。现在假设我们使用变量y来表示我们的妻子是否生气,使用变量x1、x2、x3...来表示天气元素。我们将函数f(x)简化为以下关系:看到系数w1w2w3?w_1、w_2、w_3..w1、w2、w3..?这就是我们需要的数据和元素之间的关系,也就是所谓的模型参数。因此,我们可以这样定义模型参数:模型参数是从训练数据中生成的模型值,用于帮助显示数据中数量之间的关系。因此,当我们说我们已经为一个问题找到了一个好的模型时,应该意味着我们已经在现有的数据集上为该问题找到了最好的模型参数。它具有以下特点:它用于预测新数据它显示了我们使用的模型的强大功能。通常用准确率来表示,我们称之为准确率。直接从训练数据集中学习通常不需要手动设置模型参数有多种形式,例如神经网络权重、支持向量机中的支持向量、线性回归或逻辑回归算法中的系数。什么是模型超参数?我们经常假设模型超参数看起来像模型参数,但事实并非如此。实际上这两个概念是完全不同的。如果模型参数是由训练数据集本身建模的,那么模型超参数就大不相同了。它完全在模型之外,不依赖于训练数据。它的目的是什么?实际上,它们有以下任务:在训练期间用于帮助模型找到最合适的参数通常由模型训练的参与者手工挑选它可以基于多种启发式定义我们完全不知道什么是好的模型特定问题的超参数。因此,在现实中,我们需要使用一些技术来估计合适的取值范围(比如k近邻模型中的k系数),比如gridsearch。这里我想举几个模型超参数的例子:训练人工神经网络时的学习率C和训练支持向量机时的西格玛参数K最近邻模型中的因子K8.当学习率过高或过低时会发生什么所以?当模型的学习率设置得太低时,模型训练将进行得很慢,因为它对权重的更新非常小。在达到局部最优之前需要多次更新。如果学习率设置得太高,模型可能由于较大的权重更新而无法收敛。有可能在更新权重的一个步骤中,模型跳出了局部优化,导致模型以后很难更新到最优点,而是绕着局部优化点跳。9.当图像尺寸变成2倍时,CNN参数的数量变成多少倍?为什么?这对考生来说是一个很容易误导的问题,因为大部分人都会关注CNN的参数数量会增加多少倍的问题。然而,让我们看看CNN架构:我们可以看到CNN模型的参数数量取决于过滤器的数量和大小,而不是输入图像。因此,将图像尺寸加倍并不会改变模型的参数数量。10、数据不平衡如何处理?这是一道考查考生处理真实数据问题的方法的问题。通常,实际数据和标准数据集在数据集的属性和数据量上有很大差异(标准数据集不需要调整)。对于真实的数据集,可能存在数据不平衡,即类与类之间的数据不平衡。我们现在可以考虑以下技术:选择正确的指标来评估模型:对于不平衡的数据集,使用准确性来评估是一项非常危险的工作,如前几节所述。应选择合适的评估量,如精确率、召回率、F1分数、AUC等。重采样训练数据集:除了使用不同的评估标准外,还可以使用一些技术来获得不同的数据集。有两种方法可以从不平衡数据集创建平衡数据集,即欠采样和过采样。具体技术包括重复、自举或命中(结合一些过采样技术)。许多不同模型的集合:通过创建更多数据来概括模型在实践中并不总是可行的。例如,您有两层,一个稀有类有1000个数据,一个大类有10,000个数据样本。因此,与其试图从稀有类中寻找9000个数据样本进行模型训练,不如考虑10个模型的训练解决方案。每个模型都用1000个稀有类和1000个大型类进行训练。然后使用集成技术以获得出色的结果。重新设计模型——损失函数:使用惩罚技术严厉惩罚成本函数中的多数类,帮助模型本身更好地从稀有类中学习数据。这使得损失函数的价值在跨类时更加全面。11.在训练深度学习模型时,Epoch、Batch和Iteration的概念是什么意思?这些是训练神经网络时非常基本的概念,但事实是许多候选人在区分这些概念时感到困惑。具体来说,您应该回答以下问题:Epoch:表示对整个数据集(训练模型中包含的所有内容)的迭代。批处理:当我们无法一次将整个数据集放入神经网络时,我们将数据集拆分为若干批较小的数据集。iterations:是运行epoch所需的批次数。假设有10,000张图像作为数据,批量大小(batch_size)为200。那么一个epoch将包含50次迭代(10,000除以200)。12.数据生成器是什么概念?我们什么时候需要使用它?数据生成器在编写代码时非常重要。数据生成功能帮助我们直接生成数据,然后将其发送给模型进行每批次的训练。利用生成函数对训练大数据有很大帮助。因为数据集并不总是需要完全加载到RAM中,这是一种内存浪费,如果数据集太大,则会溢出内存并需要更长的时间来处理输入数据。总结以上是我在面试过程中经常问应聘者的12个深度学习面试问题。但是,根据每个考生的不同,出题方式不同,或者也有从考生的问题中随机抽取的问题。这篇文章虽然是技术问题,但是跟面试有关,个人观点,态度决定面试成功率的50%。因此,除了积累知识和技能之外,始终以真诚、进步和谦逊的态度表达自己,这样您就一定会在任何谈话中取得成功。我希望你能尽快实现你的愿望。