在这里插入图片描述

文章目录


【AI算法工程师面试宝典】

前言

在AI算法工程师的面试中,基础能力模块(数学+编程)决定了你能否通过初筛,而核心算法模块则决定了你能否拿到最终的offer。这一轮面试官通常是组里的技术骨干或leader,他们会深挖你对模型的理解——从损失函数到梯度更新,从评价指标到工程优化。

不同岗位的侧重点不同:机器学习岗看重GBDT/XGBoost和特征工程,CV岗必问YOLO/ResNet,NLP岗绕不开BERT/Transformer,推荐系统岗则偏好DeepFM/冷启动。但机器学习基础是所有方向的必考内容,无论你面什么岗位,逻辑回归、决策树、AUC、过拟合处理都是躲不开的。

本章将分为三个部分:机器学习基础(全方向必考)、深度学习基础(大厂算法岗核心)、方向细分模块(按岗位侧重),每个高频考题都配有核心答案和可运行的代码示例。


二、核心算法模块(核心考察项,分方向侧重)

1. 机器学习基础(所有方向必考,大厂重点深挖)

模型基础
监督学习

线性回归(Linear Regression):假设因变量与自变量呈线性关系,损失函数为均方误差MSE,闭式解为w = (X^T X)^{-1} X^T y。适用于连续值预测。

逻辑回归(Logistic Regression):虽然叫回归,实际是分类模型。通过Sigmoid函数将线性输出映射到(0,1)概率区间,损失函数为交叉熵(Binary Cross Entropy)。决策边界是线性的。

决策树(Decision Tree):树形结构,每个内部节点基于某个特征进行分裂。分裂准则:ID3用信息增益,C4.5用信息增益比,CART用基尼系数(分类)或均方误差(回归)。易过拟合,需剪枝。

随机森林(Random Forest):Bagging集成 + 随机特征选择。每棵树用自助采样(bootstrap)生成训练集,分裂时随机选取部分特征。最终结果投票(分类)或平均(回归)。

GBDT(Gradient Boosting Decision Tree):Boosting框架,每棵树拟合前一棵树的负梯度(残差近似)。梯度提升的核心是用损失函数在当前模型下的负梯度作为新的“标签”。

XGBoost:GBDT的工程优化版。引入二阶导数(Hessian)、正则化项(L1+L2)、列抽样、缺失值自动处理、并行化(按特征预排序)。相比GBDT,收敛更快、泛化更强。

LightGBM:基于XGBoost进一步优化。核心改进:单边梯度采样(GOSS) 保留大梯度样本、互斥特征捆绑(EFB) 降维、基于直方图的决策树算法 降低内存和计算量、Leaf-wise生长策略(带深度限制)。训练速度比XGBoost快数倍。

SVM:寻找最大间隔超平面。通过核技巧(RBF、多项式)将数据映射到高维空间解决线性不可分问题。对异常点敏感,适合小样本高维数据。

KNN:惰性学习,预测时计算与k个最近邻的多数投票(分类)或均值(回归)。需归一化,计算复杂度高。

无监督学习

K-Means:基于距离的聚类。步骤:随机选k个中心 → 分配样本到最近中心 → 更新中心 → 重复。缺点:需指定k,对异常值敏感,假设球形簇。用肘部法则轮廓系数选k。

DBSCAN:基于密度的聚类。无需指定簇数,能识别任意形状簇和噪声点。参数:邻域半径eps和最小样本数min_samples。适用于噪声较多、形状不规则的数据。

层次聚类:自底向上(凝聚)或自顶向下(分裂),输出树状图。复杂度高,适合小数据集。

PCA(主成分分析):无监督降维,投影到方差最大的方向。步骤:中心化 → 协方差矩阵 → 特征值分解 → 取前k个特征向量。线性降维,丢失可解释性。

LDA(线性判别分析):有监督降维,投影后类内方差最小、类间方差最大。常用于分类前的降维。

异常检测:孤立森林(随机划分特征空间,异常点路径更短)、DBSCAN(不属任何簇的点)、One-Class SVM。

半监督学习与强化学习
  • 半监督学习:少量标注数据 + 大量未标注数据。常见方法:自训练(伪标签)、协同训练、一致性正则化(如Π-Model)。核心假设:同类样本在特征空间应聚集。
  • 强化学习:智能体通过与环境交互学习最优策略。核心要素:状态(S)、动作(A)、奖励®、策略(π)。Q-Learning用Q表记录状态-动作价值,DQN用神经网络替代Q表解决高维状态问题。
高频考题:线性回归与逻辑回归的区别?
维度 线性回归 逻辑回归
输出 连续值(-∞, +∞) 概率(0,1),转化为离散类别
损失函数 均方误差(MSE) 交叉熵/对数损失
激活函数 无(恒等映射) Sigmoid
应用 房价预测、销售额预测 垃圾邮件分类、信用评分
参数估计 最小二乘或梯度下降 梯度下降(无闭式解)
假设 残差服从正态分布 无正态性假设

核心回答:线性回归假设因变量与自变量线性相关且误差服从高斯分布,输出连续值;逻辑回归是在线性回归的基础上套上Sigmoid函数,输出可解释为概率,用极大似然估计求解,用于分类任务。

高频考题:决策树的分裂准则(ID3、C4.5、CART)?
算法 分裂准则 公式 特点
ID3 信息增益 Gain(D,A)=H(D)-H(D|A) 偏向取值多的特征,只能处理离散特征
C4.5 信息增益比 Gain_ratio=Gain/IV(A) 修正ID3的偏向,可处理连续值(二分)
CART(分类) 基尼系数 Gini=1-Σp_k² 二叉树,基尼系数越小越纯
CART(回归) 均方误差 MSE=Σ(y_i-ŷ)² 最小化平方误差

核心回答:ID3用信息增益(易偏向多取值特征),C4.5用信息增益比(修正偏向),CART分类用基尼系数(计算更快,二叉树),回归用MSE。CART生成的二叉树在实践中更常用。

高频考题:XGBoost与LightGBM的核心差异及优化点?

核心回答

  • 树生长策略:XGBoost是Level-wise(按层生长,平衡但可能产生冗余节点);LightGBM是Leaf-wise(按叶子生长,降低误差但易过拟合,需限制max_depth)。
  • 分裂点搜索:XGBoost预排序+近似分位数;LightGBM基于直方图(连续值离散化到固定bins),内存和计算量大幅降低。
  • 采样策略:XGBoost支持行采样和列采样;LightGBM额外引入GOSS(保留大梯度样本,随机丢弃小梯度样本)。
  • 特征并行:LightGBM通过EFB捆绑互斥特征,减少维度。
  • 类别特征:LightGBM原生支持类别特征(转化为梯度统计量),XGBoost需手动One-Hot编码。
  • 缺失值:两者均自动处理,但LightGBM效率更高。

代码示例:使用sklearn API对比训练时间(示意,运行需安装包)

# 安装命令:pip install xgboost lightgbm
import numpy as np
import time
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import xgboost as xgb
import lightgbm as lgb

# 生成数据
X, y = make_classification(n_samples=10000, n_features=50, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# XGBoost
start = time.time()
xgb_model = xgb.XGBClassifier(n_estimators=100, max_depth=5, learning_rate=0.1, random_state=42)
xgb_model.fit(X_train, y_train)
xgb_time = time.time() - start

# LightGBM
start = time.time()
lgb_model = lgb.LGBMClassifier(n_estimators=100, max_depth=5, learning_rate=0.1, random_state=42)
lgb_model.fit(X_train, y_train)
lgb_time = time.time() - start

print(f"XGBoost 训练时间: {xgb_time:.3f}s, 准确率: {xgb_model.score(X_test, y_test):.4f}")
print(f"LightGBM 训练时间: {lgb_time:.3f}s, 准确率: {lgb_model.score(X_test, y_test):.4f}")
模型评估与优化
评估指标
  • 混淆矩阵:TP、TN、FP、FN。
  • 准确率(Accuracy)(TP+TN)/(P+N),不适用类别不平衡。
  • 精确率(Precision)TP/(TP+FP),预测为正中的真正正例比例。
  • 召回率(Recall)TP/(TP+FN),真正正例中被预测出的比例。
  • F1值2*Precision*Recall/(Precision+Recall),调和平均。
  • AUC-ROC:ROC曲线下面积,横轴FPR,纵轴TPR。AUC表示随机取一个正例和一个负例,模型将正例排在负例前面的概率。AUC对类别不平衡不敏感
  • AUC-PR:PR曲线下面积(横轴Recall,纵轴Precision),类别不平衡时更敏感。
  • 回归指标:MAE(平均绝对误差,鲁棒)、MSE(均方误差,对大误差惩罚大)、RMSE(MSE开方,与原始量纲一致)。
过拟合与欠拟合
现象 定义 原因 解决方法
过拟合 训练集表现好,测试集差 模型复杂、数据少、噪声多 增加数据、正则化(L1/L2)、Dropout、早停、集成学习、数据增强、剪枝
欠拟合 训练集和测试集都差 模型简单、特征不足、训练不足 增加模型复杂度、添加特征、减少正则化、延长训练
特征工程
  • 特征筛选
    • 过滤法:卡方检验、互信息、方差阈值、相关系数。独立于模型,速度快。
    • 包裹法:递归特征消除(RFE)、前向/后向搜索。用模型性能评估,计算量大。
    • 嵌入法:L1正则化(稀疏系数)、树模型的特征重要性、SHAP值。
  • 特征编码
    • 独热编码(One-Hot):无序类别,如城市、颜色。维度膨胀。
    • LabelEncoder:有序类别,如学历(高中→1,本科→2)。可能引入虚假大小关系。
    • 目标编码(Target Encoding):用目标变量的统计量(如均值)编码,适用于高基数类别。
  • 特征归一化/标准化
    • 标准化(Standardization):(x-μ)/σ,输出均值0方差1,适用于SVM、逻辑回归、KNN等依赖距离或梯度的模型。
    • 归一化(MinMax):(x-min)/(max-min),输出[0,1],适用于像素值、神经网络输入。
    • 为什么做?避免量纲差异导致模型偏向大数值特征,同时加速梯度下降收敛。
  • 特征交叉:构造组合特征(如age*income),线性模型常用;树模型自动交叉。
高频考题:AUC的物理意义?

核心答案:AUC是ROC曲线下的面积,取值范围[0.5,1]。物理意义:随机抽取一个正样本和一个负样本,模型将正样本预测得分高于负样本的概率。AUC=0.5表示随机猜测,AUC=1表示完美分类。优点:对类别分布不敏感,评估排序能力。缺点:忽略了预测概率的校准程度。

代码示例:计算并绘制ROC曲线

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc, roc_auc_score

def demo_auc():
    # 模拟真实标签和预测概率
    np.random.seed(42)
    y_true = np.array([0]*50 + [1]*50)  # 50个负例,50个正例
    y_pred = np.concatenate([
        np.random.beta(1, 5, 50),  # 负例分数偏低
        np.random.beta(5, 1, 50)   # 正例分数偏高
    ])
    
    # 计算ROC曲线
    fpr, tpr, thresholds = roc_curve(y_true, y_pred)
    roc_auc = auc(fpr, tpr)
    
    # 直接计算AUC
    auc_sk = roc_auc_score(y_true, y_pred)
    print(f"AUC值: {roc_auc:.4f} (来自roc_curve), {auc_sk:.4f} (来自roc_auc_score)")
    
    # 绘制
    plt.figure(figsize=(6,5))
    plt.plot(fpr, tpr, linewidth=2, label=f'ROC (AUC={roc_auc:.3f})')
    plt.plot([0,1], [0,1], 'k--', label='Random (AUC=0.5)')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('ROC Curve')
    plt.legend()
    plt.grid(alpha=0.3)
    plt.show()

if __name__ == "__main__":
    demo_auc()
高频考题:如何解决类别不平衡问题?

核心答案

  1. 数据层面
    • 过采样(SMOTE):合成少数类样本,避免简单复制导致的过拟合。
    • 欠采样(RandomUnderSampler):随机删除多数类,可能丢失重要信息。
    • 结合采样(SMOTE+ENN)。
  2. 算法层面
    • 调整类别权重:class_weight='balanced',损失函数中给少数类更高权重。
    • 使用对不平衡鲁棒的指标:AUC、F1、PR曲线(而非准确率)。
    • 异常检测框架(One-Class SVM)。
  3. 集成方法:Bagging + 平衡采样(BalancedBaggingClassifier)、EasyEnsemble。
  4. 阈值调整:根据验证集调优分类阈值,不固定使用0.5。

代码示例:使用class_weight处理不平衡

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from collections import Counter

# 生成极度不平衡数据(90%负类,10%正类)
X, y = make_classification(n_samples=1000, n_features=20, weights=[0.9, 0.1], random_state=42)
print("原始分布:", Counter(y))

# 模型1:不加权
lr = LogisticRegression()
lr.fit(X, y)

# 模型2:自动平衡权重
lr_balanced = LogisticRegression(class_weight='balanced')
lr_balanced.fit(X, y)

# 比较预测倾向(打印正类预测概率均值)
print(f"不加权模型 正类预测概率均值: {lr.predict_proba(X)[:,1].mean():.4f}")
print(f"平衡权重模型 正类预测概率均值: {lr_balanced.predict_proba(X)[:,1].mean():.4f}")
高频考题:特征工程中为什么要做归一化?

核心答案

  • 消除量纲影响:特征尺度差异大会使基于距离的模型(KNN、SVM、K-Means)和基于梯度下降的模型(线性回归、神经网络、逻辑回归)偏向大数值特征。
  • 加速收敛:梯度下降时,未归一化的损失函数等高线呈椭圆形,导致梯度方向震荡;归一化后呈圆形,梯度下降路径更直,收敛更快。
  • 正则化公平性:L1/L2正则化对所有特征施加相同惩罚,若尺度不同会导致小尺度特征被过度惩罚。
  • 树模型不需要:决策树、随机森林、GBDT等基于分裂的模型不受特征尺度影响。
集成学习

核心思想:组合多个基模型以提升泛化能力。

  • Bagging(Bootstrap Aggregating):并行训练多个独立模型,平均或投票。降低方差,典型代表:随机森林。
  • Boosting:串行训练,每个模型纠正前一个模型的错误。降低偏差,典型代表:AdaBoost、GBDT、XGBoost。
  • Stacking:训练多个基模型,然后用元模型(如逻辑回归)组合它们的输出。可融合异质模型。

集成学习的优势:通过平均或投票减少单个模型的过拟合(方差),或通过序列修正提升拟合能力(偏差)。

高频考题:随机森林为什么能降低过拟合?

核心答案:随机森林通过两种随机化降低过拟合:

  1. 样本随机(Bootstrap):每棵树使用有放回抽样,使得不同树训练集略有差异,平均后减少方差。
  2. 特征随机:每次分裂随机选取部分特征子集,使树之间相关性降低,集成后泛化能力更强。
    与单棵决策树相比,随机森林虽然单棵树可能过拟合,但多棵树投票/平均后显著缓解了过拟合。
高频考题:Boosting算法的核心逻辑(梯度提升、残差提升)?

核心答案

  • 残差提升(AdaBoost):每一轮调整样本权重,让新模型更关注前一轮分错的样本。最终加权投票。
  • 梯度提升(GBDT):每一轮拟合损失函数在当前模型下的负梯度(残差的推广)。对于平方损失,负梯度就是残差;对于其他损失(如交叉熵),负梯度是伪残差。每棵树拟合负梯度后,更新模型:F_m(x) = F_{m-1}(x) + η·h_m(x)

2. 深度学习(大厂算法岗核心,校招/社招重点)

基础概念

神经元output = activation(w·x + b)

激活函数

  • Sigmoid:输出(0,1),易饱和梯度消失(导数≤0.25),非零中心导致梯度更新振荡。
  • Tanh:输出(-1,1),零中心,但仍有饱和梯度问题。
  • ReLUmax(0,x),计算快、缓解梯度消失、稀疏激活。缺点:死亡ReLU(负输入永远不激活)。
  • Leaky ReLUmax(αx, x),α=0.01,解决死亡问题。
  • Softmax:多分类输出层,将logits转化为概率分布。

网络结构

  • CNN:卷积层提取局部特征(参数共享、平移不变性),池化层降维(最大池化、平均池化),全连接层分类/回归。
  • RNN:循环结构处理序列,但存在梯度消失/爆炸,难以建模长距离依赖。
  • LSTM:引入门控机制(输入门、遗忘门、输出门)和细胞状态,通过门控梯度流动,有效缓解梯度消失。
  • GRU:LSTM简化版(2门:更新门、重置门),参数少,计算快,效果与LSTM相近。
  • Transformer:自注意力机制(Q、K、V),多头注意力(多个投影空间),位置编码(注入序列顺序信息)。并行计算优于RNN,长距离依赖优于LSTM。

训练方法

  • 反向传播:链式法则从输出层逐层向前计算梯度。
  • 优化器
    • SGD:朴素梯度下降,可能震荡,需手动调节学习率。
    • Momentum:引入动量,加速收敛,减少震荡。
    • Adagrad:自适应学习率,对稀疏特征有效,但学习率单调递减。
    • RMSprop:指数加权移动平均梯度平方,解决Adagrad学习率消失。
    • Adam:Momentum + RMSprop,目前最常用。
高频考题:ReLU激活函数的优势及缺点(死亡ReLU问题)?

核心答案

  • 优势:计算简单(max(0,x)),非饱和(正区间导数为1,缓解梯度消失),稀疏激活(部分神经元输出0,增加稀疏性),加速收敛。
  • 缺点死亡ReLU问题:当输入为负时,梯度为0,且权重不再更新,该神经元永远死亡。通常由学习率过大或初始化不当引起。解决:Leaky ReLU、PReLU、ELU,或使用较小的学习率、更好的初始化。
高频考题:LSTM如何解决RNN的梯度消失/爆炸问题?

核心答案:LSTM通过门控机制细胞状态© 缓解梯度消失。关键设计:

  1. 遗忘门:选择性地丢弃历史信息。
  2. 输入门:决定新信息存入细胞状态。
  3. 输出门:决定当前时刻输出。
    梯度沿细胞状态传播时,只有逐元素的加法和乘法(门控值为[0,1]),避免了RNN中重复乘以相同权重矩阵导致的梯度消失或爆炸。梯度高速公路:细胞状态上的梯度可以长时间保持,不被非线性激活函数压缩。
高频考题:Transformer为什么比RNN更高效?

核心答案

  • 并行计算:RNN是时间步串行(t步依赖t-1步),无法并行;Transformer的自注意力可一次性计算所有位置之间的交互,GPU并行高效。
  • 长距离依赖:RNN需要将信息通过隐状态逐步传递,长序列时易丢失;Transformer通过直接注意力机制,任意两位置距离为1(常数路径长度),信息流动无衰减。
  • 训练稳定性:RNN梯度消失/爆炸需LSTM/GRU缓解;Transformer层间有残差连接+层归一化,训练更稳定。
经典模型与应用

CNN系列

  • LeNet:开山之作,卷积+池化+全连接。
  • AlexNet:ReLU、Dropout、数据增强、GPU并行。
  • VGG:小卷积核(3x3)堆叠,结构规整。
  • ResNet:残差连接y = F(x) + x,允许训练超深网络(152层),解决退化问题。
  • ResNeXt:分组卷积,增加网络宽度。
  • EfficientNet:复合缩放(深度、宽度、分辨率协同)。

RNN/LSTM系列:文本生成、机器翻译、语音识别、时序预测。

Transformer系列

  • BERT:双向Transformer编码器,MLM + NSP预训练任务,适用于理解类任务(分类、NER、问答)。
  • GPT:单向Transformer解码器,自回归语言建模,适用于生成类任务。
  • T5:Text-to-Text框架,统一所有NLP任务。
  • LLaMA:开源高效Transformer,使用RMSNorm、SwiGLU、RoPE等优化。

预训练-微调范式:在大规模无监督数据上预训练(语言建模/掩码语言模型),然后在下游任务上微调(少量标注数据)。节省训练成本,提升性能。

Prompt Engineering:通过构造输入模板(如“这部电影很[MASK],我认为它是___”),引导预训练模型进行few-shot/zero-shot推理。

高频考题:ResNet残差连接的作用?

核心答案

  1. 缓解梯度消失:残差连接为梯度提供了“短路”路径,梯度可直接流经恒等映射传到浅层,使深层网络可训练。
  2. 解决退化问题:加深网络时,非残差网络会出现“退化”(训练误差升高),而残差网络让网络更容易学习恒等映射(至少不低于浅层)。
  3. 集成学习视角:残差网络可以看作不同深度网络的隐式集成。
高频考题:BERT的双向注意力与GPT的单向注意力的区别?
模型 注意力方向 预训练任务 适用任务
BERT 双向(看左右上下文) MLM + NSP 自然语言理解(文本分类、NER、问答)
GPT 单向(只看左边,自回归) 语言建模(预测下一个token) 自然语言生成(文本生成、摘要、对话)

核心回答:BERT的双向注意力使其能捕获完整上下文信息,适合理解任务;GPT的单向注意力保证自回归生成时不会看到未来信息,适合生成任务。双向注意力在生成任务中会导致“作弊”。

高频考题:预训练模型微调的常用方法?

核心答案

  1. 全参数微调:更新所有参数,效果最好但计算成本高。
  2. 冻结部分层:冻结底层(通用特征),只微调上层(任务特定层)。
  3. 适配器(Adapter):在Transformer层间插入小型可训练模块,冻结原模型参数。
  4. LoRA:低秩适配,在权重矩阵旁添加低秩分解矩阵A·B,只训练A、B。
  5. Prompt Tuning:在输入前添加可训练的连续向量(软提示),冻结模型主体。
  6. Prefix Tuning:在每层Key/Value前添加可训练前缀。
深度学习工程细节
正则化方法
  • Dropout:训练时随机丢弃部分神经元(概率p),测试时乘以(1-p)(或训练时缩放)。防止神经元共适应,增强泛化。
  • L1/L2正则化:在损失函数加惩罚项,L1产生稀疏解,L2防止权重过大。
  • Batch Normalization (BN):对每个batch的特征做标准化(减均值除方差),然后学习缩放和平移。加速收敛,允许更大学习率,有轻微正则化效果。依赖batch size,不适合小batch。
  • Layer Normalization (LN):对每个样本的所有特征做标准化。不依赖batch,适用于RNN、Transformer、小batch场景。
数据增强
  • 图像:随机翻转、旋转、裁剪、颜色抖动、归一化、Cutout、MixUp、CutMix。
  • 文本:同义词替换、随机插入/删除、回译(翻译成其他语言再翻译回来)。
模型训练问题
  • 梯度消失:发生在深层网络或饱和激活函数(Sigmoid/Tanh)。解决:ReLU/Leaky ReLU、BatchNorm、残差连接、梯度裁剪、LSTM/Transformer。
  • 梯度爆炸:发生在RNN或深层网络。解决:梯度裁剪(torch.nn.utils.clip_grad_norm_)、权重正则化、使用更小的学习率。
  • Batch Size选择:小Batch(2-32)泛化更好但训练慢;大Batch(64-512)训练快但可能陷入尖锐极小值,泛化下降。常用线性缩放学习率:lr_new = lr_base * (batch_new / batch_base)
  • 学习率调度:阶梯衰减、指数衰减、余弦退火、Warm-up(前期线性增加LR,防止早期震荡)。
高频考题:BN和LN的区别及适用场景?

核心回答

  • BN:对每个特征通道在一个batch内做标准化。适用于CNN(特征在空间和batch上统计),依赖较大batch size。不适合RNN(变长序列)和极小batch。
  • LN:对每个样本所有特征做标准化。适用于RNN、Transformer,不受batch size限制,在NLP中更常用。

代码示例

import torch
import torch.nn as nn

# BN: 输入 (N, C, H, W),对 (N, H, W) 维度做标准化
bn = nn.BatchNorm2d(3)  # 3个通道
x = torch.randn(4, 3, 32, 32)
out_bn = bn(x)

# LN: 输入 (N, C, H, W),对 (C, H, W) 维度做标准化
ln = nn.LayerNorm([3, 32, 32])  # 指定特征形状
out_ln = ln(x)

print(f"BN输出形状: {out_bn.shape}, 均值≈{out_bn.mean().item():.2f}")
print(f"LN输出形状: {out_ln.shape}, 均值≈{out_ln.mean().item():.2f}")
高频考题:Dropout在训练和测试时的差异?

核心答案

  • 训练时:以概率p随机将神经元输出置0,其余激活值乘以1/(1-p)(保持整体期望不变)。相当于每次训练一个不同的子网络。
  • 测试时:不进行随机丢弃,保持所有神经元,且不进行缩放(因为训练时已做缩放)。测试时希望使用完整的模型能力。
高频考题:如何解决深度学习中的过拟合?

核心答案

  1. 增加数据:收集更多数据或数据增强。
  2. 降低模型复杂度:减少层数/神经元数、权重共享。
  3. 正则化:L1/L2、Dropout、BN(轻微)、早停(Early Stopping)。
  4. 集成学习:训练多个模型(不同初始化/数据子集)平均。
  5. 标签平滑:防止模型过于自信。
  6. 添加噪声:输入噪声、权重噪声。

3. 方向细分模块(按岗位侧重,大厂按需考察)

自然语言处理(NLP)方向
基础任务
  • 文本分类:情感分析、主题分类。
  • 命名实体识别(NER):识别人名、地名、组织名等。
  • 关系抽取:实体对之间的关系(如“张三-毕业于-清华大学”)。
  • 文本摘要:抽取式或生成式。
  • 机器翻译:编码器-解码器架构。
  • 问答系统:检索式或生成式。
  • 情感分析:判断文本情感倾向。
核心技术

词向量

  • Word2Vec:CBOW(上下文预测中心词)、Skip-gram(中心词预测上下文)。负采样优化。
  • GloVe:基于全局词共现矩阵。
  • FastText:加入子词信息(n-gram),解决OOV。

注意力机制:计算Query与Key的相似度作为Value的加权权重。使模型动态聚焦重要部分。

预训练模型:BERT、GPT、ERNIE(知识增强)、RoBERTa。

Prompt Tuning:将下游任务转化为完形填空或生成任务,固定预训练模型参数,只优化提示向量。

Few-shot / Zero-shot Learning:少量标注(few-shot)或无标注(zero-shot)下的学习,通常依赖预训练模型和提示工程。

高频考题:Word2Vec的原理(CBOW、Skip-gram)?

核心答案

  • CBOW:用上下文单词预测中心词。输入层是上下文词向量的平均(或求和),隐藏层,输出层用Softmax预测中心词。训练快,适合小数据集。
  • Skip-gram:用中心词预测上下文单词。每个中心词-上下文词对视为一个训练样本。对低频词效果更好,但训练慢。
  • 优化技巧:负采样(将预测目标词的任务转化为二分类,采样少量负样本)、层次Softmax(哈夫曼树加速)。
高频考题:NER的常用模型(BiLSTM+CRF)?

核心答案:BiLSTM+CRF是经典序列标注框架。

  • BiLSTM:双向LSTM捕获每个字符/词的前后上下文信息,输出每个位置属于各类标签的分数(发射分数)。
  • CRF(条件随机场):在BiLSTM输出基础上加入转移分数(例如,I-ORG不能紧跟在B-PER后面)。CRF解码(维特比算法)找出全局最优的标签序列,保证标签转移的合法性。
  • 优势:结合LSTM的上下文表征能力和CRF的标签约束能力,相比纯Softmax分类更合理。

简单实现示意

import torch
import torch.nn as nn

class BiLSTM_CRF(nn.Module):
    def __init__(self, vocab_size, tagset_size, embedding_dim=128, hidden_dim=256):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embedding_dim)
        self.lstm = nn.LSTM(embedding_dim, hidden_dim // 2, num_layers=1, 
                            bidirectional=True, batch_first=True)
        self.hidden2tag = nn.Linear(hidden_dim, tagset_size)
        self.crf = None  # 实际会使用torchcrf或自定义
        
    def forward(self, x):
        emb = self.embedding(x)        # (batch, seq_len, emb_dim)
        lstm_out, _ = self.lstm(emb)   # (batch, seq_len, hidden_dim)
        emissions = self.hidden2tag(lstm_out)  # (batch, seq_len, tagset_size)
        return emissions
高频考题:如何解决低资源场景下的NLP任务?

核心答案

  1. 迁移学习:使用预训练模型(BERT、XLM-R)在小数据集上微调。
  2. 数据增强:回译、同义词替换、随机掩码恢复(利用MLM生成)。
  3. 半监督学习:伪标签、一致性正则化(UDA、MixText)。
  4. 元学习:MAML等算法学习快速适应新任务。
  5. Prompt Tuning:利用预训练模型的知识,用少量示例设计模板。
计算机视觉(CV)方向
基础任务
  • 图像分类:ResNet、EfficientNet。
  • 目标检测:两阶段(Faster R-CNN)、单阶段(YOLO、SSD)、无锚框(CenterNet)。
  • 语义分割:U-Net(医学图像)、DeepLab(空洞卷积)、Mask R-CNN(实例分割)。
  • 人脸识别:FaceNet(三元组损失)、ArcFace。
  • 图像生成:GAN(生成对抗网络)、Diffusion Model(扩散模型,如Stable Diffusion)。
核心技术
  • 卷积操作:卷积核在输入上滑动,提取局部特征。
  • 锚框(Anchor):预设不同尺度和长宽比的先验框,用于目标检测中的候选区域。
  • 非极大值抑制(NMS):去除重复检测框,保留最高置信度的框。
  • 迁移学习:在ImageNet等大数据集预训练,在小数据集微调。
  • GAN原理:生成器G从噪声生成假样本,判别器D区分真/假,两者博弈达到纳什均衡。生成器学习到真实数据分布。
高频考题:YOLO系列的进化及核心优化?

核心回答

  • YOLOv1:端到端回归边界框和类别,速度极快但精度低。
  • YOLOv2:Anchor机制、BatchNorm、多尺度训练。
  • YOLOv3:多尺度预测(FPN)、Darknet-53、使用Logistic回归。
  • YOLOv4:Mish激活、CSPNet、SAM注意力、PANet、Mosaic数据增强。
  • YOLOv5:PyTorch实现,Focus模块、自适应锚框、集成多种Tricks。
  • YOLOv7:E-ELAN、重参数化、辅助头训练。
  • 核心优化:更高精度(更强骨干网络、特征金字塔、注意力)、更快速度(CSPNet、深度可分离卷积)、更少计算量(Anchor-Free、无NMS设计)。
高频考题:Mask R-CNN与Faster R-CNN的区别?

核心答案:Mask R-CNN在Faster R-CNN基础上增加分割分支,实现实例分割。区别:

  1. 并行输出:Faster R-CNN输出类别+边界框;Mask R-CNN额外输出二进制掩码(每个候选区域一个掩码)。
  2. RoI Align:替代RoI Pooling,消除量化误差,保留空间位置(双线性插值),提升分割精度。
  3. 损失函数:多任务损失 = 分类损失 + 边界框回归损失 + 掩码平均二值交叉熵损失。
高频考题:GAN的训练难点(模式崩溃)及解决方法?

核心答案

  • 模式崩溃:生成器只生成少数几类样本,无法覆盖真实数据分布(例如生成手写数字只有“1”)。
  • 解决方法
    1. 改进架构:WGAN(Wasserstein距离+梯度惩罚)、LSGAN(最小二乘损失)、SAGAN(自注意力)。
    2. 标签平滑:避免判别器过度自信。
    3. Mini-batch判别:让判别器比较batch内的样本多样性。
    4. 历史平均、单边标签噪声
    5. 渐进式训练:从小分辨率逐步增加。
推荐系统方向
基础任务
  • 召回:从海量物品中快速选出候选集(协同过滤、向量召回、双塔模型)。
  • 排序:对候选集精细打分排序(LR、GBDT、DeepFM、DIN)。
  • 个性化推荐:结合用户历史行为、上下文信息。
核心技术
  • 协同过滤:基于用户相似度(UserCF)或物品相似度(ItemCF)。缺点:冷启动、稀疏矩阵、流行度偏差。
  • 矩阵分解:SVD、SVD++,将用户-物品交互矩阵分解为低维隐向量。
  • 特征交叉:FM(二阶交叉)、FFM(场感知)。
  • 深度学习推荐
    • DeepFM:FM + Deep部分,同时学习低阶和高阶特征交互,端到端训练。
    • Wide&Deep:Wide部分记忆共现(LR),Deep部分泛化(DNN)。
    • DIN:注意力机制,根据用户历史行为与候选物品的相关性加权,捕获用户兴趣多样性。
    • DIEN:在DIN基础上加入序列层(GRU)和兴趣进化层,建模用户兴趣演变。
高频考题:协同过滤的缺点及改进方法?

核心答案

  • 缺点:冷启动(新用户/新物品无交互)、稀疏性(多数用户只对少量物品有评分)、可扩展性(计算相似度矩阵O(n²))、流行度偏差(热门物品主导推荐)。
  • 改进
    1. 冷启动:混合推荐(用内容特征或元数据)、Bandit策略(EE探索)。
    2. 稀疏性:矩阵分解(降维)、图神经网络(LightGCN)、Side Information(用户画像/物品属性)。
    3. 可扩展性:基于物品的CF、近似最近邻(ANN)索引。
    4. 偏差:流行度降权、对抗训练。
高频考题:DeepFM与Wide&Deep的核心差异?
模型 Wide部分 Deep部分 特征交互 是否需要特征工程
Wide&Deep 线性模型(LR) DNN Wide部分手动做交叉 需要(特征交叉)
DeepFM FM(自动二阶交叉) DNN FM自动学习二阶交叉 无需手动交叉

核心回答:Wide&Deep需要人工设计Wide部分的特征交叉(如user_id AND item_id),依赖特征工程;DeepFM用FM替代Wide部分,自动学习所有二阶特征交互,且与Deep共享embedding,训练更高效。

高频考题:推荐系统中的冷启动问题及解决方案?

核心答案

  • 用户冷启动:新用户无历史行为。
    • 方案:热门推荐、人口统计学匹配、快速试探(多臂赌博机)、引导用户输入兴趣标签。
  • 物品冷启动:新物品无交互。
    • 方案:利用内容特征(标题、类别、图像)做内容推荐、以图搜图、元学习。
  • 系统冷启动:无任何数据。
    • 方案:先做热门榜单,同时引入少量专家标注或众包。
时序预测方向
基础任务
  • 时间序列预测:ARIMA、Prophet、LSTM、Transformer(Informer、Autoformer)。
  • 异常检测:基于统计(3-sigma)、基于预测残差、基于重构误差(Autoencoder)。
  • 趋势分析:STL分解、HP滤波。
核心技术
  • 时序特征工程:滞后特征(lag)、滑动窗口统计(均值、标准差)、时间特征(星期几、月份、是否节假日)。
  • LSTM/Transformer:将时间窗口的观测值作为输入序列,预测下一个或多个值。Transformer的长距离依赖优于LSTM,但需位置编码。
  • Prophet:分解模型(趋势、季节性、节假日效应),对缺失值、异常点鲁棒,可解释性强,适合商业时序。
高频考题:ARIMA与LSTM在时序预测中的区别?

核心回答

  • ARIMA:传统统计模型,假设时间序列线性、平稳(需差分)。参数(p,d,q)可解释性强,适合单变量、短期预测。
  • LSTM:非线性、多变量、自动特征提取。适合复杂模式、长期依赖,但需要大量数据、调参、计算资源。工业界常用混合模型:ARIMA提取线性成分,LSTM拟合残差。
高频考题:如何处理时序数据中的缺失值和异常值?

核心回答

  • 缺失值
    1. 前向填充(ffill)/后向填充(bfill)——适用于平稳序列。
    2. 插值(线性、样条、多项式)。
    3. 预测填补(用相邻值回归)。
    4. 模型处理(树模型可处理缺失,LSTM可加入mask)。
  • 异常值
    1. 统计方法:3-sigma、IQR(箱线图)。
    2. 基于预测:用模型预测,残差超过阈值视为异常。
    3. 替换:用中位数、前后均值、插值替换。
    4. 保留:有些异常本身是重要事件(如促销导致的销量暴涨),需结合业务判断。

复习策略建议

  1. 机器学习基础:手推逻辑回归梯度更新、决策树分裂过程、XGBoost公式。掌握AUC、PR曲线、混淆矩阵的适用场景。
  2. 深度学习:至少手写一个简单CNN或LSTM的前向/反向(伪代码),理解ResNet、Transformer的核心思想。熟悉BN/LN、Dropout的底层实现。
  3. 方向模块:根据目标岗位深度复习2-3个高频模型(如CV岗重点YOLO系列、ResNet;NLP岗重点BERT、Word2Vec;推荐岗重点DeepFM、DIN)。准备1-2个自己做过的项目,能把模型选择、数据预处理、评估指标、优化过程讲清楚。

面试官最想看到的是:扎实的数学直觉 + 流利的代码实现 +
清晰的工程落地思路
。希望本章内容能帮助你在面试中自信应对核心算法问题。下一篇文章将深入探讨模型部署与工程落地模块(ONNX、TensorRT、Docker、K8s、MLOps),敬请期待。


🌟 感谢您耐心阅读到这里!
💡 如果本文对您有所启发欢迎:
👍 点赞📌 收藏 📤 分享给更多需要的伙伴。
🗣️ 期待在评论区看到您的想法, 共同进步。
🔔 关注我,持续获取更多干货内容~
🤗 我们下篇文章见~

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐