大厂真题 / 华为
华为 6.3 笔试真题 - AI岗
本场考试概述
考试时间:2026年6月3日 考试岗位:华为暑期实习 AI 岗(AI算法、AI应用开发、AI数据科学等) 难度评级:中等
考点分析:
- 选择题(20道):大模型(CUDA双缓冲、KV Cache范德蒙德条件数、量化目的、MoE激活FLOP、Agent记忆机制)、深度学习(Dead ReLU、Adam偏置校正、Transformer vs RNN、交叉熵配Softmax、Focal Loss、RNN长序列梯度)、数学(牛顿迭代、朴素贝叶斯后验、期望、指数分布无记忆性、截断与舍入误差)、机器学习(数据质量维度、DBSCAN/K-Means/PCA/t-SNE)
- 第一题:智能物流定价引擎——在线最小二乘回归 + 增量统计量维护(难度中等)
- 第二题:回归任务反向传播机理——三层MLP前向 + 反向传播 + 梯度下降(难度中等偏上)
建议策略:
- AI岗选择题分值权重大(单选 15×6 + 多选 5×12 = 150 分),优先把 ML/DL/大模型基础概念刷透;本场多选集中在激活函数选择、数值误差、数据质量、聚类降维、大模型计算量
- 第一题识别”在线维护 + 最小二乘”立刻上增量统计量四件套($S_x, S_y, S_{xx}, S_{xy}$)做 $O(1)$ 查询;坑在退化判定(所有 $x$ 相同时解不唯一,改用常数模型取 $y$ 均值)和大数值下溢出需先转浮点
- 第二题是反向传播模板题,照公式实现前向 + 反向 + 一步梯度下降即可;关键是 ReLU 导数在 $z=0$ 处取 0(用严格 $z > 0$),前向被关闭的神经元梯度恒为 0 本步不更新
选择题(20道)
第1题
CUDA 中的双缓冲(Double Buffering)技术主要用于解决什么问题?
A. 减少显存占用 B. 掩盖访存延迟(Hide Latency) C. 避免死锁 D. 提高计算精度
答案:B
考点:大模型——CUDA并行优化
双缓冲用两块缓冲区交替读写,让数据搬运(访存)与计算重叠进行,从而掩盖访存延迟。它不减少显存占用(反而多占一块缓冲),与死锁、计算精度无关。
第2题
考虑一个深层神经网络,所有隐藏层都使用 ReLU 激活函数。在训练过程中,发现某些神经元的输出始终为 0,且梯度也为 0,这种现象被称为?
A. 梯度消失 B. 神经元死亡 C. 梯度爆炸 D. 过拟合
答案:B
考点:深度学习——激活函数
ReLU 在输入为负时输出恒为 0 且导数为 0,一旦某神经元落入该区域便无法再更新权重,称为”神经元死亡”(Dead ReLU)。梯度消失是整体梯度逐层衰减,与单个神经元彻底失活不同。
第3题
在某些算子融合优化的底层实现中,需要通过迭代法快速计算平方根。设目标是求 $\sqrt{a}$ 的近似值,将其转化为求函数 $f(x) = x^2 - a$ 的正根。若使用牛顿迭代法,且选取初始点 $x_0$,则单次迭代后的值 $x_1$ 为?
A. $\frac{1}{2}(x_0 + \frac{a}{x_0})$ B. $x_0 - \frac{a}{2x_0}$ C. $\frac{x_0}{2} + a$ D. $x_0 - \frac{x_0^2}{2a}$
答案:A
考点:数学——数值计算(牛顿迭代)
牛顿迭代公式 $x_1 = x_0 - \frac{f(x_0)}{f’(x_0)}$,其中 $f(x) = x^2 - a$,$f’(x) = 2x$。代入得 $x_1 = x_0 - \frac{x_0^2 - a}{2x_0} = \frac{1}{2}(x_0 + \frac{a}{x_0})$。
第4题
在一个垃圾文本自动过滤系统中,基于朴素贝叶斯模型,系统提取了文本中的两个特征词 $w_1$ 和 $w_2$。已知 $P(\text{spam}) = 0.3$,垃圾文本中包含 $w_1$ 的概率为 0.8,包含 $w_2$ 的概率为 0.6;正常文本中包含 $w_1$ 的概率为 0.1,包含 $w_2$ 的概率为 0.2。假设特征在类条件独立,一段同时包含 $w_1$ 和 $w_2$ 的文本是垃圾文本的概率最接近?
A. 0.75 B. 0.85 C. 0.90 D. 0.91
答案:D
考点:机器学习——朴素贝叶斯
垃圾联合得分 $0.3 \times 0.8 \times 0.6 = 0.144$,正常联合得分 $0.7 \times 0.1 \times 0.2 = 0.014$。后验 $\frac{0.144}{0.144 + 0.014} \approx 0.911$,最接近 0.91。
第5题
关于 Adam 中偏置校正(bias correction)的作用,下列说法最准确的是哪一项?
A. 用于防止梯度爆炸,因此可以替代梯度裁剪 B. 用于修正一阶矩和二阶矩在训练初期因初始化为 0 而产生的估计偏小问题 C. 用于让 Adam 退化成 SGD,从而提高泛化能力 D. 用于减少模型参数数量,提高推理速度
答案:B
考点:深度学习——优化器
Adam 的一阶矩 $m_t$、二阶矩 $v_t$ 初始化为 0,训练初期指数滑动平均被拉向 0 使估计偏小。偏置校正 $\hat{m}_t = m_t / (1 - \beta_1^t)$、$\hat{v}_t = v_t / (1 - \beta_2^t)$ 正是为修正这一初期偏差。
第6题
以下哪项不是 Transformer 优于传统 RNN 的典型特征?
A. 推理时的单步解码时间复杂度更低 B. 更高的训练并行度 C. 更强的长距离依赖建模能力 D. 训练层数较深的模型时更好地避免梯度消失问题
答案:A
考点:深度学习——Transformer
自回归推理时 Transformer 每生成一个 token 需对已有序列做注意力,单步复杂度随序列长度增长,并不比 RNN 的 $O(1)$ 单步更低(这正是 KV Cache 要优化的痛点)。而训练并行度、长距离依赖、缓解梯度消失都是 Transformer 相对 RNN 的真实优势。
第7题
下列哪项不是量化的目的?
A. 减小模型体积 B. 提升推理吞吐量 C. 提高训练收敛速度 D. 适配移动端硬件
答案:C
考点:大模型——量化
量化将高精度权重转为低位宽整数,面向的是推理阶段的体积压缩、吞吐提升与端侧部署。训练收敛速度由优化器与学习率等决定,量化并不以加速训练收敛为目的。
第8题
在大模型 KV Cache 压缩技术中,若利用二次多项式拟合一段 Token 的 Attention Score 趋势,其范德蒙德矩阵(Vandermonde Matrix)的条件数(Condition Number)随节点增加而迅速增大,这会导致?
A. 拟合残差(Residual)变为 0 B. 硬件加速器的吞吐量线性提升 C. 自动微分失效 D. 计算结果的数值稳定性变差
答案:D
考点:数学——数值计算(条件数)
条件数刻画输入扰动被放大的程度,条件数越大问题越病态。范德蒙德矩阵条件数随节点数迅速增大,求解时浮点误差被严重放大,导致数值稳定性变差。
第9题
交叉熵损失函数通常与哪个激活函数配合使用?
A. Tanh B. Softmax C. Sigmoid D. ReLU
答案:B
考点:深度学习——损失函数
多分类交叉熵的标准搭配是 Softmax,它把输出归一化为概率分布,与交叉熵求导后梯度形式简洁为 $\hat{y} - y$。
第10题
对于类别不平衡的分类任务,哪种损失函数可以缓解不平衡问题?
A. 交叉熵损失 B. Focal Loss C. Hinge 损失 D. 均方误差
答案:B
考点:深度学习——损失函数(Focal Loss)
Focal Loss 在交叉熵前乘调制因子 $(1 - p_t)^\gamma$,降低大量易分负样本的权重,让模型聚焦于难分的少数类样本,专为类别不平衡设计。
第11题
在智能体(Agent)的记忆机制中,短期记忆用于存储当前对话上下文,长期记忆用于存储用户偏好、历史任务记录等持久化信息。某客服 Agent 在多轮对话中无法识别用户重复提出的”网络延迟”问题,下列改进方案最合理的是?
A. 将用户关于”网络延迟”的关键信息结构化存入长期记忆,并为该类条目设计基于语义检索的触发策略 B. 调整对话轮次截断策略,适当增大短期记忆窗口 C. 引入专门的”网络质量排障”工具 D. 优化提示词,在系统提示中显式强调”关注用户反复提及的问题”
答案:A
考点:大模型——Agent记忆机制
问题本质是跨多轮、跨会话的持久信息无法被复用,对应的正是长期记忆。将故障信息结构化写入长期记忆并配语义检索触发,能让 Agent 在后续对话中主动联想引用。增大短期窗口、加工具、改提示词都只在单次会话内缓解,无法持久化。
第12题
RNN 在处理长序列时的主要问题是?
A. 梯度消失/爆炸 B. 计算复杂度高 C. 内存占用大 D. 参数过多
答案:A
考点:深度学习——RNN
RNN 沿时间步反复连乘相同权重,梯度在长序列上呈指数衰减或膨胀,导致梯度消失/爆炸,这是 LSTM、GRU 乃至 Transformer 出现的根本动因。
第13题
随机变量 $X$ 的概率分布为 $P(X=1)=0.2, P(X=2)=0.5, P(X=3)=0.3$。它的期望 $E(X)$ 是?
A. 2.1 B. 2.0 C. 1.8 D. 2.5
答案:A
考点:数学——概率(期望)
期望按定义加权求和 $E(X) = 1 \times 0.2 + 2 \times 0.5 + 3 \times 0.3 = 2.1$。
第14题
某服务台处理请求的时间服从指数分布。已知处理某个请求已经花去了 10 分钟还没结束,它还需要再处理至少 5 分钟的概率,与一个全新请求需要处理至少 5 分钟的概率相比?
A. 无法比较 B. 两者相等 C. 前者大于后者 D. 前者小于后者
答案:B
考点:数学——概率(指数分布无记忆性)
指数分布具有无记忆性 $P(X > s+t \mid X > s) = P(X > t)$。已处理 10 分钟的条件不会改变剩余时间的分布,因此两者概率相等。
第15题
所谓的”死亡神经元”现象,在反向传播视角看,是指?
A. 该神经元的偏置项过大 B. 该神经元的激活函数爆炸 C. 该神经元的输出恒为 0,且无论输入如何,梯度恒为 0,权重永远不再更新 D. 该神经元的权重变成了 NaN
答案:C
考点:深度学习——激活函数(Dead ReLU)
从反向传播看,ReLU 在负区间导数为 0,一旦神经元长期落入负区间,回传梯度恒为 0,权重不再更新而”永久死亡”。
第16题(多选)
激活函数的选择需要考虑哪些因素?
A. 训练数据的特点 B. 计算资源限制 C. 网络的深度 D. 任务类型(分类/回归)
答案:B, C, D
考点:深度学习——激活函数
B 计算资源决定能否承受 Sigmoid/Tanh 的指数运算还是用廉价的 ReLU;C 网络深度影响梯度传播,深层网络偏好 ReLU 类以缓解梯度消失;D 任务类型决定输出层激活(分类用 Softmax/Sigmoid,回归用线性)。A 训练数据的分布特点主要影响预处理与归一化,并不直接决定激活函数的选择。
第17题(多选)
关于截断误差和舍入误差的区别,下列说法正确的有?
A. 截断误差是由”近似替代”产生的,舍入误差是由”有限精度运算”产生的 B. 截断误差只存在于无穷级数近似中,舍入误差只存在于小数运算中 C. 截断误差是系统性误差,舍入误差是随机性误差 D. 截断误差可以通过增加近似项数减小,舍入误差可以通过提高计算精度减小
答案:A, C, D
考点:数学——数值计算(误差分析)
A 正确,截断误差源于用有限近似代替精确数学过程,舍入误差源于有限字长。C 正确,截断误差方向通常确定属系统性,舍入误差随机抖动。D 正确,增加项数减小截断误差,提高精度减小舍入误差。B 错误,截断误差不止存在于级数(数值积分、离散化等均有),描述过于绝对。
第18题(多选)
在进行数据分析前,需要对数据质量进行评估。数据质量评估通常需要检查哪些方面?
A. 一致性(数据是否矛盾) B. 完整性(是否有缺失值) C. 准确性(数据是否正确) D. 时效性(数据是否及时更新)
答案:A, B, C, D
考点:机器学习——数据质量
一致性、完整性、准确性、时效性都是公认的数据质量核心维度,四者都需评估。
第19题(多选)
在无监督学习中,以下关于聚类和降维的描述正确的有?
A. DBSCAN 聚类算法不需要预先指定聚类数 B. K-Means 保证找到全局最优的聚类结果 C. PCA 降维后的主成分之间是相互正交的 D. t-SNE 是一种非线性降维方法,适合高维数据的可视化 E. K-Means 算法需要预先指定聚类数 K
答案:A, C, D, E
考点:机器学习——聚类与降维
A 正确,DBSCAN 基于密度自动确定簇数。C 正确,PCA 主成分是协方差矩阵的特征向量,彼此正交。D 正确,t-SNE 是非线性降维。E 正确,K-Means 必须预先给定 K。B 错误,K-Means 依赖初始化只能收敛到局部最优。
第20题(多选)
以下关于大模型计算量与参数量关系的说法,哪些正确?
A. 参数量相同的模型,MoE 架构每个 token 的实际计算量低于 Dense 模型,因为每个 token 只激活部分专家 B. 注意力层的计算量与序列长度呈 $O(n^2)$ 关系,FFN 层与呈 $O(n)$ 关系;当 $n$ 足够大时注意力计算量可超过 FFN C. 对于 Decoder-only 模型,一次完整前向传播的 FLOP 约为 $2P$($P$ 为参数量),来自每个参数参与一次乘加运算(2 FLOP) D. 模型推理时的 FLOP 与训练前向传播相同,因此推理速度是训练速度的三倍
答案:A, B, C
考点:大模型——计算量与参数量
A 正确,MoE 每个 token 仅路由到少数专家,激活 FLOP 低于同参数量 Dense。B 正确,自注意力对序列长度是 $O(n^2)$,FFN 是 $O(n)$。C 正确,每 token 前向约 $2P$ FLOP 是业界常用估计。D 错误,混淆了计算量与速度,且忽略 KV Cache、显存带宽等因素。
第 1 题:智能物流定价引擎
题目描述
你在一家同城物流平台负责运费估计引擎。平台记录历史订单,每条有运输距离 $x$ 和成交运费 $y$。系统使用一元线性回归模型 $\hat{y} = ax + b$,需要实现一个在线学习模块,支持两种操作:
ADD x y:新增一条历史样本 $(x, y)$QUERY x0:基于当前所有样本拟合最小二乘直线,输出在 $x_0$ 处的预测值
退化规则:若样本数为 0 输出 0;若所有 $x$ 相同(解不唯一),使用常数模型 $\hat{y} = \bar{y}$。
样例
输入
8
ADD 10 35
ADD 20 55
QUERY 15
ADD 30 78
QUERY 25
ADD 25 69
QUERY 40
QUERY 5
输出
45.000000
66.750000
100.285714
23.685714
思路分析
第一步:观察题目性质
样本不断加入,每次查询都要给出当前所有样本拟合出的最小二乘直线在某点的预测值。$n$ 最大到 $10^5$,每次查询必须 $O(1)$ 完成,不能重新扫描全部样本。
第二步:问题转化
最小二乘法的闭式解只依赖四个累加量:$S_x = \sum x_i$,$S_y = \sum y_i$,$S_{xx} = \sum x_i^2$,$S_{xy} = \sum x_i y_i$。我们不需要保存每条样本,只需增量维护这四个值。
第三步:算法选择
每次 ADD 操作 $O(1)$ 累加四个统计量。QUERY 时用正规方程直接计算:
\[a = \frac{n \cdot S_{xy} - S_x \cdot S_y}{n \cdot S_{xx} - S_x^2}, \quad b = \frac{S_y - a \cdot S_x}{n}\]第四步:实现要点
- 分母 $n \cdot S_{xx} - S_x^2$ 为 0 等价于所有 $x$ 相同,此时解不唯一。用布尔标记
same_x判断是否退化,避免浮点比较。 - 极限数据下 $S_{xx}$ 与 $S_x^2$ 可能超出 64 位整型,先转浮点再相乘相减。
题解代码
import sys
input = sys.stdin.readline
def main():
data = sys.stdin.buffer.read().split()
idx = 0
q = int(data[idx]); idx += 1
n = 0
Sx = Sy = Sxx = Sxy = 0
first_x = None
same_x = True
out = []
for _ in range(q):
op = data[idx]; idx += 1
if op == b"ADD":
x = int(data[idx]); y = int(data[idx + 1]); idx += 2
if n == 0:
first_x = x
elif x != first_x:
same_x = False
n += 1
Sx += x; Sy += y; Sxx += x * x; Sxy += x * y
else:
x0 = int(data[idx]); idx += 1
if n == 0:
out.append("0.000000")
elif same_x:
out.append(f"{float(Sy) / n:.6f}")
else:
num = float(n) * Sxy - float(Sx) * Sy
den = float(n) * Sxx - float(Sx) * Sx
a = num / den
b = (float(Sy) - a * float(Sx)) / n
out.append(f"{a * x0 + b:.6f}")
sys.stdout.write("\n".join(out))
main()
复杂度分析
时间复杂度:$O(q)$,ADD 和 QUERY 均为 $O(1)$ 空间复杂度:$O(1)$,只维护五个累加量与一个退化标志
第 2 题:回归任务反向传播机理
题目描述
实现一个用于回归任务的三层 MLP 的单次前向传播与反向传播。网络结构为:输入层 → 隐藏层(ReLU) → 输出层(线性)。给定网络参数、一个输入样本及其目标值,计算梯度下降更新后的新参数。
损失函数为 $L = \frac{1}{2}\lVert \hat{y} - y \rVert^2$。ReLU 导数在 $z = 0$ 处取 0。
输出更新后的 $W_1, b_1, W_2, b_2$ 以及预测值 $\hat{y}$,所有浮点数保留 6 位小数。
样例
输入
2 2 2
0.4 0.3
-0.5 0.6
0.1 -0.2
0.5 -0.3
0.2 0.4
0.0 0.1
1.0 0.5
0.5 0.3
0.2
输出
0.420300 0.310150
-0.500000 0.600000
0.120300 -0.200000
0.522750 -0.300000
0.209100 0.400000
0.035000 0.114000
0.325000 0.230000
思路分析
第一步:前向传播
按层计算:$z_1 = W_1 x + b_1$,$a_1 = \text{ReLU}(z_1)$,$\hat{y} = W_2 a_1 + b_2$。输出层是线性激活,不再过 ReLU。
第二步:反向传播
从输出层开始,平方损失对线性输出的梯度为 $\delta_2 = \hat{y} - y$。权重梯度通过外积计算:$\nabla W_2 = \delta_2 \otimes a_1$。
误差经 $W_2^T$ 回传到隐藏层,再被 ReLU 的导数逐元素门控:$\delta_1 = (W_2^T \delta_2) \odot \mathbb{1}[z_1 > 0]$。关键在于前向时被关闭的神经元($z_1 \leq 0$),其梯度恒为 0,该行权重本步不更新。
第三步:梯度下降
四组参数同步做一步更新:$W \leftarrow W - \eta \nabla W$。
第四步:实现要点
用 z1 > 0(严格大于)实现 ReLU 导数,精确对齐题面”$z = 0$ 处取 0”的约定。这是死亡神经元能否正确阻断回传的关键。
题解代码
import sys
import numpy as np
input = sys.stdin.readline
din, dhid, dout = map(int, input().split())
W1 = np.array([list(map(float, input().split())) for _ in range(dhid)])
b1 = np.array(list(map(float, input().split())))
W2 = np.array([list(map(float, input().split())) for _ in range(dout)])
b2 = np.array(list(map(float, input().split())))
x = np.array(list(map(float, input().split())))
ytrue = np.array(list(map(float, input().split())))
eta = float(input())
# 前向传播
z1 = W1 @ x + b1
a1 = np.maximum(z1, 0.0)
ypred = W2 @ a1 + b2
# 反向传播
delta2 = ypred - ytrue
gradW2 = np.outer(delta2, a1)
gradb2 = delta2
delta1 = (W2.T @ delta2) * (z1 > 0)
gradW1 = np.outer(delta1, x)
gradb1 = delta1
# 梯度下降
W1 = W1 - eta * gradW1
b1 = b1 - eta * gradb1
W2 = W2 - eta * gradW2
b2 = b2 - eta * gradb2
lines = []
for row in W1:
lines.append(" ".join(f"{v:.6f}" for v in row))
lines.append(" ".join(f"{v:.6f}" for v in b1))
for row in W2:
lines.append(" ".join(f"{v:.6f}" for v in row))
lines.append(" ".join(f"{v:.6f}" for v in b2))
lines.append(" ".join(f"{v:.6f}" for v in ypred))
print("\n".join(lines))
复杂度分析
时间复杂度:$O(d_1 \cdot d_2 + d_2 \cdot d_3)$,前向两次矩阵向量乘,反向两次外积同阶 空间复杂度:$O(d_1 \cdot d_2 + d_2 \cdot d_3)$,存储权重矩阵与中间向量
小结
- 第一题考察在线最小二乘回归,核心在于用四个增量统计量实现 $O(1)$ 实时预测,注意退化判定和数值溢出处理
- 第二题是反向传播模板题,按公式实现前向 + 反向 + 梯度下降即可,关键是 ReLU 导数在 $z = 0$ 处取 0 导致被关闭神经元的权重不更新
- 选择题覆盖面广,大模型工程(CUDA、KV Cache、MoE、Agent)、深度学习基础(激活函数、优化器、Transformer)和数学(牛顿迭代、贝叶斯、指数分布)三大板块并重