21个热门的深度学习面试问答的综合指南
本文列出了一系列热门的深度学习面试的问题,每一个问题都有相应的答案。认真阅读,或许你会对深度学习面试的知识有个全面的了解。
介绍
你打算参加深度学习面试吗?你是否已经迈出了第一步,申请了一个深度学习的职位,并经过了几轮面试的考验而最终落选了呢?
对大多数人来说,搞定面试,尤其是像深度学习专家这样复杂职位,是一项艰巨的任务。深度学习是一个广阔的领域,随着深度学习的不断发展,其性质也在不断变化。你怎样才能跟上步伐呢?你应该关注什么?
这些问题是每一个深度学习爱好者,新生,甚至是专家都曾经问过自己的。
这是写下这篇文章的一个关键原因,这篇文章是一个热门的深度学习面试问题和答案的综合指南。不过,让我再多说一点。
注意:如果你想要深造,一定要查看深造的课程的基础知识!(https://courses.analyticsvidhya.com/courses/fundamentals-of-deep-learning)
为什么我们要列出这些深层次的学习问题?
互联网上有很多关于机器学习和数据科学访谈的资源。机器学习的迅速兴起以及它为复杂任务提供的解决方案是引人注目的,工业界对这一崛起的反应非常好。几乎每一家大公司都有一个数据科学团队,几乎每一家初创公司都将机器学习用于他们的产品。
然而,我们现在看到这个行业正在发生结构性的变化。随着世界各地对更复杂解决方案的需求不断增长,各组织正在转向深度学习框架。
对学习型人才的需求每个月都在增长!这是提高你的技能并开始攀登深度学习高峰的好时机。
本文的主要目的是简单明了的解释问题背后的核心思想。同时,还列出了一些资源,在这些资源中,你可以了解更多问题中有关深度学习主题的信息。
此外,这并不意味着你的面试不包含一个关于机器学习的问题。有些概念在这两个领域都很常见,对你来说非常重要。这些主题包括:
评价指标
梯度下降
偏差与方差(或欠拟合与过拟合)
交叉验证等。
因此,这里有一个明确的采访指南,涵盖了所有主题的细节,以mcq和长格式资源的形式:你将需要的最全面的数据科学和机器学习采访指南(https://www.analyticsvidhya.com/blog/2018/06/comprehensive-data-science-machine-learning-interview-guide)。
如果你正在寻找一个结构化并且细致的指南,包括如何**面试技巧,技巧和案例研究,或许你可以参加Ace数据科学面试课程(https://courses.analyticsvidhya.com/courses/ace-data-science-interviews?utm_source=blog&utm_medium=comprehensive-popular-deep-learning-interview-questions-answers)。
在本综合指南中,主要将深度学习问题分为三个层次:
初级
中级
高级
这里有适合每个人的东西!准备好纸笔,准备学习!
初级深度学习的面试问题
这些问题通常是为了让应聘者熟悉面试官和面试环境。虽然问题本身可能不太难回答,但这一级别是让面试官检查你在深度学习方面的基本概念是否清楚的最好机会。
你对这些问题的回答不必太详细,但一定要记住,面试官可能会回忆你的答案,然后再问更高级的问题。
1. 感知机和逻辑回归有什么区别?
多层感知机(MLP)是用于分类的最基本的神经网络之一。对于二进制分类问题,我们知道输出可以是0或1。这就像简单的logistic回归一样,使用logit函数生成0到1之间的概率。
那么,两者有什么区别呢?
简单地说,就是阈值函数的不同!当我们将logistic回归模型限制设置为正好1或0时,我们得到一个感知机模型:
2. 我们能对一个隐藏层的所有神经元应用同样的偏置值吗?
本质上,你可以在每一层或每一个神经元有不同的偏差值。然而,如果我们的隐藏层中的所有神经元都有一个偏置矩阵,那就是最好的。
需要注意的是,这两种策略会给你带来截然不同的结果。
3. 如果我们在神经网络中不使用任何**函数呢?
这个问题的主要目的是理解为什么我们需要神经网络中的**函数。首先,你可以简单地解释一下神经网络是如何构建的:
步骤1:根据输入的权重计算所有输入(X)的权重和,包括偏差项:
Z = (weights * X) + bias
步骤2:应用**函数计算预期输出:
Y = Activation(Z)
步骤1和2在每一层执行。这不过是向前传播!现在,如果没有**函数呢?
我们对Y的方程本质上是:
Y = Z = (weights * X) + bias
等等,这不是一个简单的线性方程吗?这就是我们需要**函数的原因。线性方程将无法捕捉数据中的复杂模式,这在深度学习问题中是更为明显的。
为了捕捉非线性关系,我们使用**函数,这就是为什么没有**函数的神经网络只是一个线性回归模型。
4. 在神经网络中,如果所有的权值都用相同的初始化呢?
简单地说,如果所有的神经元都具有相同的权值,那么每个隐藏单元将得到完全相同的信号。虽然这可能在正向传播期间起作用,但反向传播期间的代价函数的导数每次都是相同的。
总之,在这种情况下,网络没有学习!你认为模型无法从数据中学习任何模式的现象是什么?是的,欠拟合。
因此,如果所有权重的初始值都相同,则会导致拟合不足。
注意:这个问题可能会进一步导致关于梯度爆炸和梯度消失的问题,我在下面进行讨论。
5. 列出深度学习中有监督和无监督的任务。
这是一个棘手的问题。可能有一种误解,认为深度学习只能解决无监督的学习问题。事实并非如此。监督学习和深度学习的一些例子包括:
图像分类
文本分类
序列标记
另一方面,也有一些无监督的深度学习技巧:
单词嵌入(如Skip-gram和连续词袋模型):理解单词嵌入:从Word2Vec到计数向量(https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/)
自动编码器:学习如何使用自动编码器增强模糊图像!(https://www.analyticsvidhya.com/blog/2020/02/what-is-autoencoder-enhance-image-resolution)
下面是一篇关于深度学习在无监督任务中的应用的好文章:
深度学习的要点:无监督深度学习介绍(使用Python代码) (https://www.analyticsvidhya.com/blog/2018/05/essentials-of-deep-learning-trudging-into-unsupervised-deep-learning)
6. 权值和偏差在神经网络中的作用是什么?
用一个真实的例子来解释这个问题。想一想你今天想出去和你的朋友们打板球。现在,有很多因素会影响你的决策,比如:
你有多少朋友能参加比赛?
你们能带多少设备?
外面的温度是多少?
等等。这些因素可能会极大地改变你的决定,也可能不会太大。例如,如果外面下雨,那么你根本不能出去玩。或者如果你只有一个球棒,你也可以边玩边分享。这些因素影响游戏的程度称为该因素的权重。
天气或温度等因素的权重可能更高,而设备等其他因素的权重可能更低。
然而,这是否意味着我们只能用一根球棒打板球比赛?不, 我们还需要1个球和6个三柱门。而这就是偏差产生的原因。偏差允许你指定一些阈值,这有助于仅在超过阈值时**决策点(或神经元)
7. 正向传播和反向传播在深度学习中是如何工作的?
这可以用两种方式来回答。如果你在电话面试中,你不可能把所有的微积分都写下来,并给面试官看。在这种情况下,最好这样解释:
正向传播:为输入提供到隐藏层的权重。在每个隐藏层,我们计算每个节点的**输出,然后进一步传播到下一层,直到到达最终输出层。因为我们从输入层开始到最终输出层,我们是向前移动,所以这被称为向前传播。
反向传播:我们通过了解代价函数如何随神经网络权值和偏差的变化而变化来最小化代价函数。这种变化是通过计算每个隐藏层的梯度(并使用链式法则)得到的。因为我们从最终的代价函数开始,回到每一个隐藏层,我们向后移动,因此它被称为反向传播。
对于面对面的采访,最好是直接创建一个包含两个输入、一个隐藏层和一个输出层的简单神经网络,并加以解释。
前向传播:
反向传播:
在L2层,对于所有权重:
在L1层,对于所有权重:
你不需要解释偏差,尽管你可能需要把上面的方程展开来代替实际的导数。
8. 深度学习中常用的数据结构是什么?
深度学习从最简单的数据结构(如列表)到复杂的数据结构(如计算图)。
以下是最常见的:
List:元素的有序序列(NumPy ndarrays)
矩阵(Matrix):具有行和列的元素的有序序列
Dataframe:DataFrame是一个二维的数据结构,就像一个矩阵,它包含实际的数据。列名和行表示数据集中的每个数据点。如果100名学生的分数、成绩和详细信息存储在Dataframe中,则其详细信息存储为列,每一行代表100名学生的数据。
Tensors:张量,很常见的深度学习名词,在PyTorch和TensorFlow中都使用了张量,张量就像是深度学习的基本编程单元。就像多维数组一样,我们可以对它们执行许多数学运算。阅读更多关于张量的内容(https://www.analyticsvidhya.com/blog/2017/03/tensorflow-understanding-tensors-and-graphs)。
计算图:由于深度学习涉及到多个层次,而且常常涉及数百个参数,因此理解计算流程很重要,计算图就是这样。计算图给出了每个节点表示神经网络中的一个操作或一个组件时执行的操作序列
中级深度学习的面试问题
一旦基本知识被排除在外,面试将产生更深一点的深度学习概念。如果你平时对数学概念有相当多的练习,并且还对它们进行编码,那么这些问题可能会容易回答。
此外,这些问题也可以变得更加具体。一般来说,最好包括你在自己的项目中如何使用问题中提出的概念的例子。这样做有两个好处:
它会让面试官知道你也有实践经验
既然你在谈论你已经实施的项目,那么谈论你自己的工作就容易多了
在这里,我概述了问题中的关键概念,你可以随时自定义你自己的答案,以添加更多关于你使用这些深度学习算法和技术的经验。
9. 为什么要使用Batch Normalization?
一旦面试官问了你关于深度学习架构的基础知识,他们就会转移到改善你的深度学习模型性能的关键话题上。
批标准化是减少深度学习算法训练时间的技术之一。就像对输入进行归一化有助于改进我们的logistic回归模型一样,我们也可以对深度学习模型中隐藏层的**进行归一化:
我们把a[1]和a[2]标准化。这意味着我们对层的输入进行标准化,然后对标准化的输入应用**函数。
这里有一篇文章,解释了批标准化和其他技术,以改善神经网络: https://www.analyticsvidhya.com/blog/2018/11/neural-networks-hyperparameter-tuning-regularization-deeplearning
10. 列出到目前为止在项目中使用的**函数,以及如何选择**函数。
最常见的**函数是:
Sigmoid
Tanh
ReLU
Softmax
虽然了解所有的**函数并不重要,但你始终可以通过了解这些函数的范围以及如何使用它们来得分。这是一张方便的表格,你可以按照它来做:
以下是如何使用这些**函数和其他**函数的指南:https://www.analyticsvidhya.com/blog/2020/01/fundamentals-deep-learning-activation-functions-when-to-use-them
11. 为什么卷积神经网络(CNN)对图像数据的处理效果更好?
这个问题的关键在于卷积运算。与人类不同,机器将图像视为像素值的矩阵。它不是解释花瓣或耳朵的形状,而是识别曲线和边缘。
因此,与其看整个图像,不如只看一部分图像。对300 x 300像素的图像执行此操作意味着将矩阵分割为更小的3 x 3矩阵并逐个处理它们,这就是卷积。
数学上,我们只是对矩阵执行一个小操作,帮助我们检测图像中的特征,如边界、颜色等。
Z=X*f
在这里,我们将输入矩阵X与另一个称为滤波器的 f 矩阵卷积(*运算,而不是乘法),以创建一个新矩阵Z。然后将该矩阵传递给其他层。
如果你面前有一块板或者屏幕,你可以用一个简单的例子来说明这一点:
进一步了解CNN的工作方式:https://www.analyticsvidhya.com/blog/2018/12/guide-convolutional-neural-network-cnn
12. 为什么RNNs在处理文本数据时工作得更好?
将RNN与其他模型区别开来的主要部分是在每个节点上增加一个循环。这个循环带来了RNNs中的递归机制。在一个基本的人工神经网络(ANN)中,每个输入都被赋予相同的权值,并同时反馈给网络。所以,对于“我看了电影,讨厌它”这样的句子来说,很难捕捉到“它”和“电影”之间的关联信息。
循环的加法是表示为下一个节点保留上一个节点的信息,依此类推,这就是为什么RNNs对于处理顺序数据来说会更好的原因,并且由于文本数据本质上也是顺序的,所以它们是对ANN的改进。
13. 在CNN中,如果输入大小为5 X 5,滤波器大小为7 X 7,那么输出的大小是多少?
这是一个很直观的答案。正如我们在上面看到的,我们在x上一步一步地进行卷积,向右,最后,我们得到了维数为2x2的Z,维数为3x3的x。
因此,为了使输入大小与滤波器大小相似,我们使用矩阵填充,将0添加到输入矩阵,使其新大小至少变为7 X 7。因此,输出大小将使用以下公式:
图像的维数= (n, n) = 5 X 5
滤波器的维数= (f,f) = 7 X 7
Padding = 1(在所有边加1个像素值为0)
输出的维数为(n+2p-f+1) X (n+2p-f+1) = 1 X 1
14. 在CNN中valid padding和same padding之间有什么区别?
这个问题更有可能是前一个问题的后续问题。或者,如果你已经解释了在计算机视觉任务中如何使用CNNs,面试官可能会问这个问题以及填充参数的细节。
valid padding:当我们不使用任何内边距时。卷积后的矩阵的维数为(n - f + 1) X (n - f + 1)
same padding:在所有边缘添加填充元素,这样输出矩阵将具有与输入矩阵具有相同的维度
15. 你所说的梯度爆炸和梯度消失是什么意思?
这里的关键是使解释尽可能简单。我们知道,梯度下降算法试图通过采取小的步骤来最小化误差,这些步骤用于更新神经网络中的权重和偏差。
但是,有时候,步骤会变得太大,从而导致更大的权重更新和偏差项更新,以至于导致权重中出现溢出(或NaN)值。这导致了一个不稳定的算法,称为梯度爆炸。
另一方面,这些步骤太小,导致权重和偏差项的变化很小,有时甚至可以忽略不计。因此,我们可能最终会训练一个深度学习模型,每次使用几乎相同的权重和偏差,并且永远不会达到最小误差,这叫做梯度消失。
需要注意的一点是,这两个问题在递归神经网络中特别明显,所以准备好回答关于RNN的后续问题吧!
16. 迁移学习在深度学习中的应用是什么?
我相信你会对为什么把这一个相对简单的问题列入中级水平有疑问,原因是它会产生大量的后续问题!
迁移学习的使用是深度学习的关键里程碑之一。在一个巨大的数据集上训练一个大模型,然后在更小更简单的数据集上使用最终的参数,这导致了以预训练模型的形式定义的突破。无论是计算机视觉还是NLP,预先训练的模型已经成为研究和行业的规范。
一些流行的例子包括BERT、ResNet、GPT-2、VGG-16等等。
在这里,你可以通过指出你使用这些模型的具体例子或项目,以及你如何使用它们来获得印象分。
我们不可能在这里讨论所有的问题,所以这里有一些资源可供参考:
数据科学家应该知道的10个高级深度学习架构!(https://www.analyticsvidhya.com/blog/2019/09/demystifying-bert-groundbreaking-nlp-framework)
解密BERT:开创性的NLP框架(https://www.analyticsvidhya.com/blog/2017/08/10-advanced-deep-learning-architectures-data-scientists)
高级深度学习面试问题
正是在这里,问题变得真正具体到你的项目或你在面试之前讨论过的内容。
此外,根据领域的不同,通过计算机视觉或自然语言处理,这些问题可能会发生变化。虽然详细了解每个模型的体系结构并不重要,但是你需要知道它们背后的原理以及为什么首先需要这些模型。
同样,和中级阶段一样,重要的是要经常在讨论中引入你自己学习或实践过的例子。
17. 反向传播在RNN中与ANN有什么不同?
在递归神经网络中,每个节点都有一个额外的循环:
这个循环本质上也包括网络中的时间分量。这有助于从数据中获取序列信息,而这在一般的人工神经网络中是不可能的。
这就是为什么RNN中的反向传播称为时间反向传播,如在阶跃时间的反向传播。
你可以在这里找到RNN的详细解释:深度学习的基础,递归神经网络简介。https://www.analyticsvidhya.com/blog/2017/12/introduction-to-recurrent-neural-networks
18. LSTM如何解决梯度消失这一挑战?
LSTM模型被认为是RNNs的一个特例。在使用普通RNN模型时,我们前面看到的梯度消失和梯度爆炸的问题是一个缺点。
在LSTMs中,我们添加了一个遗忘门,它基本上是一个内存单元,它保留跨时间步保留的信息,并丢弃其他不需要的信息。这还需要输入和输出门来包含遗忘门的结果。
19. 为什么GRU比LSTM快?
正如你所看到的,LSTM模型可能会变得非常复杂。为了保留跨时间保留信息的功能,同时又不创建过于复杂的模型,我们需要GRUs。
基本上,在GRUs中,我们没有一个额外的遗忘门,而是将输入和遗忘门合并成一个更新的门:
正是这种门数的减少使得GRU比LSTM更简单、更快。你可以在这里详细了解GRUs、LSTMs和其他序列模型:学习序列建模和注意模型的必读教程(https://www.analyticsvidhya.com/blog/2019/01/sequence-models-deeplearning)。
20.transformer架构如何优于RNN?
深度学习的发展使得解决自然语言处理中的许多任务成为可能。诸如RNNs、LSTMs等网络/序列模型专门用于此目的,以便从给定的句子或段落捕获所有可能的信息。然而,顺序处理也有其局限性:
它需要很高的处理能力
由于其顺序性,很难并行执行
这就产生了Transformer架构。Transformers使用所谓的注意力机制。这基本上意味着映射一个句子中所有部分之间的依赖关系。
这里有一篇很好的文章来解释Transformers :Transformers 是如何在NLP中工作的?最新最先进的模型指南(https://www.analyticsvidhya.com/blog/2019/06/understanding-transformers-nlp-state-of-the-art-models)。
21. 描述一个你参与的项目和你使用的工具/框架?
即使在你的深度学习面试中没有上述问题,这个问题也肯定会被问。我已经将它包含在高级部分中,因为你可能会对所编写的代码的每个部分都进行检查。
面试前,确保:
你的GitHub代码更新了吗
准备好对至少2-3个你使用深度学习的项目进行深入的解释
当你被问到这样一个问题时,最好是简短地讲30秒,内容是:
问题陈述
你使用的数据和框架(如PyTorch或TensorFlow)
你使用的任何预先训练的模型,或者只是你所构建的基本模型的名称
你实现的评估指标的值
在此之后,你可以开始详细陈述模型体系结构、必须采取哪些预处理步骤以及这些步骤如何更改数据。
需要注意的重要一点是,项目不必非常复杂。一个解释清楚的目标检测项目会比一个解释不清楚的视频分类项目为你赢得更多的分数。为此,我建议为你实现的每个项目都使用上述格式的README文件。
尾注
这是一些你在深度学习面试中会遇到的关键问题。我试着讲一些更能广泛适用于不同人群的话题,而不是深入探讨深度学习在NLP或计算机视觉等领域的应用细节。
建议你对职位描述有一个清晰的认识,并做好相应的准备。如果这个职位更倾向于计算机视觉,我建议更多地学习卷积神经网络和OpenCV,而自然语言处理的职位将更多地转向RNNs、transformer等。
原文链接:https://www.analyticsvidhya.com/blog/2020/04/comprehensive-popular-deep-learning-interview-questions-answers/
留言送书福利
本次留言主题是“你希望看到咱们公众号发哪些深度学习相关的内容?”
这次走心留言的读者太多了,小编都不知道怎么选了,以后公号会持续推出“留言送书”活动,争取让走心留言的小伙伴都能得到福利,非常感谢,每一条小编都认真阅读了,会继续努力哒。这次没被抽中的朋友不要气馁~ 多多留言会增加中奖概率。
恭喜下面留言的这位读者获赠书籍一本(在走心的基础上,你靠内容多赢得了这次福利)。请联系小编:mthler。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文(无广告)。
↓扫描二维码添加小编↓