面试官如何判断面试者的机器学习水平?

[复制链接]
查看8086 | 回复0 | 2021-10-4 09:12:25 | 显示全部楼层 |阅读模式
作为一名新晋菜鸟面试官,最近替部门面了3、40个人(大多来自国内top5学校,包括校招社招),小小总结下我的相人之术,希望能帮上大家( A1 d8 h6 a) W! X! F4 O* `
* |5 M* K$ C* ^6 R  D0 x
/* 先插个话,本题的答主中,有我非常膜拜的真大神,也有掉书袋的教条主义者,对后者,我有一言相劝
5 i; B2 N( I( e# O9 C+ V* u
面试官的水平(而非面试者)决定了面试的上限,所以当面试者水平超过你时,承认被碾压、虚心接受就好,并适时向对方学习,而不是拿那些条条框框的应试题来恶心人
*/" {; Q. e. |6 A
----------------------
. e) W2 g$ {8 r) r面试别人时,我主要遵循『两原则』『三方面』) A( z! p' s3 e* a
『两原则』指:
/ l8 h! {1 n. x2 a1 ]
    绝不网上现搜应试题(一不尊重面试者,二这种题大多考察不了真水平),确保所问问题是自己认真思考过的在自己能力范围内,不停追问面试者所做的项目、所掌握的理论细节,看他掌握到什么程度,评判他简历内容的真实性
    * s' N9 ^4 `5 p/ T% @
『三方面』包括:. B. ^! K' ^' t$ }
    理论功底代码能力项目能力
    ' K" S- O- R& J* g
----------------------) b" M, a" H  l+ z) y3 P9 l# |
把三方面展开:2 y6 c( h$ T( e' r6 x% L# g6 Q
    【理论功底】主要考察对机器学习模型的理解,选择性提问(如果遇到面试者的研究方向自己不了解但感兴趣,会很欣喜,可以趁机学习一个哈哈)这块儿的问题会比较细碎,都是我自己深入思考过的(背书是没用的,这里任何一个点我都可以给你展开问下去),在此全部手敲
      过拟合欠拟合(举几个例子让判断下,顺便问问交叉验证的目的、超参数搜索方法、EarlyStopping)、L1正则和L2正则的做法、正则化背后的思想(顺便问问BatchNorm、Covariance Shift)、L1正则产生稀疏解原理、逻辑回归为何线性模型(顺便问问LR如何解决低维不可分、从图模型角度看LR和朴素贝叶斯和无监督)、几种参数估计方法MLE/MAP/贝叶斯的联系和区别、简单说下SVM的支持向量(顺便问问KKT条件、为何对偶、核的通俗理解)、 GBDT随机森林能否并行(顺便问问bagging boosting)、 生成模型判别模型举个例子、聚类方法的掌握(顺便问问Kmeans的EM推导思路、谱聚类和Graph-cut的理解)、梯度下降类方法和牛顿类方法的区别(顺便问问Adam、L-BFGS的思路)、半监督的思想(顺便问问一些特定半监督算法是如何利用无标签数据的、从MAP角度看半监督)、常见的分类模型的评价指标(顺便问问交叉熵、ROC如何绘制、AUC的物理含义、类别不均衡样本)CNN中卷积操作和卷积核作用、maxpooling作用、卷积层与全连接层的联系、梯度爆炸和消失的概念(顺便问问神经网络权值初始化的方法、为何能减缓梯度爆炸消失、CNN中有哪些解决办法、LSTM如何解决的、如何梯度裁剪、dropout如何用在RNN系列网络中、dropout防止过拟合)、为何卷积可以用在图像/语音/语句上(顺便问问channel在不同类型数据源中的含义)如果面试者跟我一样做NLP、推荐系统,我会继续追问 CRF跟逻辑回归 最大熵模型的关系、CRF的优化方法、CRF和MRF的联系、HMM和CRF的关系(顺便问问 朴素贝叶斯和HMM的联系、LSTM+CRF 用于序列标注的原理、CRF的点函数和边函数、CRF的经验分布)、WordEmbedding的几种常用方法和原理(顺便问问language model、perplexity评价指标、word2vec跟Glove的异同)、topic model说一说、为何CNN能用在文本分类、syntactic和semantic问题举例、常见Sentence embedding方法、注意力机制(顺便问问注意力机制的几种不同情形、为何引入、seq2seq原理)、序列标注的评价指标、语义消歧的做法、常见的跟word有关的特征、factorization machine、常见矩阵分解模型、如何把分类模型用于商品推荐(包括数据集划分、模型验证等)、序列学习、wide&deep model(顺便问问为何wide和deep)
      " `  c3 d) k2 {  k! l( A" p
    【代码能力】主要考察实现算法和优化代码的能力,我一般会先看面试者的github repo(如果简历给出来),看其代码风格、架构能力(遇到大神会认真学习一个哈哈),如果没有github,我会避免问典型的应试题,而是问一些 我本人从实际问题中抽象出的小算法题,比如:
      给出节点的矩阵和边的矩阵,求路径和最大的路径(来源于 Viterbi 算法,本质就是个动态规划),至少给个思路和伪代码(顺便聊聊前向传播和反向传播)给出一数组,数组元素是pair对儿,表示一个有向无环图的<父亲节点, 孩子节点>,用最优的方法,将其变成一个新的有序数组,数组元素是该有向无环图所有节点,数组的有序性体现在:父亲节点在孩子节点前面(来源于 贝叶斯网络实现时的小trick)
      " }0 P8 n$ R; {3 v9 L
    【项目能力】主要考察解决实际问题的思路、填坑能力,这部分最考验面试官功底,要能从面试者浮夸的描述中寻找有意义的点,并一步步深挖。另外很多dirty work(数据预处理、文本清洗、调参经验、算法复杂度优化、Bad case分析、修改损失函数等)也是在这步深挖
    / W* K1 y/ s" a+ O7 F% G
! Z/ j, U: F3 ?/ \) A$ ]+ s. s
最后,我会问面试者:『有没有我刚没问到、但你特别想分享的项目经历』。此问题是给面试者一个展现自我的机会,同时也是挖掘出之前遗漏的问题。
5 u7 l, O2 Q2 i/ s1 o/ L$ K
8 v8 B2 q# h4 I以上问题能答完美的,请私信我~
) M' ?7 ~  k5 d! j2 G9 H" R9 P0 k- ]) G9 r$ t
我向你学习 哈哈6 Y# [* q3 ~! i7 C  i$ C& `* N

2 D. M  c) P( n/ W* d, k, O7 i, X------------补充---------------
, o+ n. a8 H+ I" p
    实际会根据面试者学历、研究方向而有侧重地提问,对校招生的项目考察酌情少一些这些问题我虽然深入思考过,但答案未必完美,而且这些题绝不是拿来push面试者制造权威的。真正的面试官应该保持open而谦逊的姿态,乐于从面试者那里学习新知识,互相切磋。 我个人认为,一场只有面试官输出观点的面试,对面试官本人来说,是 no value 的欢迎就其中任何一个问题,在评论区交流~ 作为一名菜鸟面试官,我会push自己努力提高姿势水平 :-)
    8 m7 ~" s; f5 T- `7 |: D
小玉小玉俸 | 2021-10-4 10:22:26 | 显示全部楼层
作为一名新晋菜鸟面试官,最近替部门面了3、40个人(大多来自国内top5学校,包括校招社招),小小总结下我的相人之术,希望能帮上大家" q' r9 [! l8 a: }" d! V& G5 W

" v6 c9 V- t; w! \* Y7 W7 i/* 先插个话,本题的答主中,有我非常膜拜的真大神,也有掉书袋的教条主义者,对后者,我有一言相劝
6 f" U6 ?! k; r
面试官的水平(而非面试者)决定了面试的上限,所以当面试者水平超过你时,承认被碾压、虚心接受就好,并适时向对方学习,而不是拿那些条条框框的应试题来恶心人
*/- F! _5 U* @6 {
----------------------
* p3 m! ^# m3 V面试别人时,我主要遵循『两原则』『三方面』/ C  p; g# X% t4 f. t
『两原则』指:* \6 l2 s% {# G# ~) ^, @
    绝不网上现搜应试题(一不尊重面试者,二这种题大多考察不了真水平),确保所问问题是自己认真思考过的在自己能力范围内,不停追问面试者所做的项目、所掌握的理论细节,看他掌握到什么程度,评判他简历内容的真实性
    - n$ p$ s5 L$ l: ^/ d
『三方面』包括:
2 O1 x$ @1 D1 B! t
    理论功底代码能力项目能力9 P" Q) q( Z- ]9 z
----------------------9 r$ Q7 E- K9 a8 |# }
把三方面展开:
9 C( y4 V, c& }) d
    【理论功底】主要考察对机器学习模型的理解,选择性提问(如果遇到面试者的研究方向自己不了解但感兴趣,会很欣喜,可以趁机学习一个哈哈)这块儿的问题会比较细碎,都是我自己深入思考过的(背书是没用的,这里任何一个点我都可以给你展开问下去),在此全部手敲
      过拟合欠拟合(举几个例子让判断下,顺便问问交叉验证的目的、超参数搜索方法、EarlyStopping)、L1正则和L2正则的做法、正则化背后的思想(顺便问问BatchNorm、Covariance Shift)、L1正则产生稀疏解原理、逻辑回归为何线性模型(顺便问问LR如何解决低维不可分、从图模型角度看LR和朴素贝叶斯和无监督)、几种参数估计方法MLE/MAP/贝叶斯的联系和区别、简单说下SVM的支持向量(顺便问问KKT条件、为何对偶、核的通俗理解)、 GBDT随机森林能否并行(顺便问问bagging boosting)、 生成模型判别模型举个例子、聚类方法的掌握(顺便问问Kmeans的EM推导思路、谱聚类和Graph-cut的理解)、梯度下降类方法和牛顿类方法的区别(顺便问问Adam、L-BFGS的思路)、半监督的思想(顺便问问一些特定半监督算法是如何利用无标签数据的、从MAP角度看半监督)、常见的分类模型的评价指标(顺便问问交叉熵、ROC如何绘制、AUC的物理含义、类别不均衡样本)CNN中卷积操作和卷积核作用、maxpooling作用、卷积层与全连接层的联系、梯度爆炸和消失的概念(顺便问问神经网络权值初始化的方法、为何能减缓梯度爆炸消失、CNN中有哪些解决办法、LSTM如何解决的、如何梯度裁剪、dropout如何用在RNN系列网络中、dropout防止过拟合)、为何卷积可以用在图像/语音/语句上(顺便问问channel在不同类型数据源中的含义)如果面试者跟我一样做NLP、推荐系统,我会继续追问 CRF跟逻辑回归 最大熵模型的关系、CRF的优化方法、CRF和MRF的联系、HMM和CRF的关系(顺便问问 朴素贝叶斯和HMM的联系、LSTM+CRF 用于序列标注的原理、CRF的点函数和边函数、CRF的经验分布)、WordEmbedding的几种常用方法和原理(顺便问问language model、perplexity评价指标、word2vec跟Glove的异同)、topic model说一说、为何CNN能用在文本分类、syntactic和semantic问题举例、常见Sentence embedding方法、注意力机制(顺便问问注意力机制的几种不同情形、为何引入、seq2seq原理)、序列标注的评价指标、语义消歧的做法、常见的跟word有关的特征、factorization machine、常见矩阵分解模型、如何把分类模型用于商品推荐(包括数据集划分、模型验证等)、序列学习、wide&deep model(顺便问问为何wide和deep)
      3 b/ h) }& y( ?# j. Y, ^
    【代码能力】主要考察实现算法和优化代码的能力,我一般会先看面试者的github repo(如果简历给出来),看其代码风格、架构能力(遇到大神会认真学习一个哈哈),如果没有github,我会避免问典型的应试题,而是问一些 我本人从实际问题中抽象出的小算法题,比如:
      给出节点的矩阵和边的矩阵,求路径和最大的路径(来源于 Viterbi 算法,本质就是个动态规划),至少给个思路和伪代码(顺便聊聊前向传播和反向传播)给出一数组,数组元素是pair对儿,表示一个有向无环图的<父亲节点, 孩子节点>,用最优的方法,将其变成一个新的有序数组,数组元素是该有向无环图所有节点,数组的有序性体现在:父亲节点在孩子节点前面(来源于 贝叶斯网络实现时的小trick)
      ) d: @5 \# N1 J; Z# ?# n$ R3 b
    【项目能力】主要考察解决实际问题的思路、填坑能力,这部分最考验面试官功底,要能从面试者浮夸的描述中寻找有意义的点,并一步步深挖。另外很多dirty work(数据预处理、文本清洗、调参经验、算法复杂度优化、Bad case分析、修改损失函数等)也是在这步深挖
    * |1 M) z3 Z$ x4 p4 U* a$ ^5 M' q

2 ~& g2 D, C9 J; T3 W+ R2 X% U最后,我会问面试者:『有没有我刚没问到、但你特别想分享的项目经历』。此问题是给面试者一个展现自我的机会,同时也是挖掘出之前遗漏的问题。
$ B7 g$ T0 Q" D4 d4 r- Z8 V1 T2 M5 O6 U# T
以上问题能答完美的,请私信我~- c2 x. [3 V3 O7 K! T
8 u# a3 ~% i. L2 f& J* k9 O
5 v# Y2 R3 c9 P% O1 K3 k
我向你学习 哈哈
& C) c, f7 H, u% G/ Q+ R
: k3 h, d$ a( ?9 i4 U( P0 E------------补充---------------* U3 A, P/ l8 H
    实际会根据面试者学历、研究方向而有侧重地提问,对校招生的项目考察酌情少一些这些问题我虽然深入思考过,但答案未必完美,而且这些题绝不是拿来push面试者制造权威的。真正的面试官应该保持open而谦逊的姿态,乐于从面试者那里学习新知识,互相切磋。 我个人认为,一场只有面试官输出观点的面试,对面试官本人来说,是 no value 的欢迎就其中任何一个问题,在评论区交流~ 作为一名菜鸟面试官,我会push自己努力提高姿势水平 :-)- O- c0 |9 T+ b1 _  \: a$ V
ty847 | 2021-10-4 21:45:22 | 显示全部楼层
首先这个问题问的很广。机器学习方向很多,有些更偏重于传统的统计模型或者数据挖掘,而有些更倾向于深度学习。同理,相对应的岗位有些偏重理论也有些偏重实践。这些因素叠加造成了机器学习相关的岗位分布广,如数据分析师、算法工程师、机器学习科学家和数据科学家等,很难一概而论
/ J; X6 B2 U( j* c: n大概从实习生的时候就开始跟着老板招聘面试机器学习方向的候选人,参与了40个左右求职者的技术面试。其中有在读的研究生(实习生岗位),也有已经工作了多年或者学术背景深厚的名校博士(相对高级的“科学家”岗位)。8 _/ f2 ^% E4 A# Y+ M  c$ y
不谈具体岗位的前提下,我想回答以下几个问题: 1.为什么要避免学科性的偏见 2. 如何测试面试者的知识广度 3. 怎样测试面试者的知识深度 4. 为何需要确认基本的编程和数据分析能力 5. 怎么提高机器学习面试成功率; p1 l, k: T5 F  O9 W
<hr/>1. 避免学科间的偏见与歧视
6 z1 s' J4 F# f$ B! H: k; O) ?
: B% D, q: v' R/ I+ K' d机器学习作为一个交叉广度大,各学科融合深的学科,各种背景的面试者都有。我建议一定不要预设立场,无论是数学、统计、物理、计算机,或是其他学科的面试者都有独特的知识储备。比如机器学习其实和统计学习有很大部分是重叠的,甚至和优化(如运筹学)、数学(线代等)也有很多相关的地方。而不同领域的人对于同一件事情的描述可能是相似但不相同的,甚至连叫法都不同。举个简单的例子,统计学将变量叫做predictors而机器学习倾向于将其叫做feature(特征)。我听说过很多面试官就因为对方不能完全的使用他能听懂的术语就拒掉了候选人,我觉得这个是愚蠢的$ D" @0 Z7 q" z# H/ D) F) F2 q3 w* D) r
以我们团队为例,我的老板是统计学博士和教授(偏计量),而我是纯粹的计算机科学出身。他喜欢用R来建模而我只擅长Python和C++。但正是这种差异性让我们可以更好的合作,他在无监督学习中很喜欢用各种密度分析(density estimation)或者对分布直接进行拟合,而我可以给他介绍很多机器学习方向比较流行的算法,比如Isolation Forests。同理,Python和R都有各自擅长的领域,比如Python做时序分析的难度就远远大于R,因为R有非常成熟的package。. ~! a9 Z& [& A" S$ v
因此,我们不要因为领域不同,叫法不同,编程语言不同,或者模型的解释思路不同就轻易的否定一个面试者。长此以往,我们的思路会越来越窄,而一定程度的包容能拓展思路。. ]# y3 w4 I: N$ r, z1 v
2. 通过广度测试划定面试者的知识面
1 c% X# w7 \! C& A
; G. Z9 a) }8 _6 p4 f机器学习的项目一般都牵扯数据处理,建模,评估,可视化,和部署上线等一系列流程我们希望面试者对于每个步骤都有最基本的了解。因为其范围很广,我们希望首先在短时间内了解一个面试者的知识范围。有很多基本但经典的问题可以用于了解面试者的素质,给出一些例子:8 ~4 V9 u# Y. A: c
    数据处理:如何处理缺失数据(missing value)? 各种处理方法有什么利弊?数据处理:如何将描述变量(categorical variables)转为连续变量(continuous variables)?
    8 M! O2 y& w1 a
      如何处理有序变量?如何处理无序变量?/ k9 v0 B$ K$ f7 G  y' k
    数据处理:如何进行选择特征选择?如何进行数据压缩?, |7 e# K" ~" K' V* B4 d
      特征选择:包裹式,过滤式,嵌入式数据压缩:主成分分析,自编码等
      2 G- T' ?' z/ w1 W, b
    模型解释: 试解释什么是欠拟合与过拟合?如何应对这两种情况?模型解释: 什么是偏差与方差分解(Bias Variance Decomposition)?与欠拟合和过拟合有什么联系?评估模型一般有什么手段?) I5 A- g5 @: }* |
      分类模型评估方法?回归问题评估方法?数据不均衡的评估方法?
      . V  `/ x% O( a& |3 S* D
    深度学习是否比其他学习模型都好?为什么?
    5 ^. `% l. I# i8 `9 D$ Q8 O6 W
以如何处理缺失数据为例,可能的回答有:1. 分析缺失比例决定是否移除 2. 用均值,众数,回归代替 3. 用0代替等。比如深度学习是否比别的模型好,我们就期待面试者能说“分情况讨论”,若是能提到“没有免费的午餐定理”更是加分。在这个阶段,我们不会深入追问,仅想对面试人的知识范围有一个了解。: m- C& h5 Y3 ]" V( D
这类问题的共性就是无论你是在校学生还是资深科学家都应该有一个基本的水准在,不过没有必要百分之百的回答正确,因为本身很多答案都没有标准答案。大部分时候,这个环节我们对于是否录用这个人就已经有了答案。如果面试者答错或者不知道其中百分之八十的概念,录取的概率就很低了。: N2 b: F3 O0 J* K/ h
3. 根据岗位和求职者背景进行深入挖掘
$ X% `$ U5 C2 B6 Z9 Q7 k, l8 n& t, p: J5 `* S# d/ x' _
在经过上一阶段以后,我们已经对求职者的素养有了大概的判断,下一步就需要进行深入了解,一般根据两点进行追问:  o( K4 H! f. e; C6 l
    面试者的背景: 如果有与岗位特别相关的工作经历,会深入询问。如果有高引用了的文章,也会让他讲一下他的研究。所面试的岗位: 如果没有与岗位特别相关的经历,会根据岗位需求进行询问。$ s/ a7 `. S5 M- d
进入这个环节其实就已经没有模板了。假设我们现在要为保险公司招聘一个机器学习工程师来自动化"骗保检测",我们的求职者是一位计算机系刚毕业的硕士生。那我们可能深入询问的话题包括:
* H6 X7 V+ x5 R% z9 a
    在只有少量的有标签数据的情况下,如何构建一个反保险欺诈系统?如果面试者回答先用监督学习来做,那么我们可能问:
    # r0 P  Y/ ?$ P: g" y
      这种情况下数据是不均衡的,你是采用过采样还是欠采样?如何调整代价函数和阈值?如果面试者提到了集成学习,那么也会追问一下问什么集成学习适合数据不平衡。
      4 |0 W0 r1 u* @8 P
    如果面试者回答用无监督学习,那我们可能会问:' h2 U' Y6 G& \, ~8 U. ~% l
      比如使用One-class SVM?那么我们可能会追问一下SVM相关的问题,比如什么是最大间隔分类器啊什么是Kernel,如何选择Kernel等。为什么K-Means不适合异常值检测?K-Means和GMM是什么关系?是否可以用FMM来直接拟合异常值。如何可以得到无监督学习中的分类规则?
      9 u  Z( L& C" [3 k% g

    3 A. J3 @# S# N5 m6 O/ J- u4 B, Q
这一类问题的特点是随机应变,一般都是在一个方向上深入。比如其他答案提到的L1和L2正则化,我们可能希望面试者在白板上画图介绍为什么L1可以得到稀疏解,以及和嵌入式特征选择有什么联系。这一类问题我们不期待求职者完全答对或者讲得清楚无误,我们同时也想观察其在压力和追问下的心理素质因为整个过程中肯定会有一些知识盲点,我们会尽量避免尴尬的气氛,所以作为求职者不必过分紧张。同时,通过和面试者一起了解他/她曾做过的项目,可以看出其对于这个专业的兴趣 -- 兴趣是很难演出来的。# g- C: B' b' W/ q5 T- g$ Q; p! o
在这个环节,如果一个面试者可以有能力进入深入交谈,甚至提到一些我们从来没想过的思路,都是加分的表现。
' x/ r& U" x2 U; X2 P; x4. 基本的编程能力和数据挖掘能力
. a7 G) y8 a6 h( G& @, {1 h
: F: _. c4 b5 o- A( f7 k机器学习岗位,不管你是统计出身还是计算机出身,都避不开建模的过程,因此基本的编程能力是必须的。一般对于数学或者统计学出身的面试者,我们会额外给出一个简单的小程序测试。这种小程序可能简单如将读取数据后并保存为矩阵。这倒不是因为我们喜欢没事找事,而是因为机器学习太容易成为纸上谈兵,而从业者缺乏最基本的编程能力。0 x: w2 w" H& B- }
相似的,我们也希望面试者谈谈从模型中可以得到什么结论。我们曾把Kaggle上泰坦尼克的那个数据集处理过以后,让面试者谈谈幸存率到底和什么有关,如何分析。同样的,我们不追求完美答案,只是希望看到求职者可以解释一些简单的模型结果,从中攫取商业价值。1 |3 Q4 t% }& @9 j$ F$ X) F! ?
5. 让面试者有所收获 & 如何准备机器学习面试
; \! @8 V) u, i7 K
/ n8 r7 K, h" j/ _面试不该是一场单纯的考试,在参加面试的过程中,也是一个学习过程。抛砖引玉,对于机器学习的岗位面试我有几点小建议:
# \3 q2 [$ P1 S# P9 t0 B5.1. 根据岗位,准备一份项目策划书。这个乍听下来有点虚,但我曾无数次使用这个小技巧得到良好的面试反馈和机会。假设你今天面试的岗位是我提到的保险公司的反诈骗组,那么如果你可以写一个如何使用机器学习进行反诈骗的项目策划书。这个过程对于面试者也是一个练习: a. 阅读论文和新闻收集材料的能力 b. 总结分析的能力 c. 总结的能力。
; H4 ^& B2 o: r- w2 b* h8 G. [以我曾经面试过的一个人力资源相关的岗位为例,我准备了一份如何用机器学习来进行员工离职预测的策划书(中间省略掉了几页并马赛克处理了敏感的地方):3 @/ y) B% U  F! a
( D* ~+ s; ^  O/ @" C1 c
面试官如何判断面试者的机器学习水平?-1.jpg
% H3 e% ~$ f2 ?5 J在策划书中,你可以分析项目需求,提出相关解法,并建议后续计划和列出相关文献。这样的行为不仅可以让雇主看到你的诚意,并看到你的的领域知识和独立分析问题能力; r! K: V9 g! f2 A
在适当的时机(比如开始面试的时候或者谈到岗位职责的时候),你拿出准备好的策划书,开始谈你的思路。这种做法我曾做过几次,效果都很惊艳,因为反被动为主动,从被考察变成了讲解你所了解的知识。作为一个面试官,如果被面试者能做到这个程度,我会在内心对录取他比较有信心。& e2 d: n% P- A* ~7 X6 w
5.2. 真诚并且实事求是
. I0 e. B  {+ r1 @8 }$ M* }$ ]! H大家都是理工科出身,行家一出手便知有没有。在这种技术性比较强的学科,完全没有必要假装自己了解一个知识点。同理心告诉我们,大部分人都有知识盲区,我们不期待完美的回答。当你真的不知道一个问题的答案时候,真诚的希望对方能讲得更明白或者承认自己不太了解。
, c/ r- d6 q% Z$ A如果你假装自己很了解一个不明白的领域,我们一般会问的更深入。你成功的引起了我的注意,那个时候就真的收不了场了。相似的,简历上请真的不要夸大其词的描述自己的经历。我见过很多人只用过Naive Bayes就在简历上号称自己是机器学习专家,我现在还记得他被面试到面红耳赤的样子。在这个浮躁的年代,对于高薪的机器学习岗位,希望大家都能守住最起码的诚信底线
$ J! E" e( _  J  l$ S5.3. 确保自己对基本的概念有所了解5 T& ^# C8 @, o
再一次,保证对基本知识的了解(有基本的广度)是对面试者自己和面试官的尊重。什么程度就算基本了解呢?我的感受是:
4 \9 s# M% U. l3 ?6 I
    对基本的数据处理方法有所了解对基本的分类器模型有所了解并有所使用(调包),大概知道什么情况使用什么算法较好对基本的评估方法有所掌握,知道常见评估方法的优劣势有基本的编程能力,能够独立的完成简单的数据分析项目有基本的数据挖掘能力,可以对模型进行调参并归纳发现# S' `! |9 \0 t5 v8 ]
其中每一条都说来简单,但都是血与泪的过程,请勿操之过急。如何就能保证自己有了足够的基础知识呢?我觉得能基本看懂周志华老师《机器学习》的前十章,并相对熟练的使用Sklearn中基础的API进行建模就可以了。也请勿矫枉过正,如果你面试的岗位不是理论性科学家岗位,不要和数学推导死磕。这也是为什么我说写一个项目策划书很有帮助,在查阅文献和总结的过程中,你对想要面试的领域有了更加深刻的了解,有助于提高信心和知识。7 V+ h6 G. a" C+ h1 |
5.4. 享受面试
7 i. t9 Y3 W1 W8 i请不要把技术面试当做一场噩梦,或是一个难关。作为一个冉冉升起的新领域,我们大家都是这么一路摸爬滚打过来的,至少我自己是很理解这一路的不容易。' j4 V# b+ c9 k+ \4 C
因为机器学习领域的人才稀缺,一般而言你的面试官的时间都是很宝贵的,即使你最终没有通过面试,请抓住机会从他们身上有所学习的机会。从我的角度来看,你不仅可以借此发现自己知识点上的缺失,也可以听到在特定领域的流行的算法和模型,这些都是从书上很难学到的。如果你为了准备面试还阅读了相关领域的论文和总结,那我想来面试这件事已经远远超过了你是否被录取的意义。
, E( c# h; d7 v3 Q4 G8 N* A8 R路漫漫其修远兮,吾将上下而求索。与君共勉:)
生物张卫华 | 2021-10-5 07:30:36 | 显示全部楼层
这个问题太好了!记得这大概是个三年前的问题,每年都会有新的答案让我持续学习。三年多前我作为最早的机器学习工程师之一加入 Tubi,从零开始设计招聘题目和流程,搭建团队,陆陆续续也面试了大好几百次了。这里的答案大多聊的是常见的机器学习面试题目,我提供一个不一样的角度,从业务负责人的角度聊聊如何根据业务需要设计题目,大家也可以反向思考,查缺补漏。* g& k7 ^9 c# o6 f& c  t2 F
招1个人 != 招10个人5 I1 g& |' C# k  |  ?7 _6 h
% e* q3 D% d* ]" }' C% k
很多同学的角度都是从面试官的角度来出发的,想着就是招一个人,面几场试。但当你从团队负责人的角度出发,要填满大量的业务需求,来设计面试流程和题目的时候,思考角度就会完全不同。这中间有大量的取舍,甚至一些决策很不优雅,但这都是为了规模化和自动化不得不做的放弃。0 r+ J2 |$ q1 F5 z; x  @

8 L. U8 W8 c$ \7 A8 f3 |# B* c 面试官如何判断面试者的机器学习水平?-1.jpg
. \* |5 ~' e; {, P- H! Q+ O* U* [9 D, C面试题目需要淘汰人,越早越好
% z+ b' D3 t& o, [/ D2 ?; s: S6 r+ d% Y+ q! J3 M& G- w3 V
招聘是个非常贵的流程,我们举一个湾区常见两轮技术面+现场面试的转化率简单计算,录取一个人要让接近20个人进入面试流程。
' a& p, r# ^6 k; S% r1 p9 v
stepsconversion rate
hiring manager call80%
tech screen 160%
tech screen 260%
onsite40%
offer40%
conversion4.6%
面试官的时间是很贵的,我们更愿意保护面试官的时间,减少面试,也不愿意让更多可能不合适的人进入现场面试的阶段,浪费大家的时间。这里有个 precision 和 recall 的平衡,precision 的重要性远大于 recall。
: ]# o7 O* F7 z. Z所以面试题目的设计,特别是技术面的题目,与其说是招到合适的人,不如更精确的说是剔除可能不合适的人,越早越好。什么样的题目适合剔除人呢?一定是有明确答案的题目,这样的题目可以是理论题,可以是数学题,可以是代码题,可以是系统设计题,但一定不能是开放讨论式题目。一定要是如果答案是A就过,如果不是A就淘汰,或者设计成类似分数的系统。& E; s# ^) w1 k! o( E& |+ y
precision 和 recall 是不可能兼得的,很多时候筛去了一些可能合适的候选人我们也很惋惜,但更多的时候犹豫一下让候选人进入现场面试表现不好,反而耽误大家更多的时间。
2 m" o- b  ?5 D$ U/ k, ~; l团队需要 != 最像我
2 J5 ]4 y) W  U2 T8 |! Q9 w" p/ f3 |0 t! J* d0 m% X  i7 X9 R4 o
面试官往往都有些幸存者偏差:我都是面试官了,像我这样的是最优秀的,我会的候选人就应该会,我要以我为模版招人。1 f/ c. M0 h2 K0 z" R3 J. |
5 h+ k$ A, l  b6 ^
面试官如何判断面试者的机器学习水平?-2.jpg
0 h2 _( @5 T$ {; }2 C- s( ]$ B  ]- c. v! ~, X0 b% i& ]9 S  j
https://zhuanlan.zhihu.com/p/30884978
6 y) \- }& w" e% ?) \' p! P5 Q0 N1 {( r1 m( k. T
从团队的角度来看,这其实是非常糟糕的思路。每一个团队业务非常广阔,每一个人的专精方向也不一样,多面互补对于一个团队来说是一个更好的状态。7 f1 Q4 L: Q, x, N+ {
从面试题目的设计上,要分清楚什么是基本要求,什么是加分项。
6 K. L6 Q( ]- f+ }8 `: }; f基本的要求要抽象出是能完成在团队中做机器学习最基础的技能,比如代码、调参、常见优化的方向等等,不需要很深入。更重要是要抛弃“我认为什么是重要的”,而去思考“团队工作日常需要什么技能”。从这个角度来看可能日常需要的技能比你想象的要简单基础的多,那面试就应该更关注这些技能。: G9 Z& R; ]! c* Z/ D! G
在加分的问题中除了深挖,更可以抛出一些自己在实践中难以解决的问题,看看有没有什么妙招,有时候有额外的惊喜。! N2 x% J3 A5 {/ S9 M
最大的难点是面试官
( O) `/ J' d9 U/ N( q- d; y
+ B: @2 X% M0 b面试官其实是整个面试流程中最稀缺的资源。一是面试官的时间很宝贵,面试会占用大量工作的时间。二是每个面试官的工作背景、喜好、评价标准都可能不一样,这个必须靠制度和流程的设计来保障相同。9 j. k' {, @% P$ [

4 _5 `. ^3 h# P/ `# _ 面试官如何判断面试者的机器学习水平?-3.jpg   l, p5 \/ i; d" c- P% W8 F! }! ~
实践中我们会经常与各个面试官沟通,讨论题目的评价标准,定期回顾最近的招聘反馈,研究转化率,看一看哪一位同学做的好与不好,确保每一位面试官表现都类似。3 f. h5 Q" R+ ]+ t( V, N/ e7 ]; T
题目的设计上也会确保题目不能太偏,每一位面试官都能完成基础知识和深入理解的衡量,同时题目必须有明确的回答标准,什么的答案可以过,什么样的答案是红标,都需要明确的写下来。& ?& S9 l# i; W. L) f
Tubi 的面试实践( x  p& M# s* S7 N
7 a# A; ?, |' e4 _* Y
根据这样的理解,Tubi 的机器学习 面试流程设计大概如下(可能会变更):
8 C0 s5 L) B/ z3 L技术面一:简单的 Python 代码实现,大概不超过10分钟。一些概率统计,机器学习理论。总体上非常基础,目的是淘汰掉完全不会写代码,或者只懂 Buzzword 的人。% [/ R  ?' K9 R, m
技术面二:给出一个真实的数据集,需要使用常见的机器学习包,比如 sk-learn, pandas, numpy等等,抽取特征,训练模型,衡量模型。现场一个小时,过程中允许 Google API。( ?3 \) f# |9 m
现场面试:还有一轮代码,与技术面二类似。剩下的大概两三轮基本上都是机器学习的实际应用,比如让你设计一个推荐系统,设计一个视频广告去重系统,怎么做,比较关注的方向是比如指标的设计、关键系统部件的设计(提出可以用 end-to-end deep learning system solve everything 的都直接淘汰)、迭代的思路等等。这几轮主要是非常资深的工程师/经理/总监/CTO来面试,更多的是考察人的资深程度。0 U; u5 L2 B1 X
因为全程没有 Leetcode style coding,而是非常关注作为机器学习工程师的日常,绝大多数面试者的反馈都是非常正向的:
! Z8 q% y$ }* `; b+ V  j入职算法应届生如何成为一个合格有竞争力的算法工程师?Tubi TV是一家什么样的公司?面试因需求而变
0 k; w. K- L. ]0 J; D' H. j
. B4 ]2 X" o# i' J, F, H" n$ @总结一下,面试的题目和流程设计其实跟业务的需求是紧密相连的,要疯狂招人的时候是一种设计,如果没有业务压力又是另一种设计。我也想跟每一位候选人谈心谈简历,但一看到密密麻麻的面试安排,就感觉$ K( l9 B1 j/ }9 h

  p! `" S5 U$ t  M" X 面试官如何判断面试者的机器学习水平?-4.jpg
3 M$ }8 Q9 b2 r所以从面试者的角度出发,理解公司所处的状态也有助于准备面试题目哟!
现金娱乐网炔 | 2021-10-5 15:58:17 | 显示全部楼层
看了下 @王喆 的回答,很赞, 摘一下他回答中提到的一些面试问题:& \. ]! f9 Z7 h; t  z6 q" U; u
面试官如何判断面试者的机器学习水平? - 王喆的回答 - 知乎 https://www.zhihu.com/question/62482926/answer/529823808' Z2 L' t* E) I) b! A# }) l8 j
/ h3 ]3 G( N, E, }/ y& E  I4 b3 K, L

  G6 A2 J! _# H' F; V9 v$ e) O2 j* Z1 e0 M# J

5 H& Q' H: U- x我来试着答一下:$ W6 S2 ?7 |: P" [: r" ^4 l
    GBDT的原理 (理论基础)9 o( p8 |% q0 z0 D
(1) M棵树 加权求和(boosting思想):
) q& p+ u, K& B, j5 J(2)单步求解各回归树(前向分步加法模型) ; 第m步求解:
7 J& c! Q7 |+ Y5 R4 \(3) loss为mse时拟合残差, 根据公式很容易得到, 以单样本为例: # T: T* w9 M( M& X: a
,
* G4 Q1 }2 n* o& }残差 , 相当于把样做如下处理:, 拟合rm求最小化loss得到第m步的回归树 ;
* H! M) d( z4 u* ~; T) H6 ]  n(4)更一般化, 推广到任意一阶可导函数, 根据一阶泰勒展开; 对于关于 的函数损失 , 当 ,  8 a) v. D, M6 e! @+ \9 F
loss变化: , loss必减小- B0 w9 a: V1 i" i
这里, loss关于 的负梯度 称为"伪残差", 所以一般化的GBDT, 每一步可看做实在拟合"伪残差", 来生成一棵分布loss最小的树 ; 7 N$ r: q, b  n! o1 C( A! j" o
(5)其它都是一些细节了, 比如和adaboost区别, 和xgboost区别, 和随机森林的区别,  比如gbdt能降低偏差(这是显然的, 每一步都在拟合目标和预测值的残差);2 k- E1 ~3 s- }. T
2. 决策树节点分裂时如何选择特征,写出Gini index和Information Gain的公式并举例说明(理论基础)& Q0 E1 l' |8 g$ k; Q
(1)能将有限样本分开的树结构有无穷多种, 决策树核心思想是用"启发式"算法来找最优决策树; # _; ]& u- x- _5 F
(2) 节点分裂时根据不同启发式算法,  特征选择方式不同; : K( E: M6 n5 G0 _- j
(3) 对于特征A, 假设有三个值, 将特征空间分为D1, D2, D3三个区域, gini(D, A) = D1/D gini(D1) + D2/D gini(D2) + D3/D gini(D3),  再假设是个二分类问题, 两个标签, gini(D1) = p1(1-p1)+p2(1-p2) (只关注D1所在的行), 想象一下, 每次计算特征的gini时, 按照各特征的值对样本全局排序, 这样比较好计算;/ K; H; u6 W! N) s5 X/ U
3.分类树和回归树的区别是什么?(理论基础) 5 j3 b& C1 ]1 w- ]( u' l1 A+ B
(1)启发函数不同啊, CART里分类用gini, 回归用平方差;
; w9 P' U( A$ r1 Y% Y/ _(2)结点的值不同啊, 分类存储的是最优分裂特征, 回归存储的是最佳切分点;
! w% d0 g3 `' ^0 ^(3) 回归树也可以解分类问题啊; / B+ @" j) g; v' e
4. 与Random Forest作比较,并以此介绍什么是模型的Bias和Variance(理论基础)8 U: C7 k" I" m+ c
(1) rf:有放回自助采样+列采样, 假设r是相关系数, 根据 , 有放回自助采样增加了各模型的独立性, 一方面, 各模型训练样本完全独立时, 方差 , 降低到原来的1/n; 另一方面, 各模型样本完全一样时, , 方差不变; 一般的rf采样得到的样本, 独立同分布又不完全一样, 所以方差在sigma^2/n和sigma^2之间;
1 ?. A' {2 d2 L0 N* \; w: T7 L(2) rf对分类问题加权投票, 回归问题取均值, , 不会降低偏差;
6 H4 c  e+ A7 ^2 z. A/ ^; `(3)gbdt降低偏差是因为每一步都是基于上一轮残差或"伪残差"(loss关于上一棵树的负梯度)拟合样本, 偏差自然会减小; + i% L9 h" B- q6 p. u( B
(4)偏差太大模型欠拟合, 偏差太小模型过拟合, 方差太小模型泛化性能会交叉, 总之就是在做一个trade-off, 来寻求结构风险最小化; 7 E8 g  }2 u7 L: V4 u0 i
5. XGBoost的参数调优有哪些经验(工程能力)
, w4 P% ^$ M. L' p(1) 从正则化项来考虑: 调第一项 , 控制叶节点个数, 调 , 平滑叶节点权重; & C# s2 F. z8 N: x; w
(2) 考虑gain, 我们预期C(分列前)-C(分裂后)的gain应该大于0, 但有时候gain会小于0, 此时是否需要early_stopping? (注意虽然当前收益为负, 有可能对后续各步有正向收益), 所以需要加树的深度来做trade-off, 某次split的gain为负时, 是否达到earlystopping条件? 是否达到设定的最小树深度, 如果没有, 就把这个split节点也加进来;
. M5 s0 }- G, G7 T1 w(3) 从shrinkage公式来考虑, , 学习速率可以控制拟合速度, 也就是单步生成的树的权重;
! I  ^* p# C3 t. V2 s$ e0 V' A(4) 从随机森林借鉴过来的列采样, 这也算一个参数吧, 可以控制每轮训练样本子集间的相关性(增加非相关性), 降低方差(参考公式: ); 4 ~% z0 S8 G' I3 R3 \
(5) 还有啥? 超参寻优, 参考sklearn的gridsearchcv, randomsearchcv;  做一下k-fold交叉验证, 找一下方差最小的最优参数, 比如迭代次数, 树的深度等
9 g0 M8 h( `- @/ K4 q" [: `: ]) c(6) 借鉴一下kaggle, 做一下EDA, 缺失值填充(xgboost的默认处理方式不一定符合你需求,归一化, 相关性分析;
0 A6 f- H! y1 u(7) 做一下stacking ?
, m* H) c5 \! F1 C" T6. XGBoost的正则化是如何实现的(工程能力)% ~' U6 R. g2 Z9 t, Q
正则化是个很宽泛的概念, 举几个典型的:
- ?! Z+ T$ X6 \& U$ R(1) , 第一个参数控制第m步生成树的叶节点个数, 第二个参数是l2正则, 平滑每个结点权重;
, B% L, W8 i& W* w3 a; C(2) eraly_stopping, 某次叶节点分裂时, 如果gain为负, 是否停止增长? 这也算一种正则; * d/ a& `* d- |6 {. r3 X8 w, a& ^
(3) 后剪枝;
1 f7 u+ H" f$ e+ o8 ]- u+ B(4)学习速率控制优化步长(单棵树的权重); 6 T! h! E' Y# Y0 r" P
7.XGBoost的并行化部分是如何实现的(工程能力)+ h9 X; ]  {8 E7 e8 q
寻找结点分裂: : Y" V2 i, g6 h2 @# w$ Q
假设生成f(x)需要m步, 样本特征有d维, 样本个数n个, 则每次寻找最优结点时间复杂度:/ b" Q$ n: D0 i% s  s
, 其中每轮对feature values排序部分的时间复杂度 是可以优化的部分, 可以预排序存储好, 直接调用, 这样总的时间复杂度下降到:
" x. \+ o" g# Z* U8. 为什么预测股票涨跌一般都会出现严重的过拟合现象(业务理解)
2 K+ }  T7 T% \这个问题比较任性, 为啥预测股票一定会过拟合? 不太能理解, 如果是问过拟合的原因的话, 无非两个:
6 B1 n5 K) S: s7 E5 n  u(1) 数据问题: 数据量太少# D" u( {% }% v/ S
(2) 模型问题: 模型太复杂, 模型学到了噪声: X' j( p  @  Q# C* K9 L

  M9 `& A7 _$ V# e, S9. 如果选用一种其他的模型替代XGBoost,你会选用什么?(业务理解和知识面)
7 B- W, ?. k# h  A(1)特定领域用特定模型, 一般传统机器学习的分类问题最好还是用xgboost这种ensemble方法来解.
1 w9 ?: L& W+ J5 n( b(2)业务理解,特征工程远比对模型做"优中选优"更有收益, 好特征带来的收益都是百分之几, 模型优化, 带来的收益一般在小数点后1-2位, 也就是百分之0.几的样子0 X7 y- ~, W, R  Y# Y
3 A: C+ m/ _& l# f) [# }
(后续想到什么再补充.)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

202

金钱

0

收听

0

听众
性别

新手上路

金钱
202 元