1. [卷积核大小] 提升卷积核(convolutional kernel)的大小会显著提升卷积神经网络的性能,这种说法是
- 正确的
- 错误的
这种说法是错误的。提升卷积核的大小并不一定会显著提升卷积神经网络的性能。卷积核的大小会影响网络的感受野(receptive field),即网络能够感知到的输入图像中的区域大小。增大卷积核的大小会增大感受野,但这并不一定会提升网络的性能。
实际上,选择合适的卷积核大小是一个重要的超参数调优问题。过大或过小的卷积核都可能导致网络性能下降。因此,我们需要根据具体问题来选择合适的卷积核大小,以达到最佳性能。
此外,增大卷积核的大小还会增加网络的计算量和参数数量,可能导致过拟合和训练时间增加。因此,在实际应用中,我们通常会使用较小的卷积核(例如 3x3 或 5x5),并通过堆叠多层卷积层来增大感受野。这种方法可以在保持计算量和参数数量可控的同时,提高网络性能。
2. [混沌度] 混沌度(Perplexity)是一种常见的应用在使用深度学习处理NLP问题过程中的评估技术,关于混沌度,哪种说法是正确的?
- 混沌度没什么影响
- 混沌度越低越好
- 混沌度越高越好
- 混沌度对于结果的影响不一定
混沌度越低越好。
混沌度(Perplexity)是一种常用于评估语言模型的指标。它衡量了模型对测试数据的预测能力,表示模型在预测测试数据中每个词的平均不确定性。混沌度越低,表示模型对测试数据的预测能力越强,即模型的性能越好。
混沌度与交叉熵损失(Cross Entropy Loss)有密切关系。交叉熵损失衡量了模型预测的概率分布与真实概率分布之间的差异。混沌度实际上就是交叉熵损失的指数,因此两者之间具有一一对应的关系。在评估语言模型时,我们通常希望混沌度和交叉熵损失都尽可能小。
3. [Dropout] 假设我们有一个5层的神经网络,这个神经网络在使用一个4GB显存显卡时需要花费3个小时来完成训练。而在测试过程中,单个数据需要花费2秒的时间。 如果我们现在把架构变换一下,当评分是0.2和0.3时,分别在第2层和第4层添加Dropout,那么新架构的测试所用时间会变为多少?
- 少于2s
- 大于2s
- 仍是2s
- 说不准
在架构中添加Dropout这一改动仅会影响训练过程,而并不影响测试过程。
4. [感受野] 在CNN网络中,图A经过核为3×3,步长为2的卷积层,ReLU激活函数层,BN层,以及一个步长为2,核为2×2的池化层后,再经过一个3×3的的卷积层,步长为1,此时的感受野是()
- 10
- 11
- 12
- 13
l n − 1 = ( l n − 1 ) × s n − 1 + k n − 1 l_{n - 1} = (l_n - 1) \times s_{n - 1} + k_{n - 1} ln−1=(ln−1)×sn−1+kn−1
其中: l n = 1 l_n = 1 ln=1,因此我们可以推出(从后往前推):
l 0 = 1 l 1 = ( 1 − 1 ) × 1 + 3 = 3 l 2 = ( 3 − 1 ) × 2 + 2 = 6 l 3 = ( 6 − 1 ) × 2 + 3 = 13 \begin{aligned} & l_0 = 1 \\ & l_1 = (1 - 1) \times 1 + 3 = 3 \\ & l_2 = (3 - 1) \times 2 + 2 = 6 \\ & l_3 = (6 - 1) \times 2 + 3 = 13 \end{aligned} l0=1l1=(1−1)×1+3=3l2=(3−1)×2+2=6l3=(6−1)×2+3=13
即导数第三层特征图的感受野为13。
5. [梯度下降法的顺序] 梯度下降算法的正确步骤是什么?
a. 计算预测值和真实值之间的误差
b. 重复迭代,直至得到网络权重的最佳值
c. 把输入传入网络,得到输出值
d. 用随机值初始化权重和偏差
e. 对每一个产生误差的神经元,调整相应的(权重)值以减小误差
- abcde
- edcba
- cbaed
- dcaeb
dcaeb 这几个步骤面试的时候最好是能够背着说出来吧
6. [卷积核可视化] 下图所示的网络用于训练识别字符H和T,如下所示
-
-
-
-
可能是A或B,取决于神经网络的权重设置
训练出来的就是个二分类器,简单举例,如果分类器认为中间一列全为黑就是 T,否则就是H,那么输出全黑,如果分类器认为右下角为黑就是 H,否则就是T,那么输出全白,具体还得看分类器权重是怎么学的
我在做这道题的时候,其实第一反应就是,直接选择D的。因为网络的中间权重不知道,我怎么判断特定的结果呢? 换句话说,权重是random的, 只有两个输入和两个对应的输出,是不能说,中间的权重一定是啥啥啥。
首先你网络学习到的结果就两种结果,可以把他当做一个分类问题。
7. [调整超参数] 假设你需要调整超参数来最小化代价函数(cost function),会使用下列哪项技术?
- 穷举搜索
- 随机搜索
- Bayesian优化
- 都可以
穷举搜索法,随机搜索法,贝叶斯优化都可以优化超参数,各有优劣。所以ABC三种都可实现调整优化超参数。
穷举搜索:如网格法grid search 随机搜索快于穷举 bayesian优化:在上一次结果较好的参数取值附近查找
我们可以使用上述所有技术来调整超参数以最小化代价函数。
-
穷举搜索:穷举搜索是一种简单的超参数调优方法,它通过遍历超参数空间中的所有可能组合来寻找最优解。这种方法适用于超参数空间较小的情况,但当超参数数量较多时,计算量会非常大。
-
随机搜索:随机搜索是一种更高效的超参数调优方法。它通过在超参数空间中随机采样来寻找最优解。与穷举搜索相比,随机搜索可以更快地找到较好的解,但它不能保证找到全局最优解。
-
Bayesian优化:Bayesian优化是一种更先进的超参数调优方法。它使用贝叶斯统计方法来建立代价函数的概率模型,并利用这个模型来指导超参数的选择。与其他方法相比,Bayesian优化可以更快地找到较好的解,且具有更高的准确性。
8. [Pooling] 当在卷积神经网络中加入池化层(pooling layer)时,平移变换的不变性会被保留,是吗?
- 不知道
- 看情况
- 是
- 否
当在卷积神经网络中加入池化层时,平移变换的不变性会被保留。
池化层的作用是对输入特征图进行下采样,减少特征图的尺寸。它通过对局部区域内的特征值进行聚合运算(例如最大值或平均值)来实现这一目的。由于池化层对局部区域内的特征值进行聚合,因此它具有一定的平移不变性。这意味着,当输入图像发生平移变换时,池化层的输出仍然保持不变。
例如,假设我们有一个最大池化层,它对输入特征图进行2×2的最大池化。当输入图像发生1个像素的水平平移时,池化层的输出仍然保持不变。这是因为池化层对每个2×2的局部区域内的最大值进行聚合,而这些局部区域内的最大值在平移变换后仍然保持不变。
[ResNet] 9. ResNet-50 有多少个卷积层? ()
- 48
- 49
- 50
- 51
ResNet-50就是因为它有50层网络,这50层里只有一个全连接层,剩下的都是卷积层,所以是50-1=49
10. [防止过拟合] 深度学习中,以下哪些方法可以降低模型过拟合?()
- 增加更多的样本
- Dropout
- 增大模型复杂度,提高在训练集上的效果
- 增加参数惩罚
防止模型过拟合:
- 引入正则化(参数范数惩罚)
- Dropout
- 提前终止训练
- 增加样本量
- 参数绑定与参数共享
- 辅助分类节点(auxiliary classifiers)
- Batch Normalization
正则化(regularization)会给给代价函数增加一个惩罚项,使得系数不会达到很大的值。
11. [激活函数] 深度学习中的激活函数需要具有哪些属性?()
- 计算简单
- 非线性
- 具有饱和区
- 几乎处处可微
- 非线性:即导数不是常数。这个条件是多层神经网络的基础,保证多层网络不退化成单层线性网络。这也是激活函数的意义所在。
- 几乎处处可微:可微性保证了在优化中梯度的可计算性。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU,只满足几乎处处可微(即仅在有限个点处不可微)。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响。
- 计算简单:非线性函数有很多。极端的说,一个多层神经网络也可以作为一个非线性函数,类似于Network In Network中把它当做卷积操作的做法。但激活函数在神经网络前向的计算次数与神经元的个数成正比,因此简单的非线性函数自然更适合用作激活函数。这也是ReLU之流比其它使用Exp等操作的激活函数更受欢迎的其中一个原因。
- 非饱和性(saturation):饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。最经典的例子是Sigmoid,它的导数在x为比较大的正值和比较小的负值时都会接近于0。更极端的例子是阶跃函数,由于它在几乎所有位置的梯度都为0,因此处处饱和,无法作为激活函数。ReLU在x>0时导数恒为1,因此对于再大的正值也不会饱和。但同时对于x<0,其梯度恒为0,这时候它也会出现饱和的现象(在这种情况下通常称为dying ReLU)。Leaky ReLU和PReLU的提出正是为了解决这一问题。
- 单调性(monotonic):即导数符号不变。这个性质大部分激活函数都有,除了诸如sin、cos等。个人理解,单调性使得在激活函数处的梯度方向不会经常改变,从而让训练更容易收敛。
- 输出范围有限:有限的输出范围使得网络对于一些比较大的输入也会比较稳定,这也是为什么早期的激活函数都以此类函数为主,如Sigmoid、TanH。但这导致了前面提到的梯度消失问题,而且强行让每一层的输出限制到固定范围会限制其表达能力。因此现在这类函数仅用于某些需要特定输出范围的场合,比如概率输出(此时loss函数中的log操作能够抵消其梯度消失的影响)、LSTM里的gate函数。
- 接近恒等变换(identity):即约等于x。这样的好处是使得输出的幅值不会随着深度的增加而发生显著的增加,从而使网络更为稳定,同时梯度也能够更容易地回传。这个与非线性是有点矛盾的,因此激活函数基本只是部分满足这个条件,比如TanH只在原点附近有线性区(在原点为0且在原点的导数为1),而ReLU只在x>0时为线性。这个性质也让初始化参数范围的推导更为简单。这种恒等变换的性质也被其他一些网络结构设计所借鉴,比如CNN中的ResNet和RNN中的LSTM。
- 参数少:大部分激活函数都是没有参数的。像PReLU带单个参数会略微增加网络的大小。还有一个例外是Maxout,尽管本身没有参数,但在同样输出通道数下k路Maxout需要的输入通道数是其它函数的k倍,这意味着神经元数目也需要变为k倍;但如果不考虑维持输出通道数的情况下,该激活函数又能将参数个数减少为原来的k倍。
- 归一化(normalization):这个是最近才出来的概念,对应的激活函数是SELU,主要思想是使样本分布自动归一化到零均值、单位方差的分布,从而稳定训练。在这之前,这种归一化的思想也被用于网络结构的设计,比如Batch Normalization。
12. [权重共享] 下列哪个神经网络结构会发生权重共享?
- 卷积神经网络
- 循环神经网络
- 全连接神经网络
- 选项A和B
权值共享就是说,给一张输入图片,用一个卷积核去扫这张图,卷积核里面的数就叫权重,这张图每个位置是被同样的卷积核扫的,所以权重是一样的,也就是共享。可以极大地减少参数数量,这是全连接神经网络不具备的优势。
CNN,RNN
-
卷积神经网络:在卷积神经网络中,卷积层的权重是共享的。这意味着,对于同一层中的所有卷积核,它们都使用相同的权重。这种权重共享机制使得卷积神经网络能够有效地提取图像中的局部特征,同时减少了模型的参数数量。
-
循环神经网络:在循环神经网络中,每个时间步的权重也是共享的。这意味着,对于同一层中不同时刻的神经元,它们都使用相同的权重。这种权重共享机制使得循环神经网络能够处理任意长度的序列数据,同时减少了模型的参数数量。
13. [dropout] 下面哪项操作能实现跟神经网络中Dropout的类似效果?
-
Boosting
-
Bagging
-
Stacking
-
Mapping
-
Boosting:Boosting 是一种集成学习方法,它通过迭代地训练多个弱学习器来构建一个强学习器。在每次迭代中,Boosting 算法会根据上一轮的预测结果调整样本权重,使得被错误分类的样本在下一轮中获得更大的关注。最终,Boosting 算法会将所有弱学习器的预测结果进行加权组合,得到最终的预测结果。
-
Bagging:Bagging 是一种集成学习方法,它通过对训练数据进行自助采样(bootstrap sampling)来生成多个不同的模型,然后对这些模型的预测结果进行平均或投票来得到最终的预测结果。由于每个模型都是在不同的训练数据子集上训练的,因此它们之间具有一定的差异性。Bagging 的过程类似于神经网络中的 Dropout 操作。
-
Stacking:Stacking 是一种集成学习方法,它通过将多个不同模型的预测结果作为输入来训练一个元模型(meta-model),从而实现对多个模型的集成。与其他集成学习方法不同,Stacking 不仅考虑了每个模型单独的预测能力,还考虑了它们之间的相互关系。
-
Mapping:Mapping 不是一种机器学习技术。在计算机科学中,Mapping 通常指将一个数据结构映射到另一个数据结构的过程。例如,在关系数据库中,我们可以使用对象关系映射(Object-Relational Mapping, ORM)技术将数据库表映射为程序中的对象。
14. [BN] 批规范化(Batch Normalization)的好处都有啥?
- 让每一层的输入的范围都大致固定
- 它将权重的归一化平均值和标准差
- 它是一种非常有效的反向传播(BP)方法
- 这些均不是
是对数据进行归一化,而不是权重
-
让每一层的输入的范围都大致固定:这是批规范化(Batch Normalization)的一个好处。批规范化通过对每一层的输入进行规范化,使其均值为0,标准差为1,从而让每一层的输入的范围都大致固定。这样可以防止梯度消失或梯度爆炸问题,加快网络收敛速度。
-
它将权重的归一化平均值和标准差:这个说法是错误的。批规范化并不会对权重进行归一化,它只对每一层的输入进行规范化。
-
它是一种非常有效的反向传播(BP)方法:这个说法也是错误的。批规范化并不是一种反向传播方法,它只是一种用于加速神经网络训练的技术。
-
这些均不是:这个选项也是错误的,因为批规范化确实有让每一层的输入的范围都大致固定这个好处。
15. [BN] BatchNorm 层对于 input batch 会统计出 mean 和 variance 用于计算 EMA。如果input batch 的 shape 为(B, C, H, W),统计出的 mean 和 variance 的 shape 为: ()
- B * 1 * 1 * 1
- 1 * C * 1 * 1
- B * C * 1 * 1
- 1 * 1 * 1 * 1
如果 input batch 的 shape 为 (B, C, H, W),那么统计出的 mean 和 variance 的 shape 为 1 * C * 1 * 1。
BatchNorm 层会对每个通道(channel)单独计算均值(mean)和方差(variance)。这意味着,对于一个形状为 (B, C, H, W) 的输入批次,BatchNorm 层会计算出 C 个均值和方差,分别对应每个通道。因此,统计出的 mean 和 variance 的 shape 为 1 * C * 1 * 1。
16. [Loss] CNN常见的Loss函数不包括以下哪个()
- softmax_loss
- sigmoid_loss
- Contrastive_Loss
- siamese_loss
CNN 常见的损失函数不包括 siamese_loss。
-
softmax_loss:softmax_loss 是一种常用于分类问题的损失函数。它通过计算模型预测的概率分布与真实标签之间的交叉熵来衡量模型的预测能力。softmax_loss 通常用于多分类问题,例如图像分类。
-
sigmoid_loss:sigmoid_loss 也是一种常用于分类问题的损失函数。它与 softmax_loss 类似,也是通过计算交叉熵来衡量模型的预测能力。不同的是,sigmoid_loss 通常用于二分类问题或多标签分类问题。
-
Contrastive_Loss:Contrastive_Loss 是一种常用于度量学习(metric learning)问题的损失函数。它通过计算同类样本之间的距离和异类样本之间的距离来衡量模型的预测能力。Contrastive_Loss 的目标是使同类样本之间的距离尽可能小,而异类样本之间的距离尽可能大。
-
siamese_loss:siamese_loss 并不是一个真实存在的损失函数。在机器学习领域中,并没有名为 siamese_loss 的损失函数。
17. [caffe] 下列是caffe支持的loss优化的方法的是()
- Adam
- SGD
- AdaDelta
- Nesterov
caffe六种优化方法:
- Stochastic Gradient Descent (type: “SGD”): 随机梯度下降
- AdaDelta (type: “AdaDelta”): 自适应学习率
- Adaptive Gradient (type: “AdaGrad”): 自适应梯度
- Adam (type: “Adam”): 自适应学习,推荐使用
- Nesterov’s Accelerated Gradient (type: “Nesterov”): 加速梯度法
- RMSprop (type: “RMSProp”)
18. [矩阵计算] 深度学习是当前很热门的机器学习算法,在深度学习中,涉及到大量的矩阵相乘,现在需要计算三个稠密矩阵A,B,C 的乘积ABC,假设三个矩阵的尺寸分别为m∗n,n∗p,p∗q,且m <n < p < q,以下计算顺序效率最高的是()
- (AB)C
- AC(B)
- A(BC)
- 所以效率都相同
维度低的先相乘效率更高
计算三个稠密矩阵 A,B,C 的乘积 ABC 时,效率最高的计算顺序是 (AB)C。
矩阵乘法的计算复杂度取决于矩阵的尺寸。假设我们要计算两个矩阵 X 和 Y 的乘积,其中 X 的尺寸为 m×n,Y 的尺寸为 n×p,则计算 XY 的时间复杂度为 O(mnp)。
在本题中,我们需要计算三个稠密矩阵 A,B,C 的乘积 ABC,其中 A 的尺寸为 m×n,B 的尺寸为 n×p,C 的尺寸为 p×q。如果我们按照 (AB)C 的顺序进行计算,则总时间复杂度为 O(mnp + mpq)。由于 m < n < p < q,因此这种计算顺序的效率最高。
19. [深度学习定义] 已知:(1)大脑是有很多个叫做神经元的东西构成,神经网络是对大脑的简单的数学表达。(2)每一个神经元都有输入、处理函数和输出。(3)神经元组合起来形成了网络,可以拟合任何函数。(4)为了得到最佳的神经网络,我们用梯度下降方法不断更新模型。给定上述关于神经网络的描述,什么情况下神经网络模型被称为深度学习模型?
- 加入更多层,使神经网络的深度增加
- 有维度更高的数据
- 当这是一个图形识别的问题时
- 以上都不正确
正确答案A,更多层意味着网络更深。没有严格的定义多少层的模型才叫深度模型,目前如果有超过2层的隐层,那么也可以及叫做深度模型。
深度学习模型之所以被称为“深度”,是因为它们具有很多层。这些层可以捕捉数据中不同层次的抽象特征,从而实现对复杂数据的建模。因此,当我们加入更多层,使神经网络的深度增加时,神经网络模型就被称为深度学习模型。
20. [学习率] 如果我们用了一个过大的学习速率会发生什么?
- 神经网络会收敛
- 不好说
- 都不对
- 神经网络不会收敛
正确答案是:D 学习率过大,会使得迭代时,越过最低点。
如果我们使用了一个过大的学习速率,神经网络可能不会收敛。
学习速率是一个超参数,它决定了神经网络在每次迭代中更新权重的幅度。如果学习速率过大,神经网络在每次迭代中更新权重的幅度也会过大,这可能导致神经网络在训练过程中不稳定,无法收敛到最优解。
例如,假设我们正在训练一个分类问题的神经网络。如果我们使用了一个过大的学习速率,那么神经网络在每次迭代中更新权重的幅度可能会过大,导致损失函数在不断震荡,无法收敛到最小值。这样,神经网络就无法正确地拟合数据,模型的性能也会受到影响。
因此,在训练神经网络时,选择合适的学习速率是非常重要的。通常,我们会通过交叉验证(Cross Validation)或网格搜索(Grid Search)等方法来选择合适的学习速率。
21. [非线性] 下列哪一项在神经网络中引入了非线性?
- 随机梯度下降
- 修正线性单元(ReLU)
- 卷积函数
- 以上都不正确
卷积函数是线性的,一般情况下,卷积层后会跟一个非线性函数。Relu函数是非线性激活函数
22. [Attention-Based] 关于Attention-based Model,下列说法正确的是()
- 相似度度量模型
- 是一种新的深度学习网络
- 是一种输入对输出的比例模型
- 都不对
Attention-based Model其实就是一个相似性的度量,当前的输入与目标状态越相似,那么在当前的输入的权重就会越大,说明当前的输出越依赖于当前的输入。
严格来说,Attention并算不上是一种新的model,而仅仅是在以往的模型中加入attention的思想,所以Attention-based Model或者Attention Mechanism是比较合理的叫法,而非Attention Model。
关于 Attention-based Model,正确的说法是它是一种相似度度量模型。
-
相似度度量模型:这是正确的。Attention-based Model 是一种相似度度量模型,它通过计算输入序列中每个元素与输出序列中每个元素之间的相似度来实现对输入序列的加权表示。这种加权表示能够捕捉输入序列中与输出序列相关的重要信息,从而提高模型的预测能力。
-
是一种新的深度学习网络:这是错误的。Attention-based Model 并不是一种新的深度学习网络,而是一种可以与其他深度学习模型(如 RNN、CNN 等)结合使用的技术。
-
是一种输入对输出的比例模型:这也是错误的。Attention-based Model 并不是一种输入对输出的比例模型,而是一种相似度度量模型。
-
都不对:这个选项也是错误的,因为 Attention-based Model 确实是一种相似度度量模型。
23. [网络深度] 在选择神经网络的深度时,下面哪些参数需要考虑?
- 神经网络的类型(如MLP,CNN)
- 输入数据
- 计算能力(硬件和软件能力决定)
- 学习速率
- 映射的输出函数
- 1,2,4,5
- 2,3,4,5
- 都需要考虑
- 1,3,4,5
在选择神经网络的深度时,所有这些参数都需要考虑。
- 神经网络的类型(如MLP,CNN):不同类型的神经网络有不同的结构和深度,因此在选择深度时需要考虑神经网络的类型。
- 输入数据:输入数据的特征数量和复杂性会影响神经网络的深度,因此在选择深度时需要考虑输入数据。
- 计算能力(硬件和软件能力决定):神经网络的深度会影响计算时间和内存需求,因此在选择深度时需要考虑计算能力。
- 学习速率:学习速率会影响神经网络训练的速度和效果,因此在选择深度时需要考虑学习速率。
- 映射的输出函数:映射的输出函数会影响神经网络的预测能力,因此在选择深度时需要考虑映射的输出函数。
24. [微调][fine-tune] 考虑某个具体问题时,你可能只有少量数据来解决这个问题。不过幸运的是你有一个类似问题已经预先训练好的神经网络。可以用下面哪种方法来利用这个预先训练好的网络?
- 把除了最后一层外所有的层都冻结,重新训练最后一层
- 对新数据重新训练整个模型
- 只对最后几层进行调参(fine tune)
- 对每一层模型进行评估,选择其中的少数来用
(样本少,相似性低)–> 冻结训练
(样本多,相似性低)–> 重新训练
(样本少,相似性高)–> 修改输出层
(样本多,相似性高)–> 预训练权+重新训练
不同数据集下使用微调:
- 数据集1:数据量少,但数据相似度非常高:在这种情况下,我们所做的只是修改最后几层或最终的softmax图层的输出类别。
- 数据集2:数据量少,数据相似度低:在这种情况下,我们可以冻结预训练模型的初始层(比如 k k k 层),并再次训练剩余的 n − k n-k n−k 层。由于新数据集的相似度较低,因此根据新数据集对较高层进行重新训练具有重要意义。
- 数据集3:数据量大,数据相似度低:在这种情况下,由于我们有一个大的数据集,我们的神经网络训练将会很有效。但是,由于我们的数据与用于训练我们的预训练模型的数据相比有很大不同,使用预训练模型进行的预测不会有效。因此,最好根据你的数据从头开始训练神经网络(Training from scratch)。
- 数据集4:数据量大,数据相似度高:这是理想情况。在这种情况下,预训练模型应该是最有效的。使用模型的最好方法是保留模型的体系结构和模型的初始权重。然后,我们可以使用在预先训练的模型中的权重来重新训练该模型。
我认为A没错 少量数据就应该冻结更多的层 不然会过拟合
25. [H-K算法] 基于二次准则函数的H-K算法较之于感知器算法的优点是()?
- 计算量小
- 可以判别问题是否线性可分
- 其解完全适用于非线性可分的情况
正确答案是:B H-K算法思想很朴实,就是在最小均方误差准则下求得权矢量。他相对于感知器算法的优点在于,他适用于线性可分和非线性可分得情况:
- 对于线性可分的情况: 给出最优权矢量
- 对于非线性可分得情况: 能够判别出来,以退出迭代过程。
26. [优化器] 下列哪些项所描述的相关技术是错误的?
- AdaGrad使用的是一阶差分(first order differentiation)
- L-BFGS使用的是二阶差分(second order differentiation)
- AdaGrad使用的是二阶差分
- 牛顿法、拟牛顿法、adam,rmsgrad用到了二阶导
- momentum、adgrad用的是一阶导,adgrad的特点是历史梯度正则。
27. [caffe] caffe中基本的计算单元为()
- blob
- layer
- net
- solver
blob: caffe的数据存储单元
layer: caffe的计算单元
28. [Perception][多层感知机] 如果增加多层感知机(Multilayer Perceptron)的隐藏层层数,分类误差便会减小。这种陈述正确还是错误?
- 正确
- 错误
B并不总是正确。层数增加可能导致过拟合,从而可能引起错误增加。
29. [train][val] 有关深度神经网络的训练(Training)和推断(Inference),以下说法中不正确的是:()
- 将数据分组部署在不同GPU上进行训练能提高深度神经网络的训练速度。
- TensorFlow使用GPU训练好的模型,在执行推断任务时,也必须在GPU上运行。
- 将模型中的浮点数精度降低,例如使用float16代替float32,可以压缩训练好的模型的大小。
- GPU所配置的显存的大小,对于在该GPU上训练的深度神经网络的复杂度、训练数据的批次规模等,都是一个无法忽视的影响因素。
C也有问题吧?改变已训练好的模型的数值精度难道不会改变结果精度?那模型量化还要校准表干什么
训练好的模型大小不变,在执行推断的时候改变精度影响后续推断效果
30. [梯度] 在下面哪种情况下,一阶梯度下降不一定正确工作(可能会卡住)?
B这是鞍点(Saddle Point)的梯度下降的经典例子。
本题来源于:https://www.analyticsvidhya.com/blog/2017/01/must-know-questions-deep-learning/。
除了局部极小值,还有一类值为“鞍点”,简单来说,它就是在某一些方向梯度下降,另一些方向梯度上升,形状似马鞍,如下图红点就是鞍点。
对于深度学习模型的优化来说,鞍点比局部极大值点或者极小值点带来的问题更加严重。
31. [特征图计算] 假设你有5个大小为7×7、边界值为0的卷积核,同时卷积神经网络第一层的深度为1。此时如果你向这一层传入一个维度为224×224×3的数据,那么神经网络下一层所接收到的数据维度是多少?
- 218x218x5
- 217x217x8
- 217x217x3
- 220x220x5
注意区分深度、卷积核个数对特征图的影响
卷积层输出大小的计算公式为:
output size = input size − kernel size + 2 × padding stride + 1 \text{output size} = \frac{\text{input size} - \text{kernel size} + 2 \times \text{padding}}{\text{stride}} + 1 output size=strideinput size−kernel size+2×padding+1
其中, input size \text{input size} input size 是输入数据的大小, kernel size \text{kernel size} kernel size 是卷积核的大小, padding \text{padding} padding 是边界填充的大小, stride \text{stride} stride 是卷积核移动的步长。
在这个例子中,输入数据大小为224,卷积核大小为7,边界填充大小为0,步长为1。将这些值代入上述公式中,可以得到输出大小为:
224 − 7 + 2 × 0 1 + 1 = 218 \frac{224 - 7 + 2 \times 0}{1} + 1 = 218 1224−7+2×0+1=218
32. [GoogLeNet] GoogLeNet提出的Inception结构优势有()
- 保证每一层的感受野不变,网络深度加深,使得网络的精度更高
- 使得每一层的感受野增大,学习小特征的能力变大
- 有效提取高层语义信息,且对高层语义进行加工,有效提高网络准确度
- 利用该结构有效减轻网络的权重
GoogLeNet提出的Inception结构的优势之一是利用该结构有效减轻网络的权重。Inception结构采用了模块化的设计,可以方便地增添和修改。它使用了1x1卷积来进行升降维,可以有效减少计算量。此外,它还在多个尺度上同时进行卷积再聚合,能够提取到不同尺度的特征。
33. [sigmoid] sigmoid导数为()
- f(z)
- f(1-z)
- f(1+z)f(1-z)
- f(z)(1-f(z))
Sigmoid函数由下列公式定义:
S ( x ) = 1 1 + e − x S(x) = \frac{1}{1+e^{-x}} S(x)=1+e−x1
其对 x x x的导数可以用自身表示:
S ′ ( x ) = e − x ( 1 + e − x ) 2 = S ( x ) ( 1 − S ( x ) ) S'(x) = \frac{e^{-x}}{ (1 + e^{-x})^2} = S(x)(1 - S(x)) S′(x)=(1+e−x)2e−x=S(x)(1−S(x))
34. [loss][lr] 在训练神经网络时,损失函数(loss)在最初的几个epochs时没有下降,可能的原因是?
- 学习率(learning rate)太低
- 正则参数太高
- 陷入局部最小值
- 以上都有可能
在训练神经网络时,损失函数(loss)在最初的几个epochs时没有下降,可能的原因有很多。以下是一些可能的原因:
- 学习率(learning rate)太低:如果学习率太低,模型参数更新的速度会很慢,导致损失函数下降缓慢。
- 正则参数太高:如果正则参数太高,模型可能会过度惩罚复杂模型,导致损失函数下降缓慢。
- 陷入局部最小值:如果模型陷入局部最小值,损失函数可能不会下降。
35. [过拟合] 下列的哪种方法可以用来降低深度学习模型的过拟合问题?
- 增加更多的数据
- 使用数据扩增技术(data augmentation)
- 使用归纳性更好的架构
- 正规化数据
- 降低架构的复杂度
- 1 4 5
- 1 2 3
- 1 3 4 5
- 所有项目都有用
下列的所有方法都可以用来降低深度学习模型的过拟合问题:
- 增加更多的数据:增加更多的数据可以帮助模型更好地泛化,从而降低过拟合的风险。
- 使用数据扩增技术(data augmentation):数据扩增技术可以通过对原始数据进行变换来增加数据量,从而降低过拟合的风险。
- 使用归纳性更好的架构:使用归纳性更好的架构可以帮助模型更好地泛化,从而降低过拟合的风险。
- 正规化数据:正规化数据可以帮助模型更好地处理不同尺度的特征,从而降低过拟合的风险。
- 降低架构的复杂度:降低架构的复杂度可以减少模型参数数量,从而降低过拟合的风险。
使用归纳性更好的架构是指使用更好的框架来提取特征。这样的框架具有更强的特征提取能力,可以更好地捕捉数据中的模式,从而降低过拟合的风险。例如,深度残差网络(ResNet)就是一种归纳性更好的架构,它通过引入残差连接来解决深度神经网络训练中的梯度消失问题,从而可以训练更深层次的网络。
36. [GPU][TPU][FPGA] 有关深度学习加速芯片,以下的说法中不正确的是:()
- GPU既可以做游戏图形加速,也可以做深度学习加速
- 用于玩游戏的高配置显卡,也可以用于深度学习计算。
- Google TPU已经发展了三代,它们只能用于推断(Inference)计算,不能用于训练(Training)计算
- FPGA最早是作为CPLD的竞争技术而出现的
- GPU既可以做游戏图形加速,也可以做深度学习加速:这个说法是正确的。GPU(图形处理器)最初是为了加速计算机图形处理而设计的,但它也可以用于深度学习计算。GPU具有大量的并行处理单元,能够快速处理大量数据,因此非常适合用于深度学习计算。
- 用于玩游戏的高配置显卡,也可以用于深度学习计算:这个说法也是正确的。高配置显卡通常具有更多的计算能力和更大的显存,因此可以用于深度学习计算。不过,不同型号的显卡在深度学习计算方面的性能可能会有所不同。
- Google TPU已经发展了三代,它们只能用于推断(Inference)计算,不能用于训练(Training)计算:这个说法是不正确的。Google TPU(Tensor Processing Unit)是一种专门为神经网络机器学习设计的应用特定集成电路(ASIC),它使用Google自己的TensorFlow软件。Google TPU不仅可以用于推断计算,还可以用于训练计算。目前,Google TPU已经发展到第四代。
- FPGA最早是作为CPLD的竞争技术而出现的:这个说法也是正确的。FPGA(现场可编程门阵列)最早是作为CPLD(复杂可编程逻辑器件)的竞争技术而出现的。FPGA和CPLD都属于可编程逻辑器件,它们都可以通过编程来实现特定功能。FPGA比CPLD更复杂,具有更多的逻辑单元和更灵活的互连结构,因此可以实现更复杂的功能。
37. [梯度] 下图是一个利用sigmoid函数作为激活函数的含四个隐藏层的神经网络训练的梯度下降图。这个神经网络遇到了梯度消失的问题。下面哪个叙述是正确的?
- 第一隐藏层对应D,第二隐藏层对应C,第三隐藏层对应B,第四隐藏层对应A
- 第一隐藏层对应A,第二隐藏层对应C,第三隐藏层对应B,第四隐藏层对应D
- 第一隐藏层对应A,第二隐藏层对应B,第三隐藏层对应C,第四隐藏层对应D
- 第一隐藏层对应B,第二隐藏层对应D,第三隐藏层对应C,第四隐藏层对应A
由于反向传播算法进入起始层,学习能力降低,这就是梯度消失。换言之,梯度消失是梯度在前向传播中逐渐减为0, 按照图标题所说, 四条曲线是4个隐藏层的学习曲线, 那么第一层梯度最高(损失函数曲线下降明显), 最后一层梯度几乎为零(损失函数曲线变成平直线). 所以D是第一层, A是最后一层。
由于反向传播,在梯度消失情况下越接近输入层,其梯度越小;在梯度爆炸的情况下越接近输入层,其梯度越大。
38. [深度学习][机器学习] 深度学习与机器学习算法之间的区别在于,后者过程中无需进行特征提取工作,也就是说,我们建议在进行深度学习过程之前要首先完成特征提取的工作。这种说法是:
- 正确的
- 错误的
这种说法是错误的。深度学习与机器学习算法之间的一个重要区别在于,深度学习可以自动进行特征提取。深度学习模型通过多层神经网络来学习数据的层次结构,能够自动提取出有用的特征。因此,在进行深度学习过程之前,无需手动完成特征提取工作。相反,机器学习算法通常需要人为地选择和提取特征。
Q:意思就是说,机器学习需要我们手动完成特征工程,而深度学习不需要,这样的理解正确吗?
A:是的。机器学习通常需要人为地选择和提取特征,这个过程被称为特征工程。相反,深度学习可以自动进行特征提取。深度学习模型通过多层神经网络来学习数据的层次结构,能够自动提取出有用的特征。因此,在进行深度学习过程之前,无需手动完成特征提取工作。