大厂真题 / 华为

华为 5.9 笔试真题 - AI岗

本场考试概述

考试时间:2026年5月9日 考试岗位:AI 算法工程师 / AI 应用开发 / AI 数据科学(统一笔试) 难度评级:中等偏上

考点分析

  1. 选择题(20道):大模型推理优化(KV-Cache、Prefill/Decode、Attention 显存)、PEFT(Prompt Tuning)、PPO/RLHF、量化部署、PCA、逻辑回归、贝叶斯网络
  2. 第一题:5G 基站设备故障风险预警 · 逻辑回归 + 批量梯度下降(难度中等)
  3. 第二题:多头注意力掩码计算 · 因果掩码 + Padding 掩码 + 位置惩罚 + Safe Softmax(难度中等)

建议策略

  1. 选择题大头是大模型推理(KV-Cache、PagedAttention、Prefill/Decode)和 RLHF/SFT,提前过一遍 Transformer 推理优化的高频考点
  2. 第一题完全按题目给的公式模拟,注意”批量梯度下降”必须一轮统一更新,不能边遍历边更新
  3. 第二题逻辑虽多但每步都给了明确公式,关键是用 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),从零开始训练一个故障预警模型,并预测新基站的故障概率。

模型公式与更新规则:

  1. 预测函数:$\hat{y} = \sigma(w \cdot x + b)$,其中 $\sigma(z) = 1/(1+e^{-z})$
  2. 参数初始化:$w = [0, 0]$,$b = 0$
  3. 梯度计算:基于全体 $N$ 个样本计算平均梯度 $dw = \frac{1}{N} X^T(\hat{y} - y)$,$db = \frac{1}{N}\sum(\hat{y} - y)$
  4. 参数更新:$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)$,存储所有矩阵。


小结

  1. 选择题:本场选择题重点考察大模型推理优化(KV-Cache、PagedAttention、Prefill/Decode 分阶段)、RLHF(PPO clipping)、PEFT(Prompt Tuning),以及 ML 基础(逻辑回归、PCA、贝叶斯网络)。建议系统复习 Transformer 推理加速和 RLHF 流程。
  2. 第一题(逻辑回归 BGD):纯公式模拟题,核心陷阱在于”批量梯度下降”必须一轮统一更新,不能边遍历边改参数。Safe sigmoid 分段实现避免数值溢出。
  3. 第二题(多头注意力掩码):逻辑链较长但每步都有明确公式。用 NumPy 广播一次性构造因果+Padding 双重掩码,$-\infty$ 占位让 softmax 自然屏蔽无效位置,Safe Softmax 减行最大值防溢出。