热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

作者:JPTech来源:AI公园,编译:ronghuaiyang导读这12个问题是当前面试中最热门的问题,既是

作者:JP Tech

来源:AI公园,编译:ronghuaiyang

 导读

这12个问题是当前面试中最热门的问题,既是非常基础的问题,也能看出面试者的水平,具有区分度。无论是面试官还是求职者都可以看看。

这些是我在面试人工智能工程师职位时经常问的问题。事实上,并不是所有的面试都需要使用所有这些问题,因为这取决于应聘者以前的经验和项目。通过大量的面试,特别是与学生的面试,我收集了 12 个在深度学习中最热门的面试问题,今天将在这篇文章中与大家分享。我希望能收到你的许多意见。好了,别再啰嗦了,我们开始吧。

1. 介绍 Batch Normalization 的意义

这是一个非常好的问题,因为它涵盖了候选人在使用神经网络模型时需要知道的大部分知识。你可以用不同的方式回答,但需要阐明以下主要观点:

Batch Normalization 是训练神经网络模型的一种有效方法。该方法的目标是将特征(每层激活后的输出)归一化为均值为 0,标准差为 1。所以问题在于非零的均值是如何影响模型训练的:

  • 首先,可以理解为非零均值是指数据不围绕 0 值分布,但数据中大多数值大于零或小于零。结合高方差问题,数据变得非常大或非常小。这个问题在训练层数很多的神经网络时很常见。特征没有在稳定区间内分布(由小到大),这将影响网络的优化过程。众所周知,优化神经网络需要使用导数计算。假设一个简单的层计算公式是 y = (Wx + b), y 对 w 的导数是:dy = dWx。因此,x 的取值直接影响导数的取值(当然,神经网络模型中梯度的概念并不是那么简单,但从理论上讲,x 会影响导数)。因此,如果 x 带来不稳定的变化,其导数可能太大,也可能太小,导致学习模型不稳定。这也意味着当使用 Batch Normalization 时我们可以在训练中使用更高的学习率。

  • Batch Normalization 可以避免 x 值经过非线性激活函数后趋于饱和的现象。因此,它确保激活值不会过高或过低。这有助于权重的学习,当不使用时有些权重可能永远无法进行学习,而用了之后,基本上都可以学习到。这有助于我们减少对参数初始值的依赖。

  • Batch Normalization 也是一种正则化形式,有助于最小化过拟合。使用 Batch Normalization,我们不需要使用太多的 dropput,这是有意义的,因为我们不需要担心丢失太多的信息,当我们实际使用的时候,仍然建议结合使用这两种技术。

2. 解释 bias 和 Variance 之间的权衡关系

什么是bias?可以理解,bias是当前模型的平均预测与我们需要预测的实际结果之间的差异。一个高 bias 的模型表明它对训练数据的关注较少。这使得模型过于简单,在训练和测试中都没有达到很好的准确性。这种现象也被称为欠拟合。

Variance 可以简单理解为模型输出在一个数据点上的分布。Variance 越大,模型越有可能密切关注训练数据,而不提供从未遇到过的数据的泛化。因此,该模型在训练数据集上取得了非常好的结果,但是与测试数据集相比,结果非常差,这就是过拟合的现象。

这两个概念之间的关系可以从下图中看出:

在上图中,圆的中心是一个模型,它完美地预测了精确的值。事实上,你从来没有发现过这么好的模型。当我们离圆的中心越来越远,我们的预测就越来越糟。

我们可以改变模型,这样我们就可以尽可能地增加落入圆中心的模型猜测的数量。需要在偏差值和方差值之间取得平衡。如果我们的模型过于简单,参数很少,那么它可能有高偏差和低方差。

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

3. 假如深度学习模型已经有了 1000 万个人脸向量,如何通过查询来找到新的人脸?

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

基本上,回答这个问题,你应该先描述一下 One Shot learning 来进行人脸识别的方法一般性方法。它可以简单地理解为将每个人脸转换成一个向量,而新的人脸识别是寻找与输入人脸最接近(最相似)的向量。通常,人们会使用 triplet loss 损失函数的深度学习模型来实现这一点。

然而,随着图像数量的增加,在每次识别中计算到 1000 万个向量的距离并不是一个明智的解决方案,这使得系统的速度慢了很多。为了使查询更加方便,我们需要考虑在实向量空间上索引数据的方法。

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

有好几种方法可以用于这种目的,比如Locality Sensitive Hashing—LSH,Approximate Nearest Neighbors — Annoy Indexing等等。

4. 对于分类问题,精度指标是否完全可靠?你通常使用哪些度量来评估你的模型?

对于一个类问题,有许多不同的评估方法。在准确性方面,该公式简单地用正确预测数据点的个数除以总数据。这听起来很合理,但在现实中,对于不平衡的数据问题,这个数量还不够显著。假设我们正在构建一个网络攻击的预测模型(假设攻击请求占请求总数的 1/100000)。

如果模型预测所有请求都是正常的,那么准确率也达到 99.9999%,而这个数字在分类模型中通常是不可靠的。上面的精度计算通常向我们展示了有多少百分比的数据是正确预测的,但并没有详细说明如何对每个类进行分类。相反,我们可以使用混淆矩阵。基本上,混淆矩阵显示了有多少数据点实际上属于一个类,并且被预测属于一个类。其形式如下:

除了表示真阳性和假阳性指标对应于定义分类的每个阈值的变化外,我们还有一个 ROC 图。根据 ROC 曲线,我们可以知道模型是否有效。

理想的 ROC 曲线是最接近左上角的橙色线。真阳性比较高,假阳性比较低。

5. 如何理解反向传播?解释其作用机制?

这个问题旨在检测你对于神经网络如何工作的知识。你需要讲清楚以下几点:

  • 前向过程(前向计算)是一个帮助模型计算每一层权重的过程,其结果计算将产生一个yp结果。此时将计算损失函数的值,损失函数的值将显示模型的好坏。如果损失函数不够好,我们需要找到一种方法来降低损失函数的值。训练神经网络本质上是最小化损失函数。损失函数 L (yp, yt)表示yp模型的输出值与yt数据标签的实际值的差别程度。

  • 为了降低损失函数的值,我们需要使用导数。反向传播帮助我们计算网络每一层的导数。根据每个层上的导数值,优化器(Adam、SGD、AdaDelta…)应用梯度下降更新网络的权重。

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

6. 激活函数是什么意思?激活函数的饱和区间是多少?

激活函数的意义

激活函数的产生是为了打破神经网络的线性特性。这些函数可以简单地理解为用一个滤波器来决定信息是否通过神经元。在神经网络训练中,激活函数在调节导数斜率中起着重要的作用。一些激活函数,如 sigmoid、fishy 或 ReLU,将在下面几节中进一步讨论。

然而,我们需要理解的是,这些非线性函数的性质使得神经网络能够学习比仅仅使用线性函数更复杂的函数的表示。大多数激活函数是连续可微函数。

这些函数是连续函数,也就是说,如果输入的变量很小且可微(在其定义域内的每一点都有导数),那么输出就会有一个小的变化。当然,如上所述,导数的计算是非常重要的,它是决定我们的神经元能否被训练的决定性因素。提几个常用的激活函数,如 Sigmoid, Softmax, ReLU。

激活函数的饱和区间

Tanh、Sigmoid、ReLU 等非线性激活函数都有饱和区间。

可以很容易理解的是,触发函数的饱和范围是指即使输入值改变,函数的输出值也不改变的区间。变化区间存在两个问题,即在神经网络的正向传播中,该层的数值逐渐落入激活函数的饱和区间,将逐渐出现多个相同的输出。

这将在整个模型中产生相同的数据流。这种现象就是协方差移位现象。第二个问题是,在反向传播中,导数在饱和区域为零,因此网络几乎什么都学不到。这就是我们需要将值范围设置为均值为 0 的原因,如 Batch 归一化一节中所述。

7. 模型的超参数是什么?它和参数有什么不同?

模型的参数是什么?

回到机器学习的本质上来,关于机器学习我们需要一个数据集,没有数据我们如何学习?一旦数据可用,机器需要在数据堆中找到输入和输出的联系。

假设我们的数据是温度、湿度、温度等天气信息,要求机器做的是找出上述因素与你老婆是否生气之间的联系。这听起来毫无关联,但机器学习在做的时候是相当愚蠢的。现在假设我们用变量y来表示我们的老婆是否生气了,变量 x1、x2、x3…代表天气元素。我们把求函数 f (x)归结为如下关系:

看到系数 w1 w2 w3 了吗。w_1, w_2, w_3 ..w1, w2, w3 ..?这就是我们要求的数据和元素之间的关系,也就是所谓的模型参数。因此,我们可以定义模型参数如下:

模型参数是由训练数据生成的模型值,用于帮助显示数据中数量之间的关系。

因此,当我们说找到问题的最佳模型时,应该意味着我们已经在现有的数据集上找到了最适合问题的模型参数。

它具有以下几个特征:

  • 用于预测新数据

  • 它显示了我们使用的模型的能力。通常用准确性来表示,我们称之为准确率。

  • 直接从训练数据集学习

  • 通常不需要人工设置

模型参数有多种形式,如神经网络权值、支持向量机中的支持向量、线性回归或逻辑回归算法中的系数。

什么是模型的超参数?

我们经常假设模型超参数看起来像一个模型参数,但它不是真的。实际上这两个概念是完全分开的。如果模型参数是由训练数据集本身建模的,则模型超参数是完全不同的。它完全在模型之外,不依赖于训练数据。它的目的是什么?实际上,他们有以下几个任务:

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

  • 它通常是由模型训练的参与者手工挑选的

  • 它可以基于几种启发式策略来定义

对于一个特定的问题,我们完全不知道什么是最好的模型超参数。因此,在现实中,我们需要使用一些技术来估计最佳取值范围(例如 k 近邻模型中的k系数),如网格搜索。这里我想举几个模型超参数的例子:

  • 训练人工神经网络时的学习率

  • 训练支持向量机时的C和sigma参数

  • 最近邻模型中的k系数

8. 当学习率太高或太低时会怎么样?

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

如果设定的学习率过高,则由于权值更新过大,模型可能会不收敛。有可能在一个更新权值的步骤中,模型跳出了局部优化,使得模型以后很难更新到最优点,而是在在局部优化点附近跳来跳去。

9. 当图像尺寸变为 2 倍,CNN 的参数数量变为几倍?为什么?

对于候选人来说,这是一个非常误导人的问题,因为大多数人会把注意力放在 CNN 参数的数量会增加多少倍的问题上。然而,让我们来看看 CNN 的架构:

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

10. 如何处理不平衡数据?

这是一个测试候选人处理真实数据问题的方法的问题。通常,实际数据和标准数据集在数据集的属性和数据量方面差异很大(标准数据集不需要调整)。对于实际的数据集,可能会出现数据不平衡的情况,即类之间的数据不平衡。

我们现在可以考虑以下技术:

  • 选择正确的度量来评估模型:对于不平衡的数据集,使用准确性来评估是一项非常危险的工作,如上面几节所述。应选择精度、召回、F1 分数、AUC等合适的评价量。

  • 重新采样训练数据集:除了使用不同的评估标准,人们还可以使用一些技术来获得不同的数据集。从一个不平衡的数据集中创建一个平衡的数据集有两种方法,即欠采样和过采样,具体技术包括重复、bootstrapping 或 hits(综合少数过采样技术)等方法。

  • 许多不同模型的集成:通过创建更多的数据来概括模型在实践中并不总是可行的。例如,你有两个层,一个拥有 1000 个数据的罕见类,一个包含 10,000 个数据样本的大型类。因此,我们可以考虑一个 10 个模型的训练解决方案,而不是试图从一个罕见的类中找到 9000 个数据样本来进行模型训练。每个模型由 1000 个稀有类和 1000 个大规模类训练而成。然后使用集成技术获得最佳结果。

重新设计模型 — 损失函数:使用惩罚技术对代价函数中的多数类进行严厉惩罚,帮助模型本身更好地学习稀有类的数据。这使得损失函数的值在类中更全面。

11. 当训练深度学习模型时,Epoch、Batch 和 Iteration 概念是什么意思?

这些是训练神经网络时非常基本的概念,但事实是很多候选人在区分这些概念时都很困惑。

具体来说,你应该回答以下问题:

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

  • Batch:是指当我们不能一次将整个数据集放到神经网络中时,我们将数据集分割成几批较小的数据集。

  • 迭代:是运行 epoch 所需的批数。假设有 10,000 个图像作为数据,批处理的大小(batch_size)为 200。然后一个 epoch 将包含 50 个迭代(10,000 除以 200)。

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

数据生成器在写代码中很重要,数据生成函数帮助我们直接生成数据,然后送到模型中进行每个 batch 的训练。

利用生成函数对训练大数据有很大帮助。因为数据集并不总是需要全部加载到 RAM 中,这是一种内存的浪费,而且如果数据集太大,会导致内存溢出,输入数据的处理时间会变长。

总结

以上是我在面试过程中经常问应聘者的 12 个关于深度学习的面试问题。然而,根据每个候选人的不同,提问的方式也会不同,或者还有一些问题是随机从候选人的问题中提出的。

虽然这篇文章是关于技术问题的,但是与面试相关,并且基于我个人的观点,态度决定了面试成功的 50%。所以,除了积累自己的知识和技能,总是用真诚、进步、谦虚的态度来表达自己,你一定会在任何对话中取得成功。我希望你早日实现你的愿望。

英文原文:

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

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

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

欢迎加入Imagination GPU与人工智能交流群

群已满200人,入群请加小编拉进群,

小编微信号:eetrend89(添加请备注公司名和职称)

推荐阅读

Imagination精彩亮相2021中国集成电路设计创新大会

END

Imagination Technologies是一家总部位于英国的公司,致力于研发芯片和软件知识产权(IP),基于Imagination IP的产品已在全球数十亿人的电话、汽车、家庭和工作场所中使用。获取更多物联网、智能穿戴、通信、汽车电子、图形图像开发等前沿技术信息,欢迎关注 Imagination Tech !

长按识别二维码


关注我们



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
author-avatar
zealyw
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有