AI算法面试题总结二(深度学习)

深度学习

仅供学习使用,侵删
参考链接
https://mp.weixin.qq.com/s/1GavvCY7wUetMvC61gxkLg
https://zhuanlan.zhihu.com/p/190223015

1 - 神经网络怎样进行参数初始化?

一些定义:神经网络的参数主要是权重(weights):W, 和偏置项(bias):b。
训练神经网络的时候需先给定一个初试值,才能够训练,然后一点点地更新,但是不同的初始化方法,训练的效果可能会截然不同。
解答:1)神经网络不可用0来初始化参数!
2)随机赋值是为了打破对称性,使得不同的神经元可以有不同的功能
3)推荐在初始化的时候使用He Initialization(He Initialization是推荐针对使用ReLU激活函数的神经网络使用的,对其他的激活函数,效果也不错);在我们随机初始化了之后,乘以一个系数。即 2  上一层的维度  \sqrt{\frac{2}{\text { 上一层的维度 }}}  上一层的维度 2 ,避免了参数的初始值过大或者过小,因此可以取得比较好的效果。其他的类似的一些好的初始化方法,例如:推荐给sigmoid的Xavier Initialization,同理,相应系数为 1  上一层的维度  \sqrt{\frac{1}{\text { 上一层的维度 }}}  上一层的维度 1
参考链接https://zhuanlan.zhihu.com/p/39076763
https://blog.csdn.net/yyl424525/article/details/100823398

2 - 介绍卷积神经网络的反向传播?

1)池化层反向传播
在卷积神经网络最大池化前向传播时,不仅要记录区域的最大值,同时也要记录下来区域最大值的位置,方便delta误差的反向传播。
平均池化,由于平均池化时,区域中每个值对池化后结果贡献的权重都为区域大小的倒数,所以delta误差反向传播回来时,在区域每个位置的delta误差都为池化后delta误差除以区域的大小。
2)卷积层反向传播
原图的delta误差,等于卷积结果的delta误差经过零填充后,与卷积核旋转180度后的卷积
参考链接:https://zhuanlan.zhihu.com/p/61898234
https://www.cnblogs.com/pinard/p/6494810.html

3 - CNN 模型所需的计算力(flops)和参数(parameters)数量是怎么计算的?

一些定义:通常在评价一个模型时,首先看他的精确度,在确保精确度的情况下,还需要进一步来评价模型的性能(算法的落地有关);1)前向传播时所需的计算力,它反应了对硬件如GPU性能要求的高低;2)参数个数,它反应所占内存大小。
答:对于一个卷积层,假设其 kernel 大小为 h × w × c × n h \times w \times c \times n h×w×c×n(其中c为input channel, n为output channel),输出的feature map尺寸为 H ′ × W ′ H^{\prime} \times W^{\prime} H×W ,则该卷积层的
 paras  = n × ( h × w × c + 1 )   flops = H ′ × W ′ × n × ( h × w × c + 1 ) \text { paras }=n \times(h \times w \times c+1) \\ \qquad \qquad \ \text { flops}=H^{\prime} \times W^{\prime} \times n \times(h \times w \times c+1)  paras =n×(h×w×c+1)  flops=H×W×n×(h×w×c+1) 即: flops = H ′ × W ′ ×  paras  \text {flops}=H^{\prime} \times W^{\prime} \times \text { paras } flops=H×W× paras 
参考链接https://zhuanlan.zhihu.com/p/137719986
https://www.zhihu.com/question/65305385
https://blog.csdn.net/gaoyi135/article/details/105912701

4 - 感受野怎么计算?

一些定义:在卷积神经网络中,感受野的定义是 卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小
答:对于一个卷积层,假设其 kernel 大小为 h × w × c × n h \times w \times c \times n h×w×c×n(其中c为input channel, n为output channel),输出的feature map尺寸为 H ′ × W ′ H^{\prime} \times W^{\prime} H×W ,则该卷积层的
 paras  = n × ( h × w × c + 1 )   flops = H ′ × W ′ × n × ( h × w × c + 1 ) \text { paras }=n \times(h \times w \times c+1) \\ \qquad \qquad \ \text { flops}=H^{\prime} \times W^{\prime} \times n \times(h \times w \times c+1)  paras =n×(h×w×c+1)  flops=H×W×n×(h×w×c+1) 即: flops = H ′ × W ′ ×  paras  \text {flops}=H^{\prime} \times W^{\prime} \times \text { paras } flops=H×W× paras 
参考链接https://zhuanlan.zhihu.com/p/137719986
https://www.zhihu.com/question/65305385
https://blog.csdn.net/gaoyi135/article/details/105912701

5 - 介绍常见的正则化方法

一些定义:正则化英文原文为regularization,直译应为规则化,简单来说就是对模型加入规则,加入我们的先验知识,正则化说的就是对模型引入额外信息来防止模型过拟合与提高模型泛化性能的方法统称。一般是对模型复杂程度加以惩罚,目标是降低模型的复杂度(模型的结构化风险),根据奥卡姆剃刀原理,精度靠谱的情况下越简单的模型是越值得选择的模型。
从贝叶斯角度来看,正则化是对模型加了一个先验概率,常用的L1正则化属于拉普拉斯分布先验,L2属于正态分布先验。
答:常用的正则化方法有以下几个方面:
1)直接限制模型参数,如L1,L2等惩罚项;参数共享;多任务学习;
2)从数据集角度,如对输入数据或是隐层权重或是输入目标增加噪音;增大数据集;重采样
3)集成方法(训练多个模型,投票输出)如bagging,dropout
4)训练策略,early stop(早停);交叉验证(bagging为又放回采样,而交叉验证可以理解为无放回模型平均))
参考链接https://zhuanlan.zhihu.com/p/75590707

6 - BN 可以防止过拟合么?为什么

一些定义:Batch Normalization, 批标准化, 和普通的数据标准化类似, 是将分散的数据统一的一种做法, 也是优化神经网络的一种方法. 具有统一规格的数据, 能让机器学习更容易学习到数据之中的规律.
答: BN的核心思想不是为了防止梯度消失或者是防止过拟合,而是通过系统参数搜索空间进行约束来增加系统鲁棒性,这种约束压缩了搜索空间,约束也改善了系统的结构合理性,这会带来一些列的性能改善,比如加速收敛、保证梯度、缓解过拟合等等。
根据paper中的实验来说,是无法阻止过拟合的。但是BN可以在某些情况下对过拟合有抑制作用,使得过拟合在更多的 train epoch之后才出现。不能解决但是能缓解。
硬要说是防止过拟合,可以这样理解:BN每次的mini-batch的数据都不一样,但是每次的mini-batch的数据都会对moving mean和moving variance产生作用,可以认为是引入了噪声,这就可以认为是进行了data augmentation,而data augmentation被认为是防止过拟合的一种方法。因此,可以认为用BN可以防止过拟合。
参考链接https://zhuanlan.zhihu.com/p/24810318
https://blog.csdn.net/qq_42440990/article/details/115614237
https://www.zhihu.com/question/275788133

7 - BN 在训练和测试的区别?

一些定义:BN,Batch Normalization,就是在深度神经网络训练过程中使得每一层神经网络的输入保持相近的分布.
答:BN训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和方差,
在测试时,比如进行一个样本的预测,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可以通过移动平均法求得。
BN训练时为什么不用全量训练集的均值和方差呢?
对于BN,当一个模型训练完成之后,它的所有参数都确定了,包括均值和方差,gamma和belta。
因为用全量训练集的均值和方差容易过拟合,对于BN,其实就是对每一批数据进行归一化到一个相同的分布,而每一批数据的均值和方差会有一定的差别,而不是用固定的值,这个差别实际上能够增加模型的鲁棒性,也会在一定程度上减少过拟合。也正是因此,BN一般要求将训练集完全打乱,并用一个较大的batch值,否则,一个batch的数据无法较好得代表训练集的分布,会影响模型训练的效果。
参考链接https://blog.csdn.net/weixin_45250844/article/details/103739446
https://blog.csdn.net/songyunli1111/article/details/89071021

8 - Dropout 在训练和测试的区别?

一些定义:Dropout 是在训练过程中以一定的概率的使神经元失活,即输出为0,以提高模型的泛化能力,减少过拟合。
答:Dropout 在训练时采用,是为了减少神经元对部分上层神经元的依赖,类似将多个不同网络结构的模型集成起来,减少过拟合的风险。而在测试时,应该用整个训练好的模型,因此不需要dropout。
Dropout 如何平衡训练和测试时的差异呢?
Dropout ,在训练时以一定的概率使神经元失活,实际上就是让对应神经元的输出为0
假设失活概率为 p ,就是这一层中的每个神经元都有p的概率失活,如下图的三层网络结构中,如果失活概率为0.5,则平均每一次训练有3个神经元失活,所以输出层每个神经元只有3个输入,而实际测试时是不会有dropout的,输出层每个神经元都有6个输入,这样在训练和测试时,输出层每个神经元的输入和的期望会有量级上的差异。
因此在训练时还要对第二层的输出数据除以(1-p)之后再传给输出层神经元,作为神经元失活的补偿,以使得在训练时和测试时每一层输入有大致相同的期望。
参考链接https://blog.csdn.net/songyunli1111/article/details/89071021

9 - 1*1 卷积有什么作用?

一些定义:1x1卷积核,又称为网中网(Network in Network),1x1卷积一般只改变输出通道数(channels),而不改变输出的宽度和高度
答:1x1卷积核作用: 1)降维/升维;由于 1×1 并不会改变 height 和 width,改变通道的第一个最直观的结果,就是可以将原本的数据量进行增加或者减少。这里看其他文章或者博客中都称之为升维、降维;
2)增加非线性;1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。
3) 跨通道信息交互(channal 的变换);例如使用1x1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化,3x3,64channels的卷积核后面添加一个1x1,28channels的卷积核,就变成了3x3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互。
注意:只是在channel维度上做线性组合,W和H上是共享权值的sliding window
1x1卷积应用:Inception,ResNet,深度可分离卷积等
参考链接https://blog.csdn.net/songyunli1111/article/details/89071021

10 - 1*1 ResNet为什么不用Dropout?
答:Dropout与BN不兼容;同时,BN在训练过程对每个单个样本的forward均引入多个样本(Batch个)的统计信息,相当于自带一定噪音,起到正则效果,所以也就基本消除了Dropout的必要。
Dropout 与 BN 之间冲突的关键是网络状态切换过程中存在神经方差的(neural variance)不一致行为。试想若有图一中的神经响应 X,当网络从训练转为测试时,Dropout 可以通过其随机失活保留率(即 p)来缩放响应,并在学习中改变神经元的方差,而 BN 仍然维持 X 的统计滑动方差。这种方差不匹配可能导致数值不稳定,而随着网络越来越深,最终预测的数值偏差可能会累计,从而降低系统的性能。
参考链接https://www.cnblogs.com/hellojamest/p/11623620.html
https://blog.csdn.net/weixin_37947156/article/details/98763993

11 - 什么是Bottlenet layer?
答:深度学习中经常听闻Bottleneck Layer 或 Bottleneck Features ,亦或 Bottleneck Block(瓶颈层),其虽然容易理解,其意思就是输入输出维度差距较大,就像一个瓶颈一样,上窄下宽亦或上宽下窄。
1x1 filters 可以起到一个改变输出维数(channels)的作用(elevation or dimensionality reduction),使用 [公式] 的网络结构很方便改变维度。灵活设计网络,并且减小计算量。
Bottleneck layer这种结构比较常见的出现地方就是ResNet block
参考链接https://blog.csdn.net/u011501388/article/details/80389164

12 - 介绍一下Inception系列(V1-V4)?
答: https://www.cnblogs.com/yifdu25/p/8542740.html
参考链接https://blog.csdn.net/Biyoner/article/details/89848007

13 - Squeeze-Excitation结构是怎么实现的?

一些定义:1x1卷积核,又称为网中网(Network in Network),1x1卷积一般只改变输出通道数(channels),而不改变输出的宽度和高度
答:Squeeze-and-Excitation Networks(SENet)是由自动驾驶公司Momenta在2017年公布的一种全新的图像识别结构,它通过对特征通道间的相关性进行建模,把重要的特征进行强化来提升准确率。
答:Squeeze部分。GAP(Global Average Pooling)有很多算法,作者用了最简单的求平均的方法,将空间上所有点的信息都平均成了一个值。这么做是因为最终的scale是对整个通道作用的,这就得基于通道的整体信息来计算scale。
Excitation部分是用2个全连接来实现 ,第一个全连接把C个通道压缩成了C/r个通道来降低计算量(后面跟了RELU),第二个全连接再恢复回C个通道(后面跟了Sigmoid),r是指压缩的比例。
参考链接https://zhuanlan.zhihu.com/p/32702350

14 - 介绍一下组卷积?

一些定义:Group Convolution分组卷积,最早见于AlexNet——2012年Imagenet的冠军方法,Group Convolution被用来切分网络,使其在2个GPU上并行运行。
卷积计算、作用与思想
参考链接https://www.cnblogs.com/shine-lee/p/10243114.html
https://www.zhihu.com/question/280728799/answer/1694135803

15 - MobileNet系列为什么快?

一些定义:MobileNets 是可分离卷积模块的堆叠,可分离卷积模块包含 depthwise 卷积和 conv1x1(逐点卷积,pointwise conv)。
可分离卷积在空间和通道中独立地执行卷积。这种卷积分解显著地降低了计算成本——从 HWNK²M 到 HWNK² (depthwise 卷积) + HWNM (逐点卷积),,总共是 HWN(K² + M)。通常,M>>K²(例如,K=3,而且 M ≥ 32),所以,计算成本大概减少到原来的 1/8—1/9 之间。
这里的重点是,计算成本的 bottleneck 现在是 conv1x1!
参考链接https://zhuanlan.zhihu.com/p/64138403
https://zhuanlan.zhihu.com/p/382838095

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值