
前段时间整理电脑里的旧资料翻出一份当年整理的“360公司 2018春招笔试 机器学习工程师客观题合集”。说实话再回头看这些题依然觉得它们是很不错的“机器学习知识体检表”。题目不长但每一道都能牵出一连串知识点甚至好几个选项本身就是经典的误解点。当时我也踩了不少坑现在借着整理成文的机会把题目按考点重新归了类补上了详细解析和避坑思路。不管你是准备算法岗笔试、面试复盘还是单纯想检验自己的机器学习基础这份合集都能用得上。这份合集主要针对客观题部分也就是选择题和判断题。涉及范围基本覆盖了机器学习岗位笔试的常规组合概率统计、线性代数、经典模型、模型评估、深度学习基础外加一些工程和业务理解题。我会在每一章里恢复当年考过的典型题目再逐项拆解选项背后的原理。你完全可以把这篇文章当成一个自测清单先做题、再看解析效果会比直接读结论好很多。1. 先从这份合集能读出什么笔试的考点分布与复习优先级1.1 为什么客观题往往比主观题更“刁钻”很多同学觉得客观题就是“蒙答案”但机器学习工程师的笔试客观题恰恰相反它比主观题更考验概念理解的精确度。主观题你还能写出思路、拿步骤分客观题错了就是错了没有任何回旋余地。而且客观题特别喜欢把“相似但本质不同”的概念放在同一个题里比如“L1正则和L2正则的区别”“Bagging和Boosting的区别”“偏差和方差的区别”如果你只记了定义、没有真正理解很容易被干扰项带跑。当年这份合集给我的感觉是出题人并不是想故意为难人而是想快速筛出“真正做过项目、推导过公式”的候选人。因为很多选项表面的说法听起来都对但放在特定条件下就是错的。比如逻辑回归的损失函数能不能用均方误差从拟合角度好像可以但放到优化角度就废了。这种题只有亲手推导过、或者至少踩过训练不收敛的坑才能一眼看穿。1.2 2018年前后机器学习工程师笔试的常规考点权重根据这份合集以及当时和其他同学的交流我大致整理了一下考点分布虽然年份有点久但核心权重到今天依然适用知识模块大致占比典型题型概率统计20%左右贝叶斯公式、期望方差、最大似然估计线性代数15%左右特征值、矩阵求导、正定矩阵经典机器学习算法30%左右LR、SVM、决策树、集成学习概念辨析模型评估与调参15%左右偏差方差、交叉验证、过拟合、类别不平衡深度学习基础15%左右激活函数、反向传播、CNN/RNN基础概念数据结构与工程5%左右复杂度、特征工程、业务场景应用复习的时候优先级应当放在经典算法和数学基础上。深度学习占比不低但考察的多是基础概念不会让你现场推导Attention但很可能让你判断“sigmoid函数的最大导数值是多少”。这类题记住了就能得分性价比很高。1.3 如何高效利用这份“合集”复盘我的建议是不要边看答案边做题那等于没做。先把题目全部做完哪怕靠猜也要给出一个答案然后对答案时重点看“为什么选这个”而不是“正确答案是什么”。你答错的题一定要深挖往回追问三层这个题考的是哪个知识点我的错误选项对应什么误解正确选项背后的原理能不能用一句话讲清楚如果你能把这三点写在笔记本上这道题才真正变成了你的东西。2. 概率统计与线性代数客观题里最不能丢分的基础盘2.1 一道贝叶斯公式题背后的出题套路先说一道当年很多人做错的选择题某疾病在人群中的患病率为0.1%。有一种检测试剂如果一个人患病检测结果为阳性的概率是99%如果一个人未患病检测结果为阳性的概率是1%即假阳性率。现在随机抽取一个人检测结果为阳性请问这个人实际患病的概率最接近以下哪个值A. 99%B. 50%C. 9%D. 1%正确答案是 C约9%。这个题是典型的贝叶斯公式应用也是“先验概率”和“后验概率”的经典陷阱。很多人看到“准确率99%”就直接选了A忽略了人群中患病率极低这个前提。设事件 A 为“实际患病”事件 B 为“检测阳性”。我们要算的是 P(A|B)[ P(A|B) \frac{P(B|A)P(A)}{P(B|A)P(A) P(B|\neg A)P(\neg A)} ]代入数据[ P(A|B) \frac{0.99 \times 0.001}{0.99 \times 0.001 0.01 \times 0.999} \approx 0.0901 ]也就是说检测出阳性后实际患病的概率不到10%。这背后的直觉是假阳性率1%虽然看起来很小但人群中99.9%的人都是未患病者大量未患病者会产生大量假阳性把真正患病者“淹没”了。出题人想考的就是你能不能把“检测准确率”和“患病概率”区分开。应对这类题我的经验是看到“阴阳性”“命中率”“召回率”这类词第一反应就画一个2×2列联表把所有数字填进去再算不要心算。2.2 最大似然估计样本均值和方差的选择题变形还有一道关于最大似然估计的判断题当时也误导了不少人给定一组独立同分布的样本 (x_1, x_2, ..., x_n)假设它们来自正态分布 (N(\mu, \sigma^2))则 (\mu) 的最大似然估计是样本均值。该说法是否正确答案是正确的。对正态分布做最大似然估计均值参数的估计量就是样本均值。这里容易混淆的是方差的最大似然估计它除以的是 n 而不是 n-1。如果题目换成“方差的无偏估计”那就要除以 n-1但题目问的是“最大似然估计”所以除以 n。这道题提醒我们笔试里经常考核“无偏估计”和“最大似然估计”的细微区别。无偏性是频率学派对估计量的评价标准而最大似然估计是从数据出发最大化似然函数。相同参数在不同框架下可能得到不同的估计量这个点如果没复习到很容易被选项里的“除以n-1”带偏。2.3 特征值、特征向量与矩阵运算的常见考法线性代数的客观题通常篇幅短但背后要求极高。比如这道已知矩阵 A 有一个特征值 (\lambda) 对应的特征向量为 (v)且 A 可逆。那么矩阵 (A^{-1}) 的特征值和对应特征向量是什么A. 特征值 (1/\lambda)特征向量 (v)B. 特征值 (\lambda)特征向量 (v)C. 特征值 (1/\lambda)特征向量 (A v)D. 特征值 (\lambda)特征向量 (A^{-1} v)正确答案是 A。因为 (Av \lambda v)两边同时左乘 (A^{-1})得到 (v \lambda A^{-1} v)所以 (A^{-1} v (1/\lambda) v)。这里要注意特征向量不变变的只是特征值取倒数。反过来如果把特征向量也“做了变换”那就是对概念理解不够清晰。笔试中线性代数不会考特别深的证明但一定会考特征值分解、二次型、矩阵可逆性、向量内积这些基础概念。我自己的心得是不要死背结论只需要记住最根本的定义 (Av \lambda v)然后从定义出发推一遍绝大多数特征值相关的选择题都能秒杀。2.4 最小二乘的闭式解不可逆时怎么办还有一个几乎每年必考的线性代数题线性回归使用最小二乘法参数 (w) 的闭式解是 (w (X^TX)^{-1}X^Ty)。如果 (X^TX) 不可逆以下哪种做法最合理A. 无法求解只能换模型B. 增加样本量C. 使用梯度下降法求近似解D. 在损失函数中加入L2正则项正确答案是 D加入L2正则项后求解公式变成 (w (X^TX \lambda I)^{-1}X^Ty)这样 (X^TX \lambda I) 通常是可逆的。这也是岭回归的出发点。这里要理解 (X^TX) 不可逆的根本原因是特征之间存在多重共线性或者样本量小于特征维度。加入正则项等价于在损失函数中惩罚参数大小不仅解决不可逆问题还能降低模型方差。B选项增加样本量在某些情况下有用但在“特征维度远大于样本量”的场景下不一定现实C选项梯度下降虽然可求解但“最合理”的正则化方案仍然是 D。我当时在考场上就纠结于B和D后来想明白了笔试考的是理论和实践的最佳结合正则化是最通用、最被工程接受的方案。3. 经典机器学习算法从LR到SVM的选择题陷阱3.1 逻辑回归的损失函数为何不用MSE这道题几乎是我见过所有机器学习笔试里最经典的一道“概念题”在训练逻辑回归模型时以下哪个说法正确A. 可以使用均方误差MSE作为损失函数因为逻辑回归也是回归问题B. 逻辑回归使用交叉熵损失函数因为它在概率框架下与最大似然估计等价C. 逻辑回归的决策边界一定是线性的所以它无法处理非线性问题D. 逻辑回归要求特征必须满足正态分布正确答案是 B。逻辑回归虽然名字里带“回归”但它本质上是一个分类模型输出的是样本属于某一类的概率。它的损失函数一般取交叉熵负对数似然原因是这个损失函数是凸的方便梯度下降收敛。C 是另一个高频陷阱。逻辑回归的决策边界确实是线性的但我们可以通过特征变换比如多项式特征或使用核技巧让边界在高维空间变成非线性的。所以“逻辑回归无法处理非线性问题”这个说法过于绝对。D 也是错的逻辑回归对特征分布没有要求数据预处理中的标准化只是为了让梯度下降收敛得更快不是因为模型假设需要正态分布。为什么不用 MSE这件事值得多解释一点。MSE 在逻辑回归中会导致损失函数变成非凸函数把 Sigmoid 的输出当作连续值去逼近很容易陷入局部最优而且概率输出接近 0 或 1 时MSE 的梯度会变得非常小收敛速度极慢。交叉熵则不同当预测概率和真实标签差距大时梯度也大能有效推动参数更新。你把两个损失函数各自画出来看一下结论就很直观了。3.2 SVM的核函数与支持向量概念题高频坑支持向量机SVM在笔试客观题里的出场率极高几乎每次都会有这么一道关于SVM以下说法错误的是A. 线性可分SVM的决策边界只由支持向量决定与所有样本都有关B. 核函数的作用是隐式地将样本映射到高维特征空间C. RBF核中的参数 (\gamma) 越大模型越容易过拟合D. 使用软间隔时需要引入惩罚系数 C正确答案是 A。这个选项错在“与所有样本都有关”。线性可分SVM的优化结果只依赖支持向量也就是那些距离决策边界最近、对分类边界起关键作用的样本其他样本即使变化只要不成为支持向量就不会改变决策边界。这也是SVM相对于其他模型的一个特点解具有稀疏性。C 选项也值得展开。RBF核函数的形式是 (\exp(-\gamma |x - x|^2))。(\gamma) 越大意味着高斯核的“带宽”越小每个样本只影响周围很小的范围决策边界就会变得非常曲折容易把训练样本一个个圈起来造成过拟合。相反(\gamma) 越小模型越平滑可能欠拟合。D 选项里的惩罚系数 C 控制“间隔最大”和“分类错误最少”之间的权衡。C 越大对误分类的惩罚越重模型越倾向于将所有训练样本都分类正确也因此更容易过拟合。这个考点经常和“支持向量”的概念混在一起出做题时一定要把每个选项都当成一个独立的知识点来看。3.3 集成学习Bagging与Boosting的比对集成学习的客观题核心就是考“降低偏差还是降低方差”关于Bagging和Boosting下列说法正确的是A. Bagging通常使用强学习器Boosting通常使用弱学习器B. Bagging可以显著降低模型的偏差Boosting可以显著降低模型的方差C. 随机森林与Bagging的主要区别在于随机森林在样本采样之外还进行了特征随机选择D. AdaBoost在每轮迭代中会重新采样训练集不会调整样本权重正确答案是 C。随机森林在Bagging的基础上对特征也做了随机采样这进一步降低了树与树之间的相关性从而降低整体模型的方差。Bagging 的思想是“并行训练多个独立的基学习器综合投票”。它更适合方差大的模型比如深决策树因为多模型平均能平滑掉部分随机波动从而降低方差。Boosting 的思想是“串行训练一系列弱学习器每一轮重点关注上一轮预测错的样本”它逐步减小残差主要降低偏差。所以 A 的说法反了Bagging 基准学习器常使用强学习器方差大Boosting 基准学习器常使用弱学习器偏差大。D 选项也是一个经典误解。AdaBoost 的核心就是不断调整样本权重前一轮分类错误的样本在下一轮会获得更高权重而不是简单地重新采样。有些题目会把 AdaBoost 和 Bagging 的“bootstrap 采样”放在一起混淆记住一个关键词Bagging 采样Boosting 调权就能避开大部分坑。3.4 非监督学习K-Means与KNN不是一回事还有一个基础题虽然在经典算法里不算难但错误率不低关于K-Means聚类和K近邻KNN算法以下说法正确的是A. K-Means是有监督学习算法KNN是无监督学习算法B. K-Means聚类的结果受初始聚类中心影响KNN分类结果不受训练集分布影响C. K-Means的目标是最小化样本到所属簇中心的距离之和KNN是一种基于实例的学习D. 这两种算法都需要提前确定K值且K值确定方法完全相同正确答案是 C。K-Means是完全无监督算法目标函数是最小化簇内平方和KNN是有监督算法预测时根据最近的 K 个邻居标签投票。两个名字里都有K但含义完全不同。K-Means 的 K 是簇数KNN 的 K 是邻居数。K-Means 对初始中心很敏感不同的初始化可能收敛到不同的局部最优解所以通常会跑多次或使用 K-Means。KNN 则依赖训练集的分布和距离度量不能说不受影响。至于 K 值确定方法K-Means 常用肘部法则或轮廓系数KNN 常用交叉验证二者并不相同。这类题本身不难但把两个名字相似的算法放在一起就是为了考察你是否只是“听过名词”还是真的理解算法的核心机制。4. 模型评估与调参偏差方差、过拟合与交叉验证4.1 偏差-方差分解一道经典题如何串联多个概念先看这道高频选择题当模型在训练集上误差很小但在测试集上误差很大时最可能的原因是A. 模型偏差过大B. 模型方差过大C. 模型复杂度太低D. 训练样本太少导致无法估计偏差正确答案是 B。训练集表现好、测试集表现差这是典型的过拟合现象对应高方差。偏差大对应的是欠拟合训练集和测试集误差都比较大。这里有一个比较实用的判断方法如果训练误差高先怀疑高偏差如果训练误差低、测试误差高先怀疑高方差。偏差和方差的权衡是机器学习最核心的概念之一。偏差度量的是模型预测期望与真实值的差距方差度量的是模型对不同训练集数据产生的波动。简单的模型线性回归可能偏差高、方差低复杂的模型深度树、高阶多项式可能偏差低、方差高。笔试中常以“学习曲线”来考察训练集误差和验证集误差随样本量增加而变化的趋势看到“训练误差低、验证误差高”闭眼选过拟合。4.2 交叉验证的划分方式与数据泄漏风险关于交叉验证当年有道判断题在特征工程中如果先对全部数据做了标准化再进行 K 折交叉验证这种做法是合理的因为标准化不涉及标签信息。这个说法是错误的。虽然标准化只用均值和方差但从流程上看你在每一折训练之前就已经使用了全量数据的统计信息包括验证折的数据这属于轻微的数据泄漏data leakage。正确的做法应该是对每一折训练集单独计算均值和方差然后用这个均值和方差去变换验证集。尤其是标准化、归一化这些看似无监督的预处理只要它中途接触了验证集都会让验证分数偏高最终导致模型上线后性能打折扣。在笔试里这个题不会让你写代码但它考的是你是否理解交叉验证的本质每一折的验证集都应该扮演“未来新数据”的角色因此在训练流程中不能以任何方式“看到”验证集的信息。除了标准化特征选择、缺失值填充也一样应该在训练折内完成。这个原则延伸出去就是为什么时间序列场景不能用普通的随机 K 折而要使用时间顺序切分——因为未来的数据不能用来预测过去。4.3 类别不平衡准确率不是万能的类别不平衡是面试和笔试都爱考的知识点。典型题目长这样在一个二分类任务中正样本占比只有1%模型把所有样本都预测为负样本。以下说法正确的是A. 模型准确率约为99%说明模型表现很好B. 模型精确率很高召回率很低C. 模型召回率为0F1分数为0D. 该问题不需要处理因为准确率已经很高正确答案是 C。把所有样本都预测为负样本时召回率确实是0F1也是0。虽然准确率约99%但模型没有识别出任何正样本在业务上往往不可用。这里要区分几个指标准确率Accuracy是所有样本中预测正确的比例精确率Precision是预测为正的样本中真正为正的比例召回率Recall是真实为正的样本中被预测为正的比例F1 是精确率和召回率的调和平均。在正负样本极不平衡时准确率会被多数类主导无法反映少数类的识别能力。处理类别不平衡的常用手段包括过采样少数类、欠采样多数类、使用加权损失函数、选择 AUC 或 F1 等指标来评估模型。笔试里如果出现“准确率还是AUC哪个更好”的问题优先选能对少数类敏感的评价指标。4.4 超参数调优为什么随机搜索比网格搜索更高效超参数调优不是每次笔试都出但一旦出题往往是一道“送分题”在超参数搜索中相比网格搜索Grid Search随机搜索Random Search的主要优势是A. 随机搜索一定能找到全局最优解B. 随机搜索在相同尝试次数下可以覆盖更多维度的取值组合更高效C. 随机搜索不需要定义搜索范围D. 随机搜索不用交叉验证正确答案是 B。网格搜索在每个超参数的取值列表上做笛卡尔积维度一多组合数爆炸效率很低。随机搜索在指定的分布范围内随机采样可以在相同的尝试次数下覆盖更多有效的取值组合因为很多超参数对最终结果的影响并不是均匀的随机采样更容易命中“重要参数的较优区间”。这个结论看起来反直觉但已经被大量实验验证。我当时也以为网格搜索更“稳妥”后来在做模型调参时发现随机搜索不仅省时间效果也往往更好。笔试考这个点其实是在看你是否有工程直觉而不只是背概念。5. 深度学习基础激活函数、梯度消失与网络结构5.1 激活函数选择的客观题逻辑深度学习基础题在笔试里通常不复杂但概念性极强。比如关于 Sigmoid 激活函数以下说法错误的是A. Sigmoid函数将输入压缩到(0,1)区间B. Sigmoid函数的导数在输入为0时取最大值最大值为0.25C. Sigmoid函数存在梯度消失问题D. Sigmoid函数以0为中心有助于收敛正确答案是 D。Sigmoid 函数的输出范围是(0,1)不是关于0对称的所以它并不是“以0为中心”的激活函数。一个常见的推论是如果使用 Sigmoid后一层的输入总是正数会导致梯度更新出现“Z字型”路径收敛变慢。这也是 ReLU 等现代激活函数在某些场景下更受欢迎的原因之一。B 选项常被当作难点但只需要记住 Sigmoid 的导数是 (\sigma(x)(1-\sigma(x)))在 (x0) 时值是 (0.5 \times 0.5 0.25)。这个最大导数小于1意味着多层叠加后梯度会指数级衰减这就是梯度消失的一个重要来源。C 因此正确。考试中经常把“导数最大值”和“梯度消失”放在一起考察你对激活函数本质的理解。5.2 反向传播与梯度消失推导题如何变成概念题关于反向传播客观题不会让你手推整个计算图但会考如下概念在深度神经网络训练中梯度消失问题的主要原因是A. 学习率设置过小B. 链式法则中连乘项小于1导致梯度在反向传播过程中逐渐趋近于0C. 权重初始化过大D. 训练数据过少正确答案是 B。反向传播的本质就是链式法则每一层的梯度需要乘以上一层的局部梯度。如果很多局部梯度小于1连乘的结果就会指数级缩小出现梯度消失。C 权重初始化过大通常更容易导致梯度爆炸而不是梯度消失。A 学习率过小会影响收敛速度但不是梯度消失在结构上的原因。理解了这个机制就能理解为什么 LSTM 和残差网络能缓解梯度消失LSTM 通过门控机制让梯度可以在时间维度上“直通”ResNet 通过恒等映射让梯度可以从深层直接传到浅层。笔试里如果问“哪一项不是解决梯度消失的方法”选择“减小网络层数”“换用 ReLU”“引入残差连接”之外的选项就行。5.3 CNN的基础概念局部连接和权值共享的价值深度学习的客观题也会落在 CNN 的常识上卷积神经网络中权值共享的主要作用是A. 让模型能够处理变长输入B. 大幅减少参数量同时提取具有平移不变性的特征C. 避免梯度爆炸D. 使网络可以并行训练正确答案是 B。卷积核在输入的不同位置使用同一组权重也就是说一个卷积核只学习一种局部特征这样参数数量大幅减少。平移不变性是指同一个特征出现在不同位置时都能被同一个卷积核检测出来。C 和 D 是明显的干扰项。权值共享和梯度爆炸没有直接关系和并行训练也没有直接关系。笔试中还会顺带考察“池化”的作用降低特征图尺寸、增强平移/旋转不变性、减少计算量。这些概念都属于“知道就是送分不知道就是猜”的题目。5.4 RNN与LSTM梯度消失和时间序列再补一道关于序列模型的判断题传统RNN在处理长序列时表现不佳主要是因为长期依赖问题具体表现为梯度消失或梯度爆炸。LSTM通过引入门控机制来缓解该问题。该说法是否正确正确答案是正确。传统RNN需要按时间步展开反向传播时梯度需要穿过多个时间步一旦每一步的雅可比矩阵谱半径小于1梯度就会快速衰减导致模型无法学到长距离依赖。LSTM 引入输入门、遗忘门、输出门和记忆细胞让梯度可以沿着记忆细胞这条“高速公路”流动从而缓解长期依赖问题。这里顺带说一句笔试如果问“为什么LSTM比RNN好”不要只答“LSTM避免了梯度消失”要提到记忆细胞和门控机制让信息可以选择性保留和遗忘梯度也可以更加顺畅地反向传播。这种回答在主观题里也是加分项。6. 从这份错题集反推复习方法我的三点经验6.1 错题不要只看解析要把错误选项“翻译”成正确知识整理完这份合集后我发现真正让我进步的并不是“知道正确答案”而是把每个错误选项都当成一个命题逐条判断为什么错、在什么条件下才可能对。比如“SVM决策边界由所有样本决定”这个选项错在“线性可分条件下只有支持向量决定边界”但如果换成软间隔且使用非线性核所有样本都可能对决策边界产生一定影响。这样思考一道客观题就被拆成了四道判断题知识密度瞬间翻倍。6.2 公式推导优先于刷题数量客观题里有很多结论比如“L2正则项让(X^TX)可逆”“Sigmoid最大导数为0.25”“Bagging降低方差Boosting降低偏差”。这些结论如果你只背下来过两周就会忘做题时还会被干扰项迷惑。我自己的方法是每个高频考点列出对应的公式花一个晚上把逻辑回归、SVM对偶、K-Means目标函数、反向传播链式法则等核心推导过一遍。推导过一遍之后再回头做这些客观题你会发现很多选项“一眼假”是因为根本不符合公式推出来的结论。6.3 控制时间训练“快速判断”的肌肉记忆机器学习工程师笔试的客观题一般要求在1到2分钟内完成一道。遇到计算量稍大的题目比如贝叶斯公式我建议先用估算排除法先算量级再选答案而不是在草稿纸上精算到小数点后三位。平时刷题就要给自己计时尽量模拟真实考试节奏。我在复盘时发现凡是纠结超过3分钟还拿不准的题最后大多会选错。与其纠结不如先标记、往后做把能拿的分先拿到手。这份2018年的合集放在今天依然有很强的参考价值。机器学习领域每年都有新模型、新框架、新热点但客观题考的东西始终是那几块地基。希望这份整理和解析能帮你把某个模糊的概念彻底打通哪怕只有一道题让你“原来如此”这篇文章就没白写。