机器学习面试基础2

目录

  1. 简述K-Means算法的基本流程
  2. Kmeans对异常值是否敏感?为什么?
  3. 如何评估聚类的效果
  4. 超参数k如何选择?
  5. Kmeans算法的优缺点

  1. 简述SVM原理
  2. SVM为什么采用间隔最大化
  3. SVM为什么要引入核函数
  4. SVM核函数之间的区别
  5. 为什么SVM对缺失数据敏感?

  1. SVM算法的优缺点
  2. soft-SVM的超参数C如何调节?
  3. SVM的核函数如何选择?
  4. 简述SVM推导过程
  5. 简述soft SVM推导过程

  1. 简述决策树的构建过程
  2. ID3决策树与C4.5决策树的区别
  3. CART回归树构建过程
  4. 决策树的优缺点
  5. 决策树如何防止过拟合?说说具体方法

  1. 为什么必须要在神经网络中
  2. ReLU在零点不可导,那么在反向传播中怎么处理?
  3. ReLU的优缺点
  4. BatchNorm解决了什么问题?
  5. BN的实现流程

  1. 激活函数有什么作用,常用的激活函数
  2. 怎么解决梯度消失问题?
  3. 什么是端到端学习?
  4. Softmax的原理是什么?有什么作用?
  5. CNN的平移不变性是什么?如何实现的?

  1. AlexNet,VGG,GoogleNet,ResNet的区别
  2. Pooling层做的是什么?
  3. ROI Pooling的不足是什么?
  4. ROI Align的具体做法
  5. Inception Module的优点是什么?

  1. Pytorch实现VGG16网络
  2. Faster RCNN中RPN相比之前做了什么优化
  3. Dropout 是否用在测试集上?
  4. YOLO v3进行了几次下采样?
  5. 列举几个梯度下降的方法

2020.11.23

1. 简述K-Means算法的基本流程:

K-means算法的基本流程如下:

  1. 随机初始化k个中心点。
  2. 计算所有样本到中心点的距离。
  3. 比较每个样本到k个中心点的距离,并将样本分类到距离最近的中心点所在的类别中。
  4. k个类别组成的样本点重新计算中心点。
  5. 重复2-4,直到中心点不再变化。

其中,k表示预设的类别个数;两点的距离由欧式距离的平方表示;中心点的计算方式为,在表示中心点向量的每一个方向上计算当前类所有样本均值。

由于kmeans的初始化中心点为止是随机的,而在kmeans的优化过程中,每个中心点只在较小的距离范围内更新,所以算法的效果依赖于中心点初始化的效果。对于此问题的一个改进策略在kmeans++算法中提出。

Kmeans++:

  • 思想:初始化的聚类中心距离尽可能地远
  • 对初始化进行优化
  • 流程
  1. 随机初始化一个中心。
  2. 对于每个样本, 计算距离它最近的中心的距离,每个样本被选为中心点的概率为。按照轮盘法选择出下一个中心点。
  3. 重复步骤2,直到选出所有的中心点。

2. Kmeans对异常值是否敏感?为什么?

Kmeans对异常值较为敏感,因为一个集合内的元素的均值容易受到一个极大值的影响。如下图中展示的结果。
因为有了一个异常值,这个元素集合的中心点严重偏离了大多数点所在的位置区域;因此在有异常值影响的情况下,均值所计算出来的中心位置不能够反映真实的类别中心。


3. 如何评估聚类的效果

聚类往往不像分类一样有一个最优化目标和学习过程,而是一个统计方法,将相似的数据和不想死的数据分开。所以,评估聚类效果可以从一下角度入手。

  • 聚类趋势(对数据进行评估)
    霍普金斯统计量(Hopkins Statistic)评估给定数据集是否存在意义的可聚类的非随机结构。如果一个数据集是由随机的均匀的点生成的,虽然也可以产生聚类结果,但该结果没有意义。聚类的前提需要数据是非均匀分布的。该值在区间[0, 1]之间,[0.01, 0.3]表示数据接近随机分布,该值为0.5时数据时均匀分布的,[0.7, 0.99]表示聚类趋势很强。

  • 判定聚类的簇树是否为最佳
    可用业务分析法、观察法、手肘法和Gap Statistic方法找到最佳的分类数与实际簇数做比较(见4. 超参数k如何选择

  • 聚类质量
    因为没有标签,所以一般通过评估类的分离情况来决定聚类质量。类内越紧密,类间距离越小则质量越高。

4. 超参数k如何选择?

  • 根据业务,比如希望把用户分成高中低三种。

  • 观察法,对于低维度数据适用;对数据进行可视化或者PCA降纬可视化之后,可大致观测出数据分布自然显示的类别数。

  • 手肘法:所有样本点到它所存在的聚类中心点的距离之和,作为模型的衡量,计算
    k越大(k是类别数),会越小;绘制关于k的函数图像,观察是否存在某个值,当k大于这个值之后,的减小速度明显变缓或者基本不变,则这个值所在的点即为拐点,拐点处的k值就是要选择的最佳分类个数。

  • Gap Statistic

    均匀分布产生和原始样本一样多的随机样本。对随机样本做kmeans得到,重复多次可以获得, Gap statistic 取最大值所对应的k就是最佳的k。蒙特卡洛算法的思想。

5. Kmeans算法的优缺点

优点

  • 容易理解,聚类效果不错,虽然是局部最优,但往往局部最优就能够给出一个不错的结果。
  • 处理大数据集的时候,该算法可以保证较好的伸缩性 - 即稍作改进即可处理大数据集。
  • 当数据簇近似高斯分布的时候,效果非常不错。
  • 算法复杂度低 - 时间复杂度为,其中n为样本数,k为类别数,t为迭代次数。而且通常来说,k和t相对于n来说很小。

缺点

  • k值需要人为设定,不同k值得到的结果不一样。
  • 对初识的类别中心敏感,不同选取方式会得到不同的结果。
  • 对异常值敏感。
  • 样本只能归为一类,不适合多分类任务。
  • 不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类。

2020.11.24

6. 简述SVM原理

SVM是一种二分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机。
  • 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机。
  • 当训练数据线性不可分时,通过使用kernel trick及软间隔最大化,学习非线性支持向量机。

7. SVM为什么采用间隔最大化

当训练数据线性可分时,存在无穷多个分离超平面可以将两类数据正确分开。感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。线性可分支持向量机利用间隔最大化求得最优分离超平面。这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是鲁棒的,对未知实例的泛化能力最强。

8. SVM为什么要引入核函数

当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。而引入这样的映射后,所要求解问题中,无需求解真正的映射函数,而只需要知道其核函数。核函数的定义:,即在特征空间的内积等于它们在原始样本空间中通过核函数K计算的结果。一方面数据变成了高维空间中线性可分的数据,另一方面不需要求解具体的映射函数,只需要给定具体的核函数即可,这样使得求解的难度大大降低。

9. SVM核函数之间的区别

SVM核函数有

  • 线性核函数:主要用于线性可分的情形,参数少,速度快。
  • 多项式核函数
  • 高斯核(RBF):主要用于线性不可分的情形,参数多,分类结果非常依赖于参数,有很多人是通过训练数据的交叉验证来寻找合适的参数,但是这个过程比较耗时。
  • 拉普拉斯核
  • Sigmoid核
    其中多项式核函数,高斯核(RBF),拉普拉斯核Sigmoid核函数通常用来处理线性不可分的情形。而一般选择核函数时通常考虑线性核和高斯核。

10. 为什么SVM对缺失数据敏感?

这里说的缺失数据是指缺失某些特征数据,向量数据不完整。
SVM没有处理缺失值的策略。而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要。确实特征数据将影响训练结果的好坏。
另外,SVM的决策只基于少量的支持向量,若噪音样本出现在支持向量中,容易对决策造成影响,所以SVM对噪音敏感。


2020.11.25

11. SVM算法的优缺点

优点:

  1. 可以有效解决高维特征的分类和回归问题
  2. 无需依赖全体样本,只依赖支持向量
  3. 有大量的核技巧可以使用,从而可以应对线性不可分问题。
  4. 样本量 中等偏小 依然可以有较好的效果。

缺点:

  1. 如果特征维度远大于样本个数,SVM表现一般。
  2. SVM在样本巨大且使用核函数时计算量很大。
  3. 非线性数据的核函数选择依旧没有标准。
  4. SVM对缺失和噪声数据敏感。
  5. 特征的多样性导限制了SVM的使用,因为SVM本质上是属于一个几何模型,这个模型需要去定义instance之间的kernel或者similarity(线性SVM中的内积),而我们无法预先设定一个很好的similarity。这样的数学模型使得SVM更适合去处理“同性质”的特征。

12. soft-SVM的超参数C如何调节?

C可以看作与正则化参数作用相反,则对于C的调节:

  • 低偏差,高方差:遇到了过拟合,减少C值。
  • 高偏差,低方差:遇到了欠拟合,增大C值。

13. SVM的核函数如何选择?

  • 当特征维度n较高,而样本规模m较少时,不宜使用核函数或者选用线性核的SVM,否则容易引起过拟合。
  • 当特征维度n较低,而样本规模m足够大时,考虑使用高斯核函数。不过在使用高斯核函数前,需要进行特征缩放(feature scaling)

14. 简述SVM推导过程

https://www.jianshu.com/p/5d4e0a83ee4d

15. 简述soft SVM推导过程

https://www.jianshu.com/p/b70cf924ffc6


2020.11.26

16.简述决策树的构建过程

  • 构建根节点,将所有训练数据都放在根节点。
  • 选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集在当前条件下获得最好的分类。
  • 如果子集非空,或未达到停机条件,递归1、2步骤,直到所有训练数据子集都被正确分类或没有合适的特征为止。

17. ID3决策树与C4.5决策树的区别

构建决策树过程中一个关键步骤就是选择一个最优特征;而ID3决策树与C4.5决策树一个最大的区别就是在选择最优特征时所依赖的标准不同

ID3决策树中,选择最佳特征通过信息增益指标来选择,所谓信息增益可以定义为:
数据集对于某特征的信息增益 = 数据集的经验熵 - 这个特征对数据集的条件经验熵。

其中D为数据集,A表示数据集样本上的某个特征,为数据集的经验熵;表示特征A对数据集D的经验条件熵。

其中K表示D中类别的数量,表示第k个类别所包含的样本个数。

其中n表示在特征A上不同取值的个数,表示在特征上取第i个值且类别为k时的样本个数。

C4.5决策树中,为了解决信息增益偏向于选择取值较多的特征的问题,选择最佳特征通过信息增益熵来选择,所谓信息增益熵可以定义为:

其中表示,训练数据集D关于特征A的值的熵。

其中n表示特征A上取得不同值的个数,表示在特征A上取值为第i个时,样本的个数。

此处
1)ID3只能处理离散型变量,而C4.5通过将连续值离散化来处理连续型变量。
2)ID3没有对缺失值的处理策略,而C4.5通过引入有缺失值样本对所有样本的比例来处理缺失值带来的“信息增益失真”的问题。

18. CART回归树构建过程

在CART树的构建过程中,假设决策树是一颗二叉树;决策树的生成过程就是递归地构建二叉决策树的过程。对回归树来说用,我们这里讨论一个基本形式即为平方误差最小化准则,进行特征选择,生成二叉树。

输入:训练数据集D;
输出:回归树

在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉树:

(1)选择最优切分变量(特征)j 与切分点(特征值域上的值)s,求解

(2)用选定的划分区域并决定相应的输出值,其中是划分后的左子区域,而是划分后的右子区域;是左子区域上的预测值(此区域上所有样本真实值的均值),而是右子区域上的预测值(此区域上所有样本真实值的均值)。

(3)递归地对两个子区域调用步骤1), 2),直到满足停机条件。常用的停机条件有a.树的深度, b.叶子区域的个数,c.叶子区域上样本的个数等。
(4)将输入空间划分为M个区域R1, R2, ..., RM, 生成决策树,划分的空间即为叶子节点上的空间:

可以对照XGBoost节点分裂的过程来学习CART回归树的生成过程。

19. 决策树的优缺点

优点:

  • 缺失值不敏感,对特征的宽容程度高,可缺失、可连续、可离散。
  • 可以计算特征重要性,且可解释性强。
  • 算法对数据没有强假设。
  • 可以解决线性及非线性问题。
  • 有特征选择等辅助功能。

缺点:

  • 处理关联性数据比较薄弱 - 重要性强且关联的特征都得到了重视。
  • 正负量级有偏样本的样本效果较差。
  • 单棵树的拟合效果欠佳,容易过拟合。

20. 决策树如何防止过拟合?说说具体方法

我们在讨论防止机器学习过拟合的时候,通过分类的方法,大致确立了这么几个改进方向:1)数据,2)模型,3)正则化,4)训练。在这个题目中,我们重点讨论如何通过改进决策树模型来防止过拟合,当然其他几个方向对防止决策树过拟合同样适用。

通过改进模型来防止过拟合的主要思路是简化模型,使得模型能够学习样本中的共同特征(即主要特征),而摒弃个性化的特征(即次要特征)。而对树模型进行简化的方法又可以分为预剪枝(在训练过程中进行剪枝),和后剪枝(在决策树构建完成之后进行剪枝)。

预剪枝的主要方法有:
1)限制树的深度 - 当树到达一定深度的时候,停止树的生长。
2)限制叶子节点的数量。
3)规定叶子区域内最少的样本树,未达到最少样本树的叶子区域不做分裂。
4)计算每次分裂对测试集的准确度提升。

后剪枝的核心思想是让算法生成一颗完全生长的决策树,然后最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子节点替代,该节点的类别同样按照majority vote 的原则进行判断。
同样地,后剪枝也可以通过在测试集上的准确度进行判断,如果剪枝过后准确率有所提升,则进行剪枝。相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大。


2020.11.30

21. 为什么必须要在神经网络中

22. ReLU在零点不可导,那么在反向传播中怎么处理?

ReLU虽然在零点不可导,但是我们在做反向传播的计算时,对ReLU这个函数的导数分情况讨论。即ReLU在零点时人为地给它赋予一个导数,比如0或者1。例如在下面的ReLU反向传播函数实现中,将ReLU在零点位置的导数设置为0。


relu.png

23. ReLU的优缺点

优点

  1. 使用ReLU的SGD算法的收敛速度比sigmoid和tanh快。
  2. 在 x > 0 上,不会出现梯度饱和,梯度消失的问题。
  3. 计算复杂度低,不需要进行指数运算,只要一个阈值(0) 就可以得到激活值。

缺点

  1. ReLU的输出不是以0为均值的,它将小于0的值都置为0;使得所有参数的更新方向都相同,导致了Zig-Zag的现象。
  2. Dead ReLU Problem (ReLU神经元坏死现象):某些神经元可能永远不被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)。
  3. ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张。

24. BatchNorm解决了什么问题?

BN的提出是为了解决Internal Covariate Shift的问题,即当深度神经网络经过多层的计算,输入到每一层的数据分布发生了严重的改变,这种输入数据上的抖动和变化,使得网络参数难以学习,随着网络的加深,模型更加难以收敛。Batch Normalization层的引入,使得每一层的输入数据都归一化到近似于均值为0,方差为1的分布上,从而大大缓解了Internal Covariance Shift的问题。此外,BN还给深度神经网络带来了以下好处:

  1. BN可以解决每一层数据不稳定的问题。

  2. BN可以解决梯度消失的问题。(存疑)
    a. 例如在Sigmoid激活函数里,当输入值非常大或者非常小的时候,梯度接近于0;而将数据归一化到(0, 1)之间,梯度可以很好地得到更新。

  3. 网络的训练速度加快。

  4. 引入BN层之后,使得激活函数的使用更加丰富和灵活

  5. 使得网络参数初始化和学习率的参数调节更加容易和灵活。

25. BN的实现流程

  • 按BN进行期望和标准差计算
  • 对整体数据进行标准化
  • 对标准化的数据进行线性变换。
  • 其中变换系数需要学习。
batchNorm1

batchNorm2

2020.12.01

26. 激活函数有什么作用,常用的激活函数

Sigmoid:
Sigmoid 将回归问题的结果转换到(0,1)的范围,图像成中间窄两边宽的结构;Sigmoid函数提供了一个很好的适用于二分类问题的输出结果,以及非线性表达。但是它的缺点也非常明显:

  1. forward & backward passing都需要做指数计算,计算量较大。
  2. Sigmoid函数梯度饱和导致神经网络反向传播时出现梯度消失的现象。当神经元的激活在接近0或1处时会饱和,在这些区域梯度几乎为0,这就会导致梯度消失,几乎没有信号传回上一层。
  3. Sigmoid函数的输出不是零中心的。因为如果输入神经元的数据总是正数,那么关于w的梯度在反向传播过程中,将会要么全部是整数,要么全部是负数,这将会导致梯度下降权重更新时出现Z字型的下降(ZigZac现象).

tanh、ReLU、Leaky ReLU不再多提。

另外还有最近两年开始流行起来的 Swish 和 Mish。再leaky Relu 的基础上提供的连续可导,非单调,有下界无上界等特点。再很多任务中表现都比ReLU 优秀,但是并没有办法证明 这两个激活函数就一定比 ReLU 好。

27. 怎么解决梯度消失问题?

梯度消失的原因主要有两个:1. 在深度网络中,网络参数的学习是通过反向传播的链式求导法则来求Loss对某个参数的偏导数,然后进行参数更新的。当网络层数很深,浅层参数的求导链会非常长;如果其中的某些中间结果值很小,并经过链式的累乘作用,最终求得的梯度值就会接近于0,导致参数得不到更新。

可以通过以下方法解决梯度消失的问题:

  1. 选用合适的激活函数。比如ReLU或者Leaky ReLU。因为像sigmoid和tanh这样的激活函数,会出现比较大的梯度饱和区域,使得梯度的取值趋于0。
  2. 采用Batch Normalization层,对网络上计算得到中间值进行归一化,使得中间计算结果的取值在均值为0,方差为1这样的分布内。那么此时,在sigmoid和tanh中,函数取值出于中间变化较大的部分,梯度取之也相对较大,从而可以防止过拟合。
  3. 使用残差结构,残差结果相当于给靠近输入端的网络层提供了一个与靠近输出端层的直连操作。在反向传播计算时,减少了梯度传播的路径长度,以缓解梯度消失的问题。
  4. 在RNN网络中,可以通过使用LSTM来解决遗忘和梯度传播的问题。

28. 什么是端到端学习?

在传统的机器学习系统中,我们通常需要对数据进行多阶段处理,在每个阶段使用人工特征提取、数据标注或者独立的机器学习模型来完成特定的任务;而在端到端学习系统中,可以通过训练一个大的神经网络来完成从原始数据的输入到最终结果输出的整个任务。端到端的学习可以大大减少人工参与,简化解决方案部署流程。

现实中的人物通常非常复杂,将复杂任务拆分成简单的任务解决通常能够达到很好的效果;比如我们在做人脸识别任务时,通常会把这个任务分成三个子任务:1. 人脸检测;2. 人脸关键点对齐和矫正;3. 基于切分后的人脸图像的人脸识别。
如果要将这个任务变成端到端任务,需要大量有标注的数据。

29. Softmax的原理是什么?有什么作用?

Softmax的公式是:

它具有以下特性:

  1. 经过Softmax之后,每一路的输出在(0,1)范围内。
  2. 所有路输出之和为1,即
  3. 经过softmax之后,比较大的输入在输出时候会变得相对更大

基于以上三个特性,softmax函数经常被用在分类任务神经网络的输出头,做多分类输出。

30. CNN的平移不变性是什么?如何实现的?

平移不变性(translation invariant)指的是CNN对于同一张图及其平移后的版本,都能输出同样的结果。这对于图像分类(image classification)问题来说肯定是最理想的,因为对于一个物体的平移并不应该改变它的类别。

CNN的平移不变性是通过卷积 + 池化来实现的。
卷积:图像经过平移,相应的特征图上的表达也是平移的。在神经网络中,卷积被定义为不同位置的特征检测器,也就意味着,无论目标出现在图像中的哪个位置,它都会检测到同样的这些特征,输出同样的响应。

池化:比如最大池化,它返回感受野中的最大值,如果最大值被移动了,但是仍然在这个感受野中,那么池化层也仍然会输出相同的最大值。这两种操作共同提供了一些平移不变性,即使图像被平移,卷积保证仍然能检测到它的特征,池化则尽可能地保持一致的表达。

但是在近几年的研究中,人们发现,当深度网络加深之后,CNN的平移不变性越来越难以保证。比如说,当图像中的物体发生小范围移动的话,网络预测的结果会出现较大的波动。其中一个主要原因来自下采样部分,比如stride=2的下采样,它是将网络人为地按照规则分块之后,然后再进行采样;这样被采样的对象经过微小平移之后,就会在采样块之间发生位置变化,导致每个采样块采样处的结果与平移前的结果有所差别,而经过多层这样的采样之后,能够保持平移前结果不变的概率会越来越小。


2020.12.02

31. AlexNet,VGG,GoogleNet,ResNet的区别

AlexNet
相比传统的CNN,主要改动包括Data Augmentation、Dropout方法、激活函数用ReLU代替了传统的Tanh、Overlapping Pooling(有重叠,即Pooling的步长比Pooling Kernel的对应边要小)、多GPU并行。

VGG
VGG很好地继承了AlexNet的特点,采用了更小的卷积核堆叠来代替大的卷积核,并且网络更深。

GoogLeNet
网络更深,但主要的创新点在于Inception模块,这是一种网中网(Network In Network)的结构,即原来的结点也是一个网络。相比于前述几个网络,用了Inception之后整个网络结构的宽度和深度都可扩大,能够带来2-3倍的性能提升。

ResNet
在网络深度上有了进一步的探索。但主要的创新在残差网络,网络的提出本质上还是要解决层次比较深的时候无法训练的问题。这个借鉴了highway network思想的网络相当于旁边专门开个通道使得输入可以直达输出,而优化的目标由原来的拟合输出H(x)变成输出和输入的差H(x) - x,其中H(x)是某一层原始的期望映射输出,x是输入。

32. Pooling层做的是什么?

池化层(Pooling Layer)也叫子采样层(Subsampling Layer)它的一个很重要的作用就是做特征选择减少特征数量,从而减少网络的参数量。采用Pooling Layer之后,在不增加参数的情况下,可以增大网络对图像的感受野
虽然用带步长的卷积(步长大于1)代替Pooling layer也可以实现下采样和增大感受野的作用,但是pooling layer的计算简单,同时也没有可学习的参数,在很多需要做特征图拼接的网络,比如shuffleNet中是非常适用的。

33. ROI Pooling的不足是什么?

取整操作导致精度损失

34. ROI Align的具体做法

计算流程如下:

  1. 由输入的GT-box大小,经过backbone的缩放(比如32),得到输出的shared layer中GT-box大小
  2. 对于缩放后的GT-box,将其平均分为(n, n) 大小的小块 (这里的n即为pooling后的anchor的边长)
  3. 对于每个小块,假设我们的采样率为2,那么在每个小块内,要采样2x2=4个点,四个点的位置按小块内的1/4, 3/4位置取。
  4. 按照双线性插值计算4个点的像素值,取4个点中的像素值max作为这个小块的像素值。

35. Inception Module的优点是什么?

Inception V1
Inception Module 基本组成结构有四个成分。 1x1卷积、3x3卷积、5x5卷积、3x3最大池化。最后对四个成分运算结果进行通道上的组合。这就是Inception Module的核心思想。通过多个卷积核提取图像不同尺度的信息,最后进行融合,可以得到图像更好的表征

Inception V2

  1. 两个3x3 卷积代替5x5卷积,可以降低参数量。
  2. 提出和采用了Batch Normalization

Inception V3
借鉴Factorization into small convolutions的思想,将一个二维卷积拆分成两个较小卷积,例如将7x7卷积拆分成 1x7 和 7x1卷积。

  1. 可以降低参数量。
  2. 通过这种非对称的卷积拆分,比对称的拆分为几个相同的卷积效果更好,可以处理更多、更丰富的空间特征。

Inception V4
借鉴了ResNet思想,在Inception module多链路并行的结构上,增加了ResNet直连链路。


2020.12.03

36. Pytorch实现VGG16网络

可以从两个阶段来理解VGG16网络,第一阶段为特征提取,第二阶段为分类功能头。在特征提取阶段,VGG16分为了5个conv + maxPooling网络块,并且所有的conv层都是3x3的卷积层,每个块内部卷积的输入与输出channel维度是一样的。在分类功能头部分,由三个全连接层加一个Softmax层做多分类输出。

vgg16 (1).png

vgg16 (2).png

37. Faster RCNN中RPN相比之前做了什么优化

RPN.png

38. Dropout 是否用在测试集上?

在训练的时候Dropout打开,功能类似于每次将网络进行采样,只训练一部分网络。而训练结束,在测试集上做测试的时候,就要将这些每次训练好的“子网络”集成起来,一起做决策。所以要关闭Dropout,即关闭网络采样功能。

39. YOLO v3进行了几次下采样?

YOLOv3 网络对原始的输入数据进行了5次下采样,采样得到的最小特征图是对原图像进行32倍缩放后的结果;并分别在8倍、16倍和32倍下采样之后进行了bbox的分类和回归定位。

40. 列举几个梯度下降的方法

梯度下降方法的演化通常可以从以下三个方面进行总结。

梯度更新计算设计的样本数

  • Batch Gradient Descent (BGD)

    • 批量梯度下降,对所有的样本计算梯度后求平均,并更新参数。
    • 下降速度很慢,受到内存大小的限制。
  • Stochastic Gradient Descent (SGD)

    • 随机梯度下降,对每个样本计算梯度,并更新一次参数。
    • SGD的梯度更新速度快
    • 由于样本之间差异的影响,导致梯度下降的方向和大小出现剧烈的波动。
  • Mini-Batch Gradient Descent

    • 小批量梯度下降,每一次梯度更新是基于对小批量样本计算梯度后求平均完成的。
    • 综合了以上两种梯度下降方法的优点,梯度更新快且稳定。
    • 在内存相对较小的情况下,也可以完成对大训练集的训练工作。
      梯度下降方法的一般公式为:

梯度下降方向的优化

  • Momentum动量算法
    • 其中代表动量,它是之前t次梯度的带权累加;表示历史动量影响的权重。
    • 利用惯性,做动量更新的全局平衡,即每次更新时,不仅要考虑当前梯度方向还要考虑历史累积的方向。当前梯度与上次梯度进行加权,如果方向一致,则累加导致更新步长变大;如果方向不同,则相互抵消中和导致更新趋向平衡。
  • Nesterov Accelerated Gradient (NAG)
    • 梯度不是根据当前位置计算出来的,而是在移动之后的位置计算梯度。
    • 这个改进的目的就是为了提前看到前方的梯度,并做一定的补偿与平衡。如果前方的梯度和当前梯度目标一致,两者相加就获得比较大的更新;如果方向不同,则相互抵消中和导致更新趋向平衡。

梯度更新大小的优化

  • Adagrad (Adaptive Subgradient)

    一般是一个极小值,作用是防止分母为0。 表示了前t步参数梯度的平方累加,把沿路的Gradient的平方根,作为正则化项。
    • 训练前期,梯度较小,使得正则化项很小,放大梯度。
    • 训练后期,梯度较大,使得正则化项很大,缩小梯度。
  • RMSprop
    • RMSProp算法不是像AdaGrad算法那样暴力直接的累加平方梯度,而是加了一个衰减系数来控制历史信息的获取多少。

综合以上

  • Adam
    • 同RMSProp相比,Adam在对梯度平方(二阶)估计的基础上增加了对梯度(一阶)的估计,相当于采用了Momentum动量方法。
    • 由于 和 通常都初始化为0,因此在训练初期或者, 接近1时,估计的期望往往偏向于0, 为了解决这种偏置,增加了偏置矫正:
    • 梯度更新公式为:

你可能感兴趣的:(机器学习面试基础2)