面灵AI→

华为 10.10 AI 方向机考:10 道选择题与 K-Median 聚类编程题

轮次
笔试
时间
2026-10
来源
牛客网

《面试题目》

第 1 题:选择题(10 题)

  1. 实矩阵的奇异值分解 M = PΣQᵀ 中,P 和 Q 必须满足哪一条? A. 二者都是对角矩阵;B. 二者都是正交矩阵;C. 二者每个元素都大于 0;D. P 是上三角矩阵,Q 是下三角矩阵
  2. 半监督学习和强化学习,哪一条把学习信号说对了? A. 半监督学习只能使用有标签样本;B. 强化学习不采集数据,只做随机试探;C. 强化学习用奖励信号更新策略;D. 半监督学习靠与环境交互来获得奖励
  3. Scaled Dot-Product Attention 对 QKᵀ 做缩放时,缩放因子和目的是什么? A. 除以头数 h,把计算量降下来;B. 除以 √dₖ,避免内积过大后 softmax 饱和、梯度接近 0;C. 除以 √dᵥ,把 value 的数值尺度拉齐;D. 除以 dₖ,对注意力分数做归一化
  4. 多头注意力中各头算完后,如何得到这一层的输出? A. 对应位置相加后再归一化;B. 随机保留其中一个头;C. 对所有头的输出取平均;D. 先在特征维拼接,再乘输出投影矩阵
  5. 已知 A ∈ R^{6×9}、B ∈ R^{9×4},乘积 AB 的形状是? A. 9×9;B. 4×6;C. 6×9;D. 6×4
  6. 端侧部署把权重量化成 INT8,最直接的收益是什么? A. 权重存储和推理时的内存占用下降;B. 量化之后精度一定上升;C. KV Cache 的开销被全部去掉;D. 冷启动不再发生
  7. 现代概率论中,随机变量是什么? A. 取值尚未确定的普通量;B. 计算期望时引入的记号;C. 定义在概率空间上的可测函数;D. 描述事件出现频率的统计量
  8. 相对训练后量化(PTQ),量化感知训练(QAT)主要多出的代价是什么? A. 得到的精度通常更差;B. 模型体积会变大;C. 训练时要模拟量化误差,计算开销明显更高;D. 得到的模型不能在 GPU 上推理
  9. 一个 12B 参数的模型只对权重做 INT4 量化,权重大约占多少显存? A. 48 GB;B. 24 GB;C. 12 GB;D. 6 GB
  10. 大模型自回归推理中,Prefill 阶段主要完成哪件事? A. 评估已生成文本的准确率;B. 逐个 token 向外生成;C. 压缩权重以降低延迟;D. 一次性处理整段 prompt,计算 KV 并写入缓存

第 2 题:K-Median 聚类(150 分)

按划分做聚类:样本之间用曼哈顿距离(L1),簇中心取该簇在每一维上的中位数,因此离群点不容易把中心拉偏。给定 n 个样本、每个样本 d 个浮点特征,按下列固定流程把样本分成 k 个簇,输出簇编号、最终中心和 inertia。

  • 初始化:取下标 0 到 k-1 的样本作为 k 个簇的初始中心。
  • 分配:把每个样本分到曼哈顿距离最近的中心;到多个中心的距离相同时,分到编号最小的簇。
  • 更新:若某个簇在本轮分配后没有样本,则该簇中心保持不变;否则用簇内样本在每一维上的中位数替换该簇中心。一维中位数为升序排列后奇数个取正中间一项、偶数个取正中间两项的算术平均。
  • 重复分配与更新,直到中心变化量小于 tol(固定 10⁻⁴),或迭代次数达到 max_iter(固定 100)。中心变化量是所有簇、所有维度上新旧中心坐标绝对差的总和。
  • 曼哈顿距离 dist(x, y) = Σᵢ |xᵢ - yᵢ|;inertia 为每个样本到所属中心的曼哈顿距离之和。
  • 输入:第一行三个整数 n、d、k;接下来 n 行每行 d 个浮点数。
  • 输出:第一行 n 个整数表示每个样本最终所属的簇编号;接下来 k 行每行 d 个浮点数表示各簇最终中心;最后一行一个浮点数表示 inertia。中心和 inertia 均保留 6 位小数。

样例输入:

3 2 1
2 8
6 1
4 5

样例输出:

0 0 0
4.000000 5.000000
11.000000

《参考解析》

线性代数与注意力:四道题都考「定义级」的理解。 SVD 里 Σ 是对角矩阵、装奇异值,左右两个矩阵 P、Q 是正交(实数域)或酉(复数域)矩阵,所以「P 和 Q 都正交」是唯一正确项;正交的意义是这组基只做旋转/反射,不改变向量长度与夹角,因此按奇异值从大到小截断就能得到最佳低秩近似。Scaled Dot-Product Attention 的缩放因子是 1/√dₖ:QKᵀ 的每一项是 dₖ 个乘积之和,若 q、k 各维近似独立同分布,内积的方差随 dₖ 线性增长,分数进入较大区间后 softmax 会被少数大值主导、输出接近 one-hot,梯度随之趋近 0;除以 √dₖ 相当于把方差拉回常数,让训练初期梯度保持健康。多头注意力各头在自己的子空间算完后,标准做法是在特征维拼接再乘输出投影矩阵 Wᴼ,投影的作用是把多个子空间的信息混合回统一表示;相加或取平均会抹掉各头关注不同位置/关系的分工,所以那些选项是干扰项。矩阵乘法只看内维是否匹配:(6×9)·(9×4) 内维 9 相同,结果取首尾即 6×4。

半监督与强化学习:分清学习信号从哪来。 强化学习的信号是环境给的奖励(回报),智能体靠与环境交互(试错)更新策略,所以「用奖励信号更新策略」是对的;「不采集数据、只做随机试探」错在它忽略了策略评估与利用。半监督学习的关键是同时使用少量有标签样本和大量无标签样本(一致性正则、伪标签、熵最小化一类做法),因此「只能用有标签样本」是错的;「靠与环境交互获得奖励」是强化学习的特征,不是半监督的。

量化与推理显存:三道教算题一个比一个坑。 INT8 把每个权重从 FP32 的 4 字节压到 1 字节,最直接的收益是权重存储和推理时的内存占用下降(同时降低访存带宽,端侧 decode 阶段往往就是带宽瓶颈);它不保证精度上升,也不会消掉 KV Cache 和冷启动这两个独立开销。PTQ 无需训练、拿少量校准数据估出量化参数即可,代价是精度损失相对大;QAT 在训练/微调过程中插入伪量化节点模拟量化—反量化误差,让权重去适应这种误差,所以精度更好但训练计算开销显著更高,工程上通常先试 PTQ,掉点严重再用 QAT 或做部分层的混合精度。12B 参数只做 INT4 权重:12×10⁹ × 4 bit = 48×10⁹ bit = 6 GB,答案 6GB;实际部署还要另算 KV Cache、激活、CUDA/运行时开销与量化缩放参数,所以显存不会正好等于 6GB,这个换算只是权重的理论下界。Prefill 阶段并行处理整段 prompt、计算并缓存所有位置的 K、V,decode 阶段才逐 token 自回归生成;因此首 token 延迟(TTFT)由 prefill 决定、属于算力密集型,每 token 延迟(TPOT)由 decode 决定、属于显存带宽密集型——这个二分法是后面许多推理优化题的分析起点。

K-Median 编程题:交的是题面规定的迭代结果,不是另找全局最优。 第一件事是读清楚要求「按固定流程」输出,因此不要自作聪明换初始化方式(如 k-means++)或收敛判据,评分只认题面定义的那套迭代。实现上的坑集中在四处。一是初始中心必须单独拷贝,不能和样本共用存储,否则更新中心时会把原始特征改掉,后面所有距离都算错。二是并列取小编号:分配时先算到 0 号中心的距离,之后只有严格更近才更换编号,这样距离相等时自然落到小编号簇,别用 <= 或浮点容差比较。三是中位数按维单独取:非空簇对每一维排序后取中位数(奇数取中间项,偶数取中间两项的算术平均),空簇把旧中心整行抄回去保持不变——空簇处理是最常见的漏项。四是变化量的口径与容差:把所有簇、所有维度的新旧中心绝对差累加成一个标量,小于 1e-4 才停,最多 100 轮;累加用双精度,且要注意最后一轮的编号与中心才是输出依据,inertia 也用这一轮的数据按曼哈顿距离累加。输出层面还有一个小坑:数值为 0 时按正零输出,避免打出 -0.000000 被判格式错误。

复杂度上,每轮分配是 O(n·k·d),更新要对每个簇的每一维排序,最坏 O(k·d·n log n),总时间约 O(max_iter · (n·k·d + k·d·n log n)),空间 O(n·d + k·d)。理解层面还值得对比一句:K-Median 用中位数替代 K-Means 的均值,优化目标从平方误差换成 L1 距离,好处是对离群点鲁棒(中位数不被极端值拉偏),代价是每步都要排序、计算更贵,而且距离相同点的归属需要像本题这样额外规定规则。