百度算法工程师2026

百度校招算法工程师面经2026

本文整理了百度2026校招算法工程师岗位的面试经验,包括梯度下降的多种变体及其优缺点、Transformer自注意力机制的原理、以及类别不平衡问题的处理策略。内容基于真实面试题,适合准备百度AI相关岗位的求职者参考。

更新 2026-05-22
百度算法工程师校招面经梯度下降Transformer类别不平衡
126 浏览
面试前,把简历里的项目讲清楚面经里的追问通常围绕简历展开,先整理项目亮点和可量化结果,回答会更稳。
优化我的简历

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阶段合并。

【回答示例】 // 内存充足时:小顶堆,O(n log k)

public int[] topK(int[] nums, int k) {
 PriorityQueue<Integer> minHeap = new PriorityQueue<>(k);
 for (int num : nums) {
 minHeap.offer(num);
 if (minHeap.size() > k) minHeap.poll();
 }
 int[] result = new int[k];
 for (int i = k - 1; i >= 0; i--) {
 result[i] = minHeap.poll();
 }
 return result;
}

海量数据场景(单机内存不足,无法一次加载10亿个整数):

1. 分治:将10亿个整数哈希分片到1000个小文件(每个文件约1000万条);

2. 局部排序:用小顶堆对每个文件找出各自的Top-K(每个文件1000万数 → 取1000个最大值),结果写入1000个文件;

3. 归并:将1000个局部Top-K文件合并,用堆选出全局Top-K。

时间复杂度:O(N)(遍历一次)→ O(N log K)(局部排序)→ O(K log 1000)(最终归并)。

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;
}

🆗 准备好了吗?

看完面经后,回到自己的简历做一轮准备

用 HI简历整理项目经历、提炼可追问亮点,再按面经高频问题准备对应回答。

免费开始写简历

常见问题

梯度下降有哪些变体?各自优缺点是什么?

包括批量梯度下降(BGD,稳定但计算大)、随机梯度下降(SGD,更新快但噪声大)、Mini-batch梯度下降(折中方案),以及Adam等自适应优化器(结合Momentum和RMSProp,收敛快且调参容忍度高)。

Transformer的注意力机制如何工作?

通过Q、K、V矩阵计算注意力得分,公式为Attention(Q,K,V)=Softmax(QK^T/√d_k)×V。Multi-Head机制将Q/K/V投影到多个子空间独立计算,拼接后线性变换,以捕捉不同语义特征。

如何处理类别不平衡问题?

数据层面可采用过采样(如SMOTE)、欠采样或生成对抗网络;算法层面可调整class_weight、使用Focal Loss等损失函数。

百度校招算法工程师面经2026 |_HI简历