面经正文
1. 请介绍梯度下降的几种变体,以及各自的优缺点
回答思路
这是百度算法岗经典基础题,要对比 BGD/SGD/Mini-batch GD,并说明 Adam 等自适应优化器的原理。
- 三种基础形式:批量梯度下降、随机梯度下降、Mini-batch 梯度下降。
- 动量方法:Momentum,解决梯度方向震荡问题。
- 自适应学习率:AdaGrad、RMSProp、Adam,重点说 Adam。
- 实际使用建议:什么场景用什么优化器。
回答示例
- 批量梯度下降(BGD)
每次更新使用全部训练数据计算梯度。优点是梯度方向准确,收敛稳定;缺点是计算开销巨大,数据量大时无法实际使用。 - 随机梯度下降(SGD)
每次只用一个样本计算梯度。优点是更新快,能逃离局部最优;缺点是梯度方向噪声大,收敛路径震荡明显,需要精心调节学习率。 - Mini-batch 梯度下降
折中方案,每次用小批量数据(如 32/64/128 条)计算梯度。目前深度学习训练的标准方法,兼顾计算效率和梯度稳定性。 - Adam(Adaptive Moment Estimation)
结合了 Momentum(利用历史梯度方向)和 RMSProp(自适应调整各参数学习率)两者的优点:- 维护梯度的一阶矩(均值)和二阶矩(未中心化方差)的指数移动平均;
- 对每个参数独立调整学习率;
- 在大多数任务上收敛快、调参容忍度高。
实践建议:默认用 Adam (lr=1e-3, β1=0.9, β2=0.999),如果追求极致泛化性能(如 ImageNet benchmark)可切换到带 momentum 的 SGD,需要更精细调学习率。
2. Transformer 的注意力机制是如何工作的?
回答思路
百度 AI 岗必考题,要从公式层面解释清楚 Self-Attention,并说明 Multi-Head 的作用。
- Self-Attention 计算流程:Q/K/V 矩阵 → 点积 → Scale → Softmax → 加权求和。
- 为什么要 Scale(除以 √d_k):防止点积结果过大导致 Softmax 梯度消失。
- Multi-Head 的作用:让模型在不同子空间学习不同维度的注意力关系。
- 与 RNN 的核心区别:并行计算、全局依赖(不受序列长度限制)。
回答示例
Self-Attention 的计算过程如下:
给定输入序列 X,通过三个可学习矩阵 Wq/Wk/Wv 线性变换得到 Q(Query)、K(Key)、V(Value):
Attention(Q, K, V) = Softmax(QK^T / √d_k) × V
具体步骤:
- 计算 Q 和所有 K 的点积,得到每个位置对其他位置的"注意力得分矩阵";
- 除以 √d_k(维度的平方根)进行缩放,防止 d_k 较大时点积值过大导致 Softmax 函数进入梯度饱和区;
- 对每行做 Softmax 归一化,得到注意力权重(每行之和为 1);
- 用注意力权重对 V 做加权求和,得到每个位置的输出表示。
Multi-Head Attention 将 Q/K/V 分别投影到 h 个不同的低维子空间,在每个子空间独立计算 Attention,最后将 h 个结果拼接并线性变换。这样模型可以同时关注不同位置的不同语义特征(比如一个头关注语法关系,另一个关注语义相似性)。
相比 RNN,Transformer 的核心优势是:每个位置都可以直接与序列中所有其他位置交互(全局感受野),且所有位置的计算可以完全并行,大幅提升了训练效率。
3. 如何处理机器学习中的类别不平衡问题?
回答思路
百度推荐/风控场景下类别不平衡极为常见(正负样本可能达到 1:100),要给出多个层面的解决方案。
- 数据层面:过采样(SMOTE)、欠采样、生成对抗网络(GAN)。
- 算法层面:class_weight 调整、Focal Loss。
- 评估层面:不能只看 Accuracy,要用 AUC/F1/精确率召回率曲线。
- 业务层面:根据误报代价调整决策阈值。
回答示例
以广告点击率预估为例,CTR 通常在 1%-3%,正负样本比约 1:50。
数据层面:
- 过采样:SMOTE(合成少数类过采样)在少数类样本之间插值生成新样本,比简单复制更有效;
- 欠采样:随机去除部分多数类样本,适合数据量很大时使用,但会损失信息;
- 负采样:深度学习场景常用,以固定比例(如 1:4)随机保留负样本,同时用 sample_weight 修正偏差。
算法层面:
- class_weight:在 sklearn 或 PyTorch 的损失函数中设置类别权重,自动加大少数类样本的梯度贡献;
- Focal Loss:Facebook 提出,通过 (1-pt)^γ 因子降低易分类样本(大量负样本)的损失权重,让模型专注于难分类的正样本。
评估层面:
不能只看 Accuracy(全预测为负类也能达到 99% 准确率)。正确使用:AUC-ROC(衡量整体排序能力)、PR 曲线(查准-查全权衡)、F1-score(综合精确率和召回率)。
4. 你的毕业设计/项目中用到了哪些模型?遇到了什么挑战?
回答思路
百度非常重视项目实战深度,要展示你对模型选择的思考过程,而不只是"用了 BERT"。
- 问题定义:什么任务、数据规模、评估指标。
- 模型选择:为什么选这个模型,对比了哪些备选方案。
- 遇到的挑战:过拟合/数据噪声/推理速度等。
- 解决方案:具体技术手段。
- 结果:量化指标提升。
回答示例
我的毕业设计是一个中文医疗问答系统,任务是对患者提问做意图识别(分为问药、问症状、问医院等 8 个类别)。
模型选择:初版用 TextCNN,F1 约 82%;后来换用预训练的 BERT-base-chinese,迁移学习后 F1 提升到 91.3%。但 BERT 推理延迟达 230ms/条,不满足实时响应需求。
挑战与解决:
- 推理速度:用知识蒸馏将 BERT 压缩为 6 层 DistilBERT,推理速度提升 3 倍(降至 75ms),F1 仅下降 0.8%(90.5%);
- 领域词汇缺失:医疗专业词(如"阿托伐他汀")在通用 BERT 词典中被切成碎片,导致理解偏差。解决方案:在词表中增加医疗术语,并用医疗语料(CHIP 数据集)对 BERT 做二次预训练;
- 数据不平衡:8 个类别样本量差异大(最多 10000 条 vs 最少 500 条)。使用 Focal Loss + 对少数类做 back-translation 数据增强,各类 F1 均衡度提升明显。
5. 为什么想来百度,你对百度文心大模型有什么了解?
回答思路
这道题考察你对百度技术战略的认知,要展示真实研究,不能只说"百度是 AI 公司"。
- 技术认知:文心大模型的技术特点(ERNIE 系列演进、知识增强)。
- 产品认知:文心一言、百度搜索 AI 化的实际体验。
- 个人契合点:你的方向如何与百度的技术战略匹配。
回答示例
我对百度文心大模型的认知主要有几个维度:
技术层面:文心大模型基于 ERNIE(Enhanced Representation through kNowledge IntEgration)系列,从早期的 ERNIE 1.0 通过知识图谱增强预训练,到文心 3.5/4.0 引入 RLHF 人类反馈对齐,在中文理解和生成任务上有明显的本地化优势,尤其在中文逻辑推理和文化常识上表现优于部分通用英文模型。
产品层面:我深度使用过文心一言,感受最深的是它对中文语境的理解比较自然,在诗歌创作、商业文案等中文生成任务上有差异化竞争力。百度将大模型能力直接嵌入搜索结果,形成"搜索+生成"的新范式,这是其他模型公司暂时无法复制的流量入口优势。
个人契合:我在毕设中做的医疗 NLP 工作让我对大模型的垂直领域适配有一定实践积累,百度在医疗 AI 方向的布局(灵医智惠)与我的研究方向高度契合,希望加入后能在大模型的领域精调和知识增强方向做出贡献。
6. 什么是过拟合?如何防止过拟合?
回答思路
机器学习基础题,百度算法岗几乎必问,要覆盖从数据、模型、训练三个层面的完整防过拟合策略。
- 什么是过拟合:训练误差持续下降但验证误差反而上升,模型记住了噪声而非规律。
- 数据层面:数据增强、更多训练数据。
- 模型层面:减少参数量、使用正则化(L1/L2/Dropout)、集成学习(Bagging)。
- 训练层面:Early Stopping、交叉验证。
回答示例
过拟合的本质是模型复杂度超过了数据所能支撑的复杂度——模型不仅学习了数据中的真实规律,还把噪声(偶然出现的个别样本的特征)也记住了。
防止过拟合的方法:
- 数据增强:在图像任务中对图像做旋转/翻转/裁剪/颜色抖动;在 NLP 中对文本做同义词替换、回译(中文→英文→中文)等,增加训练样本多样性,让模型学到真正的 pattern 而不是个别样本。
- 正则化:
- L1 正则(Lasso):在损失函数中加入 |w| 项,会将部分权重置零(特征选择),适合特征稀疏的场景;
- L2 正则(Ridge):在损失函数中加入 w² 项,让权重趋近于 0 但不等于 0,适合特征之间存在多重共线性的场景;
- Dropout:训练时随机丢弃一定比例(如 20%-50%)的神经元,强迫网络不依赖特定神经元,从而学到更鲁棒的表征。
- 简化模型:减少网络层数/每层神经元数量,用参数量更少的模型(如用 BERT-base 而非 BERT-large)。
- Early Stopping:监控验证集误差,当验证误差连续 N 个 epoch 不再下降时停止训练,避免训练过度。
- 集成学习(Bagging):训练多个模型的平均值,减少单一模型的方差。对抗过拟合最经典的方法之一。
7. 算法题:手写一个 Top-K 问题(海量数据找最大的 K 个数)
回答思路
百度算法岗高频题,海量数据场景要展示数据无法全部加载到内存的解决方案。
- 小数据量:排序取前 K,O(n log n)。
- 大数据量:小顶堆,O(n log K)。
- 海量数据(单机内存不够):分治 + 堆,先对每个文件局部排序,再归并。
- 分布式场景:MapReduce,Map 阶段输出局部 Top-K,Reduce 阶段合并。
8. 介绍一下CNN中卷积层、池化层和全连接层的作用
回答思路
计算机视觉基础题,CNN三大组件各自的功能是理解深度学习视觉模型的基础。
- 卷积层:局部感受野 + 参数共享,提取局部特征(边缘/纹理/形状)。
- 池化层:降低特征图尺寸,增强平移不变性(Max Pooling/Avg Pooling)。
- 全连接层:将分布式特征映射到样本标记空间,做最终的分类/回归。
- 现代趋势:用Global Average Pooling替代FC减少过拟合,Vision Transformer逐步替代CNN。
回答示例
卷积层(Conv Layer):
卷积核(Filter)在输入特征图上滑动,每滑动一步(步长stride)做一次局部内积运算,输出一个特征值。
核心特性:
- 局部感受野:每个神经元只连接上一层的局部区域(如3×3或5×5),模拟人类视觉皮层的局部感知特性;
- 参数共享:同一个卷积核的参数在整个特征图上共享,大幅减少参数量(如无参数共享,全连接层需要输入通道×输出通道×kernel_size²);
- 层次性:浅层卷积提取低级特征(边缘、角点),深层卷积提取高级语义特征(物体部件、整体)。
池化层(Pooling Layer):
对特征图做降采样,常用Max Pooling(取区域内最大值)和Average Pooling(取均值)。
作用:
- 降低特征图尺寸,减少后续层的计算量;
- 增强对平移、旋转的不变性(图像平移几个像素,最大值位置可能不变);
- 抽象特征,降低过拟合风险。
全连接层(FC Layer):
将前面卷积/池化提取的分布式特征压缩为统一的特征向量,通过矩阵乘法映射到输出空间(如分类的类别数)。是分类器的"最后一击"。现代CNN倾向于用Global Average Pooling替代FC,减少过拟合。
9. 你对大模型(LLM)的幻觉问题怎么看?有哪些缓解方法?
回答思路
百度是AI大模型公司,对LLM的理解是百度算法岗的必要知识,幻觉问题是当前最活跃的研究方向。
- 什么是幻觉:LLM生成的内容看似流畅合理,但包含事实错误或无中生有。
- 幻觉来源:训练数据偏差、知识截止日期、长尾知识缺失、概率采样的随机性。
- 缓解方法:RAG(检索增强生成)、事实链验证链(CoT+Fact Check)、减少Temperature/Top-p。
- 百度的实践:结合百度搜索/百科知识库的RAG路线。
回答示例
大模型幻觉(Hallucination)的根源是:LLM本质是"高级的概率补全器",它生成的是"最像真话的话",而不是"事实上的真话"。
幻觉产生的原因:
- 知识陈旧:模型的训练数据有截止日期,无法知道训练之后发生的事件(如你问今天的天气,模型必须承认不知道);
- 长尾知识缺失:常识和常见知识在训练语料中出现频率高,模型学得好;但医学、法律等长尾专业领域,模型记忆模糊,容易捏造细节;
- 概率采样:生成时用Temperature采样,即使top-1答案正确,调整高Temperature也可能选中错误答案。
缓解方法:
- RAG(检索增强生成)(最有效):将用户问题先检索百度搜索/百科的知识库,将检索到的相关段落作为Context注入Prompt,让模型"照着证据说话",而不是凭空生成。百度的文心一言就采用了搜索+RAG的技术路线。
- 思维链验证(Chain-of-Thought + Fact Check):先用CoT让模型分步推理,在推理过程中主动要求模型标注每个陈述的"置信度"和"依据",对低置信度段落触发检索验证。
- 采样参数调整:在需要精确回答的场景,降低Temperature(如0.1-0.3),让模型更倾向于选择最高概率答案;在创意写作场景才使用高Temperature。
10. 手撕算法题:二叉树的最近公共祖先(LCA)
回答思路
百度算法岗高频经典题,递归和迭代两种方法都要掌握。
- 递归法:从根向下递归,如果当前节点等于p或q则返回当前节点;左右子树返回值都不为空则当前节点是LCA。
- 进阶:如果需要支持父节点指针(带parent指针的树),可以用Set记录路径再找交点。
回答示例
// 递归法,时间复杂度 O(n),每个节点最多访问一次
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
// 递归终止条件:找到目标节点或到达空节点
if (root == null || root == p || root == q) return root;
// 在左右子树中分别查找
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
// 左右子树都有返回值,说明p和q分别在左右子树,当前节点是LCA
if (left != null && right != null) return root;
// 只有一边有返回值,说明p和q都在这一侧
return left != null ? left : right;
}
进阶版(带parent指针的树):
public TreeNode lowestCommonAncestorWithParent(TreeNode p, TreeNode q) {
Set<TreeNode> path = new HashSet<>();
// p向上遍历,记录所有祖先
while (p != null) {
path.add(p);
p = p.parent;
}
// q向上遍历,第一个已在path中的节点就是LCA
while (q != null) {
if (path.contains(q)) return q;
q = q.parent;
}
return null;
}
常见问题 FAQ
这篇面经适合准备百度算法工程师2026届校园招聘面试的同学参考,尤其适合用来了解面试流程、常见问题、岗位考察重点和复盘方向。
通常会结合岗位要求考察专业基础、项目经历、业务理解、沟通表达和解决问题能力。建议结合面经中的题目,把自己的经历整理成可追问的案例。
可以先通读正文了解流程,再整理高频问题和回答思路,最后把答案替换成自己的项目、实习或校园经历,形成更真实的表达。
不建议直接背诵。回答思路更适合用来理解考察点,真正面试时应围绕自己的经历、岗位要求和现场追问灵活组织答案。




