深度学习面试准备

马上就秋招了,为笔试面试做了很多准备,锦鲤接好运,嘻嘻,希望有个好结果
在这里插入图片描述

参考链接1:https://blog.csdn.net/attitude_yu/article/details/80963323
参考链接2:https://blog.csdn.net/a529975125/article/details/80888463
参考链接3:https://www.jianshu.com/p/d3511bb550b5
参考链接4:https://www.cnblogs.com/MrSaver/p/10356695.html
参考链接5:https://www.cnblogs.com/Daniublog/p/9437462.html
参考链接6:https://www.cnblogs.com/hellcat/p/9687624.html
参考链接7:https://blog.csdn.net/scythe666/article/details/78529777
参考链接8:https://blog.csdn.net/nijiayan123/article/details/79416764
参考链接9:https://www.cnblogs.com/houjun/p/8535471.html
参考链接10:https://www.cnblogs.com/pinking/p/9418280.html
参考链接11:https://blog.csdn.net/jningwei/article/details/80068781
参考链接12:https://www.zhihu.com/question/51603070/answer/187655363
参考链接13:https://blog.csdn.net/tonydz0523/article/details/84325823
参考链接14:https://blog.csdn.net/am290333566/article/details/81187008
参考链接15:https://www.cnblogs.com/huangyc/p/9801261.html

1、神经网络的优缺点:
优点:
(1)拟合复杂的函数
随着神经网络层数的增加,网络的非线性程度越来越高,从而可拟合更加复杂的函数;
(2)神经网络的结构可根据具体的任务进行相应的调整,选择合适的网络结构;
(3)神经网络可自动提取特征,比人工设置的特征鲁棒性更好;
缺点:
(1)由于神经网络强大的假设空间,使得神经网络极易陷入局部最优,使得模型的泛化能力较差;
(2)当网络层数深时,神经网络在训练过程中容易产生梯度消失和梯度下降的问题;
(3)随着网络层数的加深,神经网络收敛速度越来越慢
(4)神经网络训练参数多,占用内存大

2、偏差和方差的区别
偏差是真实值和预测值之间的偏离程度;方差是预测值的分散程度,即越分散,方差越大。

3、朴素贝叶斯的朴素是什么意思?什么是半朴素?
朴素指的是各个特征之间相互独立。半朴素指的是适当考虑一部分特征间的相互依赖信息。

4、解决过拟合的方法
(1)数据增强(使用更多的训练数据进行训练,比如镜像对称,随机裁剪,旋转图像,色彩转换等)
(2)提前终止(当随着模型的能力,训练集的误差会先减小再增大,这样可以提前终止算法减缓过拟合现象)
(3)Dropout(dropout可以随机的让一部分神经元失活)
(4)交叉验证
(5)正则化

5、L0、L1、L2正则化
L0范数:计算向量中非0元素的个数;L1范数:计算向量中各元素绝对值之和;L2范数:计算向量中各元素平方和的开方。L0范数和L1范数目的是使参数稀疏化。L1范数比L0范数更容易优化求解。L2范数是防止过拟合,提高模型的泛化能力。

6、无监督学习的方法有哪些?
强化学习、聚类、自编码器、受限玻尔兹曼机

7、feature map的含义
feature map是一种特征映射,由输入图像和卷积核卷积后生成。

8、feature map的计算
f e a t u r e m a p = ( i n p u t s i z e + 2 ∗ p a d d i n g s i z e − k e r n e i s i z e ) / s t r i d e + 1 feature map=(input_size+2*padding_size-kernei_size)/stride+1 featuremap=(inputsize+2paddingsizekerneisize)/stride+1
举一个例子,原始图像为 5 × 5 5\times5 5×5,卷积核(Kernel Size)为 3 × 3 3\times3 3×3 ,padding 为 1 × 1 1\times1 1×1 ,stride为 2 × 2 2\times2 2×2 ,依照此卷积规则,连续做两次卷积。第一次卷积结果是 3 × 3 3\times3 3×3 大小的feature map,第二次卷积结果是 2 × 2 2\times2 2×2 大小的feature map。

9、感受野的定义
感受野(receptive field)是卷积神经网络每一层输出的特征图(feature map)上的像素点在原始输入图像上映射的区域大小。

10、如何计算感受野?

# RF: 待计算的feature map上的感受野大小
# stride: 卷积的步长(之前所有层stride的乘积)
# fsize: 卷积层滤波器的大小
RF = 1
for layer in (high layer To low layer):
  RF = ((RF -1)* stride) + fsize

举个例子:

typesizestride输入大小
Cov131(28-1)*1+3=30
Pool122(14-1)*2+2=28
Cov231(12-1)*1+3=14
Pool222(6-1)*2+2=12
Cov331(4-1)*1+3=6
Cov431(2-1)*1+3=4
Pool322(1-1)*1+2=2

top to down的方式,所以pool3的感受野大小就是30*30
较浅的卷积层感受野较小,学习到一些局部区域特征;较深的卷积层具有较大的感受野,能够学习到更加抽象的特征。

import tensorflow as tf
# 输入图像为256×256,RGB三通道
x = tf.placeholder(tf.float32, shape=[None, 256, 256, 3])
conv = tf.nn.conv2d(x, filter=[3, 3, 3, 32], strides=[1, 2, 2, 1], padding='SAME')
pool = tf.nn.max_pool(conv, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

11、增大感受野的方法
根据公式,增大感受野的几种方法:
(1)增加pooling层,但是会降低准确性(pooling过程中造成了信息损失)
(2)增大卷积核的kernel size,但是会增加参数
(3)增加卷积层的个数,但是会面临梯度消失的问题
其他方法:
(1)网络层数增加,必然可以使感受野增大。所以在保证梯度的前提下,利用ResNet,DenseNet等结构加大网络深度。
(2)使用膨胀卷积
(3)使用可变形卷积

12、池化的理解
池化(pooling)是将图像按窗口大小划分成不重叠的区域,然后对一个区域内的元素进行聚合,实际上是一种形式的降采样。

最大池化(Max pooling):将输入图像划分为若干个矩形区域,对每个子区域输出最大值。
理解:在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。
例如下图:池化层的每隔2个元素从图像划分出2*2的区块,然后对每个区块中的4个数取最大值,这将减少75%的数据量,处理完图像长和宽都是原图的一半。
在这里插入图片描述
池化的作用:
(1)特征不变性:包括translation(平移),rotation(旋转),scale(尺度)
(2)特征降维:池化相当于在空间范围内做了维度约减,从而使模型可以抽取更加广泛的特征。同时减小了下一层的输入大小,进而减小计算量和参数个数。
(3)在一定程度上防止过拟合,更方便优化

13、卷积与反卷积
反卷积也可称为上采样,图片越来越大。
卷积用于对高维数据进行低维特征提取,下面是卷积操作示意图(valid操作)
在这里插入图片描述
卷积具体的三种操作:
valid 操作,滑动步长为S,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:(N1-N2)/S+1 x (N1-N2)/S+1如下图
在这里插入图片描述
full 操作,滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1+N2-1 x N1+N2-1 如下图
在这里插入图片描述
same 操作,滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1xN1 如下图所示
在这里插入图片描述
反卷积用于将低维特征映射成高维输入。其实这种也算一种卷积的操作,只不过进行了补位操作。
在这里插入图片描述
14、空洞卷积
空洞卷积(atrous convolutions)又名扩张卷积(dilated convolutions),向卷积层引入了一个称为扩张率(delation rate)的新参数,改参数定义了卷积核处理数据时各值的间距。
该结构的目的是在不用pooling(pooling层会导致信息损失)且计算量相当的情况下,提供更大的感受野。
空洞卷积保留了内部数据结构和避免使用down-sampling。

卷积结构的问题:
内部数据结构丢失;空间层级化信息丢失
小物体信息无法重建 (假设有四个pooling layer 则 任何小于 2^4 = 16 pixel 的物体信息将理论上无法重建。)

空洞卷积感受野的计算:

# RF: 待计算的feature map上的感受野大小
# stride: 卷积的步长(之前所有层stride的乘积)
# fsize: 原来卷积核的大小
# rates: 扩张率
fsize_atrous=fsize+(fsize-1)*(rates-1)
RF = 1
for layer in (high layer To low layer):
  RF = ((RF -1)* stride) + fsize_atrous

15、前向传播反向传播
前向传播(Forward propagation):
指的是数据从输入层开始,依次经过隐含层,最后到达输出层的过程。
在这里插入图片描述
一个节点由两部分组成:一个是加权求和的部分,一个是激活函数。

在这里插入图片描述
具体解析参考链接14.

反向传播:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
16、梯度下降
在这里插入图片描述
梯度下降法就好比一个蒙着眼睛的人下山,每次在负梯度最大的方向,向前走一步,走出一步后,比较前后的的落差,若落差小于一定阈值,则认为到达山谷,若落差大于阈值,则继续向前走,直到到达山谷。

批量梯度下降法(BGD)
每次都使用训练集中的所有样本来更新参数。
优点:可以得到全局最优解
缺点:训练时间长

随机梯度下降(SGD)
每次只从样本中选择1组数据进行梯度下降。
优点:训练速度快
缺点:准确度下降,得到的可能只是局部最优解

小批量梯度下降(MBGD)
MBGD是BGD和SGD之间的折中,MBGD通常包含10-1000个随机选择的样本。MBGD降低了SGD训练过程的杂乱程度,同时也保证了速度。

牛顿法又名切线法
它的基本思想是对损失函数的二阶泰勒展开进行求导。从本质上看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法更快。
比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)
优点:梯度下降的速度更快
缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵,计算比较复杂。

动量法(Momentum)
Momentum旨在加速学习,特别是处理高区率、小但一致的梯度,或带噪音的梯度。Momentum算法会观察历史梯度(动量),若当前梯度的方向与历史梯度一致,则会增强这个方向的梯度,若当前梯度与历史梯度方向不一致,则梯度会衰减。
一种形象的解释:把一个球推下山,球在下坡时积累惯性(动量),在途中若球运动方向不变,因为惯性,球会越来越快,若球的方向发生变化,因为惯性,球的速度会变慢。

17、激活函数
什么是激活函数?
在这里插入图片描述
这里的 f f f就是激活函数,理想中的激活函数是阶跃函数,它将输入值映射为输出值“0”或“1”,1对应于神经元兴奋,0对应于神经元抑制。但是阶跃函数具有不连续、不光滑的缺点。

阶跃函数:
在这里插入图片描述
Sigmoid函数:
在这里插入图片描述
优点:
(1)Sigmoid函数的输出在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层;
(2)求导容易
缺点:
(1)由于其软饱和性,容易产生梯度消失
(2)其输出并不是以0为中心的

双曲正切tanh函数:
t a n h ( x ) = 1 − e − 2 x 1 + e − 2 x tanh(x)=\frac{1-e^{-2x}}{1+e^{-2x}} tanh(x)=1+e2x1e2x
在这里插入图片描述
优点:
(1)比Sigmoid函数收敛速度更快;
(2)相比Sigmoid函数,其输出以0为中心
缺点:
还是没有改变Sigmoid函数的最大问题—由于饱和性产生的梯度消失

修正线性单元ReLU函数:
R e L U = f ( x ) = m a x ( 0 , x ) ReLU=f(x)=max(0,x) ReLU=f(x)=max(0,x)。当信号小于0时,输出为0,大于0时,输出等于输入。
在这里插入图片描述
优点:
(1)相比Sigmoid和tanh,ReLU在SGD中能快速收敛(因为它线性、非饱和的形式)
(2)Sigmoid和tanh涉及了很多很expensive的操作(比如指数),ReLU可以更加简单的实现。
(3)有效缓解了梯度消失的问题
(4)在没有无监督预训练的时候也能有比较好的表现
(5)提供了神经网络的稀疏表达能力
缺点:
随着训练的进行,可能会出现神经元死亡(流经神经元的梯度从这一点开始将永远是0),权重无法更新的情况。

LReLU、PReLU与RReLU函数:
Leaky ReLU解决了神经死亡的问题。与ReLU不同的是ReLU中当 x<0 时,函数值为 0 。而 Leaky ReLU 则是给出一个很小的负数梯度值 a i a_{i} ai
PReLU是 是ReLU 和 Leaky ReLU的改进版本,具有非饱和性,且因为PReLU的输出更接近0均值,所以PReLU收敛速度更快。
在这里插入图片描述
RReLU的核心思想:在训练过程中, a j i a_{ji} aji是从一个高斯分布中随机出来的,然后再在测试过程中进行修正。
在这里插入图片描述

18、梯度消失和梯度爆炸
本质上是由于激活函数的选择导致的。
BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,参数的更新步骤是给定一个学习率,然后根据链式求导法则,去更新梯度信息,从而来更新前层参数。
所以说,就是对激活函数进行求导,如果此部分大雨1,那么层数增多的时候,最终求出的梯度更新将以指数形式增加,即发生梯度爆炸;如果此部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失。

原因:
(1)初始权重带来的影响:神经网络权重初始化不当;
(2)激活函数带来的影响:激活函数选择不当;
(3)梯度流动方式带来的影响:网络本身的问题,如RNN;
(4)损失值过大带来的影响:数据集的问题,如标注不准等。

解决:
(1)用ReLU、Leaky ReLU、PReLU、RReLU、Maxout等替代sigmoid函数。
(2)用批规范化(Batch Normalization,BN),通过规范化操作将输出信号x规范化到均值为0,方差为1,保证网络的稳定性。
(3)引入残差结构
(4)LSTM的结构设计也可以改善RNN中的梯度消失问题。

19、loss为Nan的解决办法
(1)学习率过大导致不能正常收敛,因此可以把学习率适当调小一些。
(2)batch size选择过小
(3)不当的损失函数
(4)数据集本身输入存在错误
(5)pooling层的步长大于核的尺寸
(6)网络结构不合理

20、解决类别数据不均衡的问题
(1)过采样(oversampling):通过增加分类中样本较少类别的采样数量来实现平衡,最直接的方法是复制小样本数据,缺点是如果特征少,会导致过拟合。经过改进的方法是通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本;
(2)欠采样:通过减少分类中多数类样本的数量来实现样本均衡,最直接的方法是随机去掉一些多数类的样本来减小多数类的规模,缺点是会丢失多数类中的一些重要信息;
(3)设置权重:对不同样本数量的类别赋予不同的权重(通常会设置为与样本量成反比)
(4)集成方法:每次生成训练集时,使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法产生分类预测结果。这种方法类似于随机森林。缺点是,比较吃计算资源,费时

21、卷积核为什么都是奇数size
(1)保护位置信息:保证了锚点刚好在中间,方便以模板中心为标准进行滑动卷积,避免了位置信息发生偏移(奇数尺寸的卷积核便于用中心定位)
(2)padding时对称:保证padding时,图像的两边依然相对称(当进行valid convolution或使用full convolution时,选用奇数还是偶数的差别并不是很大。但是,若使用的是same convolution时就不一样了。当在一个宽度为m的输入维度(张量维)上使用宽度为k的卷积核时,same convolution需要补k-1个0。如果k为奇数的话,补的这k-1个0可以在两侧对称分布,如果是偶数则不然。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值