深度学习面试题总结

介绍一下经典的五种卷积神经网络(VGG、残差两个是重点,其他的看改进点就好)

LeNet:这个神经网络中还有一种模式至今仍然经常用到,就是一个或多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,然后是全连接层,最后是输出,这种排列方式很常用。
在这里插入图片描述

AlexNet:引入了ReLU和dropout,引入数据增强、池化相互之间有覆盖,三个卷积一个最大池化+三个全连接层.它是浅层神经⽹络和深度神经⽹络的分界线。

在这里插入图片描述

VGG:采用1×1和3×3的卷积核以及2×2的最大池化使得层数变得更深。VGG-11通过5个可以重复使⽤的卷积块来构造⽹络。

在这里插入图片描述

ResNet:非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。ResNet利用跳跃连接(Skip connection),从某一层网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层。残差块学习恒等函数非常容易,你能确定网络性能不会受到影响,很多时候甚至可以提高效率。

在这里插入图片描述

Google Inception Net:引入Inception Module,这是一个4个分支结合的结构。去除了最后的全连接层,而是用一个全局的平均池化来取代它。

在这里插入图片描述

池化在卷积神经网络里面有何作用,在引进池化后解决了什么问题?

池化层的⼀个主要作⽤是缓解卷积层对位置的过度敏感性。
池化一般分为max pooling和average pooling。定义池化窗口,最大池化为取窗口中最大的那个值,平均池化为取窗口中所有数的平均值。
在这里插入图片描述

非线性激活函数的必要性

如果只是把神经元简单的连接在一起,不加入非线性处理,最终得到的仍然是线性函数,无法完成描述各种复杂的现象,可看出在神经元的输出时需要一个非线性函数是必要的。

列举至少三种激活函数,分别阐述他们的优缺点

sigmoid函数
在这里插入图片描述

  • 当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。
  • 函数输出不是以0为中心的,这样会使权重更新效率降低。
  • sigmod函数要进行指数运算,这个对于计算机来说是比较慢的。

tanh函数
在这里插入图片描述

  • 这两个函数在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新
  • 整个函数是以0为中心的,这个特点比sigmod的好。

ReLU函数
在这里插入图片描述

  • 在输入为正数的时候,不存在梯度饱和问题。
  • 计算速度要快很多,ReLU函数只有线性关系。
  • 当输入是负数的时候,ReLU是完全不被激活的,这就表明一旦输入到了负数,ReLU就会死掉。
  • ReLU函数也不是以0为中心的函数。
 介绍一下感受野的概念,以及如何计算感受野的大小

感受野是卷积神经网络(CNN)每一层输出的特征图(feature map)上的像素点在原始输入图像上映射的区域大小。感受野的计算从最深层开始向浅层计算,逐步计算到第一层,所以计算前要知道网络的整体结构和参数。

什么是过拟合现象,在训练网络的过程中如何防止过拟合现象的发生?如果网络中出现了过拟合,你该怎么应对
  • 加入正则化项,参数范数惩罚,最常用的范数惩罚为L1,L2正则化。
  • 数据增强,增加样本数据量。
  • 提前终止(early stopping),模型在验证集上的误差在一开始是随着训练集的误差的下降而下降的。当超过一定训练步数后,模型在训练集上的误差虽然还在下降,但是在验证集上的误差却不在下降了。此时我们的模型就过拟合了。因此我们可以观察我们训练模型在验证集上的误差,一旦当验证集的误差不再下降时,我们就可以提前终止我们训练的模型。
  • Dropout
  • Batch Normalization,BN在训练某层时,会对每一个mini-batch数据进行标准化(normalization)处理,使输出规范到N(0,1)的正太分布,减少了Internal convariate shift(内部神经元分布的改变),传统的深度神经网络在训练是,每一层的输入的分布都在改变,因此训练困难,只能选择用一个很小的学习速率,但是每一层用了BN后,可以有效的解决这个问题,学习速率可以增大很多倍。
   深度模型参数调整的一般方法论?
  • 重要性:学习率>正则值>dropout 学习率:0.001,0.01,0.1,1,10 …….以10为阶数尝试
    小数据集上合适的参数大数据集上一般不会差,可以先减少训练类别。
  • 欠拟合: 表现形式:训练集,测试集准确率都很低。解决办法:增加网络层数,增加节点数,减少dropout值,减少L2正则值等等。
  • 过拟合: 表现形式:训练集准确率较高,测试集准确率比较低。解决办法:增加数据、数据增强、参数范数惩罚L1、L2、提前终止、增加dropout值、BatchNormalization。
 什么是梯度消失和梯度爆炸,分别阐述解决办法

在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或会消失,或会爆炸。梯度不稳定的原因:根据链式求导法则,前面层上的梯度是来自后面层上梯度的乘积。当存在过多的层时,就会出现梯度不稳定场景,比如梯度消失和梯度爆炸。

梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑一下三种方案解决:

  • 用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。
  • 用Batch Normalization。
  • LSTM的结构设计也可以改善RNN中的梯度消失问题
    在这里插入图片描述
介绍一下L1、L2正则化的原理和作用

如果用的是L1正则化,最终w会是稀疏的,也就是说w向量中有很多0。L1规范化倾向于聚集网络的权重在相对少量的高重要度的连接上,而其他权重会被驱使向0接近
在这里插入图片描述
在L2规范化中,权重通过一个和w成比例的量进行缩小在这里插入图片描述
如果正则化设置得足够大,权重矩阵被设置为接近于0的值,直观理解就是把多隐藏单元的权重设为0,于是基本上消除了这些隐藏单元的许多影响。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近高偏差状态。

归一化和标准化的方法有哪些?在神经网络中归一化和标准化的作用

归一化(标准化)可以定义为:归一化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证模型运行时收敛加快。
归一化和标准化的区别:
简单来说归一化的分母是大于等于标准化的分母的,且归一化的分子是小于分母,故归一化是把x限制在[0,1]之间,而标准化没有限制,且对噪点不敏感
在这里插入图片描述
在这里插入图片描述
逻辑回归必须要进行标准化吗?

这取决于逻辑回归是不是用正则。如果你不用正则,那么,标准化并不是必须的,如果你用正则,那么标准化是必须的。

简述一下数据增样、图像增强的常用方法

最简单的数据扩充方法就是垂直镜像对称,另一个经常使用的技巧是随机裁剪。第二种经常使用的方法是彩色转换,有这样一张图片,然后给R、G和B三个通道上加上不同的失真值。

在很多卷积神经网络中都会用到1*1卷积核,它的作用是什么?

x1的卷积核可以进行降维或者升维,也就是通过控制卷积核(通道数)实现,这个可以帮助减少模型参数,也可以对不同特征进行尺寸的归一化;同时也可以用于不同channel上特征的融合。

介绍一下卷积和全连接的区别,为什么在图像领域卷积的效果要比全连接好?

和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接。一是参数共享。观察发现,特征检测如垂直边缘检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域。第二个方法是使用稀疏连接,通过3×3的卷积计算得到的输出对应依赖于这个3×3的输入的单元格,而且其它像素值都不会对输出产生任影响,这就是稀疏连接的概念。神经网络可以通过这两种机制减少参数,以便我们用更小的训练集来训练它,从而预防过度拟合。

Dropout为何能防止过拟合?

Dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。这样防止参数过分依赖训练数据,增加参数对数据集的泛化能力。
在学习阶段,以概率p主动临时性地忽略掉部分隐藏节点。这一操作的好处在于,在较大程度上减小了网络的大小,而在这个“残缺”的网络中,让神经网络学习数据中的局部特征(即部分分布式特征)。在测试阶段,将参与学习的节点和那些被隐藏的节点以一定的概率p加权求和,综合计算得到网络的输出。

BatchNorm原理

BatchNorm对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0方差为1的比较标准的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。
在模型训练时,批量归⼀化利⽤小批量上的均值和标准差,不断调整神经⽹络中间输出,从而使整个神经⽹络在各层的中间输出的数值更稳定。
对卷积层来说,批量归⼀化发⽣在卷积计算之后、应⽤激活函数之前。
BN 的论文指出,传统的深度神经网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率解决这个问题。而对每一层使用 BN 之后,我们就可以有效地解决这个问题,学习速率可以增大很多倍,达到之前的准确率所需要的迭代次数只有1/14,训练时间大大缩短。BN 某种意义上还起到了正则化的作用,所以可以减少或者取消 Dropout 和 LRN,简化网络结构。
在这里插入图片描述

如何减少参数

权值共享、VGG的感受野、GoogLeNet的inception

CNN中减少网络的参数的三个思想:

1) 局部连接(Local Connectivity)

每个神经元没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。

2) 权值共享(Shared Weights)

对于同一个卷积核,它在一个区域提取到的特征,也能适用于于其他区域。在一个卷积核的情况下,进行权值共享。

3) 池化(Pooling)

池化一般分为max pooling和average pooling。定义池化窗口,最大池化为取窗口中最大的那个值,平均池化为取窗口中所有数的平均值。

1x1卷积核 (inception)

1x1的卷积核可以进行降维或者升维,也就是通过控制卷积核(通道数)实现,这个可以帮助减少模型参数,也可以对不同特征进行尺寸的归一化;同时也可以用于不同channel上特征的融合。一个trick就是在降维的时候考虑结合传统的降维方式,如PCA的特征向量实现,这样效果也可以得到保证。

神经网络不收敛不学习的原因

1、没有对数据进行归一化
2、忘记检查输入和输出
3、没有对数据进行预处理
4、没有对数据正则化
5、使用过大的样本
6、使用不正确的学习率
7、在输出层使用错误的激活函数
8、网络中包含坏梯度
9、初始化权重错误
10、过深的网络
11、隐藏单元数量错误
12、优化算法不对,一般用adam居多。
13、数据随机性太强,同时网络结构太复杂(样本空间太大,同时样本数量不够,网络函数空间也大)
14、学习率过大。网络可能快要收敛了,却忽然在下一个epoch走向了错误的方向,最终导致不收敛。

优化算法

为了降低泛化误差,除了使⽤优化算法降低训练误差以外,还需要注意应对过拟合。

  • 小批量随机梯度下降:在每⼀次迭代中,梯度下降使⽤整个训练数据集来计算梯度,因此它有时也被称为批量梯度下降 (batch gradient descent)。而随机梯度下降在每次迭代中只随机采样⼀个样本来计算梯度。我们还可以在每轮迭代中随机均匀采样多个样本来组成⼀个小批量,然后使⽤这个小批量来计算梯度。
  • 动量法:在动量法中,⾃变量在各个⽅向上的移动幅度不仅取决当前梯度,还取决于过 去的各个梯度在各个⽅向上是否⼀致。
    动量法使⽤了指数加权移动平均的思想。它将过去时间步的梯度做了加权平均,且权重时间步指数衰减。动量法使得相邻时间步的⾃变量更新在⽅向上更加⼀致。
  • AdaGrad算法在迭代过程中不断调整学习率,并让⽬标函数⾃变量中每个元素都分别拥有 ⾃⼰的学习率。 使⽤AdaGrad算法时,⾃变量中每个元素的学习率在迭代过程中⼀直在降低(或不变)。当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率 过小,可能较难找到⼀个有⽤的解。
  • RMSProp算法和AdaGrad算法的不同在于,RMSProp算法使⽤了小批量随机梯度按元素平方的指数加权移动平均来调整学习率。
  • Adam算法在RMSProp算法的基础上对小批量随机梯度也做了指数加权移动平均。
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值