求职指南【2】-备战算法工程师面试,你需要掌握这些经典面试题

AI研习图书馆,发现不一样的精彩世界

算法
面试

机器学习算法工程师面试知识点总结二

一、前言

金九银十,就业旺季马上就要到了,互联网公司的秋招如火如荼的进行着。机器学习类岗位依然非常热门且高薪,但想在竞争激烈的面试中杀出重围,我们必须有着充足的准备。

如何能够短时间内抓住机器学习知识的技术重点,集中突击?
如何不再惧怕“算法”?
如何才能在面试中对答如流,打造属于自己的“offer收割机”?

刷题是必不可少的步骤。应聘前,你需要了解的内容有:机器学习的基本概念和分类(训练/测试数据、监督/非监督学习等)、经典的机器学习模型(支持向量机、朴素贝叶斯、随机森林等)、深度学习模型(卷积神经网络、循环神经网络、生成式对抗网络等);特征工程(特征组合、特征选择等),模型评估(评价指标、超参数的选择等),优化算法(损失函数、梯度下降等),数学基础(概率论、线性代数等),工程能力(数据结构与算法、机器学习平台等),业务与应用(计算机视觉、自然语言处理等)。

今天,给大家分享几个超级高频的机器学习面试题,希望能祝你一臂之力!

二、高频的机器学习面试题

Q1:如何对贝叶斯网络进行采样 (8.6)

对一个没有观测变量的贝叶斯网络进行采样,最简单的方法是祖先采样(Ancestral Sampling),它的核心思想是根据有向图的顺序,先对祖先节点进行采样,只有当某个节点的所有父节点都已完成采样,才对该节点进行采样。以场景描述中的图8.9 为例,先对Cloudy 变量进行采样,然后再对Sprinkler 和Rain 变量进行采样,最后对WetGrass 变量采样,如图8.10 所示(图中绿色表示变量取值为True,红色表示取值为False)。根据贝叶斯网络的全概率公式

可以看出祖先采样得到的样本服从贝叶斯网络的联合概率分布。
如果只需要对贝叶斯网络中一部分随机变量的边缘分布进行采样, 可以用祖先采样先对全部随机变量进行采样,然后直接忽视那些不需要的变量的采样值即可。由图可见,如果需要对边缘分布p(Rain) 进行采样,先用祖先采样得到全部变量的一个样本,如(Cloudy=T, Sprinkler=F,Rain=T,WetGrass=T),然后忽略掉无关变量,直接把这个样本看成是Cloudy=T 即可。

接下来考虑含有观测变量的贝叶斯网络的采样,如图8.11 所示。网络中有观测变量(Sprikler=T,WetGrass=T)(观测变量用斜线阴影表示),又该如何采样呢?最直接的方法是逻辑采样,还是利用祖先采样得到所有变量的取值。如果这个样本在观测变量上的采样值与实际观测值相同,则接受,否则拒绝,重新采样。这种方法的缺点是采样效率可能会非常低,随着观测变量个数的增加、每个变量状态数目的上升,逻辑采样法的采样效率急剧下降,实际中基本不可用。

因此,在实际应用中,可以参考重要性采样的思想,不再对观测变量进行采样,只对非观测变量采样,但是最终得到的样本需要赋一个重要性权值:

其中E 是观测变量集合。这种采样方法称作似然加权采样(Likelihood Weighted Sampling),产生的样本权值可以用于后续的积分操作。在有观测变量(Sprikler=T,WetGrass=T)时,可以先对Cloudy 进行采样,然后对Rain 进行采样,不再对Sprinkler 和WetGrass 采样(直接赋观测值),如图8.12 所示。这样得到的样本的重要性权值为:

w∝p(Sprinkler=T|Cloudy=T)·p(WetGrass=T|Sprinkler=T, Rain=T)=0.1×0.99=0.099.

除此之外,还可以用MCMC采样法来进行采样。具体来说,如果采用Metropolis-Hastings 采样法的话,如图8.13所示,只需要在随机向量(Cloudy, 、Rain)上选择一个概率转移矩阵,然后按照概率转移矩阵不断进行状态转换,每次转移有一定概率的接受或拒绝,最终得到的样本序列会收敛到目标分布。最简单的概率转移矩阵可以是:每次独立地随机选择(Cloudy, Rain)的四种状态之一。如果采用吉布斯采样法的话,根据条件概率p(Cloudy|Rain, Sprinkler, WetGrass) 和p(Rain|Cloudy, Sprinkler, WetGrass), 每次只对(Cloudy, Rain)中的一个变量进行采样,交替进行即可。

Q2:ResNet 的提出背景和核心理论 (9.6)

ResNet的提出背景是解决或缓解深层的神经网络训练中的梯度消失问题。假设有一个L 层的深度神经网络,如果我们在上面加入一层, 直观来讲得到的L+1 层深度神经网络的效果应该至少不会比L 层的差。因为我们简单地设最后一层为前一层的拷贝(用一个恒等映射即可实现),并且其他层维持原来的参数即可。然而在进行反向传播时,我们很难找到这种形式的解。实际上,通过实验发现,层数更深的神经网络反而会具有更大的训练误差。在CIFAR-10 数据集上的一个结果如图9.22 所示,56 层的网络反而比20 层的网络训练误差更大,这很大程度上归结于深度神经网络的梯度消失问题。

为了解释梯度消失问题是如何产生的。回顾第3 节推导出的误差传播公式
将式(9.31)再展开一层,可以得到

可以看到误差传播可以写成参数

以及导数

连乘的形式。当误差由第L 层(记为

)传播到除输入以外的第一个隐含层(记为

)的时候,会涉及非常多的参数和导数的连乘,这时误差很容易产生消失或者膨胀,影响对该层参数的正确学习。因此深度神经网络的拟合和泛化能力较差,有时甚至不如浅层的神经网络模型精度更高。

ResNet 通过调整网络结构来解决上述问题。首先考虑两层神经网络的简单叠加(见图9.23(a)),这时输入x 经过两个网络层的变换得到H(x),激活函数采用ReLU。反向传播时,梯度将涉及两层参数的交叉相乘,可能会在离输入近的网络层中产生梯度消失的现象。ResNet 把网络结构调整为,既然离输入近的神经网络层较难训练,那么我们可以将它短接到更靠近输出的层,如图9.23(b)所示。

输入x经过两个神经网络的变换得到F(x),同时也短接到两层之后,最后这个包含两层的神经网络模块输出H(x)=F(x)+x。这样一来,F(x) 被设计为只需要拟合输入x 与目标输出

的残差

,残差网络的名称也因此而来。如果某一层的输出已经较好的拟合了期望结果,那么多加入一层不会使得模型变得更差,因为该层的输出将直接被短接到两层之后, 相当于直接学习了一个恒等映射,而跳过的两层只需要拟合上层输出和目标之间的残差即可。

ResNet 可以有效改善深层的神经网络学习问题,使得训练更深的网络成为可能,如图9.24 所示。图9.24(a)展示的是传统神经网络的结果,可以看到随着模型结构的加深训练误差反而上升;而图9.24(b) 是ResNet 的实验结果,随着模型结构的加深,训练误差逐渐降低,并且优于相同层数的传统的神经网络。

Q3:WGAN 解决了原始 GAN 中的什么问题 (13.2)

直觉告诉我们:不要让生成器在高维空间傻傻地布网,让它直接到低维空间“抓”真实数据。道理虽然是这样,但是在高维空间中藏着无数的低维子空间,如何找到目标子空间呢?站在大厦顶层,环眺四周,你可以迅速定位远处的山峦和高塔,却很难知晓一个个楼宇间办公室里的事情。你需要线索,而不是简单撒网。处在高维空间,对抗隐秘的低维空间,不能再用粗暴简陋的方法,需要有特殊武器,这就是Wasserstein 距离(见图13.7),也称推土机距离(Earth Mover distance)

怎么理解这个公式?想象你有一个很大的院子,院子里有几处坑坑洼洼需要填平,四个墙角都有一堆沙子,沙子总量正好填平所有坑。搬运沙子很费力,你想知道有没有一种方案,使得花的力气最少。直觉上, 每个坑都选择最近的沙堆,搬运的距离最短。但是存在一些问题,如果最近的沙堆用完了,或者填完坑后近处还剩好多沙子,或者坑到几个沙堆的距离一样,我们该怎么办?所以需要设计一个系统的方案,通盘考虑这些问题。最佳方案是上面目标函数的最优解。可以看到,当沙子分布和坑分布给定时,我们只关心搬运沙子的整体损耗,而不关心每粒沙子的具体摆放,在损耗不变的情况下,沙子摆放可能有很多选择。对应式(13.16),当你选择一对(x,y) 时,表示把x 处的一些沙子搬到y 处的坑,可能搬部分沙子,也可能搬全部沙子,可能只把坑填一部分,也可能都填满了。x 处沙子总量为

,y 处坑的大小为

,从x 到y的沙子量为γ(x,y),整体上满足等式

为什么Wasserstein 距离能克服JS 距离解决不了的问题?理论上的解释很复杂,需要证明当生成器分布随参数θ 变化而连续变化时,生成器分布与真实分布的Wasserstein 距离也随θ 变化而连续变化,并且几乎处处可导,而JS 距离不保证随θ 变化而连续变化。

通俗的解释,接着“布网”的比喻,现在生成器不再“布网”,改成“定位追踪”了,不管真实分布藏在哪个低维子空间里,生成器都能感知它在哪,因为生成器只要将自身分布稍做变化,就会改变它到真实分布的推土机距离;而JS 距离是不敏感的,无论生成器怎么变化,JS 距离都是一个常数。因此,使用推土机距离,能有效锁定低维子空间中的真实数据分布。

三、其他常见经典面试题

Q:如何缓解图像分类任务中训练数据不足带来的问题?(特征工程)

Q:超参数有哪些调优方法?(模型评估)

Q:训练误差为0的SVM分类器一定存在吗?(经典算法)

Q:自组织映射神经网络是如何工作的?(非监督学习)

Q:L1正则化使得模型参数具有稀疏性的原理是什么?(优化算法)

Q:XGBoost与GBDT的联系和区别有哪些?(集成学习)

Q:在GAN的生成器和判别器中应该怎样设计深层卷积结构?(生成式对抗网络)

……

以上面试题都来自知名互联网公司Hulu机器学习算法研究岗位的真实面试场景,而像这样的经典题目和解答,有超过100道收录在《百面机器学习》这本机器学习面试宝典中,因此推荐一下这本书,有时间的可以看一看,我没时间了,所以选择不看了...
纯个人推荐,无商业广告...

《百面机器学习》是一本怎样的书?

《百面机器学习》出版自2018年,书中收录了超过100道机器学习算法工程师的面试题目和解答,其中大部分源于Hulu算法研究岗位的真实场景。本书按照面试的逻辑,从日常工作、生活中各种有趣的现象出发,梳理了知识点和工具与业务场景结合能力,不仅囊括了机器学习的基本知识 ,而且还包含了成为出众算法工程师的相关技能。机器学习面试中最常见的考点,你都可以在这本书中找到。
《百面机器学习》这本书无论是入门还是技术进阶都给出相对应的学习脉络图
学习脉络图
作者群像
(0)

相关推荐