📊 机器学习与深度学习区别

维度 机器学习(Machine Learning) 深度学习(Deep Learning)
定义 通过算法从数据中学习模式,无需显式编程 机器学习的一个子集,使用多层神经网络自动提取特征
特征工程 通常需要人工设计和提取特征 自动从原始数据中学习特征(端到端学习)
数据需求 对中小规模数据效果较好 通常需要大量数据才能发挥优势
计算资源 对计算资源要求较低,可在普通CPU上运行 依赖GPU/TPU等高性能硬件加速训练
模型复杂度 模型相对简单(如线性回归、SVM、决策树等) 模型结构复杂(如CNN、RNN、Transformer等)
可解释性 通常可解释性较强(如决策树、逻辑回归) 可解释性较差,常被视为“黑箱”
训练时间 训练较快 训练时间长,尤其在大数据和深层网络下
典型应用 垃圾邮件分类、信用评分、推荐系统(传统) 图像识别、语音识别、自然语言处理、自动驾驶
泛化能力 在小数据集上可能泛化更好 在大数据集上泛化能力强,但小数据易过拟合
调参难度 超参数较少,调参相对简单 超参数多(学习率、层数、激活函数等),调参复杂

📊 机器学习的核心模型

模型类别 代表算法 核心思想 适用任务 关键特点/面试要点
线性模型 线性回归、逻辑回归 假设输入与输出之间存在线性关系 回归、二分类/多分类 简单高效、可解释性强;逻辑回归使用sigmoid/softmax + 交叉熵损失
决策树 ID3、C4.5、CART 通过特征划分递归构建树结构 分类、回归 易解释、无需特征缩放;易过拟合,常作为集成方法基学习器
集成学习 随机森林、AdaBoost、GBDT、XGBoost、LightGBM 组合多个弱学习器提升性能 分类、回归 随机森林:Bagging + 特征随机;GBDT/XGBoost:Boosting + 梯度优化;抗过拟合、精度高
支持向量机(SVM) 线性SVM、核SVM 寻找最大间隔超平面 分类、回归(SVR) 依赖核技巧处理非线性;对高维有效;对噪声敏感;需调参(C, γ)
朴素贝叶斯 高斯NB、多项式NB、伯努利NB 基于贝叶斯定理 + 特征条件独立假设 文本分类等 计算快、适合高维稀疏数据(如TF-IDF);独立性假设常不成立但实践中有效
K近邻(KNN) K-Nearest Neighbors 基于距离度量找最近邻居投票/平均 分类、回归 无训练过程(懒学习);计算开销大;对维度灾难敏感;需特征归一化
聚类算法 K-Means、层次聚类、DBSCAN 无监督地将样本分组 无监督学习 K-Means需指定K、对初始值敏感;DBSCAN可发现任意形状簇、抗噪;评估指标如轮廓系数
降维方法 PCA、LDA、t-SNE 降低特征维度,保留关键信息 数据压缩、可视化 PCA:无监督,最大化方差;LDA:有监督,最大化类间/类内比;t-SNE用于可视化非线性结构
EM算法 高斯混合模型(GMM) 含隐变量的概率模型参数估计 聚类、密度估计 E步(期望)、M步(最大化)交替;GMM是软聚类,可建模复杂分布

📊 深度学习的核心模型

模型类别 代表架构 核心机制 典型任务 关键特点/面试要点
全连接神经网络(DNN/MLP) 多层感知机(MLP) 全连接层 + 非线性激活(如ReLU) 分类、回归 基础结构;易过拟合;参数多;需归一化输入
卷积神经网络(CNN) LeNet、AlexNet、VGG、ResNet、EfficientNet、MixNet 卷积层(局部感受野、权值共享)、池化、残差连接 图像分类、目标检测、语义分割 自动提取空间层次特征;平移不变性;ResNet解决梯度消失;深度可分离卷积提升效率
循环神经网络(RNN) Vanilla RNN、LSTM、GRU 循环结构处理序列,记忆历史信息 时序预测、NLP(早期) RNN存在梯度消失/爆炸;LSTM/GRU通过门控机制缓解;难以并行
Transformer 原始Transformer、BERT、GPT、ViT 自注意力(Self-Attention)+ 前馈网络 NLP、CV、多模态 完全并行化;建模长距离依赖;位置编码(绝对/相对);成为大模型基础架构
生成对抗网络(GAN) DCGAN、WGAN、CycleGAN、StyleGAN 生成器 vs 判别器对抗训练 图像生成、风格迁移、超分 无监督生成;训练不稳定(模式崩溃);WGAN用Wasserstein距离改善梯度
自编码器(AE) Vanilla AE、VAE、Denoising AE 编码器-解码器结构,重构输入 降维、去噪、生成 VAE引入概率建模,可生成新样本;隐空间连续;常用于表征学习
图神经网络(GNN) GCN、GAT、GraphSAGE 消息传递机制聚合邻居信息 图结构数据(社交网络、分子) 处理非欧几里得数据;节点/图分类;过平滑问题;可扩展性挑战
视觉Transformer(ViT) ViT、Swin Transformer 将图像分块 + Transformer编码 图像分类、检测 摒弃CNN归纳偏置;大数据下性能强;Swin引入局部窗口降低计算复杂度
多模态模型 CLIP、Flamingo、BLIP 联合建模文本+图像等多模态信号 跨模态检索、图文生成 对比学习(如CLIP);对齐不同模态语义空间;需大规模对齐数据

📊 不同卷积神经网络的对比

网络名称 提出年份 核心创新点 关键结构/技术 优缺点 典型应用场景
LeNet-5 1998 首个成功应用于手写数字识别的CNN 卷积层 + 池化层 + 全连接层 简单有效,但表达能力有限 手写数字识别(MNIST)
AlexNet 2012 首次在ImageNet夺冠,推动深度学习复兴 ReLU激活、Dropout、数据增强、GPU训练 参数多、计算量大,但性能显著优于传统方法 图像分类(ImageNet)
VGGNet 2014 使用统一的小卷积核(3×3)堆叠 多层3×3卷积堆叠、更深网络(16/19层) 结构规整、迁移学习效果好,但参数量大、计算开销高 图像分类、目标检测特征提取
GoogLeNet (Inception v1) 2014 引入Inception模块,减少参数量 Inception模块(多尺度并行卷积)、1×1卷积降维、辅助分类器 计算效率高、准确率高,但结构复杂 图像分类(ImageNet)
ResNet 2015 引入残差连接(skip connection)解决梯度消失 残差块(Residual Block)、BatchNorm 可训练极深网络(>1000层),训练稳定,性能优异 图像分类、目标检测、语义分割等
DenseNet 2017 每层连接所有前面层(密集连接) Dense Block、特征复用、减少参数 参数更少、梯度流动更好,但显存占用高 图像分类、小样本学习
MobileNet v1 2017 轻量化网络,适用于移动端 深度可分离卷积(Depthwise Separable Conv) 参数少、速度快,精度略低于大型模型 移动端图像分类、实时检测
MobileNet v2 2018 引入倒残差结构和线性瓶颈 Inverted Residual + Linear Bottleneck 比v1更高效,适合嵌入式设备 移动端、边缘计算
EfficientNet 2019 复合缩放(Compound Scaling)统一缩放深度/宽度/分辨率 MBConv模块、基于EfficientNet-B0自动缩放 精度与效率平衡最佳之一 通用图像任务,资源受限场景
ResNeXt 2017 “分组卷积 + 并行路径”思想(基数cardinality) 分组卷积(Grouped Conv)、残差连接 在相同FLOPs下性能优于ResNet 图像分类、特征提取
Xception 2017 极致使用深度可分离卷积 将Inception模块替换为深度可分离卷积 参数更少、性能优于Inception v3 图像分类

📊 Transformer 与 QKV 机制核心知识点

概念/组件 说明 关键公式/结构 面试常见问题/要点
Transformer 2017年提出,完全基于注意力机制的序列建模架构,取代RNN/CNN Encoder-Decoder结构,含多头注意力、FFN、残差连接、LayerNorm 为何不用RNN?并行性好、长程依赖建模强
Self-Attention 计算序列中每个元素与其他元素的相关性 Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dk QKT)V 为什么除以dk\sqrt{d_k}dk ?防止点积过大导致梯度饱和
Q (Query) 查询向量,表示当前token在寻找什么信息 Q=XWQQ = XW^QQ=XWQWQW^QWQ为可学习权重 Q来自当前token,用于“主动查询”其他位置
K (Key) 键向量,表示每个位置可被查询的“标识” K=XWKK = XW^KK=XWK K与Q点积衡量匹配度
V (Value) 值向量,包含实际要提取的信息内容 V=XWVV = XW^VV=XWV 注意力权重作用于V,决定“读取什么”
QKV 来源 均由输入嵌入 XXX 线性变换得到,共享输入但投影不同 WQ,WK,WV∈Rdmodel×dkW^Q, W^K, W^V \in \mathbb{R}^{d_{\text{model}} \times d_k}WQ,WK,WVRdmodel×dk 三者维度通常相同(dk=dvd_k = d_vdk=dv),但可不同
Scaled Dot-Product Attention 标准注意力计算方式 缩放因子 dk\sqrt{d_k}dk ,softmax归一化 与加性注意力对比?点积更快,适合高维
Multi-Head Attention 并行多个注意力头,捕获不同子空间信息 Concat(head1,...,headh)WO\text{Concat}(\text{head}_1, ..., \text{head}_h)W^OConcat(head1,...,headh)WO,其中 headi=Attention(QWiQ,KWiK,VWiV)\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)headi=Attention(QWiQ,KWiK,VWiV) 头数一般为8或16;为何多头?增强表达能力
位置编码 (Positional Encoding) 引入序列顺序信息(因无RNN) 使用正弦/余弦函数或可学习编码 为何不用RNN的位置信息?Transformer本身无序
QKV 的物理意义类比 类似“检索系统”:Q是查询请求,K是数据库索引,V是返回内容 面试高频类比题
计算复杂度 Self-Attention 为 O(n2⋅d)O(n^2 \cdot d)O(n2d),n为序列长度 相比CNN/RNN,长序列开销大 为何长文本难处理?引出稀疏注意力、Longformer等改进
QKV 是否共享权重? 通常不共享(WQ,WK,WVW^Q, W^K, W^VWQ,WK,WV独立),但某些变体(如ALiBi、某些压缩模型)可能共享 共享会降低表达能力,但节省参数

📊 正则化、归一化等关键辅助训练技术

技术类别 方法名称 核心思想 关键公式/操作 作用/优点 缺点/注意事项 面试高频考点
正则化(Regularization) L1 正则 在损失函数中加入权重的绝对值和 Ltotal=L+λ∑∣wi∣1\mathcal{L}_{\text{total}} = \mathcal{L} + \lambda \sum |w_i|_1Ltotal=L+λwi1 产生稀疏解,特征选择 收敛慢,不可导点需特殊处理 L1 vs L2:稀疏性、解的特性
L2 正则(权重衰减) 加入权重的平方和 Ltotal=L+λ∑wi2\mathcal{L}_{\text{total}} = \mathcal{L} + \lambda \sum w_i^2Ltotal=L+λwi2 防止过拟合,平滑权重 不产生稀疏,所有权重都保留 与优化器中 weight_decay 的关系
Dropout 训练时随机“关闭”部分神经元 每层以概率 ppp 置零神经元,测试时缩放输出 近似集成学习,减少神经元共适应 对小模型可能欠拟合;RNN中需谨慎使用 为何测试时不 dropout?如何缩放?
Early Stopping 监控验证集性能,提前终止训练 当验证损失连续若干轮不下降则停止 简单有效防过拟合 依赖验证集划分,可能早停 与正则化的关系?是否算正则?
数据增强(Data Augmentation) 通过对输入变换生成新样本 图像:旋转、裁剪、翻转;文本:同义词替换等 增加数据多样性,提升泛化 增强方式需合理,避免语义破坏 CV/NLP 中的典型方法
归一化(Normalization) Batch Normalization (BN) 对一个 batch 的特征做归一化 x^=x−μBσB2+ϵ\hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}x^=σB2+ϵ xμB, y=γx^+βy = \gamma \hat{x} + \betay=γx^+β 加速训练、缓解内部协变量偏移、允许更高学习率 batch size 小时效果差;推理需滑动均值/方差 BN 在训练/测试的区别?为何有效?
Layer Normalization (LN) 对单个样本的所有特征归一化 沿特征维度计算均值/方差 适用于 RNN/Transformer,不受 batch size 影响 在 CNN 中效果不如 BN 为何 Transformer 用 LN 而非 BN?
Instance Normalization (IN) 对单个样本的每个通道单独归一化 常用于图像生成(如风格迁移) 去除图像对比度等 instance-specific 信息 不适合分类任务 与 BN/LN 的区别?
Group Normalization (GN) 将通道分组后归一化 介于 LN(1组)和 IN(C组)之间 在小 batch 下优于 BN 需调组数超参 COCO 目标检测常用
其他辅助技术 Gradient Clipping 限制梯度范数防止爆炸 if ∣g∣>τ, then g←g⋅τ∣g∣\text{if } |g| > \tau, \text{ then } g \leftarrow g \cdot \frac{\tau}{|g|}if g>τ, then gggτ RNN/Transformer 训练稳定 仅缓解梯度爆炸,不解决根本原因 何时使用?与初始化关系?
Weight Initialization 合理初始化权重(如 Xavier、He) Xavier: Var(w)=2nin+nout\text{Var}(w) = \frac{2}{n_{in} + n_{out}}Var(w)=nin+nout2;He: 2nin\frac{2}{n_{in}}nin2 避免梯度消失/爆炸,加速收敛 激活函数决定初始化方式 ReLU 用 He,tanh 用 Xavier
Label Smoothing 软化 one-hot 标签 ysmooth=(1−ϵ)y+ϵKy_{\text{smooth}} = (1 - \epsilon) y + \frac{\epsilon}{K}ysmooth=(1ϵ)y+Kϵ 防止模型过于自信,提升泛化 ϵ\epsilonϵ 通常取 0.1 与交叉熵损失结合使用

📊 训练中的核心模块:损失函数、优化器、学习率调度器

模块类别 名称/方法 适用任务 核心公式/机制 优点 缺点/注意事项 面试高频考点
损失函数(Loss Function) Cross-Entropy Loss 分类(尤其是多类) L=−∑yilog⁡(y^i)\mathcal{L} = -\sum y_i \log(\hat{y}_i)L=yilog(y^i) 与 softmax 配合良好,梯度稳定 对错误预测惩罚大,可能受类别不平衡影响 与 KL 散度关系?为何不用 MSE?
Binary Cross-Entropy (BCE) 二分类 / 多标签 L=−[ylog⁡(y^)+(1−y)log⁡(1−y^)]\mathcal{L} = -[y \log(\hat{y}) + (1-y)\log(1-\hat{y})]L=[ylog(y^)+(1y)log(1y^)] 适用于 sigmoid 输出 同样受不平衡影响 多标签 vs 多分类损失区别?
Focal Loss 类别极度不平衡分类 L=−α(1−y^)γlog⁡(y^)\mathcal{L} = -\alpha (1-\hat{y})^\gamma \log(\hat{y})L=α(1y^)γlog(y^) 降低易分样本权重,聚焦难例 需调 γ,α\gamma, \alphaγ,α 超参 RetinaNet 中提出,解决正负样本不均衡
MSE (L2 Loss) 回归 L=1n∑(y−y^)2\mathcal{L} = \frac{1}{n}\sum (y - \hat{y})^2L=n1(yy^)2 光滑、可导 对异常值敏感 与 MAE 对比?梯度特性?
MAE (L1 Loss) 回归 L=1n∑∣y−y^∣\mathcal{L} = \frac{1}{n}\sum |y - \hat{y}|L=n1yy^ 对异常值鲁棒 梯度不连续(在0点) 为何 L1 产生稀疏解?
Huber Loss 回归(兼顾 MSE/MAE) 分段函数:误差小时用 MSE,大时用 MAE 鲁棒且可导 需设定阈值 δ\deltaδ 何时使用?
Triplet Loss 度量学习、人脸识别 L=max⁡(0,d(a,p)−d(a,n)+α)\mathcal{L} = \max(0, d(a,p) - d(a,n) + \alpha)L=max(0,d(a,p)d(a,n)+α) 学习嵌入空间距离 难样本挖掘关键 anchor/positive/negative 选择策略?
优化器(Optimizer) SGD 通用 w←w−η∇Lw \leftarrow w - \eta \nabla \mathcal{L}wwηL 简单、理论扎实 收敛慢,易陷局部极小/鞍点 基础,常作为对比基准
SGD with Momentum 通用 v←βv+∇L, w←w−ηvv \leftarrow \beta v + \nabla \mathcal{L},\ w \leftarrow w - \eta vvβv+L, wwηv 加速收敛,抑制震荡 需调动量 β\betaβ(常0.9) 物理意义:模拟惯性
Adam 通用(尤其深度学习) 自适应学习率,结合 Momentum + RMSProp 收敛快,对超参不敏感 可能泛化略差于 SGD;需 warmup(尤其 Transformer) 偏差校正?β1,β2\beta_1, \beta_2β1,β2 含义?
RMSProp 非稳态目标 按参数自适应学习率(基于梯度平方滑动平均) 适合非平稳目标 较少单独使用 Adam 的组成部分
AdamW 带权重衰减的 Adam 将 L2 正则(权重衰减)与 Adam 梯度更新解耦 更正确的正则化,泛化更好 默认推荐用于现代训练 与 Adam + L2 的区别?
学习率调度器(LR Scheduler) Step Decay 通用 每隔固定 epoch,η←η⋅γ\eta \leftarrow \eta \cdot \gammaηηγ 简单有效 需预设衰减步长 常用于 CV
Exponential Decay 通用 ηt=η0⋅γt\eta_t = \eta_0 \cdot \gamma^tηt=η0γt 平滑衰减 衰减过快可能早停
Cosine Annealing 通用 ηt=ηmin⁡+12(ηmax⁡−ηmin⁡)(1+cos⁡(TcurTmaxπ))\eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min})(1 + \cos(\frac{T_{cur}}{T_{max}}\pi))ηt=ηmin+21(ηmaxηmin)(1+cos(TmaxTcurπ)) 平滑下降+重启可跳出局部最优 需设周期 TmaxT_{max}Tmax 常与 warm restart 结合(SGDR)
Linear Warmup + Decay NLP / Transformer 初期线性增大学习率,再衰减 解决训练初期不稳定问题 Transformer 训练标配 为何需要 warmup?Adam 初始方差大
ReduceLROnPlateau 通用 当验证指标停滞时降低学习率 自适应调整 依赖验证集,可能延迟 监控指标选择?
组合实践 面试常问:你项目中用的什么组合?为什么?

📊 分类与回归任务的常见评估指标

任务类型 指标名称 定义/公式 适用场景 优点 缺点/注意事项 面试高频考点
分类任务 Accuracy(准确率) TP+TNTP+TN+FP+FN\frac{TP + TN}{TP + TN + FP + FN}TP+TN+FP+FNTP+TN 类别均衡的多类分类 直观、易理解 类别不平衡时失效(如99%负样本) 为何不平衡时不看 Accuracy?
Precision(精确率) TPTP+FP\frac{TP}{TP + FP}TP+FPTP 关注“预测为正的有多少是真的” 适用于 FP 代价高(如垃圾邮件) 忽略 FN P-R 权衡?
Recall(召回率 / Sensitivity) TPTP+FN\frac{TP}{TP + FN}TP+FNTP 关注“所有正样本中找出了多少” 适用于 FN 代价高(如疾病诊断) 忽略 FP 与 Precision 的 trade-off
F1-Score 2⋅Precision⋅RecallPrecision+Recall2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}2Precision+RecallPrecisionRecall 二分类,尤其不平衡 平衡 P 和 R 的调和平均 仅考虑正类,多类需 macro/micro Macro-F1 vs Micro-F1 区别?
AUC-ROC ROC 曲线下面积(TPR vs FPR) 评估模型整体排序能力 对类别不平衡鲁棒,阈值无关 在极度不平衡时可能过于乐观 AUC 高但 Precision 低?为何?
PR-AUC Precision-Recall 曲线下面积 正样本少或关注正类时 比 ROC 更敏感于不平衡 不常用作默认指标 何时用 PR-AUC 而非 ROC-AUC?
Confusion Matrix 四格表:TP, TN, FP, FN 所有分类任务 提供完整错误分析 需人工解读 是其他指标的基础
Log Loss(交叉熵) −1N∑[yilog⁡(y^i)+(1−yi)log⁡(1−y^i)]-\frac{1}{N}\sum [y_i \log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i)]N1[yilog(y^i)+(1yi)log(1y^i)] 评估概率输出质量 惩罚错误置信预测 对异常预测敏感 与 Accuracy 的区别?
回归任务 MSE(均方误差) 1n∑(yi−y^i)2\frac{1}{n}\sum (y_i - \hat{y}_i)^2n1(yiy^i)2 通用回归 可导、数学性质好 对异常值敏感 为何不用 MAE?梯度特性?
RMSE(均方根误差) MSE\sqrt{\text{MSE}}MSE 通用回归 与目标同量纲,可解释 同样对异常值敏感 与 MSE 关系?
MAE(平均绝对误差) 1n∑∣yi−y^i∣\frac{1}{n}\sum |y_i - \hat{y}_i|n1yiy^i 通用回归,尤其含异常值 对异常值鲁棒 梯度不连续(优化稍难) L1 vs L2 损失对应指标?
MAPE(平均绝对百分比误差) $\frac{100%}{n}\sum \left \frac{y_i - \hat{y}_i}{y_i}\right $ 业务指标(如销量预测) 无量纲,便于跨序列比较
R²(决定系数) 1−∑(yi−y^i)2∑(yi−yˉ)21 - \frac{\sum (y_i - \hat{y}_i)^2}{\sum (y_i - \bar{y})^2}1(yiyˉ)2(yiy^i)2 评估模型解释方差比例 取值 [−∞,1],1 表示完美 负值表示比均值还差 R² 高是否一定好?
多分类扩展 Macro-Averaging 对每个类单独计算指标后取平均 所有类别同等重要 平衡看待小类 忽略类别大小 与 Micro 的区别?
Micro-Averaging 全局统计 TP/FP/FN 后计算指标 大类主导或关注总体性能 等价于 Accuracy(对 F1) 小类影响小 Micro-F1 = Accuracy?仅在多标签?

📊 训练中常见问题及解决方法

问题类型 表现现象 根本原因 解决方法 补充说明 面试高频考点
过拟合(Overfitting) 训练 loss 低,验证 loss 高;训练准确率高,验证准确率低 模型太复杂 / 数据太少 / 噪声多 / 训练过久 • 增加数据(数据增强)
• 正则化(L1/L2、Dropout)
• 简化模型(减少层数/神经元)
• Early Stopping
• Batch Normalization
• Label Smoothing
过拟合 ≠ 训练误差低,关键看泛化差距 如何判断?与正则化的关系?
欠拟合(Underfitting) 训练 loss 高,验证 loss 也高;训练/验证准确率都低 模型太简单 / 特征不足 / 学习率不当 / 训练不足 • 增加模型容量(更深/更宽)
• 改进特征工程
• 调整学习率(增大)
• 延长训练轮数
• 检查数据预处理是否合理
欠拟合通常比过拟合更容易诊断 与模型容量、优化的关系?
梯度消失(Vanishing Gradient) 网络深层梯度接近0,参数几乎不更新,训练停滞 激活函数饱和(如 sigmoid/tanh)+ 深层网络连乘小值 • 使用 ReLU 等非饱和激活函数
• 残差连接(ResNet)
• 合理初始化(Xavier/He)
• 使用 LN/BN 稳定分布
• 使用 LSTM/GRU(RNN 场景)
常见于 RNN 和非常深的 CNN/MLP 为何 ReLU 能缓解?残差连接原理?
梯度爆炸(Exploding Gradient) 梯度极大,loss 突然 NaN 或剧烈震荡 深层网络连乘大值(尤其 RNN) • Gradient Clipping(裁剪梯度范数)
• 合理初始化(如 Xavier)
• 使用 LN/BN
• 降低学习率
• 使用 LSTM/GRU(RNN)
梯度裁剪是标准做法(如设阈值 1.0) Clipping 是治标还是治本?
训练不收敛 / loss 不下降 loss 长期不变或震荡无趋势 • 学习率过高/过低
• 数据标签错误
• 网络结构 bug(如维度不匹配)
• 激活函数/损失函数不匹配
• 检查数据和标签
• 调整学习率(尝试 1e-3, 1e-4)
• 使用学习率 warmup
• 梯度检查(是否为 0 或 NaN)
• 简化模型做 sanity check
“先过拟合一个小数据集”是调试黄金法则 如何做训练 sanity check?
Loss 为 NaN / Inf loss 突然变成 NaN • 学习率过大
• 梯度爆炸
• 数据含 NaN/Inf
• 激活函数不稳定(如 softmax 输入过大)
• 检查输入数据
• 降低学习率
• 加 Gradient Clipping
• 在 log-sum-exp 中加数值稳定项
softmax 常用 logsumexp(x)=c+log⁡∑exi−c\text{logsumexp}(x) = c + \log\sum e^{x_i - c}logsumexp(x)=c+logexic 数值稳定性技巧?
验证性能波动大 验证指标震荡剧烈 • batch size 太小
• 验证集太小
• 数据未 shuffle 或分布不一致
• 增大 batch size
• 确保训练/验证分布一致
• 多次运行取平均
• 使用滑动平均(EMA)模型
小数据集上常见 EMA 是什么?
模型性能卡在随机水平 准确率 ≈ 随机猜测(如 10 类分类 ≈10%) • 标签错位(label mismatch)
• 网络未有效学习(如全零初始化)
• 优化器配置错误
• 打印部分预测 vs 真实标签
• 检查数据 pipeline
• 用小数据集过拟合测试
“能过拟合 10 个样本吗?”是关键测试 调试流程?

📊 数据集划分与验证方法

概念/方法 定义与作用 划分比例(典型) 优点 缺点/注意事项 面试高频考点
训练集(Training Set) 用于模型参数学习(拟合) 60%–80%(视数据量而定) 提供学习信号,驱动优化 不能用于评估泛化性能 必须与验证/测试集独立
验证集(Validation Set) 用于超参数调优、模型选择、早停判断 10%–20% 无偏估计模型在未见数据上的表现(用于开发阶段) 数据量小时估计不稳定 不参与训练,但影响模型选择
测试集(Test Set) 用于最终评估模型泛化能力 10%–20% 模拟真实部署性能,仅用一次 泄露会导致评估乐观(数据泄露) 绝对不能用于训练或调参
三者关系 训练 → 调参(用验证集) → 最终评估(用测试集) 保证评估客观性 混淆验证/测试会导致过拟合“测试集” 测试集只能用一次!
Hold-Out 验证 简单划分:固定训练/验证/测试集 如 70%/15%/15% 简单高效,适合大数据 小数据时验证结果方差大 数据量大时首选
K 折交叉验证(K-Fold CV) 将训练数据分为 K 份,轮流用 K-1 份训练、1 份验证,重复 K 次 K=5 或 10(常用) 充分利用数据,评估更稳定 计算开销大(需训练 K 次) 小数据集(如 <10k 样本)推荐使用
分层 K 折(Stratified K-Fold) 保证每折中各类别比例与原数据一致 解决类别不平衡下的划分偏差 仅适用于分类任务 分类任务默认用分层 K 折
时间序列划分 按时间顺序划分(如前80%训练,后20%测试) 不能随机打乱 符合实际预测场景(未来预测过去) 无法用标准 K 折(会泄露未来信息) 时间序列严禁随机划分
留一法(LOO) K = N(N 为样本数),每样本单独作验证集 无偏估计,数据利用率最高 计算极昂贵,方差大 仅用于极小数据集(如 N<50)
嵌套交叉验证(Nested CV) 外层评估模型性能,内层调超参 如 5×5 嵌套 避免超参选择导致的评估偏差 计算成本极高 用于严谨科研或小数据高可靠评估
注意事项 • 测试集必须完全隔离
• 验证集用于开发阶段决策
• 数据划分需保持分布一致(如图像按类别、文本按主题)
防止数据泄露 常见错误:用测试集调参、划分时未分层、时间序列打乱 “你项目中怎么划分数据的?”是高频问题

📊 PyTorch 与 TensorFlow 核心区别对比

对比维度 PyTorch TensorFlow 说明/面试要点
开发公司 Meta(原 Facebook) Google
编程范式 动态图(eager execution 默认) 静态图(TF 1.x)→ 动态图为主(TF 2.x + eager) PyTorch 始终以动态图为核心,调试更直观;TF 2.x 向 PyTorch 靠拢
易用性与调试 类似 Python 原生,可直接 print、debug TF 1.x 调试困难;TF 2.x 改善,但仍略复杂 PyTorch 更受研究人员欢迎,上手快
计算图构建 即时执行(define-by-run) TF 1.x:define-and-run(需 Session)
TF 2.x:默认 eager,可 @tf.function 转静态图
动态图灵活,静态图部署高效
部署能力 TorchScript、ONNX、LibTorch(C++) TensorFlow Serving、TensorFlow Lite(移动端)、TF.js、SavedModel TensorFlow 在生产部署生态更成熟,尤其移动端和边缘设备
分布式训练 torch.distributed,支持 DDP、FSDP 等 tf.distribute.Strategy(如 MirroredStrategy) 两者均支持多卡/多机,PyTorch 灵活,TF 配置更封装
社区与生态 研究界主流(多数论文开源用 PyTorch) 工业界应用广泛(尤其 Google 系产品) CV/NLP 顶会论文 >80% 使用 PyTorch
可视化工具 TensorBoard(兼容)、Weights & Biases TensorBoard(原生深度集成) 两者都可用 TensorBoard
自动微分 autograd:灵活,支持高阶导数 GradientTape(TF 2.x):需显式记录操作 PyTorch 自动微分更“隐形”,更符合直觉
模型保存/加载 torch.save() / torch.load()(保存 state_dict 或整个模型) SavedModel(推荐)、HDF5(旧) SavedModel 包含结构+权重+计算图,适合部署
移动端/嵌入式 支持较弱(通过 LibTorch 或 ONNX 转换) TensorFlow Lite 专为移动端优化,生态完善 TF 在端侧部署优势明显
版本演进 保持简洁,API 稳定性较好 TF 1.x → TF 2.x 变动巨大,造成历史包袱 很多老项目仍卡在 TF 1.x
典型使用场景 学术研究、快速原型、实验迭代 工业部署、大规模生产系统、移动端 “研究用 PyTorch,上线转 TensorFlow”曾是常见流程(现可通过 ONNX 互通)
与 ONNX 兼容性 原生支持导出 ONNX 支持导出 ONNX(但部分算子兼容性问题) ONNX 成为跨框架部署桥梁
一句话总结 PyTorch 在灵活性和研究友好性上占优 TensorFlow 在部署和生产生态上更强

📊 完整训练流程

阶段 核心步骤 关键组件/操作 说明
1. 数据准备 • 定义 Dataset
• 使用 DataLoader
Dataset:封装数据与标签的索引逻辑
DataLoader:提供 batch、shuffle、num_workers
支持自定义数据读取;训练集通常 shuffle,验证/测试集不 shuffle
2. 模型构建 • 继承 nn.Module
• 定义 __init__forward
• 层(如 nn.Linear, nn.Conv2d
• 激活函数、归一化等模块
模型结构在 forward 中定义计算流程;参数自动注册
3. 设备配置 • 指定 device(CPU/GPU)
• 模型与数据移至 device
model.to(device)
data.to(device)
支持多 GPU(如 DataParallelDistributedDataParallel
4. 训练配置 • 损失函数
• 优化器
• 学习率调度器
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.AdamW(...)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(...)
损失函数与任务匹配;优化器管理参数更新;调度器动态调学习率
5. 训练循环 • 多轮(epoch)迭代
• 每轮遍历 DataLoader
• 前向传播 → 计算 loss → 反向传播 → 优化器更新
optimizer.zero_grad()
loss.backward()
optimizer.step()
scheduler.step()(通常每 epoch)
必须清零梯度;反向传播自动计算梯度;更新后可选梯度裁剪
6. 验证/评估 • 在验证集上评估
• 关闭梯度(torch.no_grad()
• 不更新参数
• 计算指标(如 accuracy、F1)
节省显存、加速;用于早停或模型选择
7. 模型保存 • 保存 checkpoint • 通常保存 state_dict(模型权重)
• 可选保存 optimizer、scheduler、epoch 等
推荐保存 state_dict 而非整个模型,更灵活
8. 测试评估 • 在测试集上最终评估
• 仅执行一次
• 使用最佳模型(如验证集最优)
• 报告最终指标
测试集绝不参与任何训练或调参决策
9. 可选增强实践 • 梯度裁剪(如 nn.utils.clip_grad_norm_
• 混合精度训练(AMP)
• EMA(指数移动平均)模型
• 防止梯度爆炸
• 加速训练、节省显存
• 提升泛化
常用于大模型或不稳定训练场景

📊 一个 Epoch 内训练循环的关键步骤

步骤 操作 目的/说明 面试关注点
1. 遍历 DataLoader 按 batch 顺序(或 shuffle 后)读取数据 将整个训练集划分为多个 mini-batch 进行迭代 batch size 影响内存、梯度估计方差和收敛稳定性
2. 数据移至设备 将 input 和 target 移到 GPU/CPU 确保计算设备一致 若未正确迁移,会报错或默认在 CPU 运行
3. 模型设为训练模式 model.train() 启用如 Dropout、BatchNorm 的训练行为 关键:BN 使用 batch 统计量,Dropout 随机失活
4. 清零梯度 optimizer.zero_grad() 清除上一个 batch 累积的梯度 必须执行,否则梯度会累加导致错误更新
5. 前向传播 output = model(input) 计算模型预测 自动构建动态计算图(用于反向传播)
6. 计算损失 loss = loss_fn(output, target) 衡量预测与真实标签的差距 损失函数需与任务匹配(如分类用 CrossEntropy)
7. 反向传播 loss.backward() 自动计算所有可训练参数的梯度 PyTorch 的 autograd 机制自动完成
8. (可选)梯度裁剪 torch.nn.utils.clip_grad_norm_(...) 防止梯度爆炸(尤其 RNN/Transformer) 常用于序列模型或大学习率场景
9. 参数更新 optimizer.step() 根据优化器规则(如 Adam)更新权重 执行实际的参数调整
10. (可选)学习率调度 scheduler.step()(部分调度器每 batch 调) 动态调整学习率 多数调度器每 epoch 调,但如 OneCycleLR 每 batch 调
11. 记录指标 累计 loss、accuracy 等 用于监控训练过程 通常在每个 batch 或定期打印/写入日志
12. 重复 进入下一个 batch,重复步骤 2–11 直到遍历完所有训练 batch 一个 epoch = 1 次完整遍历训练集

📊 模型部署框架对比:PyTorch、TensorFlow、ONNX、TensorRT

框架/格式 类型 主要用途 部署优势 部署局限 转换能力(是否可互相转换) 面试高频考点
PyTorch 深度学习框架 训练 + 推理(原生) • 灵活、研究友好
• 支持 TorchScript(静态图)
• LibTorch(C++)支持部署
• 原生推理性能一般
• 移动端/嵌入式支持弱于 TF
→ ONNX(官方支持)
→ TorchScript(内置)
✗ 不能直接转 TensorFlow/TensorRT
TorchScript 是什么?为何部署常用 ONNX 中转?
TensorFlow 深度学习框架 训练 + 工业级部署 • TensorFlow Serving(服务端)
• TensorFlow Lite(移动端/嵌入式)
• TF.js(浏览器)
• SavedModel 格式标准化
• TF 1.x/2.x 兼容问题
• 动态控制流部署复杂
→ ONNX(通过 tf2onnx)
→ TensorFlow Lite(内置)
→ TensorRT(通过 TF-TRT 或 ONNX)
SavedModel vs HDF5?TF Lite 优化手段?
ONNX (Open Neural Network Exchange) 开放模型格式 跨框架模型交换中间表示 • 统一格式,解耦训练与部署
• 支持 150+ 算子
• 被 TensorRT、OpenVINO、CoreML 等广泛支持
• 复杂控制流(如动态 shape、循环)支持有限
• 自定义算子需手动实现
✓ PyTorch → ONNX(原生)
✓ TensorFlow → ONNX(tf2onnx)
✓ ONNX → TensorRT / OpenVINO / CoreML 等
ONNX 是部署桥梁;是否支持动态 shape?
TensorRT NVIDIA 推理优化引擎 GPU 高性能推理(NVIDIA) • 层融合、精度校准(FP16/INT8)
• 内存优化、内核自动调优
• 延迟和吞吐极致优化
• 仅支持 NVIDIA GPU
• 构建引擎耗时
• 对非标准算子支持有限
✓ ONNX → TensorRT(官方 parser)
✓ TensorFlow → TensorRT(TF-TRT 或 via ONNX)
✓ PyTorch → TensorRT(需先转 ONNX)
为何要 INT8 量化?构建 engine 和推理分离?
标准部署流程 PyTorch/TensorFlow → ONNX → TensorRT/OpenVINO/TFLite

📊 PyTorch 转 ONNX:torch.onnx.export 要点

参数 类型/默认值 作用说明 面试/实践注意事项
model torch.nn.Module 要导出的模型(需处于 eval() 模式) 导出前务必 model.eval(),避免 Dropout/BatchNorm 训练行为
args tupleTensor 模型 forward 的输入示例(dummy input) 必须与实际推理输入 shape/type 一致;支持多输入(tuple)
f str 或文件对象 输出 ONNX 文件路径(如 "model.onnx"
export_params=True bool 是否保存训练好的权重 通常为 True;若为 False,则为无权重结构图
opset_version=11 int(常用 11~17) ONNX 算子集版本 关键:版本太低可能不支持新算子(如 GELU、LayerNorm);太高可能部署端不兼容
do_constant_folding=True bool 是否执行常量折叠优化 推荐 True,可减小模型体积、提升推理速度
input_names list[str] 输入节点名称(如 ["input"] 便于后续推理时绑定输入;多输入需对应 args 顺序
output_names list[str] 输出节点名称(如 ["output"] 同上,方便部署时读取输出
dynamic_axes dictNone 定义动态维度(如 batch、seq_len) 关键:支持变长输入,例如:
{"input": {0: "batch", 1: "seq"}, "output": {0: "batch"}}
表示 batch 和 seq_len 可变
verbose=False bool 是否打印导出过程信息 调试时可设为 True,查看计算图结构
training=torch.onnx.TrainingMode.EVAL 枚举 控制导出时模型状态 通常用 EVAL;若需导出训练图(极少用),设为 TRAINING
keep_initializers_as_inputs=False bool 是否将参数作为输入 ONNX 1.7+ 推荐 False,避免输入数量爆炸

📊 经典手撕公式

类别 公式名称 核心公式 关键说明 面试考察点
损失函数 交叉熵损失(多分类) L=−∑i=1Cyilog⁡(y^i)\mathcal{L} = -\sum_{i=1}^C y_i \log(\hat{y}_i)L=i=1Cyilog(y^i)
其中 y^=softmax(z)\hat{y} = \text{softmax}(z)y^=softmax(z)
yyy 为 one-hot 标签,zzz 为 logits 常与 softmax 联合推导梯度
二元交叉熵 L=−[ylog⁡(σ(z))+(1−y)log⁡(1−σ(z))]\mathcal{L} = -[y \log(\sigma(z)) + (1-y)\log(1-\sigma(z))]L=[ylog(σ(z))+(1y)log(1σ(z))] σ(z)=11+e−z\sigma(z) = \frac{1}{1+e^{-z}}σ(z)=1+ez1 推导梯度时体现“预测误差”形式
MSE L=12(y−y^)2\mathcal{L} = \frac{1}{2}(y - \hat{y})^2L=21(yy^)2 常带 12\frac{1}{2}21 便于求导 梯度为 (y^−y)(\hat{y} - y)(y^y),简洁
激活函数 Sigmoid σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}σ(z)=1+ez1
σ′(z)=σ(z)(1−σ(z))\sigma'(z) = \sigma(z)(1 - \sigma(z))σ(z)=σ(z)(1σ(z))
输出 (0,1),梯度在两端饱和 梯度消失典型例子
ReLU ReLU(z)=max⁡(0,z)\text{ReLU}(z) = \max(0, z)ReLU(z)=max(0,z)
导数:1z>01_{z>0}1z>0
简单高效,缓解梯度消失 不可导点(z=0)通常设导数为0
Softmax softmax(zi)=ezi∑jezj\text{softmax}(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}}softmax(zi)=jezjezi 输出概率分布,常用于多分类 重点:与交叉熵联合求导得 y^i−yi\hat{y}_i - y_iy^iyi
梯度推导 Softmax + Cross-Entropy 梯度 ∂L∂zi=y^i−yi\frac{\partial \mathcal{L}}{\partial z_i} = \hat{y}_i - y_iziL=y^iyi 极其重要!简洁且数值稳定 面试必考:推导过程(链式法则)
线性层梯度 z=Wx+bz = Wx + bz=Wx+b
∂L∂W=∂L∂zx⊤\frac{\partial \mathcal{L}}{\partial W} = \frac{\partial \mathcal{L}}{\partial z} x^\topWL=zLx
权重梯度 = 上游梯度 × 输入转置 理解矩阵求导维度匹配
优化器 SGD W←W−η∇WLW \leftarrow W - \eta \nabla_W \mathcal{L}WWηWL 最基础更新规则
Momentum v←βv+∇Lv \leftarrow \beta v + \nabla \mathcal{L}vβv+L
W←W−ηvW \leftarrow W - \eta vWWηv
引入动量项加速收敛 物理类比:惯性
Adam mt=β1mt−1+(1−β1)gtm_t = \beta_1 m_{t-1} + (1-\beta_1) g_tmt=β1mt1+(1β1)gt
vt=β2vt−1+(1−β2)gt2v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2vt=β2vt1+(1β2)gt2
m^t=mt/(1−β1t)\hat{m}_t = m_t/(1-\beta_1^t)m^t=mt/(1β1t), v^t=vt/(1−β2t)\hat{v}_t = v_t/(1-\beta_2^t)v^t=vt/(1β2t)
W←W−ηm^t/(v^t+ϵ)W \leftarrow W - \eta \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon)WWηm^t/(v^t +ϵ)
自适应学习率 + 动量 需知偏差校正(m^t,v^t\hat{m}_t, \hat{v}_tm^t,v^t
归一化 BatchNorm x^i=xi−μBσB2+ϵ\hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}x^i=σB2+ϵ xiμB
yi=γx^i+βy_i = \gamma \hat{x}_i + \betayi=γx^i+β
μB,σB2\mu_B, \sigma_B^2μB,σB2 为 batch 统计量 训练用 batch 统计,推理用滑动平均
注意力机制 Scaled Dot-Product Attention Attention(Q,K,V)=softmax(QK⊤dk)V\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dk QK)V 缩放防止点积过大 为何除 dk\sqrt{d_k}dk ?梯度稳定性
Multi-Head Attention Concat(head1,...,headh)WO\text{Concat}(\text{head}_1, ..., \text{head}_h) W^OConcat(head1,...,headh)WO
其中 headi=Attention(QWiQ,KWiK,VWiV)\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)headi=Attention(QWiQ,KWiK,VWiV)
并行多头,增强表达能力 头数 h 通常为 8 或 16
正则化 Dropout 训练时:y=x⋅m/(1−p)y = x \cdot m / (1-p)y=xm/(1p)
其中 m∼Bernoulli(1−p)m \sim \text{Bernoulli}(1-p)mBernoulli(1p)
测试时不做 dropout(或 scale) 本质是集成学习近似
评估指标 F1-Score F1=2⋅Precision⋅RecallPrecision+RecallF1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}F1=2Precision+RecallPrecisionRecall Precision = TP/(TP+FP), Recall = TP/(TP+FN) 调和平均,对不平衡数据敏感
AUC-ROC 基于 TPR vs FPR 曲线下面积 TPR = Recall, FPR = FP/(FP+TN) 阈值无关,评估排序能力

📊 模型压缩和轻量化等技术

技术类别 方法名称 核心思想 关键步骤/公式 优点 缺点/挑战 面试高频考点
知识蒸馏(Knowledge Distillation) 经典蒸馏(Hinton et al., 2015) 用大模型(Teacher)指导小模型(Student)学习 损失 = α·Soft CE(𝑠𝑡𝑢𝑑𝑒𝑛𝑡, 𝑡𝑒𝑎𝑐ℎ𝑒𝑟) + (1−α)·Hard CE(𝑠𝑡𝑢𝑑𝑒𝑛𝑡, 𝑙𝑎𝑏𝑒𝑙)
Soft CE 使用高温 softmax:pi=ezi/T∑jezj/Tp_i = \frac{e^{z_i/T}}{\sum_j e^{z_j/T}}pi=jezj/Tezi/T
• 提升小模型精度
• 利用 teacher 的“暗知识”
• 需训练 teacher
• 温度 T 和 α 需调参
为何用高温 softmax?logits vs 概率?
自蒸馏(Self-Distillation) 同一模型不同层或不同阶段互蒸 如深层监督浅层 无需额外 teacher 效果通常弱于经典蒸馏
剪枝(Pruning) 非结构化剪枝 移除权重矩阵中不重要的单个权重(设为0) • 基于权重绝对值/梯度
• 迭代剪枝 + 微调
压缩率高、理论精度保持好 需专用稀疏硬件加速,普通 GPU 无加速 与结构化剪枝区别?
结构化剪枝 移除整个通道、层或头(如 CNN 通道、Transformer head) • 基于 L1-norm of channel
• Taylor expansion 估计重要性
可直接在通用硬件加速 精度损失通常大于非结构化 为何工业界偏好结构化?
量化(Quantization) 训练后量化(PTQ) 训练完成后将 FP32 权重/激活转为 INT8/INT4 xint=round(x/s)+zx_{\text{int}} = \text{round}(x / s) + zxint=round(x/s)+z
(s: scale, z: zero-point)
无需重训练,部署快 精度损失较大(尤其低比特) 对称 vs 非对称量化?
量化感知训练(QAT) 训练中模拟量化误差 插入伪量化节点(fake quant) 精度接近 FP32 需重新训练,流程复杂 为何 QAT 比 PTQ 精度高?
轻量化架构设计 深度可分离卷积(Depthwise Separable Conv) 将标准卷积分解为空间卷积 + 通道卷积 参数量从 DK2⋅M⋅ND_K^2 \cdot M \cdot NDK2MN 降至 DK2⋅M+M⋅ND_K^2 \cdot M + M \cdot NDK2M+MN 大幅减少计算量和参数 精度略降 MobileNet 核心模块
倒残差结构(Inverted Residual) 先升维 → DWConv → 再降维 用于 MobileNetV2 提升非线性表达能力 为何“倒”?传统残差是降维再升维
ShuffleNet + Channel Shuffle 分组卷积 + 通道混洗 减少计算量同时增强组间信息交互 适合极低算力设备 设计复杂
其他技术 低秩分解(Low-Rank Factorization) 将权重矩阵近似为低秩矩阵乘积 W≈U⋅VW \approx U \cdot VWUV, rank r≪min⁡(m,n)r \ll \min(m,n)rmin(m,n) 减少存储和计算 分解后需微调,收益有限
神经架构搜索(NAS) for Efficient Models 自动搜索高效结构(如 EfficientNet) 基于 FLOPs/latency 约束优化 性能-效率帕累托最优 计算成本极高 EfficientNet 的复合缩放是什么?

📊 梯度相关知识

概念 核心要点 关键公式/机制 常见问题/面试考点
梯度(Gradient) 损失函数对模型参数的偏导数,指示参数更新方向 ∇θL=[∂L∂θ1,…,∂L∂θn]\nabla_\theta \mathcal{L} = \left[ \frac{\partial \mathcal{L}}{\partial \theta_1}, \dots, \frac{\partial \mathcal{L}}{\partial \theta_n} \right]θL=[θ1L,,θnL] 梯度指向损失上升最快方向,优化器沿反方向更新
反向传播(Backpropagation) 利用链式法则高效计算梯度 ∂L∂x=∂L∂y⋅∂y∂x\frac{\partial \mathcal{L}}{\partial x} = \frac{\partial \mathcal{L}}{\partial y} \cdot \frac{\partial y}{\partial x}xL=yLxy 为什么需要反向传播?比数值微分高效(O(n)O(n)O(n) vs O(n2)O(n^2)O(n2)
梯度消失(Vanishing Gradient) 深层网络中梯度逐层趋近于0,导致浅层几乎不更新 多个 <1<1<1 的导数连乘:(σ′)L→0(\sigma')^L \to 0(σ)L0(如 sigmoid) 常见于 RNN 和深 MLP;解决:ReLU、残差连接、初始化
梯度爆炸(Exploding Gradient) 梯度逐层指数增长,导致参数剧烈震荡或 NaN 多个 >1>1>1 的导数连乘(如未约束的 RNN) 解决:梯度裁剪(Gradient Clipping)、LSTM、合理初始化
梯度裁剪(Gradient Clipping) 限制梯度范数防止爆炸 ∣g∣2>τ|\mathbf{g}|_2 > \taug2>τ,则 g←g⋅τ∣g∣2\mathbf{g} \leftarrow \mathbf{g} \cdot \frac{\tau}{|\mathbf{g}|_2}ggg2τ 常用于 RNN、Transformer;阈值 τ\tauτ 通常设为 1.0
梯度检查(Gradient Check) 用数值微分验证反向传播实现是否正确 数值梯度:f(θ+ϵ)−f(θ−ϵ)2ϵ\frac{f(\theta + \epsilon) - f(\theta - \epsilon)}{2\epsilon}2ϵf(θ+ϵ)f(θϵ) 现代框架(PyTorch/TensorFlow)自动求导,极少手动实现,故少用
局部梯度 vs 全局梯度 局部:某一层的偏导;全局:从 loss 到该层的完整链式导数 全局梯度 = 局部梯度 × 上游梯度 理解计算图中“上游梯度”传递机制
梯度为零/NaN 的可能原因 • 学习率过大
• 激活函数饱和(如 ReLU 死亡)
• 数据含 NaN
• 损失函数设计错误
ReLU 死亡:输入恒负 → 梯度恒为0 如何诊断?打印中间层输出、梯度范数
梯度方差(Variance) 小 batch 导致梯度估计噪声大 Var(∇Lmini-batch)∝1/B\text{Var}(\nabla \mathcal{L}_{\text{mini-batch}}) \propto 1/BVar(Lmini-batch)1/B batch size 越大,梯度越准但内存开销大
梯度累积(Gradient Accumulation) 模拟大 batch:多次前向/反向后才更新 累积 kkk 步梯度,等效 batch size 扩大 kkk 显存不足时的常用技巧
雅可比矩阵 & 海森矩阵 雅可比:输出对输入的导数;海森:损失对参数的二阶导 海森矩阵 Hij=∂2L∂θi∂θjH_{ij} = \frac{\partial^2 \mathcal{L}}{\partial \theta_i \partial \theta_j}Hij=θiθj2L 二阶优化(如牛顿法)理论基础,但计算昂贵
梯度流(Gradient Flow) 梯度在网络层间的传播状态 可通过 torch.autograd.grad 或 hook 监控 用于分析 ResNet 为何有效(梯度直达浅层)

📊 正向传播与反向传播

项目 正向传播(Forward Propagation) 反向传播(Backward Propagation)
定义 输入数据从输入层经过隐藏层传递到输出层,计算预测值的过程 根据损失函数对模型参数的梯度,从输出层反向逐层计算梯度的过程
目的 计算模型输出和损失值 计算损失对每个参数的梯度,用于参数更新
计算顺序 从输入 → 输出(前向) 从输出 → 输入(反向)
依赖机制 依赖模型当前参数和输入数据 依赖正向传播构建的计算图(动态或静态)和链式法则
关键操作 矩阵乘法、激活函数、归一化等 链式法则(Chain Rule)、梯度累加
是否需要计算图 否(仅数值计算) 是(需记录操作以反向求导)
时间复杂度 O(n)O(n)O(n),与网络层数和参数量成正比 O(n)O(n)O(n),通常约为正向传播的 2–3 倍
内存消耗 仅需保存各层输出(用于反向) 需保存中间激活值(除非 checkpointing)
PyTorch 行为 output = model(x) 自动构建动态计算图 loss.backward() 触发自动微分(autograd)
常见误区 误认为正向传播包含损失计算(实际包含) 误认为反向传播更新参数(实际只计算梯度,optimizer.step() 才更新)
面试高频问题 • 正向传播输出什么?
• 是否需要保存中间结果?
• 反向传播的数学基础?(链式法则)
• 为什么反向传播比数值微分高效?
• 计算图是如何构建和释放的?

📊 经典与轻量化CNN网络核心模块对比

网络/模块名称 核心思想/结构 关键特点 优势 面试常见问题
ResNet(残差网络) 引入残差块(Residual Block)y=F(x)+xy = F(x) + xy=F(x)+x,其中 F(x)F(x)F(x) 为残差函数 - 使用跳跃连接(skip connection)
- 解决深层网络的梯度消失/退化问题
- 典型结构:两层/三层卷积 + BN + ReLU
- 可训练上百甚至上千层
- 提升准确率同时降低训练难度
- 残差连接为什么有效?
- 如果输入输出维度不同如何处理?(答:使用1×1卷积升维/降维)
DenseNet(密集连接网络) 密集块(Dense Block):每一层都与前面所有层直接连接,特征重用 - 特征图拼接(concat)而非相加
- 每层输入为前面所有层输出的拼接
- 使用**过渡层(Transition Layer)**降维
- 参数更少
- 特征复用强,缓解梯度消失
- 更强的正则化效果
- DenseNet为什么参数少?
- 与ResNet的区别?(答:concat vs add,特征复用方式不同)
深度可分离卷积(Depthwise Separable Conv) 分为两步:
1. Depthwise Conv:每个通道独立卷积
2. Pointwise Conv:1×1卷积融合通道
- 大幅减少计算量和参数
- 常用于MobileNet、Xception等轻量化网络
- 计算效率高(约为标准卷积的 1/N+1/DK21/N + 1/D_K^21/N+1/DK2,N为通道数)
- 适合移动端部署
- 和标准卷积计算量对比?
- 为什么能减少参数?
MobileNetV1 基于深度可分离卷积构建 - 引入**宽度乘子(Width Multiplier)分辨率乘子(Resolution Multiplier)**控制模型大小 - 轻量、高效
- 适合实时应用
- 如何控制模型复杂度?
MobileNetV2 提出倒残差结构(Inverted Residual Block)
1×1升维 → DW Conv → 1×1降维 + 残差连接(仅当输入输出维度一致时)
- 使用ReLU6激活函数
- 升维后提取特征,避免信息丢失
- 更适合低维输入
- 在小模型上表现优于V1
- 为什么叫“倒残差”?
- 为什么升维后再做DW?
ShuffleNet 使用组卷积(Group Conv) + 通道重排(Channel Shuffle) - 减少计算量
- 通道重排增强组间信息交互
- 极低FLOPs下保持精度
- 适合极轻量场景
- 通道重排的作用?
- 与MobileNet区别?

📊 新技术概览

技术方向 技术名称 核心思想/机制 关键优势 典型应用/代表模型 面试关注点
大模型架构 Mixture of Experts (MoE) 将模型划分为多个“专家”子网络,每输入仅激活部分专家 在不显著增加计算量前提下扩展模型容量 Mixtral、DeepSeek-MoE、Google GLaM - 如何实现稀疏激活?
- 训练稳定性挑战?
高效训练 Low-Rank Adaptation (LoRA) 冻结主干权重,通过低秩矩阵微调适配下游任务 显存占用低、可插拔、多任务共享 LLM微调(如LLaMA+LoRA) - 为什么低秩有效?
- 与全参数微调对比?
推理优化 KV Cache Quantization 对注意力机制中的Key/Value缓存进行量化(如4-bit) 显著降低推理显存与延迟 LLM在线服务(vLLM、TensorRT-LLM) - 量化对生成质量影响?
- 如何保持精度?
生成式AI Diffusion Models(扩散模型) 通过逐步去噪从随机噪声生成数据 生成质量高、训练稳定 Stable Diffusion、DALL·E 2、Sora(视频) - 与GAN对比优劣?
- 采样速度瓶颈?
多模态 Vision-Language Pretraining (VLP) 联合训练图像与文本编码器,对齐语义空间 支持跨模态理解与生成 CLIP、BLIP、Flamingo、GPT-4V - 如何对齐图文?
- 零样本迁移原理?
具身智能 / AI Agent AI 智能体(AI Agent) 具备感知→规划→调用工具→执行闭环能力 自主完成复杂任务 AutoGPT、Meta Toolformer、DeepSeek-R1 Agent - 如何实现工具调用?
- 记忆与反思机制?
模型压缩 知识蒸馏(Knowledge Distillation) 用大模型(教师)指导小模型(学生)学习软标签 小模型获得接近大模型性能 DistilBERT、TinyLLM - 软标签 vs 硬标签?
- 温度参数作用?
自监督学习 Contrastive Learning(对比学习) 拉近正样本对、推开负样本对,学习不变表示 无需标签,适合预训练 SimCLR、MoCo、DINO - 正负样本如何构建?
- InfoNCE损失?
神经架构搜索 NAS(Neural Architecture Search) 自动搜索最优网络结构(如通过强化学习、可微方式) 减少人工设计成本 EfficientNet、Once-for-All - 可微NAS(DARTS)原理?
- 搜索效率问题?
绿色AI / 低算力模型 本地化大模型(On-Device LLM) 模型小型化+量化+硬件协同设计,支持端侧运行 隐私安全、低延迟、离线可用 DeepSeek-R1、Phi-3、Gemma - 如何在消费级GPU/CPU运行7B模型?
- GGUF/AWQ等格式区别?

更多推荐