深度学习100题(2)

来源:BAT面试1000题https://zhuanlan.zhihu.com/c_140166199

31、梯度爆炸会引发什么问题?

解析:

在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的 NaN 权重值。

梯度爆炸导致学习过程不稳定。—《深度学习》,2016。

在循环神经网络中,梯度爆炸会导致网络不稳定,无法利用训练数据学习,最好的结果是网络无法学习长的输入序列数据。

32、如何确定是否出现梯度爆炸?

解析:

训练过程中出现梯度爆炸会伴随一些细微的信号,如:

模型无法从训练数据中获得更新(如低损失)。

模型不稳定,导致更新过程中的损失出现显著变化。

训练过程中,模型损失变成 NaN。

如果你发现这些问题,那么你需要仔细查看是否出现梯度爆炸问题。

以下是一些稍微明显一点的信号,有助于确认是否出现梯度爆炸问题。

训练过程中模型梯度快速变大。

训练过程中模型权重变成 NaN 值。

训练过程中,每个节点和层的误差梯度值持续超过 1.0。

33、如何修复梯度爆炸问题?

解析:

有很多方法可以解决梯度爆炸问题,本节列举了一些最佳实验方法。

(1) 重新设计网络模型

在深度神经网络中,梯度爆炸可以通过重新设计层数更少的网络来解决。

使用更小的批尺寸对网络训练也有好处。

在循环神经网络中,训练过程中在更少的先前时间步上进行更新(沿时间的截断反向传播,truncated Backpropagation through time)可以缓解梯度爆炸问题。

(2)使用 ReLU 激活函数

在深度多层感知机神经网络中,梯度爆炸的发生可能是因为激活函数,如之前很流行的 Sigmoid 和 Tanh 函数。

使用 ReLU 激活函数可以减少梯度爆炸。采用 ReLU 激活函数是最适合隐藏层的新实践。

(3)使用长短期记忆网络

在循环神经网络中,梯度爆炸的发生可能是因为某种网络的训练本身就存在不稳定性,如随时间的反向传播本质上将循环网络转换成深度多层感知机神经网络。

使用长短期记忆(LSTM)单元和相关的门类型神经元结构可以减少梯度爆炸问题。

采用 LSTM 单元是适合循环神经网络的序列预测的最新最好实践。

(4)使用梯度截断(Gradient Clipping)

在非常深且批尺寸较大的多层感知机网络和输入序列较长的 LSTM 中,仍然有可能出现梯度爆炸。如果梯度爆炸仍然出现,你可以在训练过程中检查和限制梯度的大小。这就是梯度截断。

处理梯度爆炸有一个简单有效的解决方案:如果梯度超过阈值,就截断它们。

——《Neural Network Methods in Natural Language Processing》,2017.

具体来说,检查误差梯度的值是否超过阈值,如果超过,则截断梯度,将梯度设置为阈值。

梯度截断可以一定程度上缓解梯度爆炸问题(梯度截断,即在执行梯度下降步骤之前将梯度设置为阈值)。

——《深度学习》,2016.

在 Keras 深度学习库中,你可以在训练之前设置优化器上的 clipnorm 或 clipvalue 参数,来使用梯度截断。

默认值为 clipnorm=1.0 、clipvalue=0.5。详见:https://keras.io/optimizers/

(5)使用权重正则化(Weight Regularization)

如果梯度爆炸仍然存在,可以尝试另一种方法,即检查网络权重的大小,并惩罚产生较大权重值的损失函数。该过程被称为权重正则化,通常使用的是 L1 惩罚项(权重绝对值)或 L2 惩罚项(权重平方)。

对循环权重使用 L1 或 L2 惩罚项有助于缓解梯度爆炸。

——On the difficulty of training recurrent neural networks,2013.

在 Keras 深度学习库中,你可以通过在层上设置 kernel_regularizer 参数和使用 L1 或 L2 正则化项进行权重正则化。

34、LSTM神经网络输入输出究竟是怎样的?

解析:

第一要明确的是神经网络所处理的单位全部都是:向量

下面就解释为什么你会看到训练数据会是矩阵和张量

常规feedforward 输入和输出:矩阵

输入矩阵形状:(n_samples, dim_input)

输出矩阵形状:(n_samples, dim_output)

注:真正测试/训练的时候,网络的输入和输出就是向量而已。加入n_samples这个维度是为了可以实现一次训练多个样本,求出平均梯度来更新权重,这个叫做Mini-batch gradient descent。 如果n_samples等于1,那么这种更新方式叫做Stochastic Gradient Descent (SGD)。

Feedforward 的输入输出的本质都是单个向量。

常规Recurrent (RNN/LSTM/GRU) 输入和输出:张量

输入张量形状:(time_steps, n_samples, dim_input)

输出张量形状:(time_steps, n_samples, dim_output)

注:同样是保留了Mini-batch gradient descent的训练方式,但不同之处在于多了time step这个维度。

Recurrent 的任意时刻的输入的本质还是单个向量,只不过是将不同时刻的向量按顺序输入网络。所以你可能更愿意理解为一串向量 a sequence of vectors,或者是矩阵。

python代码表示预测的话:

import numpy as np

当前所累积的hidden_state,若是最初的vector,则hidden_state全为0

hidden_state=np.zeros((n_samples, dim_input))

print(inputs.shape): (time_steps, n_samples, dim_input)

outputs = np.zeros((time_steps, n_samples, dim_output))

for i in range(time_steps):

输出当前时刻的output,同时更新当前已累积的hidden_state

outputs[i],hidden_state = RNN.predict(inputs[i],hidden_state)

print(outputs.shape): (time_steps, n_samples, dim_output)

但需要注意的是,Recurrent nets的输出也可以是矩阵,而非三维张量,取决于你如何设计。

(1)若想用一串序列去预测另一串序列,那么输入输出都是张量 (例如语音识别 或机器翻译 一个中文句子翻译成英文句子(一个单词算作一个向量),机器翻译还是个特例,因为两个序列的长短可能不同,要用到seq2seq;

(2)若想用一串序列去预测一个值,那么输入是张量,输出是矩阵 (例如,情感分析就是用一串单词组成的句子去预测说话人的心情)

Feedforward 能做的是向量对向量的one-to-one mapping,

Recurrent 将其扩展到了序列对序列 sequence-to-sequence mapping.

但单个向量也可以视为长度为1的序列。所以有下图几种类型:

除了最左侧的one to one是feedforward 能做的,右侧都是Recurrent所扩展的

若还想知道更多

(1)可以将Recurrent的横向操作视为累积已发生的事情,并且LSTM的memory cell机制会选择记忆或者忘记所累积的信息来预测某个时刻的输出。

(2)以概率的视角理解的话:就是不断的conditioning on已发生的事情,以此不断缩小sample space

(3)RNN的思想是: current output不仅仅取决于current input,还取决于previous state;可以理解成current output是由current input和previous hidden state两个输入计算而出的。并且每次计算后都会有信息残留于previous hidden state中供下一次计算。

35、什么是RNN?

解析:

RNNs的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。

RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。

理论上,RNNs能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关,下图便是一个典型的RNNs:

RNNs包含输入单元(Input units),输入集标记为{x0,x1,...,xt,xt+1,...},而输出单元(Output units)的输出集则被标记为{y0,y1,...,yt,yt+1.,..}。RNNs还包含隐藏单元(Hidden units),我们将其输出集标记为{s0,s1,...,st,st+1,...},这些隐藏单元完成了最为主要的工作。你会发现,在图中:有一条单向流动的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为“Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连。

上图将循环神经网络进行展开成一个全神经网络。例如,对一个包含5个单词的语句,那么展开的网络便是一个五层的神经网络,每一层代表一个单词。对于该网络的计算过程如下:

(1)xt表示第t,t=1,2,3...步(step)的输入。比如,x1为第二个词的one-hot向量(根据上图,x0为第一个词);

(2) st为隐藏层的第t步的状态,它是网络的记忆单元。 st根据当前输入层的输出与上一步隐藏层的状态进行计算。st=f(Uxt+Wst−1),其中f一般是非线性的激活函数,如tanh或ReLU,在计算s0时,即第一个单词的隐藏层状态,需要用到s−1,但是其并不存在,在实现中一般置为0向量;

(3)ot是第t步的输出,如下个单词的向量表示,ot=softmax(Vst).

36、简单说下sigmoid激活函数

解析:

常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。这里先简要介绍下最基础的sigmoid函数(btw,在本博客中SVM那篇文章开头有提过)。

sigmoid的函数表达式如下

其中z是一个线性组合,比如z可以等于:b + w1*x1 + w2*x2。通过代入很大的正数或很小的负数到g(z)函数中可知,其结果趋近于0或1。

因此,sigmoid函数g(z)的图形表示如下( 横轴表示定义域z,纵轴表示值域g(z) ):

也就是说,sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。

压缩至0到1有何用处呢?用处是这样一来便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。

举个例子,如下图(图引自Stanford机器学习公开课)

z = b + w1*x1 + w2*x2,其中b为偏置项 假定取-30,w1、w2都取为20

如果x1 = 0,x2 = 0,则z = -30,g(z) = 1/( 1 + e^-z )趋近于0。此外,从上图sigmoid函数的图形上也可以看出,当z=-30的时候,g(z)的值趋近于0

如果x1 = 0,x2 = 1,或x1 =1,x2 = 0,则z = b + w1*x1 + w2*x2 = -30 + 20 = -10,同样,g(z)的值趋近于0

如果x1 = 1,x2 = 1,则z = b + w1*x1 + w2*x2 = -30 + 20*1 + 20*1 = 10,此时,g(z)趋近于1。

换言之,只有x1和x2都取1的时候,g(z)→1,判定为正样本;而当只要x1或x2有一个取0的时候,g(z)→0,判定为负样本,如此达到分类的目的。

综上,sigmod函数,是逻辑斯蒂回归的压缩函数,它的性质是可以把分隔平面压缩到[0,1]区间一个数(向量),在线性分割平面值为0时候正好对应sigmod值为0.5,大于0对应sigmod值大于0.5、小于0对应sigmod值小于0.5;0.5可以作为分类的阀值;exp的形式最值求解时候比较方便,用相乘形式作为logistic损失函数,使得损失函数是凸函数;不足之处是sigmod函数在y趋于0或1时候有死区,控制不好在bp形式传递loss时候容易造成梯度弥撒。

37、rcnn、fast-rcnn和faster-rcnn三者的区别是什么

解析:

首先膜拜RBG(Ross B. Girshick)大神,不仅学术牛,工程也牛,代码健壮,文档详细,clone下来就能跑。断断续续接触detection几个月,将自己所知做个大致梳理,业余级新手,理解不对的地方还请指正。

传统的detection主流方法是DPM(Deformable parts models), 在VOC2007上能到43%的mAP,虽然DPM和CNN看起来差别很大,但RBG大神说“Deformable Part Models are Convolutional Neural Networks”(http://arxiv.org/abs/1409.5403)。

CNN流行之后,Szegedy做过将detection问题作为回归问题的尝试(Deep Neural Networks for Object Detection),但是效果差强人意,在VOC2007上mAP只有30.5%。既然回归方法效果不好,而CNN在分类问题上效果很好,那么为什么不把detection问题转化为分类问题呢?

RBG的RCNN使用region proposal(具体用的是Selective Search Koen van de Sande: Segmentation as Selective Search for Object Recognition)来得到有可能得到是object的若干(大概10^3量级)图像局部区域,然后把这些区域分别输入到CNN中,得到区域的feature,再在feature上加上分类器,判断feature对应的区域是属于具体某类object还是背景。当然,RBG还用了区域对应的feature做了针对boundingbox的回归,用来修正预测的boundingbox的位置。

RCNN在VOC2007上的mAP是58%左右。RCNN存在着重复计算的问题(proposal的region有几千个,多数都是互相重叠,重叠部分会被多次重复提取feature),于是RBG借鉴Kaiming He的SPP-net的思路单枪匹马搞出了Fast-RCNN,跟RCNN最大区别就是Fast-RCNN将proposal的region映射到CNN的最后一层conv layer的feature map上,这样一张图片只需要提取一次feature,大大提高了速度,也由于流程的整合以及其他原因,在VOC2007上的mAP也提高到了68%。

探索是无止境的。Fast-RCNN的速度瓶颈在Region proposal上,于是RBG和Kaiming He一帮人将Region proposal也交给CNN来做,提出了Faster-RCNN。Fater-RCNN中的region proposal netwrok实质是一个Fast-RCNN,这个Fast-RCNN输入的region proposal的是固定的(把一张图片划分成n*n个区域,每个区域给出9个不同ratio和scale的proposal),输出的是对输入的固定proposal是属于背景还是前景的判断和对齐位置的修正(regression)。Region proposal network的输出再输入第二个Fast-RCNN做更精细的分类和Boundingbox的位置修正。

Fater-RCNN速度更快了,而且用VGG net作为feature extractor时在VOC2007上mAP能到73%。个人觉得制约RCNN框架内的方法精度提升的瓶颈是将dectection问题转化成了对图片局部区域的分类问题后,不能充分利用图片局部object在整个图片中的context信息。

可能RBG也意识到了这一点,所以他最新的一篇文章YOLO(http://arxiv.org/abs/1506.02640)又回到了regression的方法下,这个方法效果很好,在VOC2007上mAP能到63.4%,而且速度非常快,能达到对视频的实时处理(油管视频:https://www.youtube.com/channel/UC7ev3hNVkx4DzZ3LO19oebg),虽然不如Fast-RCNN,但是比传统的实时方法精度提升了太多,而且我觉得还有提升空间。

38、在神经网络中,有哪些办法防止过拟合?

解析:

缓解过拟合:

① Dropout

② 加L1/L2正则化

③ BatchNormalization

④ 网络bagging

39、CNN是什么,CNN关键的层有哪些?

解析:

CNN是卷积神经网络,具体详见此文:https://blog.csdn.net/v_july_v/article/details/51812459。

其关键层有:

① 输入层,对数据去均值,做data augmentation等工作

② 卷积层,局部关联抽取feature

③ 激活层,非线性变化

④ 池化层,下采样

⑤ 全连接层,增加模型非线性

⑥ 高速通道,快速连接

⑦ BN层,缓解梯度弥散

40、GRU是什么?GRU对LSTM做了哪些改动?

解析:

GRU是Gated Recurrent Units,是循环神经网络的一种。

GRU只有两个门(update和reset),LSTM有三个门(forget,input,output),GRU直接将hidden state 传给下一个单元,而LSTM用memory cell 把hidden state 包装起来。

41、请简述应当从哪些方向上思考和解决深度学习中出现的的over fitting问题?

解析:

如果模型的训练效果不好,可先考察以下几个方面是否有可以优化的地方。

(1)选择合适的损失函数(choosing proper loss )

神经网络的损失函数是非凸的,有多个局部最低点,目标是找到一个可用的最低点。非凸函数是凹凸不平的,但是不同的损失函数凹凸起伏的程度不同,例如下述的平方损失和交叉熵损失,后者起伏更大,且后者更容易找到一个可用的最低点,从而达到优化的目的。

- Square Error(平方损失)

- Cross Entropy(交叉熵损失)

(2)选择合适的Mini-batch size

采用合适的Mini-batch进行学习,使用Mini-batch的方法进行学习,一方面可以减少计算量,一方面有助于跳出局部最优点。因此要使用Mini-batch。更进一步,batch的选择非常重要,batch取太大会陷入局部最小值,batch取太小会抖动厉害,因此要选择一个合适的batch size。

(3)选择合适的激活函数(New activation function)

使用激活函数把卷积层输出结果做非线性映射,但是要选择合适的激活函数。

- Sigmoid函数是一个平滑函数,且具有连续性和可微性,它的最大优点就是非线性。但该函数的两端很缓,会带来猪队友的问题,易发生学不动的情况,产生梯度弥散。

- ReLU函数是如今设计神经网络时使用最广泛的激活函数,该函数为非线性映射,且简单,可缓解梯度弥散。

(4)选择合适的自适应学习率(apdative learning rate)

- 学习率过大,会抖动厉害,导致没有优化提升

- 学习率太小,下降太慢,训练会很慢

(5)使用动量(Momentum)

在梯度的基础上使用动量,有助于冲出局部最低点。

如果以上五部分都选对了,效果还不好,那就是产生过拟合了,可使如下方法来防止过拟合,分别是

- 1.早停法(earyly stoping)。早停法将数据分成训练集和验证集,训练集用来计算梯度、更新权重和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。

- 2.权重衰减(Weight Decay)。到训练的后期,通过衰减因子使权重的梯度下降地越来越缓。

- 3.Dropout。Dropout是正则化的一种处理,以一定的概率关闭神经元的通路,阻止信息的传递。由于每次关闭的神经元不同,从而得到不同的网路模型,最终对这些模型进行融合。

- 4.调整网络结构(Network Structure)。

42、神经网络中,是否隐藏层如果具有足够数量的单位,它就可以近似任何连续函数?

解析:

通用逼近性定理指出,一个具有单个隐藏层和标准激活函数的简单前馈神经网络(即多层感知器),如果隐藏层具有足够数量的单位,它就可以近似任何连续函数。

随着隐藏单位数量的增加,训练数据的逼近误差一般会减小。

49、批大小如何影响测试正确率?

解析:

方法:我们生成两个 12 维高斯混合。高斯具有相同的协方差矩阵,但在每个维度上都有一个由 1 隔开的均值。该数据集由 500 个高斯组成,其中 400 个用于训练,100 个用于测试。我们在这个数据集上训练一个神经网络,使用不同的批大小,从 1 到 400。我们测量了之后的正确率。

假设:我们期望较大的批大小会增加正确率(较少的噪声梯度更新),在一定程度上,测试的正确率将会下降。我们预计随着批大小的增加,运行时间应有所下降。

运行实验所需的时间: 293.145 s

结论:正如我们预期那样,运行时间确实随着批大小的增加而下降。然而,这导致了测试正确率的妥协,因为测试正确率随着批大小的增加而单调递减。

讨论:这很有趣,但这与普遍的观点不一致,严格来说,即中等规模的批大小更适用于训练。这可能是由于我们没有调整不同批大小的学习率。因为更大的批大小运行速度更快。总体而言,对批大小的最佳折衷似乎是为 64 的批大小。

 

 

54、什么是fine-tuning?

解析:

在实践中,由于数据集不够大,很少有人从头开始训练网络。常见的做法是使用预训练的网络(例如在ImageNet上训练的分类1000类的网络)来重新fine-tuning(也叫微调),或者当做特征提取器。

以下是常见的两类迁移学习场景:

1 卷积网络当做特征提取器。使用在ImageNet上预训练的网络,去掉最后的全连接层,剩余部分当做特征提取器(例如AlexNet在最后分类器前,是4096维的特征向量)。这样提取的特征叫做CNN codes。得到这样的特征后,可以使用线性分类器(Liner SVM、Softmax等)来分类图像。

2 Fine-tuning卷积网络。替换掉网络的输入层(数据),使用新的数据继续训练。Fine-tune时可以选择fine-tune全部层或部分层。通常,前面的层提取的是图像的通用特征(generic features)(例如边缘检测,色彩检测),这些特征对许多任务都有用。后面的层提取的是与特定类别有关的特征,因此fine-tune时常常只需要Fine-tuning后面的层。

预训练模型

在ImageNet上训练一个网络,即使使用多GPU也要花费很长时间。因此人们通常共享他们预训练好的网络,这样有利于其他人再去使用。例如,Caffe有预训练好的网络地址Model Zoo。

何时以及如何Fine-tune

决定如何使用迁移学习的因素有很多,这是最重要的只有两个:新数据集的大小、以及新数据和原数据集的相似程度。有一点一定记住:网络前几层学到的是通用特征,后面几层学到的是与类别相关的特征。这里有使用的四个场景:

1、新数据集比较小且和原数据集相似。因为新数据集比较小,如果fine-tune可能会过拟合;又因为新旧数据集类似,我们期望他们高层特征类似,可以使用预训练网络当做特征提取器,用提取的特征训练线性分类器。

2、新数据集大且和原数据集相似。因为新数据集足够大,可以fine-tune整个网络。

3、新数据集小且和原数据集不相似。新数据集小,最好不要fine-tune,和原数据集不类似,最好也不使用高层特征。这时可是使用前面层的特征来训练SVM分类器。

4、新数据集大且和原数据集不相似。因为新数据集足够大,可以重新训练。但是实践中fine-tune预训练模型还是有益的。新数据集足够大,可以fine-tine整个网络。

实践建议

预训练模型的限制。使用预训练模型,受限于其网络架构。例如,你不能随意从预训练模型取出卷积层。但是因为参数共享,可以输入任意大小图像;卷积层和池化层对输入数据大小没有要求(只要步长stride fit),其输出大小和属于大小相关;全连接层对输入大小没有要求,输出大小固定。

学习率。与重新训练相比,fine-tune要使用更小的学习率。因为训练好的网络模型权重已经平滑,我们不希望太快扭曲(distort)它们(尤其是当随机初始化线性分类器来分类预训练模型提取的特征时)。

56题 什么是边框回归Bounding-Box regression,以及为什么要做、怎么做?

解析:

这个问题可以牵扯出不少问题,比如

为什么要边框回归?

什么是边框回归?

边框回归怎么做的?

边框回归为什么宽高,坐标会设计这种形式?

为什么边框回归只能微调,在离真实值Ground Truth近的时候才能生效?

如图1所示,绿色的框表示真实值Ground Truth, 红色的框为Selective Search提取的候选区域/框Region Proposal。那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准(IoU<0.5), 这张图也相当于没有正确的检测出飞机。

如果我们能对红色的框进行微调fine-tuning,使得经过微调后的窗口跟Ground Truth 更接近, 这样岂不是定位会更准确。 而Bounding-box regression 就是用来微调这个窗口的。

边框回归是什么?

对于窗口一般使用四维向量(x,y,w,h)(x,y,w,h) 来表示, 分别表示窗口的中心点坐标和宽高。 对于图2, 红色的框 P 代表原始的Proposal, 绿色的框 G 代表目标的 Ground Truth, 我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口G^。

所以,边框回归的目的即是:给定(Px,Py,Pw,Ph)寻找一种映射f, 使得f(Px,Py,Pw,Ph)=(Gx^,Gy^,Gw^,Gh^)并且(Gx^,Gy^,Gw^,Gh^)≈(Gx,Gy,Gw,Gh)

边框回归怎么做的?

那么经过何种变换才能从图2中的窗口 P 变为窗口G^呢? 比较简单的思路就是: 平移+尺度放缩

先做平移(Δx,Δy),Δx=Pwdx(P),Δy=Phdy(P)这是R-CNN论文的:

G^x=Pwdx(P)+Px,(1)

G^y=Phdy(P)+Py,(2)

然后再做尺度缩放(Sw,Sh), Sw=exp(dw(P)),Sh=exp(dh(P)),对应论文中:

G^w=Pwexp(dw(P)),(3)

G^h=Phexp(dh(P)),(4)

观察(1)-(4)我们发现, 边框回归学习就是dx(P),dy(P),dw(P),dh(P)这四个变换。

下一步就是设计算法那得到这四个映射。

线性回归就是给定输入的特征向量 X, 学习一组参数 W, 使得经过线性回归后的值跟真实值 Y(Ground Truth)非常接近. 即Y≈WX。 那么 Bounding-box 中我们的输入以及输出分别是什么呢?

Input:

RegionProposal→P=(Px,Py,Pw,Ph)这个是什么? 输入就是这四个数值吗?其实真正的输入是这个窗口对应的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。 (注:训练阶段输入还包括 Ground Truth, 也就是下边提到的t∗=(tx,ty,tw,th))

Output:

需要进行的平移变换和尺度缩放 dx(P),dy(P),dw(P),dh(P),或者说是Δx,Δy,Sw,Sh。我们的最终输出不应该是 Ground Truth 吗? 是的, 但是有了这四个变换我们就可以直接得到 Ground Truth。

这里还有个问题, 根据(1)~(4)我们可以知道, P 经过 dx(P),dy(P),dw(P),dh(P)得到的并不是真实值 G,而是预测值G^。的确,这四个值应该是经过 Ground Truth 和 Proposal 计算得到的真正需要的平移量(tx,ty)和尺度缩放(tw,th)。

这也就是 R-CNN 中的(6)~(9):

tx=(Gx−Px)/Pw,(6)

ty=(Gy−Py)/Ph,(7)

tw=log(Gw/Pw),(8)

th=log(Gh/Ph),(9)

那么目标函数可以表示为 d∗(P)=wT∗Φ5(P),Φ5(P)是输入 Proposal 的特征向量,w∗是要学习的参数(*表示 x,y,w,h, 也就是每一个变换对应一个目标函数) , d∗(P) 是得到的预测值。

我们要让预测值跟真实值t∗=(tx,ty,tw,th)差距最小, 得到损失函数为:

Loss=∑iN(ti∗−w^T∗ϕ5(Pi))2

函数优化目标为:

W∗=argminw∗∑iN(ti∗−w^T∗ϕ5(Pi))2+λ||w^∗||2

利用梯度下降法或者最小二乘法就可以得到 w∗。

 

57题 请阐述下Selective Search的主要思想.

解析:

1 使用一种过分割手段,将图像分割成小区域 (1k~2k 个)

2 查看现有小区域,按照合并规则合并可能性最高的相邻两个区域。重复直到整张图像合并成一个区域位置

3 输出所有曾经存在过的区域,所谓候选区域

其中合并规则如下: 优先合并以下四种区域:

①颜色(颜色直方图)相近的

②纹理(梯度直方图)相近的

③合并后总面积小的: 保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域 (例:设有区域a-b-④c-d-e-f-g-h。较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。 不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh)

合并后,总面积在其BBOX中所占比例大的: 保证合并后形状规则。

上述四条规则只涉及区域的颜色直方图、梯度直方图、面积和位置。合并后的区域特征可以直接由子区域特征计算而来,速度较快。

58题 什么是非极大值抑制(NMS)?

解析:

R-CNN会从一张图片中找出n个可能是物体的矩形框,然后为每个矩形框为做类别分类概率:

就像上面的图片一样,定位一个车辆,最后算法就找出了一堆的方框,我们需要判别哪些矩形框是没用的。非极大值抑制的方法是:先假设有6个矩形框,根据分类器的类别分类概率做排序,假设从小到大属于车辆的概率 分别为A、B、C、D、E、F。

(1)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;

(2)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。

(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。

就这样一直重复,找到所有被保留下来的矩形框。

非极大值抑制(NMS)顾名思义就是抑制不是极大值的元素,搜索局部的极大值。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。这里不讨论通用的NMS算法,而是用于在目标检测中用于提取分数最高的窗口的。

例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。

59题  什么是深度学习中的anchor?

解析:

当我们使用一个3*3的卷积核,在最后一个feature map上滑动,当滑动到特征图的某一个位置时,以当前滑动窗口中心为中心映射回原图的一个区域(注意 feature map 上的一个点是可以映射到原图的一个区域的,相当于感受野起的作用),以原图上这个区域的中心对应一个尺度和长宽比,就是一个anchor了。

fast rcnn 使用3种尺度和3种长宽比(1:1;1:2;2:1),则在每一个滑动位置就有 3*3 = 9 个anchor。

60题 CNN的特点以及优势?

解析:

CNN使用范围是具有局部空间相关性的数据,比如图像,自然语言,语音

局部连接:可以提取局部特征。

权值共享:减少参数数量,因此降低训练难度(空间、时间消耗都少了)。可以完全共享,也可以局部共享(比如对人脸,眼睛鼻子嘴由于位置和样式相对固定,可以用和脸部不一样的卷积核)

降维:通过池化或卷积stride实现。

多层次结构:将低层次的局部特征组合成为较高层次的特征。不同层级的特征可以对应不同任务。

61题 深度学习中有什么加快收敛/降低训练难度的方法?

解析:

瓶颈结构

残差

学习率、步长、动量

优化方法

预训练

63题 请写出链式法则并证明、

解析:

链式法则或链锁定则(英语:chain rule),是求复合函数导数的一个法则。设f和g为两个关于x的可导函数,则复合函数

64题 请写出Batch Normalization的计算方法及其应用

解析:

机器学习流程简介

1)一次性设置(One time setup)

- 激活函数(Activation functions)

- 数据预处理(Data Preprocessing)

- 权重初始化(Weight Initialization)

- 正则化(Regularization:避免过拟合的一种技术)

- 梯度检查(Gradient checking)

2)动态训练(Training dynamics)

- 跟踪学习过程 (Babysitting the learning process)

- 参数更新 (Parameter updates)

- 超级参数优化(Hyperparameter optimization)

- 批量归一化(Batch Normalization简称BN,其中,Normalization是数据标准化或归一化、规范化,Batch可以理解为批量,加起来就是批量标准化。解决在训练过程中中间层数据分布发生改变的问题,以防止梯度消失或爆炸、加快训练速度)

3)评估(Evaluation)

- 模型组合(Model ensembles)

(训练多个独立的模型,测试时,取这些模型结果的平均值)

为什么输入数据需要归一化(Normalized Data),或者说,归一化后有什么好处呢?

原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低,所以需要使用输入数据归一化方法,使训练数据与测试数据的分布相同。

另外一方面,加之神经网络训练时一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。

为了让训练深度网络简单高效,研究者提出了随机梯度下降法(SGD),但是它有个毛病,就是需要我们人为的去选择参数,比如学习率、参数初始化、权重衰减系数、Drop out比例等。这些参数的选择对训练结果至关重要,以至于我们很多时间都浪费在这些的调参上。

举个例子,比如某个神经元 x = 1, 某个 Weights 的初始值为 0.1, 这样后一层神经元计算结果就是 Wx 0.1 *1 = 0.1;

如果 x = 20, 这样 Wx = 0.1 * 20 = 2。现在还不能看出什么问题, 但是, 当我们加上一层激励函数, 激活这个 Wx 值的时候, 问题就来了。

如果使用 像 tanh 的激励函数, Wx 的激活值就变成了 ~0.1 和 ~1, 接近于 1 的部已经处在了 激励函数的饱和阶段, 也就是如果 x 无论再怎么扩大, tanh 激励函数输出值也还是 接近1。

换句话说, 神经网络在初始阶段已经不对那些比较大的 x 特征范围 敏感了. 这样很糟糕, 想象我轻轻拍自己的感觉和重重打自己的感觉居然没什么差别, 这就证明我的感官系统失效了. 当然我们是可以用之前提到的对数据做 normalization 预处理, 使得输入的 x 变化范围不会太大, 让输入值经过激励函数的敏感部分. 但刚刚这个不敏感问题不仅仅发生在神经网络的输入层, 而且在隐藏层中也经常会发生。

既然 x 换到了隐藏层当中, 我们能不能对隐藏层的输入结果进行像之前那样的normalization 处理呢? 答案是可以的, 因为大牛们发明了一种技术, 叫做 batch normalization, 正是处理这种情况。

Batch Normalization由Google提出在这篇论文中《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》提出。

与激活函数层、卷积层、全连接层、池化层一样,BN(Batch Normalization)也属于网络的一层。

BN的本质原理:在网络的每一层输入的时候,又插入了一个归一化层,也就是先做一个归一化处理(归一化至:均值0、方差为1),然后再进入网络的下一层。不过归一化层可不像我们想象的那么简单,它是一个可学习、有参数(γ、β)的网络层。

归一化公式:

输入:输入数据x1..xm(这些数据是准备进入激活函数的数据)

计算过程中可以看到,

1.求数据均值;

2.求数据方差;

3.数据进行标准化(个人认为称作正态化也可以)

4.训练参数γ,β

5.输出y通过γ与β的线性变换得到新的值

How to BN?

怎样学BN的参数就是经典的chain rule。

在正向传播的时候,通过可学习的γ与β参数求出新的分布值

在反向传播的时候,通过链式求导方式,修正γ与β以及相关权值

Why is BN?

因为BN保证每一层的输入分布稳定,这一点本身可以使得训练加速,而且另一方面它也可以帮助减少梯度消失和梯度爆炸的现象。

梯度消失

关于梯度消失,以sigmoid函数为例子,sigmoid函数使得输出在[0,1]之间。

事实上x到了一定大小,经过sigmoid函数的输出范围就很小了,参考下图

如果输入很大,其对应的斜率就很小,我们知道,其斜率(梯度)在反向传播中是权值学习速率。所以就会出现如下的问题

在深度网络中,如果网络的激活输出很大,其梯度就很小,学习速率就很慢。假设每层学习梯度都小于最大值0.25,网络有n层,因为链式求导的原因,第一层的梯度小于0.25的n次方,所以学习速率就慢,对于最后一层只需对自身求导1次,梯度就大,学习速率就快。

这会造成的影响是在一个很大的深度网络中,浅层基本不学习,权值变化小,后面几层一直在学习,结果就是,后面几层基本可以表示整个网络,失去了深度的意义。

梯度爆炸

关于梯度爆炸,根据链式求导法,第一层偏移量的梯度=激活层斜率1x权值1x激活层斜率2x…激活层斜率(n-1)x权值(n-1)x激活层斜率n。假如激活层斜率均为最大值0.25,所有层的权值为100,这样梯度就会指数增加。

65题 神经网络中会用到批量梯度下降(BGD)吗?为什么用随机梯度下降(SGD)?

解析:

1)一般不用BGD

2)a. BGD每次需要用到全量数据,计算量太大

b. 引入随机因素,即便陷入局部极小,梯度也可能不为0,这样就有机会跳出局部极小继续搜索(可以作为跳出局部极小的一种方式,但也可能跳出全局最小。还有解决局部极小的方式:多组参数初始化、使用模拟退火技术)

66、下图是一个利用sigmoid函数作为激活函数的含四个隐藏层的神经网络训练的梯度下降图。这个神经网络遇到了梯度消失的问题。下面哪个叙述是正确的?

A、第一隐藏层对应D,第二隐藏层对应C,第三隐藏层对应B,第四隐藏层对应A

B、第一隐藏层对应A,第二隐藏层对应C,第三隐藏层对应B,第四隐藏层对应D

C、第一隐藏层对应A,第二隐藏层对应B,第三隐藏层对应C,第四隐藏层对应D

D、第一隐藏层对应B,第二隐藏层对应D,第三隐藏层对应C,第四隐藏层对应A

正确答案是:A

解析:

由于反向传播算法进入起始层,学习能力降低,这就是梯度消失。换言之,梯度消失是梯度在前向传播中逐渐减为0, 按照图标题所说, 四条曲线是4个隐藏层的学习曲线, 那么第一层梯度最高(损失函数曲线下降明显), 最后一层梯度几乎为零(损失函数曲线变成平直线). 所以D是第一层, A是最后一层。

67、考虑某个具体问题时,你可能只有少量数据来解决这个问题。不过幸运的是你有一个类似问题已经预先训练好的神经网络。可以用下面哪种方法来利用这个预先训练好的网络?

A、把除了最后一层外所有的层都冻结,重新训练最后一层

B、对新数据重新训练整个模型

C、只对最后几层进行调参(fine tune)

D、对每一层模型进行评估,选择其中的少数来用

正确答案是:C

解析:

如果有个预先训练好的神经网络, 就相当于网络各参数有个很靠谱的先验代替随机初始化. 若新的少量数据来自于先前训练数据(或者先前训练数据量很好地描述了数据分布, 而新数据采样自完全相同的分布), 则冻结前面所有层而重新训练最后一层即可; 但一般情况下, 新数据分布跟先前训练集分布有所偏差, 所以先验网络不足以完全拟合新数据时, 可以冻结大部分前层网络, 只对最后几层进行训练调参(这也称之为fine tune)。

68、在选择神经网络的深度时,下面哪些参数需要考虑?

1 神经网络的类型(如MLP,CNN)

2 输入数据

3 计算能力(硬件和软件能力决定)

4 学习速率

5 映射的输出函数

A、1,2,4,5

B、2,3,4,5

C、都需要考虑

D、1,3,4,5

正确答案是:C

解析:

所有上述因素对于选择神经网络模型的深度都是重要的。特征抽取所需分层越多, 输入数据维度越高, 映射的输出函数非线性越复杂, 所需深度就越深. 另外为了达到最佳效果, 增加深度所带来的参数量增加, 也需要考虑硬件计算能力和学习速率以设计合理的训练时间。

69、当数据过大以至于无法在RAM中同时处理时,哪种梯度下降方法更加有效?

A、随机梯度下降法(Stochastic Gradient Descent)

B、不知道

C、整批梯度下降法(Full Batch Gradient Descent)

D、都不是

正确答案是:A

解析:

梯度下降法分随机梯度下降(每次用一个样本)、小批量梯度下降法(每次用一小批样本算出总损失, 因而反向传播的梯度折中)、全批量梯度下降法则一次性使用全部样本。这三个方法, 对于全体样本的损失函数曲面来说, 梯度指向一个比一个准确. 但是在工程应用中,受到内存/磁盘IO的吞吐性能制约, 若要最小化梯度下降的实际运算时间, 需要在梯度方向准确性和数据传输性能之间取得最好的平衡. 所以, 对于数据过大以至于无法在RAM中同时处理时, RAM每次只能装一个样本, 那么只能选随机梯度下降法。

70、当在卷积神经网络中加入池化层(pooling layer)时,变换的不变性会被保留,是吗?

A、不知道

B、看情况

C、是

D、否

正确答案是:C

解析:

池化算法比如取最大值/取平均值等, 都是输入数据旋转后结果不变, 所以多层叠加后也有这种不变性。

71、深度学习是当前很热门的机器学习算法,在深度学习中,涉及到大量的矩阵相乘,现在需要计算三个稠密矩阵 A,B,C 的乘积ABC,假设三个矩阵的尺寸分别为m∗n,n∗p,p∗q,且m < n < p < q,以下计算顺序效率最高的是()

A、 (AB)C

B、 AC(B)

C、 A(BC)

D、 所以效率都相同

正确答案是:A

解析:

首先,根据简单的矩阵知识,因为 A*B , A 的列数必须和 B 的行数相等。因此,可以排除 B 选项,

然后,再看 A 、 C 选项。在 A 选项中,m∗n 的矩阵 A 和n∗p的矩阵 B 的乘积,得到 m∗p的矩阵 A*B ,而 A∗B的每个元素需要 n 次乘法和 n-1 次加法,忽略加法,共需要 m∗n∗p次乘法运算。同样情况分析 A*B 之后再乘以 C 时的情况,共需要 m∗p∗q次乘法运算。因此, A 选项 (AB)C 需要的乘法次数是 m∗n∗p+m∗p∗q 。同理分析, C 选项 A (BC) 需要的乘法次数是 n∗p∗q+m∗n∗q。

由于m∗n∗p

72、输入图片大小为200×200,依次经过一层卷积(kernel size 5×5,padding 1,stride 2),pooling(kernel size 3×3,padding 0,stride 1),又一层卷积(kernel size 3×3,padding 1,stride 1)之后,输出特征图大小为

A、 95

B、 96

C、 97

D、 98

正确答案是:C

解析:

首先我们应该知道卷积或者池化后大小的计算公式,其中,padding指的是向外扩展的边缘大小,而stride则是步长,即每次移动的长度。

这样一来就容易多了,首先长宽一般大,所以我们只需要计算一个维度即可,这样,经过第一次卷积后的大小为: 本题 (200-5+2*1)/2+1 为99.5,取99

经过第一次池化后的大小为: (99-3)/1+1 为97

经过第二次卷积后的大小为: (97-3+2*1)/1+1 为97

73、基于二次准则函数的H-K算法较之于感知器算法的优点是()?

A、 计算量小

B、 可以判别问题是否线性可分

C、 其解完全适用于非线性可分的情况

正确答案是:B

解析:

HK算法思想很朴实,就是在最小均方误差准则下求得权矢量.

他相对于感知器算法的优点在于,他适用于线性可分和非线性可分得情况,对于线性可分的情况,给出最优权矢量,对于非线性可分得情况,能够判别出来,以退出迭代过程。

来源:@刘炫320,链接:http://blog.csdn.net/column/details/16442.html

74、在一个神经网络中,知道每一个神经元的权重和偏差是最重要的一步。如果知道了神经元准确的权重和偏差,便可以近似任何函数,但怎么获知每个神经的权重和偏移呢?

A、搜索每个可能的权重和偏差组合,直到得到最佳值

B、赋予一个初始值,然后检查跟最佳值的差值,不断迭代调整权重

C、随机赋值,听天由命

D、以上都不正确的

正确答案是:B

解析:

答案:(B)

选项B是对梯度下降的描述。

75、神经网络模型(Neural Network)因受人类大脑的启发而得名

神经网络由许多神经元(Neuron)组成,每个神经元接受一个输入,对输入进行处理后给出一个输出,如下图所示。请问下列关于神经元的描述中,哪一项是正确的?

A、 每个神经元可以有一个输入和一个输出

B、 每个神经元可以有多个输入和一个输出

C、 每个神经元可以有一个输入和多个输出

D、 每个神经元可以有多个输入和多个输出

E、 上述都正确

正确答案是:E

解析:

答案:(E)

每个神经元可以有一个或多个输入,和一个或多个输出。

76题 下图所示的网络用于训练识别字符H和T,如下所示

解析:

不知道神经网络的权重和偏差是什么,则无法判定它将会给出什么样的输出。

77题 如果我们用了一个过大的学习速率会发生什么?

A、神经网络会收敛

B、不好说

C、都不对

D、神经网络不会收敛

正确答案是:D

解析

学习率过大,会使得迭代时,越过最低点。

78题 在一个神经网络中,下面哪种方法可以用来处理过拟合?

A、Dropout

B、分批归一化(Batch Normalization)

C、正则化(regularization)

D、都可以

正确答案是:D

解析:

都可以。对于选项C,分批归一化处理过拟合的原理,是因为同一个数据在不同批中被归一化后的值会有差别,相当于做了data augmentatio。

79题 批规范化(Batch Normalization)的好处都有啥?

A、让每一层的输入的范围都大致固定

B、它将权重的归一化平均值和标准差

C、它是一种非常有效的反向传播(BP)方法

D、这些均不是

正确答案是:A

80题 下列哪个神经网络结构会发生权重共享?

A、卷积神经网络

B、循环神经网络

C、全连接神经网络

D、选项A和B

正确答案是:D

81、下列哪个函数不可以做激活函数?

81、下列哪个函数不可以做激活函数?

A、y = tanh(x)

B、y = sin(x)

C、y = max(x,0)

D、y = 2x

正确答案是:D

解析:

线性函数不能作为激活函数。

82、假设我们有一个如下图所示的隐藏层。隐藏层在这个网络中起到了一定的降纬作用。假如现在我们用另一种维度下降的方法,比如说主成分分析法(PCA)来替代这个隐藏层。

那么,这两者的输出效果是一样的吗?

A、是

B、否

正确答案是:B

解析:

PCA 提取的是数据分布方差比较大的方向,隐藏层可以提取有预测能力的特征

83、下图显示了训练过的3层卷积神经网络准确度,与参数数量(特征核的数量)的关系。

从图中趋势可见,如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么?

A、即使增加卷积核的数量,只有少部分的核会被用作预测

B、当卷积核数量增加时,神经网络的预测能力(Power)会降低

C、当卷积核数量增加时,导致过拟合

D、以上都不正确

正确答案是:C

解析:

网络规模过大时,就可能学到数据中的噪声,导致过拟合

84、在下面哪种情况下,一阶梯度下降不一定正确工作(可能会卡住)?

85、假设你需要调整超参数来最小化代价函数(cost function),会使用下列哪项技术?

A、穷举搜索

B、随机搜索

C、Bayesian优化

D、都可以

正确答案是:D

86、在感知机中(Perceptron)的任务顺序是什么?

1、随机初始化感知机的权重

2、去到数据集的下一批(batch)

3、如果预测值和输出不一致,则调整权重

4、对一个输入样本,计算输出值

A、 1, 2, 3, 4

B、 4, 3, 2, 1

C、 3, 1, 2, 4

D、 1, 4, 3, 2

正确答案是:D

87、构建一个神经网络,将前一层的输出和它自身作为输入。

下列哪一种架构有反馈连接?

A、循环神经网络

B、卷积神经网络

C、限制玻尔兹曼机

D、都不是

正确答案是:A

下列哪一种架构有反馈连接?

A、循环神经网络

B、卷积神经网络

C、限制玻尔兹曼机

D、都不是

正确答案是:A

88、如果增加多层感知机(Multilayer Perceptron)的隐藏层层数,分类误差便会减小。这种陈述正确还是错误?

A、正确

B、错误

正确答案是:B

解析:

并不总是正确。层数增加可能导致过拟合,从而可能引起错误增加。

89、下列哪项关于模型能力(model capacity)的描述是正确的?(指神经网络模型能拟合复杂函数的能力)

A、隐藏层层数增加,模型能力增加

B、Dropout的比例增加,模型能力增加

C、学习率增加,模型能力增加

D、都不正确

正确答案是:A

解析:

A是对的,其它选项不确定

90、在训练神经网络时,损失函数(loss)在最初的几个epochs时没有下降,可能的原因是?


A、学习率(learning rate)太低

B、正则参数太高

C、陷入局部最小值

D、以上都有可能

正确答案是:D

91、深度学习与机器学习算法之间的区别在于,后者过程中无需进行特征提取工作,也就是说,我们建议在进行深度学习过程之前要首先完成特征提取的工作。这种说法是:

A、正确的

B、错误的

正确答案是: B

解析:

正好相反,深度学习可以自行完成特征提取过程而机器学习需要人工来处理特征内容。

92、下列哪一项属于特征学习算法(representation learning algorithm)?

A、K近邻算法

B、随机森林

C、神经网络

D、都不属于

正确答案是:C

解析:

神经网络会将数据转化为更适合解决目标问题的形式,我们把这种过程叫做特征学习。

93、下列哪些项所描述的相关技术是错误的?

A、AdaGrad使用的是一阶差分(first order differentiation)

B、L-BFGS使用的是二阶差分(second order differentiation)

C、AdaGrad使用的是二阶差分

正确答案是:C

94、提升卷积核(convolutional kernel)的大小会显著提升卷积神经网络的性能,这种说法是

A、正确的

B、错误的

正确答案是: B

解析:

卷积核的大小是一个超参数(hyperparameter),也就意味着改变它既有可能提高亦有可能降低模型的表现。

95、阅读以下文字:

假设我们拥有一个已完成训练的、用来解决车辆检测问题的深度神经网络模型,训练所用的数据集由汽车和卡车的照片构成,而训练目标是检测出每种车辆的名称(车辆共有10种类型)。现在想要使用这个模型来解决另外一个问题,问题数据集中仅包含一种车(福特野马)而目标变为定位车辆在照片中的位置。

A、除去神经网络中的最后一层,冻结所有层然后重新训练

B、对神经网络中的最后几层进行微调,同时将最后一层(分类层)更改为回归层

C、使用新的数据集重新训练模型

D、所有答案均不对

正确答案是: B

96、假设你有5个大小为7x7、边界值为0的卷积核,同时卷积神经网络第一层的深度为1。此时如果你向这一层传入一个维度为224x224x3的数据,那么神经网络下一层所接收到的数据维度是多少?

A、218x218x5

B、217x217x8

C、217x217x3

D、220x220x5

正确答案是:A

97、假设我们有一个使用ReLU激活函数(ReLU activation function)的神经网络,假如我们把ReLU激活替换为线性激活,那么这个神经网络能够模拟出同或函数(XNOR function)吗?

A、可以

B、不好说

C、不一定

D、不能

正确答案是:D

解析:

使用ReLU激活函数的神经网络是能够模拟出同或函数的。

但如果ReLU激活函数被线性函数所替代之后,神经网络将失去模拟非线性函数的能力。

98、考虑以下问题:

假设我们有一个5层的神经网络,这个神经网络在使用一个4GB显存显卡时需要花费3个小时来完成训练。而在测试过程中,单个数据需要花费2秒的时间。 如果我们现在把架构变换一下,当评分是0.2和0.3时,分别在第2层和第4层添加Dropout,那么新架构的测试所用时间会变为多少?

A、少于2s

B、大于2s

C、仍是2s

D、说不准

正确答案是:C

解析:

在架构中添加Dropout这一改动仅会影响训练过程,而并不影响测试过程。

99、下列的哪种方法可以用来降低深度学习模型的过拟合问题?

1 增加更多的数据

2 使用数据扩增技术(data augmentation)

3 使用归纳性更好的架构

4 正规化数据

5 降低架构的复杂度

A、1 4 5

B、1 2 3

C、1 3 4 5

D、所有项目都有用

正确答案是:D

解析:

上面所有的技术都会对降低过拟合有所帮助。

100、混沌度(Perplexity)是一种常见的应用在使用深度学习处理NLP问题过程中的评估技术,关于混沌度,哪种说法是正确的?

A、混沌度没什么影响

B、混沌度越低越好

C、混沌度越高越好

D、混沌度对于结果的影响不一定

正确答案是: B

猜你喜欢

转载自blog.csdn.net/qq_41251963/article/details/108875703
今日推荐