深度学习CV岗位面试基础问题总结(基础篇)

序言

理论知识篇面试知识点总结,自问自答,学习、记录、分享和复习。

长期持续更新。。。

一、深度学习基础

1. 为什么需要做特征归一化、标准化?

  1. 使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。
  2. 加快学习算法的收敛速度。

归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)

2. 常用的归一化和标准化的方法有哪些?

  1. 线性归一化(min-max标准化)
    x’ = (x-min(x)) / (max(x)-min(x)),其中max是样本数据的最大值,min是样本数据的最小值
    适用于数值比较集中的情况,可使用经验值常量来来代替max,min
  2. 标准差归一化(z-score 0均值标准化)
    x’=(x-μ) / σ,其中μ为所有样本的均值,σ为所有样本的标准差
    经过处理后符合标准正态分布,即均值为0,标准差为1
  3. 非线性归一化
    使用非线性函数log、指数、正切等,如y = 1-e^(-x),在x∈[0, 6]变化较明显, 用在数据分化比较大的场景
    深度学习CV岗位面试基础问题总结(基础篇)_第1张图片

3. 介绍一下空洞卷积的原理和作用

空洞卷积也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。
深度学习CV岗位面试基础问题总结(基础篇)_第2张图片
可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样,通过调整扩张率得到不同的感受野不大小:

  • a是普通的卷积过程(dilation rate = 1),卷积后的感受野为3
  • b是dilation rate = 2的空洞卷积,卷积后的感受野为5
  • c是dilation rate = 3的空洞卷积,卷积后的感受野为8

可以这么说,普通卷积是空洞卷积的一种特殊情况

吃透空洞卷积

4. 为什么线性回归使用mse作为损失函数?

在使用线性回归的时候的基本假设是噪声服从正态分布,当噪声符合正态分布N(0,delta2)时,因变量则符合正态分布N(ax(i)+b,delta2),其中预测函数y=ax(i)+b。这个结论可以由正态分布的概率密度函数得到。也就是说当噪声符合正态分布时,其因变量必然也符合正态分布。因此,我们使用mse的时候实际上是假设y服从正态分布的。

5. 怎么判断模型是否过拟合,有哪些防止过拟合的策略?

在构建模型的过程中,通常会划分训练集、测试集。

当模型在训练集上精度很高,在测试集上精度很差时,模型过拟合;当模型在训练集和测试集上精度都很差时,模型欠拟合。

预防过拟合策略:

  • (1)增加训练数据:获取更多数据,也可以使用图像增强、增样等;
  • (2)使用合适的模型:适当减少网络的层数、降低网络参数量;
  • (3)Dropout:随机抑制网络中一部分神经元,使的每次训练都有一批神经元不参与模型训练;
  • (4)L1、L2正则化:训练时限制权值的大小,增加惩罚机制,使得网络更稀疏;
  • (5)数据清洗:去除问题数据、错误标签和噪声数据;
  • (6)限制网络训练时间:在训练时将训练集和验证集损失分别输出,当训练集损失持续下降,而验证集损失不再下降时,网络就开始出现过拟合现象,此时就可以停止训练了;
  • (7)在网络中使用BN层(Batch Normalization)也可以一定程度上防止过拟合(原理不介绍,感兴趣的同学可以去了解)。

6. 除了SGD和Adam之外,你还知道哪些优化算法?

主要有三大类:

  1. 基本梯度下降法,包括 GD,BGD,SGD;
  2. 动量优化法,包括 Momentum,NAG 等;
  3. 自适应学习率优化法,包括 Adam,AdaGrad,RMSProp 等

从SGD到NadaMax,十种优化算法原理及实现

7. 训练神经网络有哪些调参技巧

深度学习调参技巧合集

8. 阐述一下感受野的概念

感受野指的是卷积神经网络每一层输出的特征图上每个像素点映射回输入图像上的区域的大小,神经元感受野的范围越大表示其接触到的原始图像范围就越大,也就意味着它能学习更为全局,语义层次更高的特征信息,相反,范围越小则表示其所包含的特征越趋向局部和细节。因此感受野的范围可以用来大致判断每一层的抽象层次,并且我们可以很明显地知道网络越深,神经元的感受野越大。

卷积层的感受野大小与其之前层的卷积核尺寸和步长有关,与padding无关。

计算公式为:Fj-1 = Kj + (Fj - 1)*Sj(最后一层特征图的感受野大小是其计算卷积核大小)
深度学习CV岗位面试基础问题总结(基础篇)_第3张图片

9. 神经网路的深度和宽度分别指的是什么?

神经网络的深度决定了网络的表达能力,早期的backbone设计都是直接堆叠卷积层,它的深度指的是神经网络的层数;后来的backbone设计采用了更高效的module(或block)堆叠的方式,每个module是由多个卷积层组成,这时深度指的是module的个数。

神经网络的宽度决定了网络在某一层学习到的信息量,指的是卷积神经网络中最大的通道数,由卷积核数量最多的层决定。通常的结构设计中卷积核的数量随着层数越来越多的,直到最后一层feature map达到最大,这是因为越到深层,feature map的分辨率越小,所包含的信息越高级,所以需要更多的卷积核来进行学习。通道越多效果越好,但带来的计算量也会大大增加,所以具体设定也是一个调参的过程,并且各层通道数会按照8×的倍数来确定,这样有利于GPU的并行计算。
深度学习CV岗位面试基础问题总结(基础篇)_第4张图片

10. 下采样的作用是什么?通常有哪些方式?

下采样层有两个作用,一是减少计算量,防止过拟合;二是增大感受野,使得后面的卷积核能够学到更加全局的信息。下采样的方式主要有两种:

  1. 采用stride为2的池化层,如Max-pooling和Average-pooling,目前通常使用Max-pooling,因为他计算简单而且能够更好的保留纹理特征;
  2. 采用stride为2的卷积层,下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量。

11. 上采样的原理和常用方式

在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样,它的实现一般有三种方式:

  1. 插值,一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提,其他插值方式还有最近邻插值、三线性插值等;
  2. 转置卷积又或是说反卷积,通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;
  3. Max Unpooling,在对称的max pooling位置记录最大值的索引位置,然后在unpooling阶段时将对应的值放置到原先最大值位置,其余位置补0;
    深度学习CV岗位面试基础问题总结(基础篇)_第5张图片

12. 模型的参数量指的是什么?怎么计算?

参数量指的是网络中可学习变量的数量,包括卷积核的权重weights,批归一化(BN)的缩放系数γ,偏移系数β,有些没有BN的层可能有偏置bias,这些都是可学习的参数,即在模型训练开始前被赋予初值,在训练过程根据链式法则不断迭代更新,整个模型的参数量主要是由卷积核的权重weights的数量决定,参数量越大,则该结构对平台运行的内存要求越高。

参数量的计算方式:

  • Kh × Kw × Cin × Cout (Conv卷积网络
  • Cin × Cout (FC全连接网络

13. 模型的FLOPs(计算量)指的是什么?怎么计算?

神经网络的前向推理过程基本上都是乘累加计算,所以它的计算量也是指的前向推理过程中乘加运算的次数,通常用FLOPs来表示,即floating point operations(浮点运算数)。计算量越大,在同一平台上模型运行延时越长,尤其是在移动端/嵌入式这种资源受限的平台上想要达到实时性的要求就必须要求模型的计算量尽可能地低,但这个不是严格成正比关系,也跟具体算子的计算密集程度(即计算时间与IO时间占比)和该算子底层优化的程度有关。

FLOPs的计算方式:

  • Kh × Kw × Cin × Cout × H × W = params × H × W (Conv卷积网络
  • Cin x Cout (FC全连接网络
  • 计算量 = 输出的feature map * 当前层filter 即(H × W × Cout) × (K × K × Cin)

神经网络的计算量和参数量估计总结

14. 深度可分离卷积的概念和作用

深度可分离卷积将传统的卷积分两步进行,分别是depthwisepointwise。首先按照通道进行计算按位相乘的计算,深度可分离卷积中的卷积核都是单通道的,输出不能改变feature map的通道数,此时通道数不变;然后依然得到将第一步的结果,使用1*1的卷积核进行传统的卷积运算,此时通道数可以进行改变。深度学习CV岗位面试基础问题总结(基础篇)_第6张图片
计算量的前后对比

Kh × Kw × Cin × Cout × H × W

变成了 Kh × Kw × Cin × H × W + 1 × 1 × Cin × Cout × H × W

通过深度可分离卷积,当卷积核大小为3时,深度可分离卷积比传统卷积少8到9倍的计算量。

15. 转置卷积的原理

转置卷积又称反卷积(Deconvolution),它和空洞卷积的思路正好相反,是为上采样而生,也应用于语义分割当中,而且他的计算也和空洞卷积正好相反,先对输入的feature map间隔补0,卷积核不变,然后使用标准的卷积进行计算,得到更大尺寸的feature map。
深度学习CV岗位面试基础问题总结(基础篇)_第7张图片

16. 神经网络中Addition / Concatenate区别是什么?

Addition和Concatenate分支操作统称为shortcut,Addition是在ResNet中提出,两个相同维度的feature map相同位置点的值直接相加,得到新的相同维度feature map,这个操作可以融合之前的特征,增加信息的表达,Concatenate操作是在Inception中首次使用,被DenseNet发扬光大,和addition不同的是,它只要求两个feature map的HW相同,通道数可以不同,然后两个feature map在通道上直接拼接,得到一个更大的feature map,它保留了一些原始的特征,增加了特征的数量,使得有效的信息流继续向后传递。
深度学习CV岗位面试基础问题总结(基础篇)_第8张图片

17. 你知道哪些常用的激活函数?

  • ReLu系列:ReLU、ReLU6和leaky ReLU;ReLU6与ReLU相比也只是在正向部分多了个阈值,大于6的值等于6,而leaky ReLU和ReLU正向部分一样,都是大于0等于原始值,但负向部分却是等于原始值的1/10,浮点运算的话乘个0.1就好了。
    深度学习CV岗位面试基础问题总结(基础篇)_第9张图片

  • ReLU函数的优点:

  • 解决了梯度消失的问题;

  • 计算速度和收敛速度非常快;

  • ReLU函数的缺点:

  • 低维特征向高维转换时会部分丢失;

  • 均值为非零;

  • Sigmoid系列:Sigmoid、swish、h-sigmoid、h-swish;sigmoid对低性能的硬件来说非常不友好,因为涉及到大量的exp指数运算和除法运算,于是有研究人员针对此专门设计了近似的硬件友好的函数h-sigmoid和h-swish函数,这里的h指的就是hardware的意思:
    在这里插入图片描述在这里插入图片描述
    深度学习CV岗位面试基础问题总结(基础篇)_第10张图片

  • Sigmoid函数的优点:

  1. 输出为 0 到 1 之间的连续实值,此输出范围和概率范围一致,因此可以用概率的方式解释输出;
  2. 将线性函数转变为非线性函数;
  • Sigmoid函数的缺点:
  1. 幂运算相对来讲比较耗时;
  2. 输出均值为非 0;
  3. 容易出现梯度消失的问题;
  • tanh
    在这里插入图片描述

  • tanh函数的优点:

  • Tanh 函数的导数比 Sigmoid 函数导数值更大、梯度变化更快,在训练过程中收敛速度更快;

  • 使得输出均值为 0,可以提高训练的效率;

  • 将线性函数转变为非线性函数;

  • tanh函数的缺点:

  • 幂运算相对来讲比较耗时;

  • 容易出现梯度消失;

18. 神经网络中1*1卷积有什么作用?

  • 降维,减少计算量;在ResNet模块中,先通过11卷积对通道数进行降通道,再送入33的卷积中,能够有效的减少神经网络的参数量和计算量;
  • 升维;用最少的参数拓宽网络通道,通常在轻量级的网络中会用到,经过深度可分离卷积后,使用1*1卷积核增加通道的数量,例如mobilenet、shufflenet等;
  • 实现跨通道的交互和信息整合;增强通道层面上特征融合的信息,在feature map尺度不变的情况下,实现通道升维、降维操作其实就是通道间信息的线性组合变化,也就是通道的信息交互整合的过程;
  • 1*1卷积核可以在保持feature map尺度(不损失分辨率)不变的情况下,大幅增加非线性特性(利用后接的非线性激活函数)。

卷积神经网络中用11 卷积有什么作用或者好处呢?
卷积神经网络中用 11 卷积有什么作用或者好处呢?

19. 解释一下目标检测中的anchor机制?它的作用是什么?

目标检测Anchor是什么?

20. BN(Batch Normalization)的原理和作用是什么?

将一个batch的数据变换到均值为0、方差为1的正态分布上,从而使数据分布一致,每层的梯度不会随着网络结构的加深发生太大变化,从而避免发生梯度消失或者梯度爆炸,能够加快模型收敛,同时还有防止过拟合的效果。

实现过程

计算训练阶段mini_batch数量激活函数前结果的均值和方差,然后对其进行归一化,最后对其进行缩放和平移。

作用

  1. 限制参数对隐层数据分布的影响,使其始终保持均值为0,方差为1的分布;
  2. 削弱了前层参数和后层参数之间的联系,使得当前层稍稍独立于其他层,加快收敛速度;
  3. 有轻微的正则化效果。

21. 随机梯度下降相比全局梯度下降好处是什么?

  1. 当处理大量数据时,比如SSD或者faster-rcnn等目标检测算法,每个样本都有大量候选框参与训练,这时使用随机梯度下降法能够加快梯度的计算;
  2. 每次只随机选取一个样本来更新模型参数,因此每次的学习是非常快速的,并且可以进行在线更新。

22. 如果在网络初始化时给网络赋予0的权重,这个网络能正常训练嘛?

不能,因为初始化权重是0,每次传入的不同数据得到的结果是相同的。网络无法更新

23. 无监督学习方法有哪些?

强化学习、K-means 聚类、自编码、受限波尔兹曼机

24. 增大感受野的方法?

空洞卷积、池化操作、较大卷积核尺寸的卷积操作

25. 神经网络的正则化方法?/过拟合的解决方法?

数据增强(镜像对称、随机裁剪、旋转图像、剪切图像、局部弯曲图像、色彩转换)

early stopping(比较训练损失和验证损失曲线,验证损失最小即为最优迭代次数)

L2正则化(权重参数的平方和)

L1正则化(权重参数的绝对值之和)

dropout 正则化(设置keep_pro参数随机让当前层神经元失活)

26. 梯度消失和梯度爆炸的原因是什么?

原因:激活函数的选择。

梯度消失:令bias=0,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较小时,则权重参数呈指数级减小。

梯度爆炸:令bias=0,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较大时,则权重参数呈指数级增长。

27. 深度学习为什么在计算机视觉领域这么好?

以目标检测为例,传统的计算机视觉方法需首先基于经验手动设计特征,然后使用分类器分类,这两个过程都是分开的。而深度学习里的卷积网络可实现对局部区域信息的提取,获得更高级的特征,当神经网络层数越多时,提取的特征会更抽象,将更有助于分类,同时神经网路将提取特征和分类融合在一个结构中。

28. 为什么神经网络种常用relu作为激活函数?

  1. 在前向传播和反向传播过程中,ReLU相比于Sigmoid等激活函数计算量小;

  2. 在反向传播过程中,Sigmoid函数存在饱和区,若激活值进入饱和区,则其梯度更新值非常小,导致出现梯度消失的现象。而ReLU没有饱和区,可避免此问题;

  3. ReLU可令部分神经元输出为0,造成网络的稀疏性,减少前后层参数对当前层参数的影响,提升了模型的泛化性能;

29. 卷积层和全连接层的区别是什么?

  1. 卷积层是局部连接,所以提取的是局部信息;全连接层是全局连接,所以提取的是全局信息;

  2. 当卷积层的局部连接是全局连接时,全连接层是卷积层的特例;

30. 什么是正则化?L1正则化和L2正则化有什么区别?

所谓的正则化,就是在原来 Loss Function 的基础上,加了一些正则化项,或者叫做模型复杂度惩罚项,正则化机器学习中一种常用的技术,其主要目的是控制模型复杂度,减小过拟合。

两者的区别:

  • L1范式:它的优良性质是能产生稀疏性,导致 W 中许多项变成零。 稀疏的解除了计算量上的好处之外,更重要的是更具有“可解释性”。
  • L2范式:使得模型的解偏向于范数较小的 W,通过限制 W 范数的大小实现了对模型空间的限制,从而在一定程度上避免了过拟合。不过 岭回归并不具有产生稀疏解的能力,得到的系数仍然需要数据中的所有特征才能计算预测结果,从计算量上来说并没有得到改观。

L1、L2正则化的区别

31. 常用的模型压缩方式有哪些?

  1. 使用轻量型的特征提取网络,例如:mobileNet、shuffleNet、GhostNet系列等等;
  2. 通道、层剪枝;
  3. 模型蒸馏;
  4. 模型量化。

32. 介绍一下mobileNet系列轻量型网络的设计思想

33. 介绍一下shuffleNet轻量网络的设计思想,它和mobileNet有什么区别?

33. 介绍一下shuffleNetv2的设计思想

34. yolov3相对于yolov2做了哪些改进?v4相对于v3又做了哪些改进?

35. 介绍一下残差网络的设计思想,残差主要是用来解决什么问题?它是怎么去做的?

36. 最近看的一篇论文是什么?能否简单介绍一下论文的内容。

37. 如何处理样本不平衡?

处理不平衡数据集的7个技巧

38.什么是知识蒸馏?

知识蒸馏是一种模型压缩常见方法,用于模型压缩指的是在teacher-student框架中,将复杂、学习能力强的网络学到的特征表示“知识蒸馏”出来,传递给参数量小、学习能力弱的网络。从而我们会得到一个速度快,能力强的网络,因此这是一个概念上的模型压缩方案。从另一个角度来说,蒸馏可以使得student学习到teacher中更加软化的知识,这里面包含了类别间的信息,这是传统one-hot label中所没有的。由于蒸馏中软化标签的本质,因此蒸馏也可以被认为是一种正则化的策略。总结来说,知识蒸馏除了能够学习到大模型的特征表征能力,也能学习到one-hot label中不存在的类别间信息。现有的知识蒸馏方法主要侧重于两点:从teacher的什么位置学习 和 用什么方式学习。以下的总结图概述了本文要介绍的蒸馏方法。
深度学习CV岗位面试基础问题总结(基础篇)_第11张图片
知识蒸馏 | 模型压缩利器_良心总结

39. 常见的损失函数集合

总结 | 深度学习损失函数大全

40.机器学习

22道机器学习常见面试题目

41. 模型部署

知乎专栏:训练好的深度学习模型是怎么部署的?
老潘的AI部署以及工业落地学习之路
深度学习模型部署的那些事儿

42. 残差神经网络为什么可以缓解梯度消失?

残差神经网络为什么可以缓解梯度消失?

43. 在做模型部署的时候,需要考虑哪些问题?

一、确定部署环境
  • 有没有GPU?具体GPU型号是什么?
  • 具体操作系统?是否可以联网部署?
  • 具体CPU和内存是多大?
  • 具体部署方法是什么?编程环境是什么?
二、确定部署要求
  • 最长响应时间是多少?
  • 平均响应时间是多少?
  • 最大并发量是多少?
  • 模型最大权重是多少?

你可能感兴趣的:(神经网络,算法,卷积)