近年来,对深度学习的需求不断增长,其应用程序被应用于各个商业部门。各公司现在都在寻找能够利用深度学习和机器学习技术的专业人士。在本文中,将整理深度学习面试中最常被问到的25个问题和答案。如果你最近正在参加深度学习相关的面试工作,那么这些问题会对你有所帮助。
1、什么是深度学习?
深度学习涉及获取大量结构化或非结构化数据,并使用复杂算法训练神经网络。它执行复杂的操作来提取隐藏的模式和特征(例如,区分猫和狗的图像)
2、什么是神经网络?
神经网络复制了人类的学习方式,灵感来自于我们大脑中的神经元是如何激活的,但是比人类大脑要简单得多。
最常见的神经网络由三个网络层组成:
- 输入层
- 隐藏层(这是最重要的一层,在这里进行特征提取,并进行调整以更快地训练和更好地运行)
- 输出层
神经网络用于深度学习算法,如CNN, RNN, GAN等。
3、什么是多层感知机(MLP)?
和神经网络一样,mlp有一个输入层、一个隐藏层和一个输出层。它与具有一个或多个隐藏层的单层感知器的的结构相同。单层感知器只能对具有二进制输出 (0,1) 的线性可分类进行分类,但 MLP 可以对非线性类进行分类。
除输入层外,其他层中的每个节点都使用非线性激活函数。输入层、传入的数据和激活函数基于所有节点和权重相加从而产生输出。MLP 使用一种称为“反向传播”的方法来优化节点的权重。在反向传播中,神经网络在损失函数的帮助下计算误差,从误差的来源向后传播此误差(调整权重以更准确地训练模型)。
4、什么是数据规范化(Normalization),我们为什么需要它?
Normalization的中文翻译一般叫做“规范化”,是一种对数值的特殊函数变换方法,也就是说假设原始的某个数值是x,套上一个起到规范化作用的函数,对规范化之前的数值x进行转换,形成一个规范化后的数值。
规范化将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题。
按照规范化操作涉及对象的不同可以分为两大类:
一类是对第L层每个神经元的激活值 进行Normalization操作,比如BatchNorm/ LayerNorm/ InstanceNorm/ GroupNorm等方法都属于这一类;
另外一类是对神经网络中连接相邻隐层神经元之间的边上的权重进行规范化操作,比如Weight Norm就属于这一类。
一般机器学习里看到的损失函数里面加入的对参数的的L1/L2等正则项,本质上也属于这这一类的规范化操作。
L1正则的规范化目标是造成参数的稀疏化,就是争取达到让大量参数值取得0值的效果,而L2正则的规范化目标是有效减小原始参数值的大小。
有了这些规范目标,通过具体的规范化手段来改变参数值,以达到避免模型过拟合的目的。
5、什么是玻尔兹曼机?
最基本的深度学习模型之一是玻尔兹曼机,类似于多层感知器的简化版本。这个模型有一个可见的输入层和一个隐藏层——只是一个两层的神经网络,可以随机决定一个神经元应该打开还是关闭。节点跨层连接,但同一层的两个节点没有连接。
6、激活函数在神经网络中的作用是什么?
激活函数模拟生物学中的神经元是否应该被激发。它接受输入和偏差的加权和作为任何激活函数的输入。从数学角度讲引入激活函数是为了增加神经网络模型的非线性。Sigmoid、ReLU、Tanh 都是常见的激活函数。
7、什么是成本函数?
成本函数也被称为“损失”或“误差”,它是评估模型性能好坏的一种度量方法。它用于计算反向传播过程中输出层的误差。我们通过神经网络将错误向后推并在不同的训练函数中使用它。
8、什么是梯度下降?
梯度下降是一种最小化成本函数或最小化误差的最优算法。目的是找到一个函数的局部全局极小值。这决定了模型应该采取的减少误差的方向。
9、反向传播是什么?
这是深度学习面试中最常被问到的问题之一。
1974年,Paul Werbos首次给出了如何训练一般网络的学习算法—back propagation。这个算法可以高效的计算每一次迭代过程中的梯度。反向传播算法是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:
(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;
(2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;
(3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。
10、前馈神经网络和循环神经网络有什么区别?
前馈神经网络信号从输入到输出沿一个方向传播。没有反馈回路;网络只考虑当前输入。它无法记住以前的输入(例如 CNN)。
循环神经网络的信号双向传播,形成一个循环网络。它考虑当前输入和先前接收到的输入,以生成层的输出,并且由于其内部存储器,它可以记住过去的数据。
11、循环神经网络 (RNN) 有哪些应用?
RNN 可用于情感分析、文本挖掘等,可以解决时间序列问题,例如预测一个月或季度的股票价格。
12、Softmax 和 ReLU 函数是什么?
Softmax 是一种激活函数,可生成介于 0 和 1 之间的输出。它将每个输出除以所有输出的总和,使得输出的总和等于 1。Softmax 通常用于分类任务的输出层和注意力机制的计算。
ReLU是使用最广泛的激活函数。如果 X 为正,则输出 X,否则为零。ReLU 常用于隐藏层的激活函数。
13、什么是超参数?
这是另一个经常被问到的深度学习面试问题。超参数在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。因为一般情况下我们将可以根据模型自身的算法,通过数据迭代自动学习出的变量称为参数,而超参数的设置可以影响到这些参数是如何训练,所以称其为超参数。
14、如果学习率设置得太低或太高会发生什么?
当学习率太低时,模型的训练将进展得非常缓慢,因为只对权重进行最小的更新。它需要多次更新才能达到最小值。如果非常小可能最终的梯度可能不会跳出局部最小值,导致训练的结果并不是最优解。
如果学习率设置得太高,由于权重的急剧更新,这将导致损失函数出现不希望的发散行为。可能导致模型无法收敛,甚至发散(网络无法训练)。
15、什么是Dropout和BN?
Dropout是一种随机删除网络中隐藏和可见单元的技术,可以以防止数据过拟合(通常删除20%内的节点)。它使收敛网络所需的迭代次数增加。
BN是一种通过对每一层的输入进行规范化,变为平均为0,标准差为1的正态分布,从而提高神经网络性能和稳定性的技术。
16、批量梯度下降和随机梯度下降的区别是什么?
17、什么是过拟合和欠拟合,以及如何解决?
过拟合是指模型在训练集上表现很好,到了验证和测试阶段就很差,即模型的泛化能力很差。当模型对训练数据中的细节和噪声的学习达到对模型对新信息的执行产生不利影响的程度时,就会发生过拟合。它更可能发生在学习目标函数时具有更大灵活性的非线性模型中。样本数量太少,样本噪音干扰过大,模型复杂度过高都会产生过拟合。
欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况。这通常发生在训练模型的数据较少且不正确的情况下。
为了防止过拟合和欠拟合,您可以重新采样数据来估计模型的准确性(k-fold交叉验证),并通过一个验证数据集来评估模型。
18、如何在网络中初始化权值?
一般情况下都使用随机初始化权值。
不能将所有权重初始化为0,因为这将使您的模型类似于线性模型。所有的神经元和每一层都执行相同的操作,给出相同的输出,使深层网络无用。
随机初始化所有权重通过将权重初始化为非常接近0的值来随机分配权重。由于每个神经元执行不同的计算,它使模型具有更好的准确性。
19、CNN中常见的层有哪些?
- 卷积层——执行卷积操作的层,创建几个更小的图片窗口来浏览数据。
- 激活层-它给网络带来非线性,例如RELU将所有负像素转换为零。输出是一个经过整流的特征映射。
- 池化层——池化是一种向下采样的操作,它降低了特征图的维数。
- 全连通层——该层出处类别或者回归的数值。
20、CNN的“池化”是什么?它是如何运作的?
池化用于减少CNN的空间维度。它执行下采样操作来降低维数,并通过在输入矩阵上滑动一个过滤器矩阵来创建一个汇集的特征映射。
21、LSTM是如何工作的?
长-短期记忆(LSTM)是一种特殊的循环神经网络,能够学习长期依赖关系。LSTM网络有三个步骤:
- 网络决定忘记什么,记住什么。
- 它有选择地更新单元状态值。
- 网络决定当前状态的哪一部分可以输出。
22、什么是梯度消失和梯度爆炸?
在训练RNN时,你的斜率可能会变得太小或太大;这使得训练非常困难。当斜率太小时,这个问题被称为“消失梯度”。当坡度趋向于指数增长而不是衰减时,它被称为“爆炸梯度”。梯度问题导致训练时间长,性能差,精度低。
23、深度学习中Epoch、Batch和Iteration的区别是什么?
Epoch —— 表示整个数据集的一次迭代(训练数据的所有内容)。
Batch——指的是因为不能一次性将整个数据集传递给神经网络,所以我们将数据集分成几个批处理进行处理,每一批称为Batch。
Iteration——如果我们有10,000张图像作为数据,Batch大小为200。那么一个Epoch 应该运行50次Iteration(10,000除以50)。
24、深度学习框架中的张量是什么意思?
这是另一个最常被问到的深度学习面试问题。张量是用高维数组表示的数学对象。这些具有不同维度和等级的数据数组作为神经网络的输入被称为“张量”。
25、比较常用的深度学习框架例如Tensorflow,Pytorch
大概说下就可以了,例如:这些框架提供c++和Python api,都支持CPU和GPU计算设备。那个熟悉说那个就可以了比如常用Pytorch,但是因为有些实现是Tensorflow的所以需要看代码所以对Tensorflow也了解一些,不要说谁好谁坏,因为很容易落入圈套,万一你说Tensorflow好,面试公司用Pytorch怎么办。