大厂真题 / 华为

华为 6.12 笔试真题 - AI岗

本场考试概述

考试时间:2026年6月12日 考试岗位:华为暑期实习 AI 岗(AI算法、AI应用开发、AI数据科学等以AI为前缀的岗位) 难度评级:困难

考点分析

  1. 选择题(20道):机器学习(相似度度量、PCA降维、评价指标 P/R/TPR/准确率)、深度学习(梯度消失、Momentum、CNN输出尺寸、Embedding、SGD)、大模型(GQA/MQA与KV Cache、注意力均匀分布、3D混合并行)、数学(贝叶斯定理、指数分布MLE、向量空间、对角阵行列式、线性相关性、凸函数性质、右偏分布)
  2. 第一题:自动驾驶障碍物检测——K-Means点云聚类(难度中等)
  3. 第二题:Expert Choice Routing——MoE专家选择路由,数值稳定Softmax + Top-S选择 + 加权聚合(难度困难)

建议策略

  1. AI岗选择题分值权重大(单选 15×6 + 多选 5×12 = 150 分),ML/DL/大模型基础概念要刷透;本场多选集中在凸函数性质、注意力均匀分布、线性相关性、评价指标计算、3D混合并行
  2. 第一题识别”前 $K$ 个点作初始质心 + 平局取最小编号 + 1e-6 收敛”就直接套 K-Means 模板;注意空簇要保持质心不变、用平方距离比较省去开方
  3. 第二题是 MoE 模拟题,流程较长:门控分数 → 数值稳定 Softmax → 每个专家按归一化权重选 Top-S → 选中 token 做专家变换并加权聚合 → 未选中置零;先做合法性校验

选择题(20道)

第1题

对比两张亮度差异较大的图片,判断内容是否相似,适合的相似度度量是?

A. 余弦相似度 B. 曼哈顿距离 C. 汉明距离 D. 欧氏距离

答案:A

考点:机器学习——相似度度量

余弦相似度只看向量方向夹角,对整体亮度(幅度)缩放不敏感;两图亮度差异大但内容相似时方向接近,故最合适。欧氏、曼哈顿距离受幅度影响大,汉明距离用于离散编码比对。

第2题

工厂抽检 5 个灯泡,寿命数据为 ${3, 0, 2, 0, 5}$ 年。合格品寿命服从指数分布(参数 $\lambda$),不合格品寿命为 $0$。合格率 $p$ 的 MLE 估计是?

A. 0.7 B. 0.6 C. 0.5 D. 0.4

答案:B

考点:数学——概率统计/MLE

合格品寿命大于 $0$,5 个样本中非零的有 3 个($3, 2, 5$ 年),为 $0$ 的有 2 个。合格率的最大似然估计即合格样本所占比例 $3/5 = 0.6$。

第3题

贝叶斯定理的正确表达式是:

A. $P(A \mid B) = \frac{P(B \mid A) \cdot P(A)}{P(B)}$ B. $P(A \mid B) = \frac{P(A) \cdot P(B)}{P(B \mid A)}$ C. $P(A \mid B) = P(B \mid A) \cdot P(A)$ D. $P(A \mid B) = \frac{P(A \cap B)}{P(A)}$

答案:A

考点:数学——概率统计

由条件概率定义 $P(A \mid B) = \frac{P(A \cap B)}{P(B)}$ 与 $P(B \mid A) = \frac{P(A \cap B)}{P(A)}$ 联立,得贝叶斯定理 $P(A \mid B) = \frac{P(B \mid A) \cdot P(A)}{P(B)}$。

第4题

使用 PCA 降维时需要决定保留多少个主成分。选择 PCA 主成分数量时,通常依据什么指标?

A. 后续模型的准确率 B. 原始特征的数量 C. 累计解释方差比例(如 85%-95%) D. 样本的数量

答案:C

考点:机器学习——降维/PCA

PCA 按特征值大小排序主成分,通常以累计解释方差比例为依据,保留到 85%~95% 即可在压缩维度的同时保留大部分信息。

第5题

训练一个两层全连接神经网络做回归任务,在使用反向传播更新参数时发现:损失几乎不下降,梯度在多层传递后逐渐趋近于 $0$。针对该现象,下列分析最合理的是?

A. 数据集过小,与反向传播无关 B. 梯度爆炸,应使用梯度裁剪 C. 学习率过高,应大幅调大学习率 D. 梯度消失,常见于深层网络或饱和激活函数

答案:D

考点:深度学习——反向传播

损失不降且梯度逐层趋近 $0$ 是典型的梯度消失现象,常见于深层网络或 Sigmoid、Tanh 等导数小于 $1$ 的饱和激活函数,链式连乘后梯度指数衰减。

第6题

在反向传播中,如果激活函数的导数长期小于 $1$,最可能导致的数值问题是?

A. 梯度爆炸 B. 维度崩溃 C. 数值上溢 D. 梯度消失

答案:D

考点:深度学习——反向传播

链式法则中梯度是各层导数连乘,导数长期小于 $1$ 会使梯度随层数指数衰减,导致梯度消失。

第7题

在判断一个集合是否为向量空间时,以下哪一项是必须满足的条件?

A. 集合中所有向量的长度必须相等 B. 集合中任意两个向量的和仍属于该集合 C. 集合中存在零向量,并且对加法和数乘封闭 D. 集合中任意一个向量与任意一个标量的乘积仍属于该集合

答案:C

考点:数学——线性代数

向量空间必须包含零向量,且对加法和数乘运算封闭,这是核心判定条件。B、D 各只覆盖了加法或数乘封闭的一部分,不完整。

第8题

与普通 SGD 相比,Momentum 方法的主要作用是什么?

A. 保证全局最优解 B. 不再需要设置学习率 C. 引入历史梯度信息,减少震荡并加快收敛 D. 自动减少训练数据噪声

答案:C

考点:深度学习——优化器

Momentum 累积历史梯度方向形成动量,在一致方向上加速、在震荡方向上抵消,从而减少震荡并加快收敛。它不保证全局最优,也不取代学习率。

第9题

对于多头注意力(MHA)和分组查询注意力(GQA),GQA 相较于 MHA 的结构变化在于:

A. 增加了 Value 头的维度 B. 多个 Query 头共享一组 Key 和 Value 头 C. 增加了 Key 和 Value 头的数目 D. 减少了 Query 头的数量

答案:B

考点:大模型——注意力机制

GQA 介于 MHA 与 MQA 之间,将 Query 头分组,每组多个 Query 头共享一组 Key、Value 头,从而减少 KV Cache 显存,同时保留比 MQA 更强的表达力。

第10题

当数据分布呈现右偏(正偏)特征时,均值、中位数、众数三者的关系通常是?

A. 均值 < 中位数 < 众数 B. 均值 > 中位数 > 众数 C. 无法确定 D. 均值 = 中位数 = 众数

答案:B

考点:数学——概率统计

右偏分布尾部在右侧,少数极端大值把均值拉向右,故均值最大,众数(峰值)最小,关系为均值 > 中位数 > 众数。

第11题

原模型使用 MHA 有 $64$ 个注意力头,如果采用 MQA 替代 MHA,KV Cache 显存可减少多少倍?

A. 8 倍 B. 64 倍 C. 32 倍 D. 4 倍

答案:B

考点:大模型——KV Cache

MHA 中每个注意力头各有独立的一组 Key、Value,共 $64$ 组;MQA 让所有 Query 头共享同一组 Key、Value,KV Cache 显存约变为原来的 $1/64$,即减少 $64$ 倍。

第12题

对于输入为 $32 \times 32 \times 3$ 的图像,使用一个卷积层,包含 $16$ 个 $5 \times 5$ 的卷积核,步长为 $1$,无填充,那么输出特征图的大小和深度分别是?

A. $28 \times 28 \times 3$ B. $32 \times 32 \times 16$ C. $28 \times 28 \times 16$ D. $30 \times 30 \times 16$

答案:C

考点:深度学习——CNN

输出边长 $(32 - 5)/1 + 1 = 28$,深度等于卷积核个数 $16$,故输出为 $28 \times 28 \times 16$。

第13题

下列关于 Embeddings 的核心定义,正确的是?

A. 将离散数据(如单词、类别)映射到连续的低维向量空间 B. 将离散数据映射到离散的低维向量空间 C. 将连续数据映射到离散的高维向量空间 D. 将连续数据映射到连续的高维向量空间

答案:A

考点:深度学习——Embedding

Embedding 的核心是把离散符号(词、类别 ID 等)映射为连续、稠密的低维向量,使语义相近的对象在向量空间中距离更近。

第14题

关于 SGD 的说法,错误的是?

A. SGD 可能收敛速度较慢 B. SGD 需要设置学习率 C. SGD 使用整个数据集计算梯度 D. SGD 代表随机梯度下降

答案:C

考点:深度学习——优化器

SGD(随机梯度下降)每步只用单个或小批量样本估计梯度,并非整个数据集(用整个数据集的是批量梯度下降),故 C 错误。

第15题

对角矩阵 $A = \text{diag}(1, 3, 3)$ 的行列式值为?

A. 6 B. 27 C. 9 D. 3

答案:C

考点:数学——线性代数

对角矩阵的行列式等于对角元素之积,$1 \times 3 \times 3 = 9$。

第16题(多选)

以下关于凸函数的性质,正确的有:

A. 两个凸函数之和仍然是凸函数 B. 凸函数的非负线性组合仍然是凸函数 C. 凸函数的任意局部最小值都是全局最小值 D. 凸函数与凹函数之和一定是凸函数

答案:A, B, C

考点:数学——凸优化

凸函数之和仍凸(A 对),非负线性组合仍凸(B 对),凸函数的局部最小值必为全局最小值(C 对)。凸函数与凹函数之和的凸凹性不确定,不一定是凸函数(D 错)。

第17题(多选)

若某层注意力权重接近均匀分布,可能由于:

A. 使用了因果掩码 B. 输入序列所有 token 嵌入相同 C. 查询和键的维度过高 D. 注意力机制中 softmax 的温度参数设置过大

答案:B, D

考点:大模型——注意力机制

所有 token 嵌入相同时打分相同,softmax 后权重均匀(B 对);温度参数过大使分布更平滑、趋于均匀(D 对)。因果掩码只屏蔽未来位置,不会让权重均匀(A 错);查询、键维度过高在未缩放时通常使点积方差变大、分布更尖锐而非均匀(C 错)。

第18题(多选)

以下关于线性相关与线性无关的说法,哪些正确?

A. 包含零向量的向量组必线性相关 B. $n$ 维向量空间中任意 $n+1$ 个向量必线性相关 C. 若向量组线性相关,则其中每个向量都可由其余向量线性表示 D. 单个非零向量构成的向量组线性无关

答案:A, B, D

考点:数学——线性代数

含零向量的向量组必线性相关(A 对);$n$ 维空间中 $n+1$ 个向量必线性相关(B 对);单个非零向量线性无关(D 对)。线性相关只保证至少存在一个向量可由其余表示,并非每个向量都能(C 错)。

第19题(多选)

已知 $\text{TP}=40$,$\text{FP}=10$,$\text{FN}=20$,$\text{TN}=30$,下列正确的有:

A. 精确率 $P = 0.8$ B. 召回率 $R = \frac{2}{3}$ C. $\text{TPR} = \frac{2}{3}$ D. 准确率 $= 0.8$

答案:A, B, C

考点:机器学习——评价指标

精确率 $P = \frac{40}{40+10} = 0.8$(A 对);召回率 $R = \frac{40}{40+20} = \frac{2}{3}$(B 对);TPR 即召回率 $= \frac{2}{3}$(C 对);准确率 $= \frac{40+30}{100} = 0.7$(D 错)。

第20题(多选)

在设计大模型训练并行策略时,通常采用 3D 混合并行策略(TP + PP + DP)。这样设计的主要原因包括?

A. 提高扩展性 B. 减少单一并行方式的通信瓶颈 C. 充分利用多节点 GPU D. 自动减少模型参数

答案:A, B, C

考点:大模型——分布式训练

张量并行、流水线并行、数据并行结合可提高扩展性(A 对)、缓解单一并行方式的通信瓶颈(B 对)、充分利用多节点多 GPU 资源(C 对)。并行策略只改变计算与存储的切分方式,不会减少模型参数量(D 错)。


第 1 题:自动驾驶障碍物检测

题目描述

在自动驾驶感知系统中,激光雷达扫描周围环境生成大量 3D 点云数据,每个点包含 $(x, y, z)$ 三个空间坐标。为识别障碍物,需要对点云数据做 K-Means 聚类。

给定 $N$ 个三维点和簇数 $K$,实现 K-Means 聚类算法,满足以下规则:

  1. 初始质心:取输入数据的前 $K$ 个点作为初始质心,编号 $0$ 到 $K-1$
  2. 距离度量:使用 3D 欧氏距离
  3. 收敛条件:所有质心坐标变化量均小于 $10^{-6}$,或迭代次数达到 $100$ 次时停止
  4. 编号保持:簇编号与初始质心对应关系保持一致
  5. 确定性规则:当一个点到多个质心距离完全相等时,选择编号最小的簇

样例

输入

3 2
0.0 0.0 0.0
0.0 1.0 1.0
1.0 1.0 0.0

输出

0
1
0

思路分析

第一步:观察题目性质

这是一道标准 K-Means 聚类的模拟实现题。所有”不确定性”都被题目钉死了:初始质心固定取前 $K$ 个点、平局取最小编号、收敛阈值和最大迭代次数都给定,因此结果唯一。

第二步:算法流程

K-Means 交替执行两步直到收敛:

  • 分配步:对每个点计算它到各质心的距离,归入距离最近的簇
  • 更新步:每个簇的新质心取簇内所有点坐标的均值

第三步:实现要点

  • 比较平方距离与比较距离本身等价(开方是单调变换),省去开方更稳更快
  • np.argmin 在多个最小值相等时返回首个最小下标,天然满足”编号最小”规则
  • 若某簇当前无成员(空簇),保持其质心不变,避免除零

第四步:维度变化

点云为 $(N, 3)$,质心为 $(K, 3)$;广播相减得 $(N, K, 3)$ 的差值张量,沿坐标轴求平方和得 $(N, K)$ 距离矩阵,再沿质心轴取 argmin 得长度 $N$ 的标签向量。

题解代码

import sys
import numpy as np

data = sys.stdin.read().split()
pos = 0
n = int(data[pos]); pos += 1
k = int(data[pos]); pos += 1
pts = np.array(data[pos:pos + 3 * n], dtype=float).reshape(n, 3)

centroids = pts[:k].copy()
labels = np.zeros(n, dtype=int)
for _ in range(100):
    dist2 = ((pts[:, None, :] - centroids[None, :, :]) ** 2).sum(axis=2)
    labels = np.argmin(dist2, axis=1)
    new_centroids = centroids.copy()
    for c in range(k):
        members = pts[labels == c]
        if len(members) > 0:
            new_centroids[c] = members.mean(axis=0)
    if np.max(np.abs(new_centroids - centroids)) < 1e-6:
        break
    centroids = new_centroids

print("\n".join(str(int(c)) for c in labels))

复杂度分析

时间复杂度:$O(T \cdot N \cdot K)$,其中 $T$ 为迭代轮数(上限 100),每轮对 $N$ 个点各算 $K$ 个常数维距离

空间复杂度:$O(N \cdot K)$,主要是每轮的距离矩阵


第 2 题:Expert Choice Routing

题目描述

混合专家模型(MoE)中,Expert Choice Routing 让每个专家主动选择得分最高的 Top-$S$ 个 Token,保持天然的负载均衡。要求不调用深度学习库,仅用 NumPy 实现以下四步:

  1. 门控分数与归一化权重:计算 $G = X \cdot W_g$,对每个 token 在专家维度上做数值稳定 softmax
  2. 每个专家选 Top-S:按归一化权重选最高的 $S$ 个 token,权重相等时优先序号小的
  3. 专家变换与加权聚合:被选中的 token 做对应专家的线性变换并以权重加权累加
  4. 零向量补全:未被任何专家选中的 token 输出为全零向量

输入约束:$N, d, E, S$ 须均为正整数且 $S \leq N$,否则只输出一个 $0$。

样例

输入

4 3 2 3
1.0 0.5 0.2
0.8 0.3 0.9
0.2 0.7 0.4
0.5 0.1 0.6
0.3 0.7
0.5 0.2
0.2 0.1
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
0.5 0.0 0.0
0.0 0.5 0.0
0.0 0.0 0.5

输出

0.28 0.14 0.06
0.59 0.22 0.66
0.11 0.38 0.22
0.37 0.07 0.44

思路分析

第一步:观察题目性质

本题是一道矩阵运算模拟题,不涉及训练,只需照定义完成一次前向路由。所有比较的平局规则都钉死了,结果唯一。

第二步:数值稳定 Softmax

计算 $G = X \cdot W_g$ 得到 $(N, E)$ 的分数矩阵后,对每个 token 在专家维度上做 softmax。关键是减去行最大值:$\exp(g_{ie} - \max_j g_{ij})$,避免指数运算上溢为 inf。

第三步:每个专家选 Top-S

对专家 $e$,取其权重列中值最大的 $S$ 个 token。按 $(-\text{weight}, \text{index})$ 排序后取前 $S$ 个,即可在权重降序的同时让”权重相等取序号小”自动成立。

第四步:加权聚合

若 token $i$ 被专家集合 $\mathcal{E}_i$ 选中,则输出为:

$$Y_i = \sum_{e \in \mathcal{E}_i} W_{ie} \cdot (X_i \cdot W_e)$$

把输出矩阵 $Y$ 初始化为全零,没被任何专家选中的 token 自然保持零向量。

第五步:合法性校验

进入计算流程前先检查 $N, d, E, S$ 是否均为正整数且 $S \leq N$,不满足则直接输出 $0$。

题解代码

import sys
import numpy as np

def fmt2(v):
    s = f"{v:.2f}"
    return "0.00" if s == "-0.00" else s

data = sys.stdin.read().split()
n = int(data[0]); d = int(data[1]); e = int(data[2]); s = int(data[3])
if n < 1 or d < 1 or e < 1 or s < 1 or s > n:
    print("0")
    sys.exit(0)

pos = 4
X = np.array(data[pos:pos + n * d], dtype=float).reshape(n, d); pos += n * d
Wg = np.array(data[pos:pos + d * e], dtype=float).reshape(d, e); pos += d * e
We = []
for _ in range(e):
    We.append(np.array(data[pos:pos + d * d], dtype=float).reshape(d, d))
    pos += d * d

scores = X @ Wg
m = scores.max(axis=1, keepdims=True)
expv = np.exp(scores - m)
W = expv / expv.sum(axis=1, keepdims=True)

Y = np.zeros((n, d))
for ee in range(e):
    col = W[:, ee]
    chosen = sorted(range(n), key=lambda i: (-col[i], i))[:s]
    for i in chosen:
        Y[i] += col[i] * (X[i] @ We[ee])

print("\n".join(" ".join(fmt2(v) for v in row) for row in Y))

复杂度分析

时间复杂度:$O(N \cdot d \cdot E + E \cdot S \cdot d^2)$,门控分数 $O(N \cdot d \cdot E)$,聚合阶段共 $E \cdot S$ 次 token 变换、每次 $O(d^2)$

空间复杂度:$O(N \cdot E + E \cdot d^2)$,分别存储权重矩阵和所有专家变换矩阵


小结

  • 第一题是标准 K-Means 模板,核心在于利用 NumPy 广播一次性算出距离矩阵,argmin 天然处理平局规则
  • 第二题是 MoE 前向路由的完整模拟,虽然流程长但每一步都是确定性的矩阵运算,关键是数值稳定 softmax(减行最大值)和排序选 Top-S 的平局处理