大厂真题 / 华为
华为 5.9 笔试真题 - AI岗
本场考试概述
考试时间:2026年5月9日 考试岗位:AI 算法工程师 / AI 应用开发 / AI 数据科学(统一笔试) 难度评级:中等偏上
考点分析:
- 选择题(20道):大模型推理优化(KV-Cache、Prefill/Decode、Attention 显存)、PEFT(Prompt Tuning)、PPO/RLHF、量化部署、PCA、逻辑回归、贝叶斯网络
- 第一题:5G 基站设备故障风险预警 · 逻辑回归 + 批量梯度下降(难度中等)
- 第二题:多头注意力掩码计算 · 因果掩码 + Padding 掩码 + 位置惩罚 + Safe Softmax(难度中等)
建议策略:
- 选择题大头是大模型推理(KV-Cache、PagedAttention、Prefill/Decode)和 RLHF/SFT,提前过一遍 Transformer 推理优化的高频考点
- 第一题完全按题目给的公式模拟,注意”批量梯度下降”必须一轮统一更新,不能边遍历边更新
- 第二题逻辑虽多但每步都给了明确公式,关键是用 NumPy 广播构造 mask 矩阵;softmax 必须减最大值防溢出
选择题(20道)
第1题
逻辑回归的决策边界是:
A. 一条 S 形曲线 B. 特征空间中的超平面 C. 以原点为圆心的超球面 D. 由核函数决定的非线性曲面
答案:B
考点:机器学习——逻辑回归
逻辑回归用 sigmoid 输出概率,分类边界对应 $w^T x + b = 0$,是特征空间中的超平面。A 是 sigmoid 函数本身的形状不是决策边界;C 是高斯核分类器的特性;D 是核 SVM 等方法。
第2题
当 CUDA 内核因寄存器压力过大导致寄存器溢出时,溢出的数据会被存储到哪种内存中?
A. L1 缓存 B. 局部内存(Local Memory,由全局内存物理支持) C. 常量内存 D. 共享内存
答案:B
考点:算法——GPU 体系结构
寄存器溢出后变量被放到 local memory,物理上位于 global memory(虽然名字叫”局部”)。A 仅是缓存层,不是溢出目标存储;C 用于只读常量,编译期静态分配;D 由 kernel 显式声明分配,与寄存器溢出无关。
第3题
采用固定页管理 KV-Cache(页大小固定)在显存碎片严重的场景下,最直接的好处是:
A. 减少小对象频繁分配导致的碎片与分配开销 B. 减少碎片对齐误差,提高数值精度 C. 降低显存访问的带宽压力(通过页对齐减少随机小块访问) D. 降低小对象的内存访问延迟(通过页内局部性优化)
答案:A
考点:大模型——推理优化
固定页(PagedAttention)复用统一大小的内存块,直接降低碎片化和频繁分配开销。B 与数值精度无关;C 主要靠合并访问而非分页;D 局部性优化是次要收益。
第4题
在长文本生成模型中,关于温度(Temperature)系数下面说法正确的是?
A. 初始温度低,随长度递增逐渐增高 B. 保持温度不变,保证变化量一致 C. 初始温度高,随长度递增逐渐降低 D. 每 1000 Token 随机设置温度
答案:A
考点:大模型——生成策略
长文本生成中可逐步提高温度,增加后续生成的多样性,缓解重复和退化。B 无法适应长文本退化问题;C 方向相反,越靠后越确定反而更易陷入重复;D 随机温度无明确目标,不利于稳定生成。
第5题
关于 Decoder-only,下列哪一项说法是错误的?
A. 常用于文本续写和对话生成 B. 输入提示和输出文本常被组织为同一连续序列 C. 必须包含独立编码器才能生成输出 D. 常见训练思路是根据已有上下文继续预测后续 token
答案:C
考点:大模型——Transformer 架构
Decoder-only 模型(GPT 系列)没有独立 Encoder,仅靠自回归预测后续 token。A、B、D 都是 Decoder-only 的标准特性。
第6题
在 PPO 中使用截断代理目标函数(clipped surrogate objective)的主要目的是什么?
A. 使策略梯度估计保持无偏性 B. 消除价值函数估计带来的偏差 C. 保证每次策略更新都严格满足 KL 散度约束 D. 限制策略更新幅度,防止因更新过大导致训练不稳定
答案:D
考点:大模型——RLHF
PPO 的 clipping 机制把概率比 $r_t(\theta)$ 截断在 $[1-\varepsilon, 1+\varepsilon]$ 内,约束新旧策略差异,提升训练稳定性。A 截断会引入偏差;B 与 critic 无关;C clip 只是软约束,不严格满足 KL。
第7题
关于 Prompt Tuning(或 Prefix Tuning)的描述,正确的是?
A. 微调整个预训练模型的全部参数 B. 对模型进行知识蒸馏 C. 完全冻结模型参数,仅调整输出层 D. 在输入前添加可学习的连续向量,仅更新这些向量的参数
答案:D
考点:大模型——LoRA/PEFT
Prompt/Prefix Tuning 冻结大模型参数,只训练额外的可学习软提示(soft prompt)向量。A 是 Full Fine-tuning;B 是另一种方法;C 是 Linear Probing。
第8题
梯度爆炸问题通常与权重矩阵的什么性质相关?
A. 特征值过大 B. 行列式为 0 C. 秩为 1 D. 非对称性
答案:A
考点:深度学习——训练稳定性
反向传播中多次矩阵相乘 $\prod W_l$,若特征值(谱半径)大于 1,梯度可能指数级放大。B 行列式为 0 是奇异不可逆,导致梯度消失或秩亏;C 秩为 1 反而会丢失信息;D 与梯度幅值无直接关系。
第9题
设样本 $x_1, …, x_n$ 来自二项分布 $B(n, p)$($n$ 已知,$p$ 未知),则 $p$ 的最大似然估计值为?
A. $\bar{x}$ B. $\bar{x} / n^2$ C. $\bar{x} / n$ D. $n / \bar{x}$
答案:C
考点:数学——概率论/MLE
二项分布有 $E[X] = np$,对似然函数 $L(p) = \prod C_n^{x_i} p^{x_i}(1-p)^{n-x_i}$ 求导并令其为零,得 $\hat{p} = \bar{x}/n$。
第10题
标准自注意力机制的注意力打分矩阵大小为 $O(n^2)$。将上下文窗口从 4096(4K)暴力扩展到 32768(32K),打分矩阵所占显存理论上膨胀多少倍?
A. 512 倍 B. 64 倍 C. 8 倍 D. 16 倍
答案:B
考点:大模型——注意力机制
注意力矩阵大小为 $n^2$,序列长度从 4K 扩到 32K,长度比为 8,矩阵元素数量比为 $8^2 = 64$ 倍。
第11题
在 Transformer 的标准缩放点积注意力中,为什么要除以 $\sqrt{d_k}$?
A. 降低计算复杂度 B. 避免点积结果过大导致 Softmax 进入饱和区,梯度极小 C. 对查询和键向量的模长进行归一化 D. 防止梯度消失,使训练更加稳定
答案:B
考点:大模型——注意力机制
当 $d_k$ 较大时,$Q \cdot K^T$ 的方差为 $d_k$,值过大会让 softmax 进入饱和区,梯度近 0。除以 $\sqrt{d_k}$ 把方差归一化为 1。A 计算复杂度无变化;C 仅做缩放不是模长归一化;D 描述方向反了——是防止梯度过小(饱和)。
第12题
PCA 降维:数据矩阵 $X \in \mathbb{R}^{n \times d}$,投影矩阵 $W \in \mathbb{R}^{d \times k}$,降维后 $Z = XW \in \mathbb{R}^{n \times k}$,重构矩阵 $\hat{X} = ZW^T$,则 $\hat{X}$ 的维度是?
A. $n \times k$ B. $n \times d$ C. $d \times d$ D. $k \times d$
答案:B
考点:数学——线性代数/PCA
$Z \in \mathbb{R}^{n \times k}$,再乘 $W^T \in \mathbb{R}^{k \times d}$,得 $\hat{X} \in \mathbb{R}^{n \times d}$,恢复为原始维度。
第13题
某电商平台逻辑回归模型,回归斜率 1.5,截距 $-15$。某用户停留 10 分钟,是潜在用户的概率是?
A. 0.4 B. 0.5 C. 1 D. 0.9
答案:B
考点:机器学习——逻辑回归
$z = 1.5 \times 10 + (-15) = 0$,$\text{sigmoid}(0) = 0.5$。
第14题
某模型经过 SFT 后,出现了”过度道歉”现象(如频繁说”抱歉,作为一个 AI 助手…“)。最可能的原因是什么?
A. 训练时使用了混合精度(FP16),导致数值精度损失 B. SFT 的学习率设置过高,导致模型参数更新过度 C. 模型的参数量太小,无法承载复杂的指令遵循能力 D. 训练数据中包含大量安全审核后的样本,模型学习到了保守的回答风格
答案:D
考点:大模型——SFT
SFT 模型行为来自训练数据分布,含大量安全审核样本会让模型拟合保守回复风格。A 数值精度问题不会引起特定语言模式;B 学习率过高表现为发散或混乱输出,不是统一的道歉模式;C 小模型可能能力不足但不必然过度道歉。
第15题
贝叶斯网络中,链式结构 $A \to B \to C$,在 $B$ 已被观测(给定)时,$A$ 与 $C$ 的关系是?
A. $A$ 与 $C$ 完全相关 B. $A$ 与 $C$ 条件独立(给定 $B$) C. $A$ 与 $C$ 边缘独立 D. $A$ 与 $C$ 的关系与 $B$ 是否被观测无关
答案:B
考点:数学——概率论/贝叶斯网络
链式结构中 $B$ 被观测后,按 d-separation 规则阻塞 $A$ 到 $C$ 的信息通路,故 $A \perp C \mid B$。A 不观测 $B$ 时 $A$ 和 $C$ 通过 $B$ 间接相关;C 边缘上 $A$ 与 $C$ 通过 $B$ 仍相关;D 错误,$B$ 是否观测决定了独立性。
第16题(多选)
关于 KV 缓存机制在大模型推理中的作用,以下说法正确的有:
A. 使用 KV 缓存后,自注意力计算复杂度从 $O(n^2)$ 降低到 $O(n)$ B. KV 缓存存储的是历史 token 的 Key 和 Value 向量 C. Query 向量不会被缓存,因为每个新 token 的 Query 需要重新计算 D. KV 缓存的大小与序列长度、批大小、层数、头数成正比
答案:A、B、C、D
考点:大模型——推理优化
- A 正确:每生成一个新 token 只需对 1 个 Q 与所有历史 K/V 做点积,单步复杂度从 $O(n^2)$ 降到 $O(n)$
- B 正确:缓存的内容就是历史 token 的 Key 和 Value 投影向量
- C 正确:当前位置的 Query 是即时计算的,不需要也不会被缓存
- D 正确:KV 缓存总量为 $2 \times \text{layers} \times \text{heads} \times n \times d_k$,与这些维度均成正比
第17题(多选)
对于数据集 ${3, 3, 4, 5, 7, 8}$,以下描述正确的是?
A. 中位数为 5 B. 方差为 $\frac{10}{3}$ C. 平均数为 5 D. 众数为 3
答案:B、C、D
考点:数学——统计
- A 错误:排序后为 ${3, 3, 4, 5, 7, 8}$,偶数个数据中位数为 $(4+5)/2 = 4.5 \neq 5$
- B 正确:均值 5,方差 $= [(3-5)^2 \times 2 + (4-5)^2 + (5-5)^2 + (7-5)^2 + (8-5)^2] / 6 = 20/6 = 10/3$
- C 正确:$(3+3+4+5+7+8)/6 = 30/6 = 5$
- D 正确:3 出现 2 次,是出现次数最多的值
第18题(多选)
关于特征处理与选择,下列说法中正确的有:
A. 嵌入式方法(如 Lasso)通过 $L_1$ 正则实现特征选择;与之相比,过滤式方法完全不考虑特征间的组合效应 B. 在使用 PCA 降维前必须先进行标准化,因为 PCA 寻找最大方差方向,不缩放会偏向量纲大的变量 C. Permutation Importance 处理强相关特征组时往往低估单个特征重要性,因为洗牌一个特征后模型仍能从冗余特征获取信息 D. 特征哈希虽能处理高基数类别特征,但哈希冲突本质上等于给特征引入不可控的加性噪声
答案:A、B、C、D
考点:机器学习——特征工程
四项均正确:A Lasso 嵌入式选择 vs 过滤式逐特征独立打分;B PCA 对方差敏感必须标准化;C 共线特征互补导致重要性被低估;D 哈希冲突让多特征映射到同一桶,等价于加性噪声。
第19题(多选)
在 INT8 量化部署中,以下哪些因素会影响量化后模型的精度?
A. 校准集分布是否接近真实数据 B. 激活范围统计是否稳定 C. 是否存在离群值导致 scale 不合理 D. 是否使用了浮点数进行训练
答案:A、B、C
考点:大模型——量化部署
- A 正确:校准集决定 scale/zero-point 的统计估计,分布偏离真实数据会让量化参数失真
- B 正确:激活动态范围统计不稳会让 scale 估计偏差大,导致截断或精度损失
- C 正确:少数离群值会拉大 scale,使绝大多数正常值落在很少的量化等级里
- D 错误:浮点数训练是 INT8 部署的前提,它本身不属于”影响量化精度”的因素
第20题(多选)
关于模型推理中 Prefill 和 Decode 阶段的区别,下列说法正确的有:
A. Prefill 阶段计算并缓存 KVCache,Decode 阶段复用 KVCache,仅新增计算当前 token 的 K/V B. Prefill 一次性处理所有输入 token,Decode 阶段逐 token 处理 C. Prefill 仅存在于生成式模型推理,Decode 阶段存在于所有模型推理 D. Prefill 耗时与输入 token 数量正相关,Decode 阶段耗时与生成 token 数量正相关
答案:A、B、D
考点:大模型——推理优化
- A 正确:Prefill 一次性把 prompt 全部 K/V 算出并缓存;Decode 每步只算当前 token 的 K/V 并追加
- B 正确:Prefill 是并行处理整段输入,Decode 是自回归逐 token 生成
- C 错误:Decode(逐 token 自回归)只存在于生成式模型,非生成模型(如 BERT 编码器)没有 Decode 阶段
- D 正确:Prefill 是 compute-bound,耗时随输入长度线性增长;Decode 是 memory-bound,耗时随生成 token 数线性增长
第一题:5G基站设备故障风险预警
题目描述
通信工程师需要对部署在户外的 5G 基站进行实时健康监控。现收集到一批基站的历史运行数据,包含两个关键指标:设备工作温度(特征 $x_1$)和天线负载系数(特征 $x_2$),以及该基站是否发生故障的标签 $y$(1 表示故障,0 表示正常)。
使用逻辑回归(Logistic Regression)结合批量梯度下降法(Batch Gradient Descent),从零开始训练一个故障预警模型,并预测新基站的故障概率。
模型公式与更新规则:
- 预测函数:$\hat{y} = \sigma(w \cdot x + b)$,其中 $\sigma(z) = 1/(1+e^{-z})$
- 参数初始化:$w = [0, 0]$,$b = 0$
- 梯度计算:基于全体 $N$ 个样本计算平均梯度 $dw = \frac{1}{N} X^T(\hat{y} - y)$,$db = \frac{1}{N}\sum(\hat{y} - y)$
- 参数更新:$w \leftarrow w - \alpha \cdot dw$,$b \leftarrow b - \alpha \cdot db$
迭代指定次数后输出新样本的预测故障概率,保留 4 位小数。
输入:第一行 $N$、迭代次数 $\text{epochs}$ 和学习率 $\alpha$。第 2 到第 $N+1$ 行每行三个数值 $x_1, x_2, y$。最后一行待预测样本的两个特征。
样例
输入
2 1 0.1
1.0 2.0 1
-1.0 -2.0 0
0.5 1.0
输出
0.5312
思路分析
第一步:理解逻辑回归模型
逻辑回归先算线性打分 $z = w \cdot x + b$,再用 sigmoid 压成概率 $p = \sigma(z)$。这里的任务就是按照题目给定的公式迭代更新参数。
第二步:梯度推导
对二元交叉熵 $L = -[y\log p + (1-y)\log(1-p)]$ 链式求导,利用 $\sigma’(z) = \sigma(z)(1-\sigma(z))$ 化简后得到题目给的”误差乘特征”形式:$\nabla_w L = (\hat{y} - y) \cdot x$。
第三步:批量更新的关键陷阱
每一轮必须先用同一组 $w, b$ 把全部样本的预测和梯度算完,再统一更新一次。如果边遍历边更新会退化为 SGD,结果与标答不符。
第四步:数值稳定的 Safe Sigmoid
当 $z$ 为大负数时 $e^{-z}$ 会上溢成 inf。分两种情况实现:$z \geq 0$ 时用 $1/(1+e^{-z})$,$z < 0$ 时用 $e^z/(1+e^z)$,让指数项的指数恒为非正。
题解代码
import sys
import numpy as np
input = sys.stdin.readline
def sigmoid(z):
z = np.asarray(z, dtype=np.float64)
return np.where(
z >= 0.0,
1.0 / (1.0 + np.exp(-z)),
np.exp(z) / (1.0 + np.exp(z))
)
def solve():
first_line = input().split()
n, epochs = int(first_line[0]), int(first_line[1])
alpha = float(first_line[2])
samples = []
for _ in range(n):
parts = input().split()
samples.append((float(parts[0]), float(parts[1]), int(parts[2])))
query = list(map(float, input().split()))
data = np.array(samples, dtype=np.float64)
x = data[:, :2]
y = data[:, 2]
w = np.zeros(2, dtype=np.float64)
b = 0.0
for _ in range(epochs):
pred = sigmoid(x @ w + b)
diff = pred - y
dw = (x.T @ diff) / n
db = float(np.mean(diff))
w -= alpha * dw
b -= alpha * db
query = np.array(query, dtype=np.float64)
prob = float(sigmoid(query @ w + b))
print(f"{prob:.4f}")
solve()
复杂度分析
时间复杂度:$O(\text{epochs} \times N \times d)$,每轮对 $N$ 个样本做 $d$ 维向量运算。 空间复杂度:$O(N \times d)$,存储数据矩阵。
第二题:多头注意力掩码计算
题目描述
将多个不同长度的句子打包成 Batch 计算注意力时,需要同时处理:
- Batch + Padding:短句子后面补 0,需要忽略 padding 位置
- 因果掩码:第 $i$ 个 token 只能看自己和过去($j \leq i$)
- 位置惩罚:第 $h$ 个头(从 0 起)的斜率 $\text{slope} = h + 1$,对未被掩码的位置减去 $\text{slope} \times (i - j)$,让不同头看不同距离
- Safe Softmax:行内归一化时需先减最大值防溢出
给定 $B$ 个 $S \times S$ 的得分矩阵(按 batch $\times$ head 顺序输入)和每个 batch 的有效长度 $L_b$,输出处理后的注意力权重张量。
输入:第一行 $B$, $H$, $S$。第二行 $B$ 个有效长度。接下来 $B \times H$ 个 $S \times S$ 矩阵(每行 $S$ 个浮点数)。
样例
输入
2 2 2
2 1
10.0 10.0
10.0 10.0
10.0 10.0
10.0 10.0
5.0 5.0
5.0 5.0
5.0 5.0
5.0 5.0
输出
1.0000 0.0000
0.2689 0.7311
1.0000 0.0000
0.1192 0.8808
1.0000 0.0000
0.0000 0.0000
1.0000 0.0000
0.0000 0.0000
思路分析
第一步:构造双重掩码
合并因果约束($j \leq i$)和 Padding 约束($i < L$ 且 $j < L$)。位置 $(i, j)$ 有效当且仅当三个条件同时满足。当 $i \geq L$ 时整行无效,对应输出全 0。
第二步:位置惩罚(ALiBi 风格)
第 $h$ 个头的斜率为 $h + 1$,对得分减去随距离线性增长的偏置:$\text{score}[i][j] -= \text{slope} \times (i - j)$。低编号头看远处惩罚小,高编号头聚焦邻近 token。
第三步:Safe Softmax
每行减最大值再 exp,保证指数项 $\leq 1$ 不溢出。把无效位置得分置为 $-\infty$,让其在 softmax 中自然消失为 0,无需逐位置 if-else。
第四步:处理全无效行
整行无效($i \geq L$)的行保留全 0 输出,跳过归一化以防除以 0。
题解代码
import sys
import numpy as np
def process_matrix(matrix, length, head_index, size):
result = np.zeros((size, size), dtype=np.float64)
if length <= 0:
return result
slope = head_index + 1
row = np.arange(size).reshape(size, 1)
col = np.arange(size).reshape(1, size)
mask = (row < length) & (col < length) & (col <= row)
adjusted = matrix - (row - col) * slope
masked = np.where(mask, adjusted, -np.inf)
valid_rows = np.arange(size) < length
part = masked[valid_rows]
max_value = np.max(part, axis=1, keepdims=True)
exp_values = np.exp(part - max_value)
exp_values = np.where(mask[valid_rows], exp_values, 0.0)
result[valid_rows] = exp_values / np.sum(exp_values, axis=1, keepdims=True)
return result
def solve():
data = sys.stdin.buffer.read().split()
idx = 0
batch_count = int(data[idx]); head_count = int(data[idx + 1]); size = int(data[idx + 2])
idx += 3
lengths = [int(data[idx + i]) for i in range(batch_count)]
idx += batch_count
matrices = []
for _ in range(batch_count * head_count):
values = [float(data[idx + i]) for i in range(size * size)]
idx += size * size
matrices.append(np.array(values, dtype=np.float64).reshape(size, size))
answer = []
index = 0
for b in range(batch_count):
for h in range(head_count):
answer.extend(process_matrix(matrices[index], lengths[b], h, size))
index += 1
print("\n".join(" ".join(f"{x:.4f}" for x in row) for row in answer))
solve()
复杂度分析
时间复杂度:$O(B \times H \times S^2)$,对每个矩阵做掩码与 softmax。 空间复杂度:$O(B \times H \times S^2)$,存储所有矩阵。
小结
- 选择题:本场选择题重点考察大模型推理优化(KV-Cache、PagedAttention、Prefill/Decode 分阶段)、RLHF(PPO clipping)、PEFT(Prompt Tuning),以及 ML 基础(逻辑回归、PCA、贝叶斯网络)。建议系统复习 Transformer 推理加速和 RLHF 流程。
- 第一题(逻辑回归 BGD):纯公式模拟题,核心陷阱在于”批量梯度下降”必须一轮统一更新,不能边遍历边改参数。Safe sigmoid 分段实现避免数值溢出。
- 第二题(多头注意力掩码):逻辑链较长但每步都有明确公式。用 NumPy 广播一次性构造因果+Padding 双重掩码,$-\infty$ 占位让 softmax 自然屏蔽无效位置,Safe Softmax 减行最大值防溢出。