求职指南【2】-备战算法工程师面试,你需要掌握这些经典面试题
AI研习图书馆,发现不一样的精彩世界
面试
机器学习算法工程师面试知识点总结二
一、前言
金九银十,就业旺季马上就要到了,互联网公司的秋招如火如荼的进行着。机器学习类岗位依然非常热门且高薪,但想在竞争激烈的面试中杀出重围,我们必须有着充足的准备。
如何能够短时间内抓住机器学习知识的技术重点,集中突击?
如何不再惧怕“算法”?
如何才能在面试中对答如流,打造属于自己的“offer收割机”?
今天,给大家分享几个超级高频的机器学习面试题,希望能祝你一臂之力!
Q1:如何对贝叶斯网络进行采样 (8.6)
对一个没有观测变量的贝叶斯网络进行采样,最简单的方法是祖先采样(Ancestral Sampling),它的核心思想是根据有向图的顺序,先对祖先节点进行采样,只有当某个节点的所有父节点都已完成采样,才对该节点进行采样。以场景描述中的图8.9 为例,先对Cloudy 变量进行采样,然后再对Sprinkler 和Rain 变量进行采样,最后对WetGrass 变量采样,如图8.10 所示(图中绿色表示变量取值为True,红色表示取值为False)。根据贝叶斯网络的全概率公式
接下来考虑含有观测变量的贝叶斯网络的采样,如图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 层的网络训练误差更大,这很大程度上归结于深度神经网络的梯度消失问题。
可以看到误差传播可以写成参数
、
以及导数
、
连乘的形式。当误差由第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:L1正则化使得模型参数具有稀疏性的原理是什么?(优化算法)
Q:XGBoost与GBDT的联系和区别有哪些?(集成学习)
Q:在GAN的生成器和判别器中应该怎样设计深层卷积结构?(生成式对抗网络)