首页常用模板面试问题如何面试算法工程师?

如何面试算法工程师?

几十年前,当人们提到人工智能和机器人,总觉得有些天马行空和难以想象。如今,AI和机器人已踏入我们的生活中,科技的迅猛发展,让机器人取代人类去做更加繁琐有章可循的工作,然而AI背后深层的原理就是算法,因此,招聘优秀的算法工程师也成了许多互联网公司和科技公司的必要工作。

在招聘算法工程师很重要的一环就是面试环节,这不仅对面试者有很高的要求,对于HR来说也必须深谙其原理,如果HR都听不懂面试者在讲什么,还何谈面试呢?

除去教育背景,逻辑思维,学习能力,沟通能力等其他方面的因素,大多数公司HR在考察算法工程师的技术水平时都会考虑下面这几个因素。

数学知识

与其他工作方向如app、服务器开发相比,以及与计算机科学的其他方向如网络,数据库,分布式计算等相比,人工智能尤其是机器学习属于数学知识密集的方向。在各种书籍,论文,算法中都充斥着大量的数学公式,理解绝大多数算法和理论,需要微积分/高等数学,线性代数,概率论,最优化方法的知识,概率图模型、流形学习,离散数学或者数据结构,因此HR在考察时记得考察数学能力。

编程能力

编程能力是学好机器学习和深度学习的又一大基础。对于计算机类专业的学生,由于本科已经学了c语言,c++,数据结构与算法,因此这方面一般不存在问题。

虽然现在大家热衷于学习python,但要作为一名真正的算法工程师,还是应该好好学习一下c++,很多公司线上的产品,无论是运行在服务器端,还是嵌入式端,都是用c++写的。因此,不少公司HR都会面试c++的知识。

机器学习和深度学习知识

机器学习是现阶段解决很多人工智能问题的核心方法,尤其是深度学习,因此它们是算法工程师的核心知识。一个专业的算法工程师,至少要知道机器学习中的基本概念, 过拟合,生成模型,ROC曲线等,另外,神经网络只是机器学习中的一类方法,对于很多问题,其他机器学习算法如logistic回归,随机森林,GBDT,决策树等还在被大规模使用,因此也可以是面试考察方向。

经验与思考

面试者对这个方向的方法要有一个全面系统的认识,很多方法是一脉相承的,如果只追求时髦看最新的算法,你很难做出学术上的创新,以及工程上的优化。对于一些经典问题,都应该化时间细度,清楚的理解它们解决了什么问题,是怎么解决的,还有哪些问题没有解决。

这是十条常见的面试问题及回答:

 

1、基于每日用户搜索内容,假设只有少量已知商品的情况下,如何根据用户搜索内容获取平台内没有的新商品?

答案:这是一条类似于分词“新词获取问题”,答案是基于信息熵+聚合度。

2、为什么logistic回归的要用sigmoid函数?优缺点?

答案:优点:
1.数据压缩能力,将数据规约在[0,1]之间
2.导数形式优秀,方便计算
缺点:
1.容易梯度消失,x稍大的情况下就趋近一条水平线
2.非0中心化,在神经网络算法等情况下,造成反向传播时权重的全正全负的情况。

为什么要用?
答案1:logistic是基于Bernoulli分布的假设,也就是y|X~Bernoulli分布,而Bernoulli分布的指数族的形式就是1/(1+exp(-z))

3、对比牛顿法、梯度下降法的关系

答案:牛顿法快于梯度下降法,且是梯度下降法的极限。

4、两个盒子,50个红球,50个白球,问如何放球,抽到红球的概率最高?(每个盒子必须有球)

答案:一个盒子1个红球,另外一个盒子剩余的99个球

5、常见的正则化有什么,有什么作用,为什么l1是会把feature压缩到0而l2做不到?

答案
(1)l1,l2正则化
l1对应python里面numpy.linalg.norm(ord=1)
形如|w1|+|w2|+|w3|+...
l2对应python里面numpy.linalg.norm(ord=2)
形如w12+w22+w3^2+...

(2)防止过拟合
其它防止过拟合的方法还有:
1.增加数据量
2.采取bagging算法,抽样训练数据
**
(3)画图解决

6、分类模型如何选择?如何判断效果?如何计算AUC?你最熟悉的ensemble Classification model是什么?

答案
整体上讲:数据量越大,神经网络越好;维度越多,bagging算法越优秀;数据量上不多不少的情况下,SVM效果最好;
常用判断:roc、auc、ks、f1值、recall等;
AUC计算方法:roc曲线下方的面积积分即可,或者大数定律的投点实验

7、循环神经网络中介绍一个你熟悉的?

核心强调:sigmoid(np.dot(输入参数,神经元1) + np.dot(上次节点1的值,潜在神经元)),输出值与输出值及上次节点1处的输入值有关。

8、kmeans的原理及如何选择k?如何选择初始点?

原理:在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,优点在于易于理解和计算,缺点也是很明显,数据一多的情况计算量极大,且标签feature定义距离的难度大。

9、听说你做过风控,异常点检测你用过什么办法?

1.6个西格玛的原理
2.箱式图大于3/2QI+Q3,小于Q1-3/2Qi
3.基于距离离群检测(聚类),包括欧式、马氏距离、街道距离

4.pca的基于特征值压缩的方法
5.基于isolation forest识别的方法

10、boost算法的思路是什么样的?讲一下你对adaboost 和 gbdt的了解?

答案:boost的核心思想不同于bagging,它在基于样本预测结果对照与真实值得差距,进行修正,再预测再修正,逐步靠近正确值。

不足:

1.adaboost存在异常点敏感的问题

2.gbdt一定程度上优化了adaboost异常点敏感的问题,但是存在难以并行的缺点

3.两者的目标都是优化bias,必然导致训练出来的数据var的不稳定

亮点:
1.发现非线性的特征关系,网格化的切分feature
2.拟合的效果相较于其他分类器更加精准,且训练参数较少


 

这就是HR常问的十大面试问题了,计算机以及人工智能是一个偏实践的学科,它的方法和理论既需要面试者有扎实的理论功底,又需要有丰富的实践能力与经验。这两个方面构成了算法工程师最主要的素质。

 

因此,HR在准备面试问题,可以把理论与实践结合起来考察,这样可以对面试者的能力有更全面的把握,同时HR自身也需要完善自己在算法方面的理论与实践能力,这样才能更好的完成面试工作。