华为 10.21 机考 AI 方向:选择题、决策树与 X-Means 聚类
- 轮次
- 笔试
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
一、选择题(10 道)
- 只有一个输出神经元的二分类模型,要把它的输出解释成「属于正类的概率」,最后一层应接哪个激活函数?A. ReLU B. Softmax C. Sigmoid D. Tanh
- 回归任务中混进了少量误差极大的离群点,下面关于 MSE 与 MAE 的说法,正确的是?A. MAE 对离群点更敏感 B. MSE 对离群点更敏感 C. MSE 在误差为 0 处不可导 D. MAE 的收敛速度一般快于 MSE
- 缩放点积注意力里把
QKᵀ除以√d_k,这样做的目的是什么?A. 把单头计算拆成多头并行 B. 降低矩阵乘法的计算量 C. 增加模型可训练参数 D. 避免内积过大使 softmax 饱和、梯度接近 0 - 某推理场景里有 6 个逐元素的小算子需要串行执行,每次向 GPU 下发 kernel 有固定开销、每个算子在 GPU 上有固定的纯执行时间,忽略访存优化。不融合时总耗时与用编译器合并成一个 kernel 后总耗时之比约为多少?A. 1.5 倍 B. 2 倍 C. 3 倍 D. 3.6 倍
- RAG 流程中,向量检索这一步最终要拿到的东西是什么?A. 对问题做分词并截断到固定长度 B. 从库里取出与问题语义最接近的文档片段 C. 由生成模型据此写出最终答案 D. 只要算出一个相似度分数就算完成
- 用 Self-Instruct 方法自动构造指令数据,起步时需要准备的是什么?A. 一个已经对齐好的奖励模型 B. 一批带标注的测试集 C. 大规模无标注图像 D. 一小批人工编写的种子指令
- 设 V 是 n 维向量空间,W 是 V 的子空间,则 dim W 最大能取到多少?
- 用 ViT 做视觉编码器时,常把切出的视觉 token 再做一次压缩,其主要目的是?A. 提升输入图像的原始分辨率 B. 让图像语义自动变准确 C. 降低后续计算量与显存占用 D. 增加视觉侧可训练参数量
- 关于 t-SNE,下面说法正确的是?A. 它是非线性方法,主要保留高维数据的局部邻域结构 B. 它属于线性降维,结果对特征缩放敏感 C. 它计算量很小,百万级样本可以随意直接跑 D. 它每次运行结果完全随机,没有参考价值
- PagedAttention 缓解 KV Cache 显存碎片化的做法是?A. 把 KV Cache 压缩为 INT8 低精度 B. 丢弃部分早期 KV Cache C. 每步重算 KV 向量 D. 把 KV Cache 切成固定大小的页,让离散空闲块拼成连续页块使用
二、编程题 1:用决策树判断玩家购买意向(150 分)
给定一批「看过皮肤页面、最终买没买」的训练样本,每个样本用三个布尔特征描述:是否 VIP 会员、是否买过该英雄的皮肤、是否把该英雄打上过最高段位;类别 0 表示不购买、1 表示购买。要求按以下规则从零构建决策树并对新样本做预测:
- 以信息增益选分裂特征,增益并列时取编号最小的特征;
- 特征一旦在「从根到当前节点」的路径上用过,就不能在该路径的下层再用,但另一条分支仍可用;
- 终止条件:节点内类别纯、三个特征都在路径上出现过、或所有未用特征的信息增益都不大于 0;
- 非纯叶节点按多数表决定类,两类数量相等时取 0;
- 预测时特征取 0 走左子树、1 走右子树。
输入是训练样本数、预测样本数与样本本身;输出每条待预测样本的类别。
三、编程题 2:自动确定簇数的 X-Means 聚类(300 分)
实现 X-Means:给定 N 个 d 维点和簇数候选区间 [Kmin, Kmax],对区间内每个 K 跑一次 K-Means(确定性初始化、不允许多次随机重启、最多 100 轮、标签不再变化即收敛),合并重合的中心得到实际簇数 k_actual,再用 BIC 选最优:
BIC = n·ln((SSE + 1e-8)/n) + k_actual·(d+1)·ln(n)
BIC 越小越好,相同则取更小的 K。输出最终簇数、按坐标字典序排序后的各簇中心(保留两位小数,绝对值小于 0.005 输出 0)、以及按输入顺序的每个点簇标签。
《参考解析》
1. 选择题答案与理由。 1-C:单个 logit 经 Sigmoid 映射到 (0,1) 才能解释为正类概率,Softmax 用于多输出互斥分类。2-B:MSE 把误差平方放大,离群点对梯度贡献远高于 MAE;MSE 在 0 处可导、MAE 不可导,MAE 收敛通常更慢。3-D:QKᵀ 的方差随维度增大,除以 √d_k 把方差拉回 1,防止 softmax 进入饱和区导致梯度消失。4-C:设下发开销为 T、单算子执行时间为 t,不融合是 6T+6t,融合后是 T+6t,按题设的开销比例约为 3 倍——这题考的是「小算子多时 kernel launch 开销占主导,融合能显著降延迟」。5-B:检索的产出是候选文档片段,生成答案与打分都不属于检索这一步。6-D:Self-Instruct 以少量人工种子指令为起点,让模型自生成再筛选扩充。7-n:向量空间本身是自己的子空间,维数就是上界。8-C:压缩视觉 token 数量直接减少后续 Transformer 的计算与显存,不提升分辨率也不增加参数。9-A:t-SNE 是非线性、强调局部邻域,计算复杂度高且受随机种子影响,但不是「完全随机无参考价值」。10-D:PagedAttention 借鉴虚拟内存分页,用固定大小的 page 管理 KV Cache,减少碎片、支持共享。
2. 决策树的实现要点。 训练集只有 3 个布尔特征,树深最多 3 层,直接按定义递归即可,不需要剪枝。递归参数是「当前节点样本集合 + 路径上已用特征的位掩码」:先判断类别是否纯(纯则建叶),再对每个未用特征按 H(S) - Σ(|Sv|/|S|)H(Sv) 算信息增益,用严格大于更新最优(这样并列时保留编号小的),增益都不大于 0 就按多数表决建叶。容易写错的三处:① 掩码只沿当前路径传递,不能全局禁用,否则另一条分支会少特征;② 纯节点必须先判断,否则没有可用特征时会错误地走多数表决;③ 多数表决用「1 的数量 > 0 的数量」而不是 >=,相等时取 0。熵里 p log p 在 p=0 时按 0 处理。
3. X-Means 的实现要点。 主体是「枚举 K + 跑 K-Means + 合并重合中心 + 算 BIC」。K-Means 的初始化必须确定(题面禁止随机),否则同一份数据多次运行结果不同、BIC 无法比较;分配-更新循环直到标签不再变化或满 100 轮。合并重合中心要在计算 BIC 之前做,并且 k_actual 用合并后的簇数——否则 K 传得大、实际中心重合时复杂度惩罚会算错。BIC 第一项是拟合项(SSE 越小越好),第二项是复杂度惩罚(k(d+1)ln n),两项平衡出最优 K;SSE=0 时用 1e-8 兜住 log(0)。输出阶段还有两个细节:中心按坐标字典序重新编号(标签要跟着重映射),以及 -0.00 要归一成 0。
4. 这场机考的复盘。 选择题考的是「是否真读过论文/文档」而不是推导,PagedAttention、Self-Instruct、t-SNE 这些点都在经典材料里;编程题则是「按规格实现」的模拟题,算法本身不难,难在规格细节(并列取最小、路径禁用、多数表决平局、合并后簇数、格式化输出)。这类题的正确策略是先把规格逐条写成检查清单,再动手写代码,最后用样例和自造边界(单样本、全同点、K=1、K=Kmax)回归。