模拟测试 | 机器学习 | 第一份试卷共20题(附答案)

站长亦新
站长亦新
站长亦新
81
文章
0
评论
2020年7月19日07:09:18 评论 177 3549字阅读11分49秒

这次面试中,面试官逮住我疯狂问SVM,还好我之前做好了准备,回答的还不错感觉,不过不知道为什么还是没有三面了。这里做一个总结,大家可以当成一个小小的测试。

【关于文章结构】
本文主要有20道题,每道题后面我会写上自己个人的回答思路,这个会比较概括。再这之后会放上详细的关于知识点的相关文章可供学习。

本文强烈建议收藏

1. 项目介绍

这部分就介绍了自己参与大数据竞赛和Deepfake Detection Challenge的经历和代码,还有创新点。这个因人而异吧,我主要是没有实习经历,所以在简历关特别吃亏。研究生务必要重视暑期实习!大数据竞赛中,要讲一下时间序列的特征工程,还有填补缺失值的方法,自己用的LGB模型所以也会提一下(提到LGB模型的话,面试官很可能会问你更多的关于这个模型的原理算法,不过这次的面试没有问LGB就是了)。

2. python中的数据类型

Python基本数据类型一般分为:数字、字符串、列表、元组、字典、集合这六种基本数据类型。

3. GBDT
GBDT是基于boosting的思想,串行地构造多棵决策树来进行数据的预测,它是在损失函数所在的函数空间中做梯度下降,即把待求的决策树模型当作参数,每轮迭代都去拟合损失函数在当前模型下的负梯度,从而使得参数朝着最小化损失函数的方向更新。

4. XGBoost的原理
XGBoost相对与GBDT优化了目标函数。目标函数增加了一个表示树复杂度的参数,相当于一个正则项。并且XGBoost在优化损失的时候,不仅仅使用了一阶导数,还是用了二阶导数信息,加快了收敛。

5. 怎么调参的,了解并行优化吗?
关于调参我个人有一套流程,毕竟我是调参侠嘛。boost模型,先调估计器数量,然后是树的深度,然后是限制叶子节点最小样本,然后是选择样本降采样,再然后L1L2正则化,然后降低学习率。

至于并行优化,我没有实践中使用过,因为只有一台小小的笔记本让我来糟蹋。听说过两种并行,一个是feature parallel,一个是data parallel。

6. SVM使用核函数的问题
这一部分我回答的不太好,对SVM的核函数理解的不够深刻。一般常用的核函数是两个:线性核和高斯核。高斯核Gaussian Kernel 也就是Radial Basis Function (RBF)。

  • linear:K(x_i,y_j)=x_i^Tx_j。如果Feature的数量很大,跟样本数量差不多,这时候选用逻辑回归或者是Linear Kernel的SVM。
  • 高斯核:K(x_i,y_j)=e^{-gamma||x_i-x_j||^2}。如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel。

需要注意的是需要对数据归一化处理,很多使用者忘了这个小细节,然后一般情况下RBF效果是不会差于Linear,但是时间上RBF会耗费更多。

7. SVM的数学公式以及推导过程
这个其实就是推导公式,从一开始的求取最大间隔的约束问题,通过拉格朗日乘子法变成无约束的最小化优化问题。然后再加上KKT条件就是当时回答的整个过程了。

8. SVM拉格朗日乘子的原理
把有约束优化问题转换为无约束的优化问题的关键,在于满足约束优化问题图像相切的时刻,两者的梯度方向在同一条直线上,因此可以通过梯度相等这个条件,来将约束优化问题,转化为一个增加了约束项的非约束优化问题。如果这个约束是一个不等式,而不是一个等值约束,那么还要考虑KKT条件。

9. KKT条件内容和原理
主要是因为不等值约束会有两种情况,一种是约束不起效果,一种是其效果的情况。KKT条件就综合体现了这两种情况。

10. SVM的软间隔
软间隔这个没有回答上来当时。后来查了一下,是因为避免SVM对数据中的噪音过于敏感,使用了软间隔。之前硬间隔的SVM中:

y_i(w^Tx_i+b)>=1
最后推导得到的lambda>=0


软间隔就是y_i(w^Tx_i+b)>=1-zeta_i
然后在优化函数中加入一个限制zeta的项:
模拟测试 | 机器学习 | 第一份试卷共20题(附答案)
最后用相同的推导方式可以得到0<=lambda<=C

11. SVM的hingeloss
很简单,就是下面这个。
hingeloss = max(0,1-y_nf(x_n))
如果线性SVM使用交叉熵损失函数的那,那就是Logistic Regression逻辑回归了。所以SVM与其他模型区分的关键就是Hinge Loss损失函数。
所以有的时候,对于一个多层感知机,使用了Hinge Loss的话,也会被成为深度SVM模型。

【我个人感觉svm一种是按照之前几道题那样,用拉格朗日乘子法推导非约束优化问题的解,是传统的SVM;也可以用hinge loss来用梯度下降的方法来估计参数】

12. 批正则化BN的原理和作用,在训练和测试时有什么不同
这个问题并不难,原理就是通过两个学习的参数,来把数据的分布固定到均值为beta,方差为gamma^2。加快模型的收敛速度,解决ICS问题。测试的时候因为无法得到数据的均值和方差,所以使用了训练集的所有batch记录下来的均值方差做一个平均。

下面的文章中,讲解BN讲的非常透彻易懂:

13. dropout的原理和作用,在训练和测试时有什么不同
这个dropout随机让神经元失活,然后再测试的时候所有神经元都起效果,然后把模型的结果乘上一个缩小系数。比如训练阶段随机让20%的神经元失活,然后再测试阶段所有神经元都参与预测,这样理论上模型输出的结果会比正常大一些,因为之前都是用80%的神经元进行预测的,所以最后的结果再乘上0.8即可。

14. 什么是梯度消失,什么情况导致梯度消失,处理梯度消失的方法
梯度消失梯度抱着都是因为链式法则引起的,梯度消失一个是因为sigmoid激活函数的导数最大值是0.25,所以当使用越多sigmoid激活函数的时候,梯度就消失了,后来使用relu激活函数来避免这个问题。当然,当网络层数过多的时候,梯度也会消失,通过残差链接来解决这个问题。

15. 什么是梯度爆炸,梯度爆炸的处理方法

梯度爆炸出现的情况较少,主要是因为模型的参数过大导致的,使用L2正则化,可以有效解决这个问题。

16. **kwargs,*args
两个是python函数的可变参数。
args应该是arguments的缩写,然后kwargs是keyword arguments的缩写。

args是tuple,然后kwards就是带着keyword的参数,也就是字典dict的形式。

下面一个例子就明白了:

def foo(*args,**kwargs):
print 'args=',args
print 'kwargs=',kwargs
print '**********************'
if __name__=='__main__':
foo(1,2,3)
foo(a=1,b=2,c=3)
foo(1,2,3,a=1,b=2,c=3)
foo(1,'b','c',a=1,b='b',c='c')

运行结果就是:

args= (1, 2, 3)
kwargs= {}
**********************
args= ()
kwargs= {'a': 1, 'c': 3, 'b': 2}
**********************
args= (1, 2, 3)
kwargs= {'a': 1, 'c': 3, 'b': 2}
**********************
args= (1, 'b', 'c')
kwargs= {'a': 1, 'c': 'c', 'b': 'b'}
**********************

非常好理解。

17. pytorch模型训练过程中net.train()和net.eval()的区别,造成区别的原因(这个问题是因为我在项目中用到了pytorch)
官方的解释是:在验证或者测试的时候,模型中的某些层不应该起作用,比如说dropout层,也有一些层在训练和测试的时候的处理逻辑不同,比如说BN层,所以就需要设置
```net.eval()```来告诉模型,现在要测试了,不是训练阶段了,大家做好准备。

18. vgg和resnet的区别
VGG就是堆叠的思想,想看是不是网络层数越深,效果越好,但是发现层数太多的话,会出现梯度消失的问题。resnet使用残差结构,环节了梯度消失的问题。

19. 给一个特征图,已知步长,卷积核大小和padding,求输出特征图大小
很简单,就是特征图尺寸+2*padding-卷积核大小,结果除以步长stride再加1即可。

20. 逻辑回归损失函数怎么得来的,极大似然估计的形式
就是根据极大似然估计的方法,推导出来交叉熵损失的。非常好推导。


模拟测试 | 机器学习 | 第一份试卷共20题(附答案)
模拟测试 | 机器学习 | 第一份试卷共20题(附答案)

weinxin
我的微信
微信扫一扫
站长亦新
  • 本文由 发表于 2020年7月19日07:09:18
  • 转载请务必保留本文链接:http://helloworld2020.net/635/
工程能力大UP | 《炼丹大法》 公告

工程能力大UP | 《炼丹大法》

xavier、He和随机初始化都要尝试。使用一般的随机均值初始化CNN的参数,acc只能到70%,仅仅改成xavier,acc可以到98%。另外一次,使用xavier初始化效果不好,使用随机初始化效果...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: