页面导航
百度 算法工程师 校招 梯度下降 Transformer 注意力机制 类别不平衡 机器学习 更新 2026-06-02

百度算法工程师校招面经:梯度下降、Transformer与类别不平衡问题解析

2026年百度算法工程师校招面经,涵盖梯度下降变体、Transformer注意力机制及类别不平衡处理方法,并附带LCA算法题解。

公司 百度
岗位 算法工程师
方向 技术
行业 互联网
招聘类型 校园招聘
年份 2026

面经正文

1. 请介绍梯度下降的几种变体,以及各自的优缺点

回答思路

这是百度算法岗经典基础题,要对比 BGD/SGD/Mini-batch GD,并说明 Adam 等自适应优化器的原理。

  1. 三种基础形式:批量梯度下降、随机梯度下降、Mini-batch 梯度下降。
  2. 动量方法:Momentum,解决梯度方向震荡问题。
  3. 自适应学习率:AdaGrad、RMSProp、Adam,重点说 Adam。
  4. 实际使用建议:什么场景用什么优化器。

回答示例

  1. 批量梯度下降(BGD)
    每次更新使用全部训练数据计算梯度。优点是梯度方向准确,收敛稳定;缺点是计算开销巨大,数据量大时无法实际使用。
  2. 随机梯度下降(SGD)
    每次只用一个样本计算梯度。优点是更新快,能逃离局部最优;缺点是梯度方向噪声大,收敛路径震荡明显,需要精心调节学习率。
  3. Mini-batch 梯度下降
    折中方案,每次用小批量数据(如 32/64/128 条)计算梯度。目前深度学习训练的标准方法,兼顾计算效率和梯度稳定性。
  4. 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 的作用。

  1. Self-Attention 计算流程:Q/K/V 矩阵 → 点积 → Scale → Softmax → 加权求和。
  2. 为什么要 Scale(除以 √d_k):防止点积结果过大导致 Softmax 梯度消失。
  3. Multi-Head 的作用:让模型在不同子空间学习不同维度的注意力关系。
  4. 与 RNN 的核心区别:并行计算、全局依赖(不受序列长度限制)。

回答示例

Self-Attention 的计算过程如下:

给定输入序列 X,通过三个可学习矩阵 Wq/Wk/Wv 线性变换得到 Q(Query)、K(Key)、V(Value):
Attention(Q, K, V) = Softmax(QK^T / √d_k) × V

具体步骤:

  1. 计算 Q 和所有 K 的点积,得到每个位置对其他位置的"注意力得分矩阵";
  2. 除以 √d_k(维度的平方根)进行缩放,防止 d_k 较大时点积值过大导致 Softmax 函数进入梯度饱和区;
  3. 对每行做 Softmax 归一化,得到注意力权重(每行之和为 1);
  4. 用注意力权重对 V 做加权求和,得到每个位置的输出表示。

Multi-Head Attention 将 Q/K/V 分别投影到 h 个不同的低维子空间,在每个子空间独立计算 Attention,最后将 h 个结果拼接并线性变换。这样模型可以同时关注不同位置的不同语义特征(比如一个头关注语法关系,另一个关注语义相似性)。

相比 RNN,Transformer 的核心优势是:每个位置都可以直接与序列中所有其他位置交互(全局感受野),且所有位置的计算可以完全并行,大幅提升了训练效率。

3. 如何处理机器学习中的类别不平衡问题?

回答思路

百度推荐/风控场景下类别不平衡极为常见(正负样本可能达到 1:100),要给出多个层面的解决方案。

  1. 数据层面:过采样(SMOTE)、欠采样、生成对抗网络(GAN)。
  2. 算法层面:class_weight 调整、Focal Loss。
  3. 评估层面:不能只看 Accuracy,要用 AUC/F1/精确率召回率曲线。
  4. 业务层面:根据误报代价调整决策阈值。

回答示例

以广告点击率预估为例,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"。

  1. 问题定义:什么任务、数据规模、评估指标。
  2. 模型选择:为什么选这个模型,对比了哪些备选方案。
  3. 遇到的挑战:过拟合/数据噪声/推理速度等。
  4. 解决方案:具体技术手段。
  5. 结果:量化指标提升。

回答示例

我的毕业设计是一个中文医疗问答系统,任务是对患者提问做意图识别(分为问药、问症状、问医院等 8 个类别)。

模型选择:初版用 TextCNN,F1 约 82%;后来换用预训练的 BERT-base-chinese,迁移学习后 F1 提升到 91.3%。但 BERT 推理延迟达 230ms/条,不满足实时响应需求。

挑战与解决:

  1. 推理速度:用知识蒸馏将 BERT 压缩为 6 层 DistilBERT,推理速度提升 3 倍(降至 75ms),F1 仅下降 0.8%(90.5%);
  2. 领域词汇缺失:医疗专业词(如"阿托伐他汀")在通用 BERT 词典中被切成碎片,导致理解偏差。解决方案:在词表中增加医疗术语,并用医疗语料(CHIP 数据集)对 BERT 做二次预训练;
  3. 数据不平衡:8 个类别样本量差异大(最多 10000 条 vs 最少 500 条)。使用 Focal Loss + 对少数类做 back-translation 数据增强,各类 F1 均衡度提升明显。

5. 为什么想来百度,你对百度文心大模型有什么了解?

回答思路

这道题考察你对百度技术战略的认知,要展示真实研究,不能只说"百度是 AI 公司"。

  1. 技术认知:文心大模型的技术特点(ERNIE 系列演进、知识增强)。
  2. 产品认知:文心一言、百度搜索 AI 化的实际体验。
  3. 个人契合点:你的方向如何与百度的技术战略匹配。

回答示例

我对百度文心大模型的认知主要有几个维度:

技术层面:文心大模型基于 ERNIE(Enhanced Representation through kNowledge IntEgration)系列,从早期的 ERNIE 1.0 通过知识图谱增强预训练,到文心 3.5/4.0 引入 RLHF 人类反馈对齐,在中文理解和生成任务上有明显的本地化优势,尤其在中文逻辑推理和文化常识上表现优于部分通用英文模型。

产品层面:我深度使用过文心一言,感受最深的是它对中文语境的理解比较自然,在诗歌创作、商业文案等中文生成任务上有差异化竞争力。百度将大模型能力直接嵌入搜索结果,形成"搜索+生成"的新范式,这是其他模型公司暂时无法复制的流量入口优势。

个人契合:我在毕设中做的医疗 NLP 工作让我对大模型的垂直领域适配有一定实践积累,百度在医疗 AI 方向的布局(灵医智惠)与我的研究方向高度契合,希望加入后能在大模型的领域精调和知识增强方向做出贡献。

6. 什么是过拟合?如何防止过拟合?

回答思路

机器学习基础题,百度算法岗几乎必问,要覆盖从数据、模型、训练三个层面的完整防过拟合策略。

  1. 什么是过拟合:训练误差持续下降但验证误差反而上升,模型记住了噪声而非规律。
  2. 数据层面:数据增强、更多训练数据。
  3. 模型层面:减少参数量、使用正则化(L1/L2/Dropout)、集成学习(Bagging)。
  4. 训练层面:Early Stopping、交叉验证。

回答示例

过拟合的本质是模型复杂度超过了数据所能支撑的复杂度——模型不仅学习了数据中的真实规律,还把噪声(偶然出现的个别样本的特征)也记住了。

防止过拟合的方法:

  1. 数据增强:在图像任务中对图像做旋转/翻转/裁剪/颜色抖动;在 NLP 中对文本做同义词替换、回译(中文→英文→中文)等,增加训练样本多样性,让模型学到真正的 pattern 而不是个别样本。
  2. 正则化
    • L1 正则(Lasso):在损失函数中加入 |w| 项,会将部分权重置零(特征选择),适合特征稀疏的场景;
    • L2 正则(Ridge):在损失函数中加入 w² 项,让权重趋近于 0 但不等于 0,适合特征之间存在多重共线性的场景;
    • Dropout:训练时随机丢弃一定比例(如 20%-50%)的神经元,强迫网络不依赖特定神经元,从而学到更鲁棒的表征。
  3. 简化模型:减少网络层数/每层神经元数量,用参数量更少的模型(如用 BERT-base 而非 BERT-large)。
  4. Early Stopping:监控验证集误差,当验证误差连续 N 个 epoch 不再下降时停止训练,避免训练过度。
  5. 集成学习(Bagging):训练多个模型的平均值,减少单一模型的方差。对抗过拟合最经典的方法之一。

7. 算法题:手写一个 Top-K 问题(海量数据找最大的 K 个数)

回答思路

百度算法岗高频题,海量数据场景要展示数据无法全部加载到内存的解决方案。

  1. 小数据量:排序取前 K,O(n log n)。
  2. 大数据量:小顶堆,O(n log K)。
  3. 海量数据(单机内存不够):分治 + 堆,先对每个文件局部排序,再归并。
  4. 分布式场景:MapReduce,Map 阶段输出局部 Top-K,Reduce 阶段合并。

8. 介绍一下CNN中卷积层、池化层和全连接层的作用

回答思路

计算机视觉基础题,CNN三大组件各自的功能是理解深度学习视觉模型的基础。

  1. 卷积层:局部感受野 + 参数共享,提取局部特征(边缘/纹理/形状)。
  2. 池化层:降低特征图尺寸,增强平移不变性(Max Pooling/Avg Pooling)。
  3. 全连接层:将分布式特征映射到样本标记空间,做最终的分类/回归。
  4. 现代趋势:用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的理解是百度算法岗的必要知识,幻觉问题是当前最活跃的研究方向。

  1. 什么是幻觉:LLM生成的内容看似流畅合理,但包含事实错误或无中生有。
  2. 幻觉来源:训练数据偏差、知识截止日期、长尾知识缺失、概率采样的随机性。
  3. 缓解方法:RAG(检索增强生成)、事实链验证链(CoT+Fact Check)、减少Temperature/Top-p。
  4. 百度的实践:结合百度搜索/百科知识库的RAG路线。

回答示例

大模型幻觉(Hallucination)的根源是:LLM本质是"高级的概率补全器",它生成的是"最像真话的话",而不是"事实上的真话"。

幻觉产生的原因:

  1. 知识陈旧:模型的训练数据有截止日期,无法知道训练之后发生的事件(如你问今天的天气,模型必须承认不知道);
  2. 长尾知识缺失:常识和常见知识在训练语料中出现频率高,模型学得好;但医学、法律等长尾专业领域,模型记忆模糊,容易捏造细节;
  3. 概率采样:生成时用Temperature采样,即使top-1答案正确,调整高Temperature也可能选中错误答案。

缓解方法:

  1. RAG(检索增强生成)(最有效):将用户问题先检索百度搜索/百科的知识库,将检索到的相关段落作为Context注入Prompt,让模型"照着证据说话",而不是凭空生成。百度的文心一言就采用了搜索+RAG的技术路线。
  2. 思维链验证(Chain-of-Thought + Fact Check):先用CoT让模型分步推理,在推理过程中主动要求模型标注每个陈述的"置信度"和"依据",对低置信度段落触发检索验证。
  3. 采样参数调整:在需要精确回答的场景,降低Temperature(如0.1-0.3),让模型更倾向于选择最高概率答案;在创意写作场景才使用高Temperature。

10. 手撕算法题:二叉树的最近公共祖先(LCA)

回答思路

百度算法岗高频经典题,递归和迭代两种方法都要掌握。

  1. 递归法:从根向下递归,如果当前节点等于p或q则返回当前节点;左右子树返回值都不为空则当前节点是LCA。
  2. 进阶:如果需要支持父节点指针(带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届校园招聘面经主要适合谁参考?

这篇面经适合准备百度算法工程师2026届校园招聘面试的同学参考,尤其适合用来了解面试流程、常见问题、岗位考察重点和复盘方向。

百度算法工程师面试通常会重点考察哪些能力?

通常会结合岗位要求考察专业基础、项目经历、业务理解、沟通表达和解决问题能力。建议结合面经中的题目,把自己的经历整理成可追问的案例。

如何使用这篇百度算法工程师面经准备面试?

可以先通读正文了解流程,再整理高频问题和回答思路,最后把答案替换成自己的项目、实习或校园经历,形成更真实的表达。

面经中的回答思路可以直接背诵吗?

不建议直接背诵。回答思路更适合用来理解考察点,真正面试时应围绕自己的经历、岗位要求和现场追问灵活组织答案。