CNN相关重点基础面试知识-面试知识点总结3

提示:作者将用一个系列的博客,总结机器/深度学习算法工程师岗位面试中常见的一些知识点,以帮助小伙伴们更好的应对面试。本系列的内容包括如下:
系列一:机器学习相关基础知识小Tip
系列二:Python基础总结
系列三:CNN相关知识
系列四:Transformer相关知识总结
系列五:经典/热门模型介绍,及深度学习常用知识点
系列六:PyTorch相关知识点及端侧部署基础知识
注:以防再也找不到我,可以收藏博客、关注作者,查看最新内容哦(持续更新中…)


系列三:CNN相关重点基础面试知识

1.转置卷积(反卷积)的作用?

转置卷积通过训练过程学习到最优的上采样方式,来代替传统的插值上采样方法,以提升图像分割,图像融合,GAN等特定任务的性能。转置卷积并不是卷积的反向操作,从信息论的角度看,卷积运算是不可逆的。转置卷积可以通过输出特征图尺寸恢复卷积前的特征图尺寸,但不恢复原始数值。

2.全连接层的作用?

全连接层将卷积学习到的高维特征映射到label空间,可以作为整个网络的分类器模块。虽然全连接层参数存在冗余的情况,但是在模型进行迁移学习时,其能保持较大的模型capacity。目前很多模型使用全局平均池化(GAP)取代全连接层以减小模型参数,并且依然能达到SOTA的性能。
全局平均池化指对于输出的每一个通道的特征图的所有像素计算一个平均值,经过全局平均池化之后就得到一个 维度= =类别数 的特征向量,然后直接输入到softmax层。
CNN+FC结构的模型,对于训练过程而言,整个模型的学习压力主要集中在FC层(FC层的参数量占整个模型参数量的80%),此时CNN层学习到的特征更倾向于低层的通用特征,即使CNN层学习到的特征比较低级,强大的FC层也可以通过学习调整参数做到很好的分类。
CNN+GAP结构的模型,因为使用GAP代替了FC,模型的参数量骤减,此时模型的学习压力全部前导到CNN层,相比于CNN+FC层,此时的CNN层不仅仅需要学习到低层的通用特征,还要学习到更加高级的分类特征,学习难度变大,网络收敛变慢。
综上所述,全局平均池化代替全连接层虽然可以减少模型的参数量,防止模型发生过拟合,但不利于模型的迁移学习,因为CNN+GAP的结构使得很多参数“固化”在卷积层中,增加新的分类时,意味着相当数量的卷积层特征需要重新进行调整(学习难度较大);而全连接层则可以更好的进行迁移学习,因为它的参数调整很大一部分是在全连接层中,迁移的时候虽然卷积层的参数也会调整,但是相对来说要小很多。

3.1*1卷积的作用?

实现特征信息的交互与整合,对特征图通道数进行升维和降维,降维时可以减少参数量。1*1卷积+ 激活函数 -> 增加非线性,提升网络表达能力。

4.卷积核大小如何选取

最常用的是3 * 3大小的卷积核,两个3 * 3卷积核和一个5 * 5卷积核的感受野相同,但是减少了参数量和计算量,加快了模型训练。与此同时由于卷积核的增加,模型的非线性表达能力大大增强。不过大卷积核(7 * 7,9 * 9)也有使用的空间,在GAN、图像超分辨率、图像融合等领域依然有较多的应用。

5. 卷积主要有三大特点:

1)局部连接。比起全连接,局部连接会大大减少网络的参数。2)参数共享。参数共享也能减少整体参数量。一个卷积核的参数权重被整张图片共享,不会因为图像内位置的不同而改变卷积核内的参数权重。3)下采样。下采样能逐渐降低图像分辨率,使得计算资源耗费变少、加速模型训练并有效控制过拟合。

6. 卷积的感受野?

目标检测中感受野(receptive field,RF)是anchor(编码目标物体的位置)的基础。感受野的作用:1)一般来说感受野越大越好,比如分类任务中最后卷积层的感受野要大于输入图像。2)感受野足够大时,被忽略的信息就较少。3)目标检测任务中设置anchor要对齐感受野,anchor太大或者偏离感受野会对性能产生一定的影响。增大感受野的方法:使用空洞卷积;使用池化层;增大卷积核。

7. CNN中池化的作用?

池化层的作用是对感受域内的特征进行选择,提取区域内最具代表性的特征,能够有效地减少输出特征数量,进而减少模型参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受域内最大、平均与总和的特征值作为输出,最常用的是最大池化和平均池化。

8.Batch Normalization(BN)层解决了什么问题?

**1)因为神经网络激活层的输入值随着网络深度加深,其分布逐渐发生偏移或者变动(即covariate shift)。之所以训练收敛变慢,一般是整体分布逐渐往激活函数的取值区间的上下限两端靠近(比如sigmoid),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因。而BN就是通过一定的规范化手段,把每层神经网络激活层的输入值的分布强行拉回到均值为0方差为1的标准正态分布,以解决梯度消失问题。
**2)BN层训练和测试的不同?**在训练阶段,BN层是对每一批的训练数据进行标准化(每一批数据的方差和均值不同)。而在测试阶段,我们一般只输入一个测试样本,并没有batch的概念。因此这个时候用的均值和方差是整个数据集训练后的均值和方差,可以通过滑动平均法求得。
**3)BN训练时为什么不用整个训练集的均值和方差? 因为用整个训练集的均值和方差容易过拟合,对于BN层,其实每一批数据的均值和方差会有一定的差别,因此得到的标准分布也有一定的差别,这个差别能够增加模型的鲁棒性,在一定程度上减少过拟合。
**4)BN层用在哪里?在CNN中,BN层应该用在非线性激活函数前面。BN层使得数据分布更接近正态分布,因此输入到激活函数的值分布更加稳定。
**5)BN层的参数量。γ和β是需要学习的参数(因为标准化不可避免的会改变数据的分布,从而可能会对激活函数只使用了其线性部分,限制了模型的表达能力,所以引入参数γ和β增强模型的表达能力),而BN的本质就是利用优化学习改变方差大小和均值的位置。在CNN中,因为网络的特征是对应到一整张特征图上的,所以做BN的时候也是以特征图为单位而不是按照各个维度。比如在某一层,Batch大小为m,那么做BN的参数量为m × 2。
**6)batch normalization和layer normalization的区别:BN的处理对象是对一批样本,LN的处理对象是单个样本。BN是对这批样本的同一维度特征(每个神经元)做归一化,LN是对单个样本的所有维度特征做归一化。LN稳定性更高,有利于在不等长的输入序列中使用。LN不受batch size大小的限制。文本数据大都是变长的,为了能够做batch的训练,需要padding到相同的长度,并在实际训练中忽略padding部分的影响,因此padding对BN有影响,但对LN没影响。

9.不同层次的卷积都提取什么类型的特征?

浅层卷积 -> 提取边缘特征;中层卷积 -> 提取局部特征;深层卷积 -> 提取全局特征

10.有哪些方法能提升CNN模型的泛化能力?

1)采集更多数据,保持数据类别均衡。2)设计合适的网络结构、选用合适的目标函数、选择合适的优化器以及合适的性能评估指标。3)权值正则化。

11.空洞卷积?

1)在标准卷积核中间填充0,或则输入等间隔采样。2)标准卷积与空洞卷积在实现上基本相同,标准卷积可以看做空洞卷积的特殊形式。3)空洞卷积的作用是在不用进行池化操作以损失信息的情况下,增大了感受野,让每个卷积输出都包含较大范围的信息。
转置卷积,改变的是原图像大大小,而空洞卷积改变的是卷积核的感受野的大小(卷积核)。

12. 网络每一层是否只能用一种尺寸的卷积核?

常规的神经网络一般每层仅用一个尺寸的卷积核,但同一层的特征图可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,如GoogLeNet 、Inception系列的网络,均是每层使用了多个卷积核结构。多种不同尺寸的卷积核,再将各自的特征图进行整合,得到的新特征可以看作不同感受域提取的特征组合,相比于单一卷积核会有更强的表达能力。

13.卷积神经网络的压缩

1)在追求模型高准确率的同时,尽可能的降低其复杂度,以达到性能与开销(时间计算量)上的平衡。给定小部分参数子集便能够完整的重构出剩余的参数。这种冗余在训练阶段很必要,因为深度学习问题是一个极其复杂的非凸优化问题,对于现有的基于梯度下降的优化算法而言,这种参数冗余能保证网络收敛到一个比较好的最优值。
模型压缩技术主要分为两个部分:前端压缩,后端压缩
前端压缩:是指不改变网络结构的压缩技术,主要包括知识蒸馏,紧凑模型设计,滤波器层面的剪枝等。该方法可以较好的匹配深度学习库。
后端压缩:其目标在于尽可能的减少模型大小,因而会对原始的网络结构造成极大程度上的改造。这种改造往往不可逆,包括低秩近似,未加限制的剪枝,参数量化以及二值网络等。
当然也可以将前端压缩的输出作为后端压缩的输入,能够在最大程度上减少模型的复杂度。
2)低秩近似
CNN的实现通过矩阵相乘完成,通常权重矩阵是稠密且巨大的,从而带来巨大计算和存储开销。为解决这个问题,若能将稠密矩阵由若干个小规模矩阵近似重构出来,那么便能够有效降低存储和计算开销。
这类算法大多采用低秩近似来重构权重矩阵。在小数据集上能够达到2-3倍的压缩效果,最终结果甚至可能超过压缩之前的网络。
还可以直接使用矩阵分解来降低矩阵权重参数,如用SVD分解。利用矩阵分解能够将卷积层压缩2-3倍,全连接压缩5-13倍,速度提升2倍,精度损失控制在1%之内。
低秩近似在小网络模型上取得了不错的效果,但其参数量与网络层数呈线性变化趋势,随着层数增加与模型复杂度提高,其搜索空间急剧增大。
3)剪枝与稀疏约束
通过剪枝处理,在减小模型复杂度的同时,还能有效防止过拟合,提升模型泛化性。在训练中,需要一定冗余的参数数量来保证模型的可塑性与容量,在完成训练之后,则可以通过剪枝操作来移除这些冗余参数,使得模型更加成熟。给定一个预训练好的网络模型,常用剪枝算法的流程:
衡量神经元重要程度(剪枝算法最重要的核心步骤)。根据剪枝粒度不同,神经元定义可以是一个权重连接,也可以是整个滤波器。移除掉一部分不重要的神经元,可以根据阈值来判断神经元是否可以被剪除,也可以按照重要程度排序,剪除一定比例的神经元。剪枝操作不可避免影响网络精度,为防止对分类性能造成过大破坏,需要对剪枝后的模型进行微调;返回第1步,进行下一轮剪枝。
3)参数量化
量化是指从权重中归纳出若干“代表”,由这些代表来表示某一类权重的具体数值。这些被索引标记后的代表被存储起来,原权重矩阵只需记录各自代表的索引即可,从而极大降低存储开销。即使采用最简单的标量量化算法,也能在保持网络性能不受显著影响的情况下,将模型大小减少8-16倍。不足在于,当压缩率比较大时容易造成分类精度大幅度下降。
4)二值网络
所有参数取值只能是+1或-1。在普通NN中,一个参数由单精度浮点型表示,参数二值化能将存储开销降低为原来的1/32。二值化需要解决两个基本问题:第一,如何对权重进行二值化?直接根据权重正负二值化,x=sign(x);随机二值化,对每个权重以一定概率去+1,这个更耗时。
第二,如何计算二值权重梯度?二值权重梯度为0,无法进行参数更新。用符号函数进行放缩。Htanh(x)=max(-1,min(1,x))代替sign(x)。当x在[-1,1],存在梯度值1,否则梯度值0
5)知识蒸馏
在不改变模型复杂度情况下,增加监督信息的丰富程度肯定会带来性能上的提升。知识蒸馏是迁移学习的一种,目的是将庞大复杂模型学到的知识通过一定 的手段迁移到精简的小模型上,使得小模型能够获得与大模型相近的性能。
6)紧凑的网络结构
设计出很多更加紧凑的网络结构,将这些新结构运用到神经网络设计中来,能够使模型在规模与精度之间达到一个较好的平衡。比如:fire module用在SqueezeNet中。“Fire Module”就是一种专门设计的结构,具体而言是由两部分构成:sequeeze以及后面连接的enpand两部分,其中的sequeeze部分是卷积核为11的卷积层,后面的expand部分是由11以及3*3的两个卷积层共同构成。经过这个Fire Module之后,再进行concat操作,然后继续经过后续的Fire Module层,直到最后,SequeezNet就是一直经过这样的Fire Module以及Pool层共同构成的,再加上最后的loss层,根据作者论文中的叙述,这种设计形式可以折中检测的正确率,并且能够使模型减小

14.增大感受野的方法?

1)增加pooling层,但是会降低准确性(pooling过程中造成了信息损失)
2)增大卷积核的kernel size,但是会增加参数
3)增加卷积层的个数,但是会面临梯度消失的问题
4)使用空洞卷积。空洞卷积与普通卷积相比,增加了感受野,但是不会增加需要训练的参数的量,因为,感受野增加范围内的其他像素点是选择性的跳过,(是不需要计算)进行卷积计算,并不是增加padding(填充像素0的操作)。

15.ELU激活函数?

在这里插入图片描述

融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性。
右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。
ELU的输出均值接近于零,所以收敛速度更快。
在 ImageNet上,不加 Batch Normalization 30 层以上的 ReLU 网络会无法收敛,PReLU网络在MSRA的Fan-in (caffe )初始化下会发散,而 ELU 网络在Fan-in/Fan-out下都能收敛。

15. 卷积神经网络CNN中的参数量(parameters)和计算量(FLOPs )

可参考这篇文章,网址:https://zhuanlan.zhihu.com/p/366184485


注:这些知识点是作者在备战秋招的时候,根据一些零碎的博客做的总结(写作目的:主要用于各位小伙伴们的知识交流,如若侵权,则会及时删除)。

祝愿您能顺利通过每一次面试哈,干就完事了!加油!

*以防再也找不到我,可以收藏博客、关注作者,查看后续系列内容哦(持续更新中…)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值