一、深度学习基础核心概念
1. 深度学习 vs 机器学习 vs 人工智能的关系
- 人工智能(AI):最大范畴,目标是让机器具备人类智能能力,涵盖机器学习、专家系统、知识图谱等。
- 机器学习(ML):AI 的子集,通过数据和算法让机器自动学习规律,无需人工硬编码规则,包含传统机器学习(SVM、决策树、LR 等)和深度学习。
- 深度学习(DL):机器学习的子集,核心是多层神经网络,通过多层非线性变换自动提取特征,端到端完成任务,无需人工特征工程。
2. 深度学习的核心优势
3. 感知机(Perceptron)
- 定义:最简单的人工神经元,接收多个输入,加权求和后经过阶跃函数输出 0/1。
- 局限:只能解决线性可分问题,无法处理异或问题;多层感知机(MLP)通过引入隐藏层和非线性激活函数解决该问题。
4. 多层感知机(MLP)
- 结构:输入层 + 若干隐藏层 + 输出层,层与层之间全连接。
- 本质:通过多层非线性变换,将输入数据映射到高维空间,实现复杂函数拟合。
- 缺点:全连接参数过多;对空间 / 时序信息利用差;易过拟合。
二、神经网络基础与反向传播
1. 前向传播(Forward Propagation)
- 流程:输入数据从输入层进入,依次经过每一层的线性变换(\\(Z=WX+b\\))和非线性激活(\\(A=\\sigma(Z)\\)),最终在输出层得到预测结果。
- 核心:计算网络的预测值,为后续损失计算提供依据。
2. 损失函数(Loss Function)
- 作用:衡量预测值与真实值的差异,是反向传播的 “指挥棒”。
- 分类:
- 分类任务:交叉熵损失、Focal Loss 等
- 回归任务:MSE、MAE、Smooth L1 等
- 详见后文「损失函数全解析」章节
3. 反向传播(Back Propagation, BP)
核心原理
基于链式求导法则,从输出层向输入层逐层计算损失函数对每个参数的梯度,再通过优化器更新参数,最小化损失。
计算步骤
计算图(Computational Graph)
将神经网络拆解为一个个基础运算节点,形成有向无环图;前向传播计算节点值,反向传播沿反方向计算梯度。
4. 梯度消失与梯度爆炸
产生原因
深层网络中,反向传播时梯度通过链式法则层层相乘:
- 若每层梯度都小于 1,多次相乘后梯度指数级衰减→梯度消失,浅层网络参数几乎不更新。
- 若每层梯度都大于 1,多次相乘后梯度指数级增大→梯度爆炸,参数更新剧烈,模型震荡不收敛。
根本诱因
- 激活函数选择不当(如 sigmoid/tanh 易导致梯度消失)
- 权重初始化不合理(初始权重过大 / 过小)
- 网络层数过深
解决方案
表格
| 梯度消失 | 1. 使用 ReLU 系列激活函数;2. 残差连接(ResNet);3. BatchNorm/LayerNorm;4. 合理的权重初始化(He 初始化);5. 门控机制(LSTM/GRU) |
| 梯度爆炸 | 1. 梯度裁剪(Gradient Clipping);2. 权重正则化;3. BatchNorm;4. 降低学习率 |
三、激活函数专题
核心要求
激活函数必须非线性(否则多层网络退化为单层线性变换)、可导(支持反向传播)、计算高效。
1. Sigmoid
- 公式:\\(\\sigma(x) = \\frac{1}{1+e^{-x}}\\)
- 输出范围:\\((0,1)\\),可表示概率或做归一化
- 缺点:
- 易导致梯度消失:输入绝对值较大时,导数趋近于 0
- 输出不是 0 均值(zero-centered),会导致权重更新方向偏移
- 包含指数运算,计算较慢
2. Tanh
- 公式:\\(\\tanh(x) = \\frac{e^x – e^{-x}}{e^x + e^{-x}}\\)
- 输出范围:\\((-1,1)\\),零均值
- 缺点:仍存在梯度消失问题;仍有指数运算
3. ReLU(Rectified Linear Unit)
- 公式:\\(ReLU(x) = max(0, x)\\)
- 优点:
- 正区间无梯度消失问题
- 计算极快,无指数运算
- 带来稀疏性,部分神经元失活,降低过拟合风险
- 缺点:
- Dead ReLU 问题:负区间梯度恒为 0,神经元一旦进入负区间可能永久失活
- 输出非零均值
- 无上限,可能导致数值不稳定
4. Leaky ReLU
- 公式:\\(LeakyReLU(x) = max(\\alpha x, x)\\),\\(\\alpha\\)通常取 0.01
- 改进:负区间保留小梯度,解决 Dead ReLU 问题
- 缺点:\\(\\alpha\\)为固定超参数,效果不一定稳定
5. PReLU(Parametric ReLU)
- 公式:\\(PReLU(x) = max(\\alpha x, x)\\),\\(\\alpha\\)为可学习参数
- 改进:网络自动学习负区间斜率,适配不同数据分布
6. ELU(Exponential Linear Unit)
- 公式:\\(ELU(x) = \\begin{cases} x, & x>0 \\\\ \\alpha(e^x-1), & x\\le0 \\end{cases}\\)
- 特点:负区间平滑过渡,输出均值趋近于 0;仍有指数运算开销
7. GELU(Gaussian Error Linear Unit)
- 公式:\\(GELU(x) = x \\cdot \\Phi(x)\\),\\(\\Phi(x)\\)为标准正态分布累积分布函数
- 特点:
- 平滑的非线性,兼具正则效果
- 是 Transformer、BERT、GPT 系列的默认激活函数
- 近似公式:\\(0.5x(1+\\tanh(\\sqrt{2/\\pi}(x+0.044715x^3)))\\),加速计算
8. Swish / SiLU
- 公式:\\(Swish(x) = x \\cdot \\sigma(\\beta x)\\),\\(\\beta\\)为可学习参数或固定为 1
- 特点:平滑、无上界、有下界;在深层网络中效果常优于 ReLU
9. 常见对比
表格
| Sigmoid | 严重 | 否 | 慢 | 输出层二分类、门控单元 |
| Tanh | 较严重 | 是 | 慢 | 循环神经网络隐藏层 |
| ReLU | 正区间无 | 否 | 极快 | CNN、MLP 隐藏层(最常用) |
| GELU | 无 | 近似 | 较快 | Transformer、大模型 |
四、卷积神经网络(CNN)核心八股
1. 卷积运算的本质
- 卷积核(滤波器)在输入特征图上滑动,对应位置元素相乘求和,提取局部特征。
- 核心思想:局部感受野 + 参数共享 + 空间层次化,大幅减少参数量,保留空间结构信息。
2. 卷积核心参数
- 卷积核大小(Kernel Size):常用 3×3、1×1、5×5;3×3 是主流,堆叠两个 3×3 等价于一个 5×5 的感受野,参数量更少、非线性更强。
- 步长(Stride):卷积核每次滑动的像素数;步长 > 1 可实现下采样,缩小特征图尺寸。
- 填充(Padding):在特征图边缘补 0;作用是:
- 保持输入输出尺寸一致(Same Padding)
- 避免边缘信息丢失
- 输出尺寸计算公式: \\(Output\\_size = \\lfloor \\frac{Input\\_size + 2\\times Padding – Kernel\\_size}{Stride} \\rfloor + 1\\)
3. 池化(Pooling)
- 作用:下采样,缩小特征图尺寸、减少参数量、扩大感受野;带来一定的平移不变性。
- 常见类型:
- 最大池化(Max Pooling):取窗口内最大值,保留纹理边缘特征,最常用
- 平均池化(Average Pooling):取窗口内平均值,保留整体背景信息
- 全局平均池化(GAP):对整个特征图取均值,替代全连接层,大幅减少参数
4. 感受野(Receptive Field)
- 定义:特征图上一个像素点,对应原始输入图像上的区域大小。
- 计算方式(从后往前): \\(RF_i = (RF_{i+1} – 1) \\times Stride_i + Kernel\\_size_i\\) 顶层输出的初始感受野为 1。
- 意义:感受野越大,能捕捉的上下文信息越丰富;深层网络感受野更大。
5. 1×1 卷积的作用
6. 深度可分离卷积(Depthwise Separable Convolution)
- 拆分:深度卷积(Depthwise Conv)+ 逐点卷积(Pointwise Conv,即 1×1 卷积)
- 深度卷积:每个卷积核只负责一个输入通道,逐通道卷积
- 逐点卷积:用 1×1 卷积融合所有通道信息
- 优势:参数量和计算量远小于标准卷积,是轻量化网络(MobileNet)的核心。
7. 空洞卷积(Dilated Convolution)
- 特点:卷积核内部插入空洞,在不增加参数量的前提下扩大感受野。
- 适用场景:图像分割、目标检测等需要大感受野又不想下采样的任务。
- 问题:栅格效应(信息不连续),可通过多层不同膨胀率的空洞卷积叠加缓解。
8. 转置卷积(Transposed Convolution / 反卷积)
- 作用:上采样,将小尺寸特征图恢复为大尺寸,常用于语义分割、生成模型。
- 注意:不是卷积的逆运算,只是实现尺寸上的放大;可学习参数。
9. 分组卷积(Group Convolution)
- 做法:将输入通道分成若干组,每组内独立做卷积,最后拼接结果。
- 优势:减少参数量和计算量;通道分组带来一定的正则效果。
- 极端情况:分组数 = 通道数 → 深度卷积。
10. CNN 为什么适合图像任务?
五、循环神经网络(RNN/GRU/LSTM)
1. RNN 基本原理
- 核心:隐藏层状态不仅取决于当前输入,还取决于上一时刻的隐藏状态,从而捕捉时序依赖。
- 公式:\\(h_t = \\tanh(W_{xh}x_t + W_{hh}h_{t-1} + b_h)\\)
- 缺点:
- 长序列下严重的梯度消失,无法捕捉长距离依赖
- 串行计算,无法并行,速度慢
2. LSTM(长短期记忆网络)
通过三门一细胞状态解决长序列梯度消失问题:
- 遗忘门:决定上一时刻细胞状态保留多少信息
- 输入门:决定当前时刻新信息存入细胞状态的多少
- 输出门:决定细胞状态输出多少到隐藏状态
- 细胞状态(Cell State):信息主干道,梯度可顺畅传递,缓解梯度消失
3. GRU(门控循环单元)
- LSTM 的简化版,将遗忘门和输入门合并为更新门,新增重置门;去掉细胞状态,仅保留隐藏状态。
- 参数量更少,训练更快;效果与 LSTM 相近,数据量小时更优。
4. LSTM vs GRU
表格
| 门数量 | 3 个(遗忘、输入、输出) | 2 个(更新、重置) |
| 状态 | 细胞状态 + 隐藏状态 | 仅隐藏状态 |
| 参数量 | 多 | 少 |
| 训练速度 | 慢 | 快 |
| 长序列效果 | 通常更稳定 | 相近,小数据更优 |
5. RNN 系列为什么会梯度消失?和 CNN 的梯度消失有何不同?
- RNN:同一权重矩阵在不同时刻反复相乘,长序列下指数级衰减,是时间维度的梯度消失。
- CNN:不同层权重矩阵相乘,是深度维度的梯度消失。
- 解决思路:RNN 靠门控机制,CNN 靠残差连接 + ReLU。
六、Transformer 与注意力机制(面试高频重点)
1. 自注意力机制(Self-Attention)
核心思想
计算序列中每个位置与所有位置的相关性权重,加权求和得到当前位置的特征,一步捕捉长距离依赖。
Q、K、V 含义
- Query(查询):当前位置的特征向量,用于 “查询” 其他位置
- Key(键):其他位置的特征向量,用于被查询匹配
- Value(值):其他位置的特征向量,用于加权求和
- 三者均由输入特征乘不同的可学习矩阵得到。
计算步骤
公式
\\(Attention(Q,K,V) = softmax(\\frac{QK^T}{\\sqrt{d_k}})V\\)
2. 多头注意力(Multi-Head Attention)
- 做法:将\\(Q,K,V\\)拆分成多个头,每个头独立做自注意力,最后拼接结果。
- 优势:
- 捕捉不同子空间的特征信息,表达能力更强
- 多个头并行计算,效率高
3. Transformer 整体结构
- Encoder(编码器):堆叠 N 层,每层包含:
- 多头自注意力 + 残差连接 + LayerNorm
- 前馈网络(FFN,两层全连接 + 激活) + 残差连接 + LayerNorm
- Decoder(解码器):堆叠 N 层,每层包含:
- 掩码多头自注意力(Masked Self-Attention,防止看到未来信息)
- 交叉注意力(Encoder-Decoder Attention,Q 来自解码器,K/V 来自编码器)
- 前馈网络 + 残差 + LayerNorm
4. 位置编码(Positional Encoding)
- 问题:自注意力本身无序,无法捕捉序列顺序信息。
- 解决方案:给输入嵌入加上位置编码,注入位置信息。
- 常见实现:
- 正弦余弦位置编码:不同频率的正余弦函数,可外推到更长序列
- 可学习位置编码:直接训练位置嵌入向量,简单有效,ViT、BERT 常用
5. Layer Normalization vs Batch Normalization
表格
| 归一化维度 | 对每个样本的所有特征做归一化 | 对一个批次内同一维度的特征做归一化 |
| 依赖批次 | 不依赖,单样本即可计算 | 依赖批次大小,小批次效果差 |
| 适用场景 | NLP、Transformer、变长序列 | CNN、固定维度输入 |
| 训练 / 测试差异 | 无差异,推理直接用 | 训练用批次均值方差,测试用移动平均 |
| 维度位置 | 通常在注意力 / FFN 之前(Pre-Norm) | 通常在卷积 / 激活之后 |
6. Transformer 为什么用 LayerNorm 而不是 BatchNorm?
7. 残差连接(Residual Connection)
- 公式:\\(x + F(x)\\)
- 作用:
- 缓解梯度消失,梯度可通过恒等路径直接回传
- 让深层网络更容易训练
- 保留原始信息,促进特征复用
8. Transformer 相比 RNN 的优势
- 缺点:计算复杂度为\\(O(n^2)\\),长序列下计算量爆炸
9. Self-Attention 的复杂度
- 时间 / 空间复杂度:\\(O(n^2 \\cdot d)\\),n为序列长度,d为特征维度
- 瓶颈:序列长度 n 平方增长,长序列场景(如长文本、高分辨率图像)开销极大
10. 掩码注意力(Masked Attention)
- 作用:在解码器中,防止当前位置看到未来时刻的信息,保证自回归生成的合理性。
- 实现:计算注意力分数后,将未来位置的分数设为负无穷,softmax 后权重趋近于 0。
11. Flash Attention 核心思想
- 目标:在保证精度的前提下,加速注意力计算、降低显存占用。
- 核心优化:
- 分块计算:将 Q/K/V 分块,逐块计算注意力,避免一次性加载全部数据到显存
- 算子融合:将 softmax、dropout、加权求和等操作融合,减少显存读写
- 利用 SRAM 高速缓存,提升计算效率
- 现状:大模型训练推理的标配技术。
七、优化算法与优化器
1. 梯度下降法三大类
批量梯度下降(BGD)
- 每次用全部数据计算梯度,更新一次参数
- 优点:收敛稳定,全局最优方向准确
- 缺点:数据量大时极慢,无法在线更新
随机梯度下降(SGD)
- 每次用 1 个样本计算梯度,更新参数
- 优点:速度快,支持在线学习
- 缺点:更新方向震荡,收敛不稳定
小批量梯度下降(Mini-batch SGD)
- 每次用一小批样本计算梯度,兼顾速度与稳定性
- 深度学习主流训练方式
2. 带动量的 SGD(SGD with Momentum)
- 思想:引入动量项,累积历史梯度,平滑更新方向
- 公式:\\(v_t = \\beta v_{t-1} + (1-\\beta)g_t\\),\\(\\theta_t = \\theta_{t-1} – \\alpha v_t\\)
- 优点:
- 加速收敛,减少震荡
- 一定程度上冲出局部最优
3. NAG(Nesterov Accelerated Gradient)
- 改进:先按动量方向走一步,再计算该位置的梯度,相当于 “提前预判”
- 收敛速度通常优于普通动量 SGD
4. AdaGrad
- 思想:自适应学习率,频繁更新的参数学习率更小,稀疏参数学习率更大
- 缺点:学习率单调递减,训练后期学习率极小,模型停止学习
5. RMSProp
- 改进:对历史梯度平方做指数移动平均,替代 AdaGrad 的累加,解决学习率持续下降问题
- 公式:\\(s_t = \\beta s_{t-1} + (1-\\beta)g_t^2\\),\\(\\theta_t = \\theta_{t-1} – \\alpha \\frac{g_t}{\\sqrt{s_t}+\\epsilon}\\)
6. Adam(Adaptive Moment Estimation)
- 本质:动量 + RMSProp 的结合
- 维护两个一阶矩(动量)和二阶矩(梯度平方),并做偏差修正
- 优点:自适应学习率,收敛快,对超参数不敏感,通用性强
- 缺点:
- 后期易震荡,泛化能力有时不如 SGD+Momentum
- 可能存在自适应学习率过大导致的泛化问题
7. AdamW
- 改进:将权重衰减从梯度中解耦,直接对权重做衰减,而非加到梯度里
- 优势:修正了 Adam 中 L2 正则实现不合理的问题,泛化能力更强
- 现状:Transformer、大模型的默认优化器
8. SGD vs Adam 怎么选?
表格
| 追求极致泛化、算力充足 | SGD + Momentum |
| 快速迭代、数据量大、调参少 | Adam / AdamW |
| Transformer、大模型 | AdamW |
| 稀疏数据、NLP 任务 | Adam / AdamW |
9. 学习率调度器(Learning Rate Scheduler)
- 作用:训练过程中动态调整学习率,前期大步快走,后期小步收敛
- 常见类型:
- StepLR:固定步长按比例衰减
- CosineAnnealingLR:余弦退火,周期性升降学习率,跳出局部最优
- ReduceLROnPlateau:监控指标不再下降时降低学习率
- Warmup:训练初期学习率从 0 线性增长到初始值,避免初期模型不稳定
八、正则化与泛化能力
1. 过拟合 vs 欠拟合
表格
| 欠拟合 | 训练集、验证集效果都差 | 模型复杂度不足、特征太少、训练不足 |
| 过拟合 | 训练集效果极好,验证集 / 测试集效果差 | 模型太复杂、数据太少、训练过度 |
2. 解决欠拟合
3. 解决过拟合(核心正则化手段)
(1)数据层面
- 增加数据量
- 数据增强(图像:翻转、裁剪、旋转、色彩抖动;文本:同义词替换、回译、掩码)
(2)模型层面
- L1/L2 正则化(权重衰减)
- Dropout / DropConnect
- 早停(Early Stopping)
- 批量归一化 / 层归一化
- 标签平滑(Label Smoothing)
- 降低模型复杂度
(3)训练层面
- 交叉验证
- 多模型集成
4. L1 vs L2 正则化
表格
| 形式 | 权重绝对值之和 | 权重平方和 |
| 效果 | 产生稀疏解,可用于特征选择 | 权重整体变小,更稳定 |
| 导数 | 不可导(次梯度) | 处处可导 |
| 抗异常值 | 较强 | 较弱 |
| 场景 | 特征选择、稀疏化 | 通用权重衰减 |
5. Dropout
- 原理:训练时随机让一部分神经元失活(输出置 0),测试时全部神经元启用,权重缩放
- 为什么能防止过拟合?
- 减少神经元之间的共适应,强迫网络学习更鲁棒的特征
- 相当于集成了大量不同结构的子网络
- 注意:测试时不启用,需对权重乘以保留概率,保证输出尺度一致
6. DropConnect
- 改进:随机让权重连接失活,而非神经元失活
- 正则效果更强,但计算更复杂,使用较少
7. 早停(Early Stopping)
- 原理:训练中监控验证集指标,指标持续不提升时停止训练
- 最简单有效的正则化手段,几乎所有训练任务都会使用
8. 标签平滑(Label Smoothing)
- 原理:将硬标签(0/1)软化,如将 1 改为 0.9,0 改为 0.1
- 作用:降低模型对标签的置信度,防止过度自信,提升泛化能力
- 常用于分类任务和大模型训练
9. BatchNorm 为什么有正则效果?
- 训练时批次内的均值方差引入了噪声,相当于给特征添加了扰动
- 轻微的正则效果,可一定程度降低过拟合
九、损失函数全解析
1. 分类任务损失
交叉熵损失(Cross Entropy Loss)
- 二分类:\\(Loss = -[y\\log\\hat{y} + (1-y)\\log(1-\\hat{y})]\\)
- 多分类:\\(Loss = -\\sum_{i=1}^C y_i \\log\\hat{y}_i\\)
- 本质:衡量两个概率分布的差异,最小化交叉熵等价于最大化似然
- 搭配:输出层用 Softmax(多分类)或 Sigmoid(二分类)
Focal Loss
- 公式:\\(FL = -\\alpha_t (1-p_t)^\\gamma \\log(p_t)\\)
- 解决问题:正负样本不均衡、难易样本不均衡
- 核心:降低易分样本的权重,聚焦难分样本
- 常用场景:目标检测、长尾分布分类
Dice Loss
- 公式:\\(DiceLoss = 1 – \\frac{2|A\\cap B|}{|A|+|B|}\\)
- 本质:衡量预测与真实的重叠程度
- 适用:图像分割、样本极度不均衡的任务
- 缺点:训练不稳定,易震荡
2. 回归任务损失
MSE(均方误差)
- 公式:\\(MSE = \\frac{1}{N}\\sum(y_i-\\hat{y}_i)^2\\)
- 特点:对大误差惩罚重,对异常值敏感
MAE(平均绝对误差)
- 公式:\\(MAE = \\frac{1}{N}\\sum|y_i-\\hat{y}_i|\\)
- 特点:对异常值鲁棒,但导数不连续,收敛慢
Smooth L1 Loss
- 公式:误差小时用 L2,误差大时用 L1
- 优势:兼具 MSE 的稳定梯度和 MAE 的抗异常值能力
- 经典应用:Faster R-CNN 的边框回归
3. 对比学习损失
三元组损失(Triplet Loss)
- 组成:锚点样本、正样本、负样本
- 目标:锚点与正样本距离 < 锚点与负样本距离(间隔 margin)
- 应用:人脸识别、行人重识别、特征检索
InfoNCE Loss
- 对比学习核心损失,将正样本对与负样本对做分类
- 应用:SimCLR、MoCo 等自监督对比学习
十、模型训练核心技巧与常见问题
1. 权重初始化
为什么不能全零初始化?
- 全零初始化会导致同一层所有神经元输出相同,反向传播梯度相同,参数更新完全一致,网络退化为单层。
Xavier 初始化(Glorot 初始化)
- 思想:保持前向传播和反向传播时,各层输出的方差一致
- 适用:tanh、sigmoid 等对称激活函数
He 初始化(MSRA 初始化)
- 思想:针对 ReLU 设计,考虑负区间失活带来的方差减半
- 适用:ReLU 系列激活函数,CNN 中最常用
2. 批次大小(Batch Size)如何选择?
- 太大:显存占用高;收敛慢,容易陷入鞍点;泛化能力可能下降
- 太小:梯度估计噪声大,训练震荡;难以利用 BatchNorm
- 经验:在显存允许范围内选适中大小,搭配学习率线性缩放规则(batch size 翻倍,学习率翻倍)
3. 梯度裁剪(Gradient Clipping)
- 作用:限制梯度范数,防止梯度爆炸
- 两种方式:
- 按值裁剪:限制梯度每个分量的上下界
- 按范数裁剪:限制梯度整体 L2 范数,更常用
- 常用于 RNN、生成对抗网络等易梯度爆炸的场景
4. 混合精度训练(Mixed Precision Training)
- 原理:前向传播用 FP16 半精度,反向传播更新用 FP32 全精度
- 优势:显存占用减半、训练速度提升、计算吞吐量更高
- 关键:损失缩放(Loss Scaling),防止 FP16 下梯度过小下溢为 0
5. 梯度累积(Gradient Accumulation)
- 原理:多步前向传播后再更新一次参数,等效于扩大 batch size
- 适用场景:显存不足,无法使用大 batch size
6. 梯度检查点(Gradient Checkpointing)
- 原理:牺牲计算时间换取显存,只保存部分中间激活值,反向传播时重新计算
- 适用:训练超大模型,显存不足时
7. 训练不收敛的常见原因排查
十一、经典网络架构与创新点
1. LeNet-5
- 地位:第一个现代 CNN,用于手写数字识别
- 结构:卷积→池化→卷积→池化→全连接→输出
- 奠定了 CNN 的基本范式
2. AlexNet
- 里程碑意义:2012 年 ImageNet 冠军,开启深度学习时代
- 创新点:
- 首次使用 ReLU 激活函数,缓解梯度消失
- 使用 Dropout 防止过拟合
- 数据增强
- GPU 并行训练
- 重叠池化
3. VGGNet
- 核心思想:堆叠小卷积核替代大卷积核
- 特点:结构规整,全部使用 3×3 卷积和 2×2 池化
- 意义:证明了加深网络可以有效提升性能
4. GoogLeNet / Inception 系列
- 核心:Inception 模块,多尺寸卷积核并行(1×1、3×3、5×5),捕捉多尺度特征
- 创新:大量使用 1×1 卷积降维,控制参数量
- 辅助分类器:缓解深层梯度消失
5. ResNet(残差网络)
- 里程碑:2015 年 ImageNet 冠军,首次让超深网络(152 层)可训练
- 核心:残差连接(Shortcut),让网络学习残差映射而非直接映射
- 解决问题:深层网络的退化问题(层数加深,效果反而下降)
- 基础单元:BasicBlock(两层 3×3 卷积)、Bottleneck(1×1+3×3+1×1,降维升维,减少计算量)
6. DenseNet
- 核心:密集连接,每一层的输入都包含前面所有层的输出
- 优势:
- 特征复用,信息流通更顺畅
- 缓解梯度消失
- 参数量更少
- 缺点:显存占用高
7. MobileNet 系列
- 定位:移动端轻量化网络
- 核心:深度可分离卷积
- 进阶:宽度因子、分辨率因子,灵活控制模型大小
8. EfficientNet
- 核心思想:复合缩放,同时缩放网络深度、宽度、分辨率
- 优势:在计算量和精度之间达到最优平衡
9. ViT(Vision Transformer)
- 里程碑:将 Transformer 纯迁移到图像任务
- 做法:将图像切分成 patch,展平成序列,送入 Transformer Encoder
- 意义:证明了 Transformer 在视觉领域的潜力,开启 CV 大模型时代
10. Swin Transformer
- 核心:滑动窗口自注意力 + 层级化结构
- 解决 ViT 的问题:计算量过大、多尺度特征不足
- 地位:视觉 Transformer 的标杆,广泛用于检测、分割等下游任务
十二、模型压缩与轻量化部署
1. 模型压缩四大方向
(1)模型剪枝(Pruning)
- 原理:移除网络中不重要的权重 / 通道 / 层
- 分类:
- 非结构化剪枝:剪单个权重,稀疏度高但需特殊硬件支持
- 结构化剪枝:剪整个通道 / 层,直接减小模型尺寸,通用硬件可部署
- 流程:训练大模型→评估重要性→剪枝→微调恢复精度
(2)量化(Quantization)
- 原理:将高精度浮点(FP32)转为低精度(FP16、INT8、INT4)
- 优势:减小模型体积、提升推理速度、降低显存占用
- 分类:
- 训练后量化(PTQ):少量校准数据即可,简单快速
- 量化感知训练(QAT):训练中模拟量化误差,精度更高
- 注意:极低比特量化可能带来精度损失
(3)知识蒸馏(Knowledge Distillation)
- 原理:大模型(教师)指导小模型(学生)训练,学生学习教师的软标签
- 优势:小模型获得接近大模型的精度
- 进阶:特征蒸馏、注意力蒸馏等
(4)轻量化网络设计
- 代表:MobileNet、ShuffleNet、SqueezeNet、GhostNet
- 思路:设计更高效的卷积结构、分组卷积、通道混洗等
2. 推理加速框架
- TensorRT:NVIDIA GPU 推理加速,支持量化、算子融合、内核优化
- ONNX Runtime:跨平台推理引擎
- NCNN / MNN:移动端推理框架
- OpenVINO:Intel 平台推理优化
十三、生成式模型基础
1. GAN(生成对抗网络)
- 组成:生成器 + 判别器
- 思想:二人零和博弈,生成器尽量生成逼真样本,判别器尽量分辨真假
- 损失:最小最大博弈
- 问题:训练不稳定、模式崩塌、梯度消失
2. VAE(变分自编码器)
- 思想:显式建模数据分布,基于变分推断
- 组成:编码器(推断隐变量分布)+ 解码器(从隐变量生成样本)
- 特点:训练稳定,有显式分布;生成样本清晰度通常低于 GAN
3. 扩散模型(Diffusion Model)
- 原理:前向逐步加噪,反向逐步去噪,学习从噪声还原数据
- 优势:生成质量高、训练稳定、模式覆盖全面
- 现状:当前 AIGC 的主流技术(Stable Diffusion、DALL・E 等)
- 缺点:推理速度慢,需要多步去噪
十四、评估指标与模型评价
1. 分类任务指标
- 准确率(Accuracy):预测正确的样本占总样本比例;样本均衡时适用
- 精确率(Precision):预测为正的样本中,真正为正的比例;关注误报
- 召回率(Recall):真实为正的样本中,被预测为正的比例;关注漏报
- F1 值:精确率和召回率的调和平均,综合评价
- 混淆矩阵:直观展示各类别预测对错情况
- ROC-AUC:衡量模型整体排序能力,不受阈值影响,不均衡样本适用
2. 目标检测指标
- mAP(平均精度均值):各类别 AP 的平均值,核心指标
- IoU(交并比):预测框与真实框的重叠程度
- FPS:每秒推理帧数,衡量速度
3. 分割任务指标
- mIoU:各类别交并比的均值,核心指标
- Dice 系数:与 IoU 正相关,医学分割常用
4. 回归任务指标
- MAE、MSE、RMSE
- R²(决定系数):衡量模型解释方差的比例
十五、深度学习框架与工程实践
1. PyTorch vs TensorFlow
表格
| 编程范式 | 动态图,命令式,调试方便 | 早期静态图,现在也支持动态图 |
| 易用性 | 简单直观,Python 风格强 | 语法相对复杂,学习曲线陡 |
| 学术界 | 绝对主流 | 占比低 |
| 工业部署 | 需额外工具(TorchScript、ONNX) | TensorRT、TFServing 生态完善 |
| 调试 | 可直接打断点,像普通 Python 代码 | 静态图调试麻烦 |
2. PyTorch 中 nn.Module 的作用
- 封装网络层、参数管理、设备迁移、保存加载、子模块管理
- forward 方法定义前向传播逻辑
3. model.eval () 和 torch.no_grad () 的区别
- model.eval():切换到评估模式,关闭 Dropout、BatchNorm 使用移动平均均值方差
- torch.no_grad():关闭梯度计算,节省显存和计算,不影响模型状态
- 推理时两者通常一起使用
4. DataParallel vs DistributedDataParallel
- DataParallel:单机多卡,数据并行,主卡汇总梯度,负载不均衡
- DistributedDataParallel(DDP):多机多卡 / 单机多卡,每张卡独立进程,梯度全规约,速度更快、负载均衡,是主流方案
1. 反向传播与梯度问题
反向传播本质:基于链式法则,从输出层向输入层逐层计算损失对每个参数的梯度,用于梯度下降更新权重。核心是构建计算图,正向传播计算中间值,反向传播逐层回传梯度。
梯度消失与梯度爆炸
- 成因:深层网络中,激活函数导数连乘后指数级衰减(小于 1)或指数级增长(大于 1)。Sigmoid 导数最大仅 0.25,多层后梯度趋近于 0;权重初始化过大则会导致梯度爆炸。
- 梯度消失解决方案:ReLU 系列激活函数、残差连接、BatchNorm、预训练 + 微调、合适的权重初始化。
- 梯度爆炸解决方案:梯度裁剪(Gradient Clipping)、权重初始化(Xavier/He 初始化)、BatchNorm、L2 正则化。
2. 激活函数
表格
| Sigmoid | \\(\\sigma(x)=\\frac{1}{1+e^{-x}}\\) | 输出 0~1,可解释为概率 | 梯度消失、输出非零均值、指数运算慢 | 早期网络、门控单元 |
| Tanh | \\(\\tanh(x)=\\frac{e^x-e^{-x}}{e^x+e^{-x}}\\) | 零均值,收敛比 Sigmoid 快 | 仍有梯度消失、指数运算 | 循环神经网络 |
| ReLU | \\(\\text{ReLU}(x)=\\max(0,x)\\) | 正区间无梯度消失、计算极快、稀疏激活 | Dead ReLU(负区间神经元永久失活)、输出非零均值 | 绝大多数 CNN |
| Leaky ReLU | \\(\\max(\\alpha x,x),\\alpha\\approx0.01\\) | 解决 Dead ReLU 问题 | α 为固定超参,需手动调优 | 对负梯度有需求的场景 |
| GELU | \\(x\\cdot\\Phi(x)\\),Φ 为高斯累积分布 | 平滑非饱和、结合随机正则思想、性能优异 | 计算稍复杂 | Transformer、ViT、BERT |
| Swish | \\(x\\cdot\\sigma(\\beta x)\\) | 平滑激活、自适应门控 | β 需学习 | 轻量化网络、EfficientNet |
3. 损失函数
分类损失
- 交叉熵损失:多分类最常用,衡量两个分布的差异。公式:\\(L=-\\sum y_i\\log p_i\\)。相比 MSE,分类任务下梯度更大、收敛更快,且为凸优化问题。
- 标签平滑:将硬标签转化为软标签 \\(y'=y(1-\\epsilon)+\\epsilon/K\\),防止模型过度自信,提升泛化能力。
- Focal Loss:解决正负样本、难易样本不均衡。公式:\\(FL=-\\alpha_t(1-p_t)^\\gamma\\log(p_t)\\)。\\(\\alpha\\)平衡正负样本权重,\\(\\gamma\\)降低易分类样本权重,聚焦难样本。
回归损失
- MSE/L2 损失:对异常值敏感,梯度随误差减小而减小,收敛平滑。
- MAE/L1 损失:对异常值鲁棒,但零点梯度不连续,收敛不稳定。
- Smooth L1:\\(|x|<1\\)时为\\(0.5x^2\\),否则为\\(|x|-0.5\\)。结合 L1 与 L2 优点,鲁棒且梯度平滑,检测框回归经典选择。
边界框回归损失
- IoU Loss:\\(L=1-\\text{IoU}\\),直接优化重叠度。缺点:框不重叠时无梯度,无法优化。
- GIoU Loss:引入最小外接框惩罚,解决无重叠梯度问题,但收敛慢。
- DIoU Loss:加入中心点距离惩罚,收敛速度显著提升。
- CIoU Loss:再加入长宽比一致性惩罚,几何约束更全面,YOLO 系列主流选择。
4. 优化器与学习率策略
经典优化器
- SGD+Momentum:积累历史梯度形成惯性,跳出局部最优与鞍点。泛化性好,但收敛慢,对学习率敏感。
- RMSProp:指数移动平均梯度平方,自适应调整每个参数的学习率,解决 AdaGrad 学习率单调递减问题。
- Adam:动量 + RMSProp,一阶矩二阶矩指数移动平均 + 偏差修正。收敛快、自适应强,但泛化性弱于 SGD,易过拟合。
- AdamW:解耦权重衰减与梯度更新,将权重衰减直接作用于权重本身。Transformer、ViT 等现代模型的标准选择。
学习率调度
- Warmup:训练初期用小学习率预热,避免梯度震荡导致模型崩塌。
- 余弦退火:学习率按余弦函数周期性衰减,配合重启可跳出局部最优。
- StepLR / 多步衰减:固定轮数乘以衰减系数,简单易调。
- ReduceLROnPlateau:监控验证集指标,不再下降时降低学习率。
5. 归一化方法
核心作用:缓解内部协变量偏移(ICS),将输入分布拉到激活函数非饱和区,加速收敛、降低初始化敏感度。
表格
| BatchNorm (BN) | [N, H, W],逐通道 | 是 | 批次内统计,有轻微正则效果 | 大 Batch 的 CNN 分类 |
| LayerNorm (LN) | [C, H, W],逐样本 | 否 | 样本内统计,不受批次影响 | Transformer、RNN |
| InstanceNorm (IN) | [H, W],逐样本逐通道 | 否 | 关注纹理风格,消除个体亮度差异 | 风格迁移、图像生成 |
| GroupNorm (GN) | 通道分组后组内归一化 | 否 | 小批次下性能稳定 | 检测、分割等大 Batch 受限场景 |
BN 训练与推理差异
- 训练:用当前 Batch 的均值、方差做归一化,同时通过滑动平均更新全局统计量。
- 推理:用训练阶段积累的全局均值、方差,保证输出确定性。
- 可学习参数\\(\\gamma\\)(缩放)和\\(\\beta\\)(偏移):恢复网络的表达能力,避免归一化破坏特征。
6. 正则化与过拟合
过拟合本质:模型学习到训练集的噪声而非通用规律,训练误差远小于测试误差。
解决方案
L1 vs L2 正则化
- L1(Lasso):损失加\\(\\lambda\\|w\\|_1\\),产生稀疏解,可用于特征选择;零点不可导。
- L2(Ridge):损失加\\(\\lambda\\|w\\|_2^2\\),权重平滑衰减,防止过拟合;处处可导,更常用。
- 本质差异:L1 梯度为常数,权重易被压到 0;L2 梯度与权重成正比,权重趋近于 0 但不为 0。
Dropout
- 训练:以概率p随机失活神经元,输出缩放\\(1/(1-p)\\)保证期望不变。
- 推理:所有神经元激活,权重无需额外缩放(训练时已做反向缩放)。
- 作用:等效于集成大量子网络,打破神经元共适应,缓解过拟合。
- 变体:DropPath(随机丢弃残差路径)、DropBlock(随机丢弃特征块区域,适配 CNN)。
二、卷积神经网络(CNN)基础
1. 卷积核心计算
- 输出尺寸公式:\\(O = \\frac{I – K + 2P}{S} + 1\\) I输入尺寸,K卷积核大小,P填充,S步长
- 参数量:\\(K\\times K\\times C_{in}\\times C_{out} + C_{out}\\)(偏置)
- 计算量(FLOPs):\\(O\\times O\\times K\\times K\\times C_{in}\\times C_{out}\\)
Padding 作用:保持特征图尺寸、保留边缘信息;Stride 作用:下采样、扩大感受野、减少计算量。
2. 经典卷积变体
1×1 逐点卷积
核心作用:
- 通道升维 / 降维,大幅减少参数量与计算量
- 跨通道信息交互与融合
- 配合激活函数增加非线性
- 替代全连接层(全局平均池化 + 1×1 卷积)
深度可分离卷积
分为两步:
- 参数量为普通卷积的\\(\\frac{1}{K^2}+\\frac{1}{C_{out}}\\),轻量化网络核心(MobileNet 系列)。
空洞卷积(膨胀卷积)
卷积核内插入空洞,相同参数量下扩大感受野,不降低特征图分辨率。
- 问题:网格效应,采样不连续丢失局部信息。
- 解决:混合膨胀卷积(HDC),级联不同膨胀率且无公约数。
- 代表:DeepLab 系列语义分割。
分组卷积
输入通道分为 G 组,每组独立卷积后拼接。参数量降低为原来的\\(1/G\\),增加特征多样性。
- 进阶:通道混洗(Channel Shuffle),解决分组后通道间无信息交互的问题(ShuffleNet)。
转置卷积(反卷积)
通过补零 + 普通卷积实现上采样,并非卷积的数学逆运算。
- 输出尺寸:\\(O = (I-1)\\times S – 2P + K + \\text{OutputPad}\\)
- 问题:棋盘效应,输出存在网格伪影。
- 解决:卷积核尺寸可被步长整除,或先用双线性插值上采样再做普通卷积。
3. 感受野
定义:特征图上一个像素对应原始输入图像的区域大小。
- 前向计算公式: \\(RF_0 = 1\\) \\(RF_i = RF_{i-1} + (K_i – 1) \\times \\prod_{j=0}^{i-1} S_j\\)
- 有效感受野:实际对输出有贡献的区域小于理论感受野,中心权重高、边缘权重低。
4. 经典 CNN Backbone 全解析
AlexNet(2012)
深度学习里程碑,ImageNet 冠军。
- 创新:ReLU 激活、Dropout、数据增强、双 GPU 分组卷积、重叠池化。
VGGNet(2014)
- 核心:堆叠 3×3 小卷积核替代大卷积核。2 个 3×3 感受野等价于 1 个 5×5,参数量更少、非线性更多。
- 结构规整,VGG16/19 最常用;缺点:全连接层参数量巨大。
GoogLeNet/Inception v1(2014)
- Inception 模块:并行 1×1、3×3、5×5 卷积 + 池化,多尺度特征融合。
- 1×1 卷积降维压缩计算量;全局平均池化替代全连接层;辅助分类器缓解梯度消失。
ResNet(2015)
解决深层网络退化问题,何恺明代表作。
- 核心:残差连接 \\(H(x) = F(x) + x\\),学习残差映射比直接学习恒等映射更容易。
- 反向传播时梯度可通过 shortcut 直接回传,从根本上缓解梯度消失。
- 两种残差块:
- BasicBlock:两个 3×3 卷积,用于 ResNet18/34
- Bottleneck:1×1 降维 + 3×3 卷积 + 1×1 升维,减少计算量,用于 ResNet50/101/152
MobileNet 系列
- v1:深度可分离卷积,宽度因子、分辨率因子控制模型大小。
- v2:倒残差结构(升维 – 卷积 – 降维)+ Linear Bottleneck(尾部不用 ReLU,保护低维特征)。
- v3:NAS 搜索架构,h-swish 激活,SE 注意力模块。
EfficientNet
复合缩放策略:同时均衡缩放网络深度、宽度、输入分辨率,用 NAS 搜索最优比例,精度与效率平衡极佳。
三、目标检测算法
1. 核心概念与评价指标
- Anchor:预设的多尺度、多宽高比基准框,作为框回归的初始参考。
- 正负样本:与 GT 框 IoU 大于阈值为正样本,小于阈值为负样本。
- mAP:所有类别 AP(PR 曲线下面积)的平均值。COCO 标准为 IoU 0.5~0.95 步长 0.05 的平均 AP,更严格。
- FPS:每秒处理帧数,衡量推理速度。
2. 两阶段检测算法演进
R-CNN
- 流程:选择性搜索生成 2000 候选框→缩放固定尺寸→逐个过 CNN 提特征→SVM 分类 + 回归微调。
- 缺点:重复计算、速度极慢、多阶段训练。
Fast R-CNN
- 改进:整张图过 Backbone 共享卷积计算;RoI Pooling 将候选框特征池化为固定尺寸;端到端多任务训练。
- 瓶颈:候选框仍由选择性搜索生成。
Faster R-CNN
全卷积端到端检测,用 RPN 替代选择性搜索。
- 完整流程:
- Backbone 提取整图特征图
- RPN 区域建议网络:每个特征点生成 9 个 Anchor,输出前景 / 背景分类 + 框偏移,NMS 后输出候选框
- RoI Pooling:候选框对应特征区域池化为 7×7 固定尺寸
- 全连接头输出类别分类 + 框精修回归
- RPN 正负样本规则:与 GT IoU 最大的 Anchor,或 IoU>0.7 为正;IoU<0.3 为负。
Mask R-CNN
实例分割标杆,在 Faster R-CNN 基础上:
- RoI Align 替代 RoI Pooling,双线性插值避免两次量化误差,位置精度大幅提升。
- 新增 Mask 分割分支,逐像素预测实例掩码。
FPN 特征金字塔网络
- 结构:自下而上(Backbone 前向)+ 自上而下(上采样)+ 横向连接。
- 价值:融合高层语义与低层细节,多尺度特征图分别检测不同大小目标,显著提升小目标性能。
3. 一阶段检测算法演进
YOLO v1
- 思想:图像划分为 S×S 网格,每个网格预测 B 个框与类别,端到端一次输出。
- 优点:速度极快,全局感受野,背景误检少。
- 缺点:小目标差、定位粗糙、每个网格只能预测一类。
SSD
多尺度特征图检测,低层特征检测小目标,高层特征检测大目标;每个特征点生成多个 Default Box。精度超越 YOLO v1,速度快于两阶段。
RetinaNet
- 核心贡献:Focal Loss,解决一阶段正负样本极度不均衡(1:1000)问题,一阶段精度首次追平两阶段。
- 架构:ResNet+FPN + 分类回归头。
YOLO 系列演进
- v2:Darknet19、BN、Anchor 机制、多尺度训练。
- v3:Darknet53、FPN 多尺度预测、Logistic 分类支持多标签。
- v4:CSPDarknet53、PANet 特征融合、Mosaic 增强、CIoU Loss、大量工程 Trick。
- v8:C2f 模块、解耦检测头、Anchor-Free、任务对齐学习(TAL)。
4. Anchor-Free 检测算法
无需预设 Anchor,避免超参调优,降低计算复杂度。
- CenterNet:检测目标中心点,预测中心热力图、宽高、偏移量。后处理简单,无需 NMS。
- FCOS:逐像素预测,每个像素输出到四条边的距离 + 中心度(Center-ness)抑制低质量框。
- YOLOX:Anchor-Free + 解耦头 + SimOTA 正样本匹配 + 强数据增强。
5. 后处理:NMS 及其变体
标准 NMS 流程:
变体
- Soft-NMS:不直接删除高 IoU 框,而是衰减其得分,适合密集目标场景。
- DIoU-NMS:用 DIoU 替代 IoU,考虑中心点距离,更符合几何直觉。
四、语义分割与实例分割
1. 任务分类
- 语义分割:逐像素分类,同类目标不区分个体。
- 实例分割:逐像素分类 + 实例区分,兼顾检测与分割。
- 全景分割:所有像素均分配类别 + 实例 ID,涵盖前景与背景。
2. 经典分割网络
FCN(2015)
全卷积网络开山之作。用卷积替代全连接,支持任意尺寸输入;转置卷积上采样;跳层连接融合高低层特征。缺点:上采样粗糙,边界精度差。
U-Net(2015)
医学影像分割事实标准。
- 结构:编码器(下采样提特征)+ 解码器(上采样恢复尺寸)+ 跳跃连接(拼接对应层特征)。
- 特点:U 型对称结构,多尺度特征融合,小数据集上表现优异。
DeepLab 系列
- v1:空洞卷积扩大感受野 + 全连接 CRF 后处理。
- v2:ASPP 空洞空间金字塔池化,多膨胀率并行捕捉多尺度上下文。
- v3+:编码器 – 解码器架构,ASPP 融合高层语义,跳跃连接补充低层细节。
PSPNet
金字塔池化模块(PPM),多尺度池化融合全局上下文信息,解决场景解析的多尺度问题。
HRNet
全程保持高分辨率特征,并行多分辨率分支反复交互融合。位置精度极高,适用于姿态估计、医学分割。
SegFormer
纯 Transformer 分割架构,分层 Transformer 编码器 + 轻量 MLP 解码器,兼顾精度与速度。
3. 上采样技术
4. 分割损失函数
- 交叉熵:像素级分类损失,简单通用,但样本不均衡时效果差。
- Dice Loss:\\(Dice=\\frac{2|A\\cap B|}{|A|+|B|}\\),直接优化重叠度,适配前景背景不均衡场景(医学影像)。训练不稳定,常与交叉熵混合使用。
- Lovász-Softmax Loss:直接优化 IoU 指标,基于子模损失,精度更高但计算稍复杂。
- Focal Loss:解决难易样本不均衡。
五、图像生成模型
1. GAN 生成对抗网络
核心思想:生成器 G 与判别器 D 博弈训练。生成器输入噪声生成假图骗过判别器;判别器区分真假样本。
- 损失:\\(\\min_G\\max_D V(D,G) = \\mathbb{E}_x[\\log D(x)] + \\mathbb{E}_z[\\log(1-D(G(z)))]\\)
训练难点
经典变体
- DCGAN:深度卷积 GAN,用转置卷积 + 步长卷积 + BN,大幅提升稳定性。
- WGAN:用推土机距离替代 JS 散度,分布不重叠时仍有梯度,解决训练不稳定与模式崩溃;权重裁剪约束 Lipschitz 条件。
- WGAN-GP:用梯度惩罚替代权重裁剪,效果更稳定、生成质量更高。
- CycleGAN:无配对图像风格迁移,循环一致性损失保证内容不变。
- StyleGAN:风格解耦,可精准控制生成图像的属性与风格。
2. 扩散模型
核心原理:前向逐步加噪,反向逐步去噪生成图像。
代表工作:DDPM、DDIM、Stable Diffusion。
- 优点:生成质量高、多样性好、训练稳定、无模式崩溃。
- 缺点:原生推理速度慢,需多步采样;已有 DDIM、DPM-Solver 等加速算法。
- Stable Diffusion:在隐空间做扩散,大幅降低计算量,支持文生图、图生图等丰富应用。
3. VAE 变分自编码器
- 结构:编码器将输入映射为隐空间的均值与方差,重参数化技巧采样隐变量,解码器还原图像。
- 损失:重构损失 + KL 散度(约束隐分布接近标准正态)。
- 特点:有显式隐空间、可解释、生成稳定;但生成图像偏模糊,质量弱于 GAN 与扩散模型。
六、视觉 Transformer
1. Transformer 核心组件
- 自注意力:\\(Attention(Q,K,V) = \\text{softmax}(\\frac{QK^T}{\\sqrt{d_k}})V\\) Q/K/V 由输入线性投影得到;\\(\\sqrt{d_k}\\)缩放防止点积过大导致 softmax 饱和。全局感受野,建模长距离依赖。
- 多头注意力:将 QKV 拆分为多个头独立计算注意力再拼接,捕捉不同子空间特征。
- 位置编码:Transformer 无位置感知,需注入位置信息。分为正弦余弦固定编码、可学习位置编码。
- FFN 前馈网络:两层线性层 + GELU 激活,升维再降维。
- 基础单元:多头注意力 + FFN,每层均有残差连接 + LayerNorm。
2. ViT 视觉 Transformer
- 流程:图像划分为 Patch→线性投影为 Patch Embedding→加入位置编码与 Class Token→Transformer 编码器→Class Token 输出分类。
- 与 CNN 对比
- 优点:全局建模能力强、长距离依赖优、大数据下性能上限高、迁移泛化性好。
- 缺点:计算量与序列长度平方成正比、小数据集效果弱于 CNN、缺乏局部性归纳偏置。
3. 视觉 Transformer 变体
- DeiT:知识蒸馏方案,用 CNN 教师模型指导 ViT 学生,小数据集也可训练。
- Swin Transformer:分层 Transformer,滑动窗口注意力将计算量降为线性;移位窗口实现窗口间交互。支持多尺度特征,适配检测、分割等密集预测任务。
- MAE:掩码自编码器自监督预训练,随机掩码大部分 Patch,重建像素,学习通用视觉表征。
七、模型压缩与部署优化
1. 模型轻量化设计
- 深度可分离卷积、分组卷积、倒残差结构
- 神经架构搜索(NAS)自动搜索高效结构
2. 模型压缩技术
模型剪枝
- 非结构化剪枝:移除不重要的权重,稀疏度高但需特殊硬件支持。
- 结构化剪枝:移除整个通道 / 滤波器,规则稀疏,通用硬件即可加速。
- 流程:训练大模型→评估权重重要性→剪枝→微调恢复精度。
模型量化
将浮点运算转为定点(如 INT8),减少显存占用、提升推理速度。
- PTQ 训练后量化:训好模型直接量化,少量校准数据,简单但精度损失较大。
- QAT 量化感知训练:训练中模拟量化误差,精度损失小,效果更优。
- 分类:权重量化、激活量化、全量化;对称量化、非对称量化。
知识蒸馏
大模型(教师)输出软标签指导小模型(学生)训练,学生继承教师的泛化能力。
- 损失:学生与真实标签的硬损失 + 学生与教师输出的蒸馏损失(温度 T 控制平滑度)。
- 进阶:特征蒸馏、注意力蒸馏,传递中间层知识。
低秩分解
将大权重矩阵分解为两个小矩阵相乘,大幅减少参数量与计算量。
3. 模型部署与推理加速
- ONNX:通用模型交换格式,跨框架转换的中间标准。
- TensorRT:NVIDIA 推理引擎,算子融合、量化、内核自动调优,GPU 上数倍加速。
- 核心加速手段:算子融合(Conv+BN+ReLU 合并)、显存复用、混合精度推理(FP16/BF16)、批量推理。
八、传统数字图像处理
1. 色彩空间
- RGB:加色模型,显示设备通用。
- HSV:色调、饱和度、明度,符合人眼感知,适用于颜色分割。
- YUV/YCbCr:亮度 + 色度,色度可降采样,视频编码通用。
- 灰度转换:\\(Gray = 0.299R + 0.587G + 0.114B\\),人眼对绿色最敏感。
2. 图像滤波与去噪
表格
| 均值滤波 | 邻域像素平均 | 简单、边缘模糊严重 | 轻度均匀噪声 |
| 高斯滤波 | 高斯加权,中心权重高 | 平滑效果好,保边优于均值 | 高斯噪声去噪、预处理 |
| 中值滤波 | 邻域排序取中值,非线性 | 椒盐噪声效果极佳,保边缘 | 椒盐噪声去除 |
| 双边滤波 | 空间高斯 + 值域高斯联合加权 | 保边去噪,计算较慢 | 人像美颜、细节保留 |
3. 边缘与特征检测
Canny 边缘检测(工业标准)
步骤:
SIFT 尺度不变特征变换
- 特点:尺度、旋转、光照不变性,匹配精度高。
- 步骤:DoG 尺度空间极值检测→关键点精定位→梯度直方图赋主方向→128 维描述子生成。
Harris 角点检测
基于窗口移动的灰度变化,各方向灰度变化均大为角点。构造 M 矩阵计算响应值,阈值 + NMS 输出角点。
4. 图像增强与形态学
直方图均衡化
通过累积分布函数映射灰度,将直方图拉伸为均匀分布,提升对比度。
- 缺点:全局增强易放大噪声、局部过曝 / 过暗。
- 改进:CLAHE(限制对比度自适应直方图均衡),分块处理 + 对比度限制。
形态学操作(二值图像)
- 腐蚀:取邻域最小值,缩小目标、去除小亮点、断开细连接。
- 膨胀:取邻域最大值,扩大目标、填补空洞、连接断裂。
- 开运算:先腐蚀后膨胀,去噪且不改变目标大小。
- 闭运算:先膨胀后腐蚀,填补小孔、连接相邻区域。
- 顶帽:原图减开运算,提取亮细节;黑帽:闭运算减原图,提取暗细节。
九、传统机器学习基础
1. 偏差与方差权衡
- 偏差:模型期望预测与真实值的差距,衡量拟合能力;偏差大→欠拟合。
- 方差:模型预测的波动程度,衡量稳定性;方差大→过拟合。
- 总误差 = 偏差 ² + 方差 + 不可避免误差。
- 欠拟合解决:增加模型复杂度、增加特征、减小正则化。
- 过拟合解决:增加数据、增强正则、降低模型复杂度、早停。
2. 经典算法核心
决策树
- 分裂准则:ID3(信息增益)、C4.5(信息增益比)、CART(基尼系数)。
- 剪枝:预剪枝(分裂前判断增益)、后剪枝(生成后回溯剪枝),防止过拟合。
随机森林
Bagging 集成 + 决策树,样本 Bootstrap 采样 + 特征随机选择。
- 优点:抗过拟合、泛化强、可并行、处理高维数据。
XGBoost
GBDT 工程优化标杆。
- 核心改进:二阶泰勒展开损失、显式正则项、近似分裂算法、缺失值自动处理、列采样、特征维度并行。
SVM 支持向量机
- 核心:最大化分类间隔的超平面,支持向量决定分隔面。
- 核技巧:低维映射高维实现非线性分类,常用 RBF 高斯核。
- 优点:小样本泛化好、理论完备;缺点:大数据慢、调参复杂。
3. 分类评价指标
- 精确率 Precision:预测正例中真阳性比例,关注误检。
- 召回率 Recall:真阳性中被检出比例,关注漏检。
- F1:精确率与召回率调和平均,综合指标。
- ROC-AUC:横轴假阳率、纵轴真阳率,AUC 衡量模型整体排序能力,不受阈值影响。
- PR 曲线:样本不均衡场景下比 ROC 更敏感。
十、高频手撕代码(PyTorch 版)
1. IoU 计算
python
运行
def compute_iou(box1, box2):
# box格式: [x1, y1, x2, y2]
x1 = max(box1[0], box2[0])
y1 = max(box1[1], box2[1])
x2 = min(box1[2], box2[2])
y2 = min(box1[3], box2[3])
inter = max(0, x2 – x1) * max(0, y2 – y1)
area1 = (box1[2]-box1[0]) * (box1[3]-box1[1])
area2 = (box2[2]-box2[0]) * (box2[3]-box2[1])
union = area1 + area2 – inter
return inter / union if union > 0 else 0
2. NMS 实现
python
运行
def nms(boxes, scores, iou_threshold):
order = scores.argsort(descending=True)
keep = []
while len(order) > 0:
idx = order[0]
keep.append(idx.item())
if len(order) == 1:
break
rest = order[1:]
ious = torch.tensor([compute_iou(boxes[idx], boxes[i]) for i in rest])
order = rest[ious < iou_threshold]
return keep
3. Focal Loss
python
运行
class FocalLoss(nn.Module):
def __init__(self, alpha=0.25, gamma=2):
super().__init__()
self.alpha = alpha
self.gamma = gamma
def forward(self, pred, target):
ce = F.cross_entropy(pred, target, reduction='none')
p = torch.exp(-ce)
focal_weight = self.alpha * (1 – p) ** self.gamma
return (focal_weight * ce).mean()
4. Dice Loss
python
运行
class DiceLoss(nn.Module):
def __init__(self, smooth=1e-6):
super().__init__()
self.smooth = smooth
def forward(self, pred, target):
pred = torch.sigmoid(pred)
pred = pred.view(-1)
target = target.view(-1)
intersection = (pred * target).sum()
dice = (2. * intersection + self.smooth) / (pred.sum() + target.sum() + self.smooth)
return 1 – dice
5. ResNet BasicBlock
python
运行
class BasicBlock(nn.Module):
expansion = 1
def __init__(self, in_channels, out_channels, stride=1):
super().__init__()
self.conv1 = nn.Conv2d(in_channels, out_channels, 3, stride, 1, bias=False)
self.bn1 = nn.BatchNorm2d(out_channels)
self.conv2 = nn.Conv2d(out_channels, out_channels, 3, 1, 1, bias=False)
self.bn2 = nn.BatchNorm2d(out_channels)
self.shortcut = nn.Sequential()
if stride != 1 or in_channels != out_channels:
self.shortcut = nn.Sequential(
nn.Conv2d(in_channels, out_channels, 1, stride, bias=False),
nn.BatchNorm2d(out_channels)
)
def forward(self, x):
out = F.relu(self.bn1(self.conv1(x)))
out = self.bn2(self.conv2(out))
out += self.shortcut(x)
return F.relu(out)
6. 多头注意力
python
运行
class MultiHeadAttention(nn.Module):
def __init__(self, dim, num_heads):
super().__init__()
self.num_heads = num_heads
self.head_dim = dim // num_heads
self.scale = self.head_dim ** -0.5
self.qkv = nn.Linear(dim, dim * 3)
self.proj = nn.Linear(dim, dim)
def forward(self, x):
B, N, C = x.shape
qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, self.head_dim).permute(2, 0, 3, 1, 4)
q, k, v = qkv.unbind(0)
attn = (q @ k.transpose(-2, -1)) * self.scale
attn = attn.softmax(dim=-1)
out = (attn @ v).transpose(1, 2).reshape(B, N, C)
return self.proj(out)
十一、面试高频开放性问题
小目标检测难点与解决方案 难点:像素少、特征弱、标注误差大、样本不均衡。 方案:高分辨率输入、多尺度特征融合(FPN)、数据增强(Mosaic、复制粘贴)、Anchor 优化、针对小目标的损失加权、增加低层特征监督。
样本不均衡处理方法 数据层面:重采样(过采样、欠采样)、数据增强、合成样本。 算法层面:类别加权损失、Focal Loss、难例挖掘(OHEM)、生成式补充样本。
CNN 与 Transformer 选型
- 数据量小、边缘设备部署、实时性要求高:优先 CNN。
- 数据量大、通用视觉任务、需要强全局建模:优先 Transformer。
- 工业落地主流:CNN Backbone 仍是检测分割主力,Transformer 逐步渗透高端场景。
模型部署速度优化思路 模型侧:轻量化架构、剪枝、量化、知识蒸馏。 推理侧:算子融合、TensorRT/OpenVINO 加速、混合精度、批量推理、显存优化。 工程侧:多线程、流水线、模型并行 / 数据并行。
需要我补充Transformer 检测架构(DETR 系列)、自监督学习、多模态大模型相关的八股内容吗?
深度学习更多八股
已完成思考
深度学习进阶八股大全(深度拓展版)
以下补充深度学习领域更细分、更高频的面试深度考点,覆盖优化器原理、归一化与初始化、Transformer 进阶、自监督学习、大模型微调、分布式训练、训练排障、理论基础等核心八股方向,全部贴合算法岗面试提问逻辑。
十二、优化器与梯度下降深度进阶
1. 梯度下降家族完整谱系
- BGD 批量梯度下降:每轮用全部样本计算梯度后更新。收敛稳定、迭代次数少;但计算量大,无法在线更新,大数据集不可行。
- SGD 随机梯度下降:每轮只用单个样本计算梯度。迭代波动大,有隐式正则效果,泛化性更好;计算极快,支持在线学习。
- MBGD 小批量梯度下降:工业界标准,折中两者优点,每批用固定数量样本更新,兼顾稳定性与效率。
- 动量 Momentum:引入指数加权平均的历史梯度,形成更新惯性。公式:\\(v_t = \\beta v_{t-1} + (1-\\beta)g_t,\\ w = w – \\eta v_t\\)。
- 作用:加速收敛、冲过局部最优与鞍点、抑制梯度震荡。
- Nesterov 动量:先按惯性方向前进一步,再在新位置计算梯度修正方向。比普通动量更灵敏,能提前减速,收敛更平稳。
2. Adam 系优化器深度辨析
- Adam 完整机制:同时维护梯度的一阶矩(动量,平滑梯度方向)和二阶矩(梯度平方,自适应学习率),并加入偏差修正解决初始阶段统计量有偏的问题。
- Adam 泛化性弱于 SGD 的原因(面试高频)
- 自适应学习率导致参数更新方向更激进,易收敛到尖锐极小值,对数据扰动容忍度低,泛化差;SGD 恒定学习率更易找到平坦极小值。
- 二阶矩持续累积会导致训练后期学习率过小,模型过早收敛到次优点。
- 原始 Adam 中 L2 正则与自适应学习率耦合,正则效果被削弱。
- AdamW vs Adam
- 核心差异:解耦权重衰减。原始 Adam 将权重衰减并入梯度计算,自适应学习率会缩放梯度,导致正则强度不稳定;AdamW 将权重衰减直接作用于权重本身,与梯度更新完全解耦。
- 地位:Transformer、ViT、大模型的标准优化器,正则更稳定,泛化显著优于原生 Adam。
- LAMB 优化器:逐层自适应矩优化,为每一层单独计算学习率缩放因子,适配超大 Batch 预训练场景,解决大 Batch 下 Adam 训练不稳定的问题。
3. 权重衰减 vs L2 正则化
- SGD 场景:两者数学上近似等价,L2 正则的梯度项等价于权重衰减。
- 自适应优化器场景(Adam/RMSProp):两者不等价。L2 正则的梯度会被自适应学习率缩放,正则效果被削弱;权重衰减直接作用于权重,不受学习率影响,正则强度更稳定。
- 工程结论:深度学习中优先使用权重衰减,而非在损失中加 L2 正则项。
4. 二阶优化方法为什么工业界不常用
代表方法:牛顿法、拟牛顿法(L-BFGS)。
- 核心瓶颈:海森矩阵计算与存储成本极高,参数量百万级以上完全不可行。
- 非凸问题:深度学习损失曲面非凸,海森矩阵可能不正定,牛顿方向不一定是下降方向。
- 性价比低:一阶方法配合动量、自适应学习率、学习率调度,在大数据下效果足够好,工程成本远低于二阶方法。
十三、归一化与初始化深度解析
1. BatchNorm 深层理解
- BN 加速收敛的本质
- 经典解释:缓解内部协变量偏移(ICS),让每层输入分布稳定,无需反复适应输入分布变化。
- 后续研究:平滑损失曲面,降低梯度的 Lipschitz 常数,让梯度更稳定,大幅降低对初始化和学习率的敏感度;批次统计引入噪声,具备轻微正则效果。
- BN 的核心缺点
- 强依赖 Batch Size,小 Batch 下统计量偏差大,性能暴跌。
- 训练与推理行为不一致,推理需使用训练期累积的滑动平均统计量。
- 对序列数据、像素级密集预测任务适配性差。
- 引入批次间噪声,在生成模型中会破坏生成质量。
- 推理用滑动平均的原因:保证输出确定性,同一样本不受推理批次影响;同时让推理分布与训练期期望分布对齐。
2. 归一化家族选型考点
- 为什么 Transformer 用 LayerNorm 不用 BN?
- Transformer 输入是变长序列,序列长度不固定,BN 的通道维度统计无意义。
- 序列中不同 token 语义差异大,BN 的批次平均会抹平个体特征。
- LN 逐样本归一化,不受 Batch Size、序列长度影响,适配性更强。
- RMSNorm:LayerNorm 的轻量化版本,只归一化方差、不减均值,计算量更低,效果相当,是大模型(LLaMA 等)的主流选择。
- InstanceNorm vs BN:IN 逐样本逐通道归一化,消除图像个体亮度、对比度差异,保留纹理风格,适用于风格迁移、图像生成;BN 关注批次整体分布,适配分类任务。
3. 权重初始化核心原理
- 全零初始化为什么失效?:所有神经元输出完全相同,反向传播梯度一致,参数更新永远对称,网络退化为单层神经元,无法学习差异化特征。
- Xavier 初始化(Glorot)
- 假设:激活函数近似线性,保证前向传播与反向传播时每层特征的方差一致,避免梯度消失 / 爆炸。
- 结论:权重服从均匀分布 \\(U(-\\sqrt{6/(n_{in}+n_{out})},\\sqrt{6/(n_{in}+n_{out})})\\)。
- 适配:Sigmoid、Tanh 等对称激活函数。
- He 初始化(MSRA)
- 针对 ReLU 设计:ReLU 会让约一半神经元失活,输出方差减半。
- 结论:权重方差为 \\(2/n_{in}\\),服从正态分布 \\(N(0,\\sqrt{2/n_{in}})\\)。
- 适配:ReLU 系列激活函数,CNN 的标准初始化方案。
十四、注意力机制与 Transformer 进阶八股
1. 自注意力核心考点
- 为什么除以\\(\\sqrt{d_k}\\)? 点积结果的方差为\\(d_k\\),维度较大时点积值波动极大,会导致 softmax 进入饱和区,梯度趋近于 0。除以\\(\\sqrt{d_k}\\)后点积方差归一化为 1,softmax 分布更平缓,梯度稳定。
- 自注意力复杂度:序列长度N、特征维度d,时间 / 空间复杂度均为\\(O(N^2d)\\)。序列长度是性能瓶颈,因此衍生出滑动窗口注意力、稀疏注意力、线性注意力等优化方向。
- 多头注意力的作用
- 多子空间建模:不同头学习不同模式的注意力(局部纹理、全局语义、边缘轮廓等),特征表达更丰富。
- 计算效率:拆分多头后单头维度降低,总计算量与单头相当,但表达能力显著提升。
2. 位置编码全解析
表格
| 正弦余弦编码 | 不同频率正余弦函数,固定不可学习 | 支持长度外推,无额外参数量 | 拟合能力有限 | 原生 Transformer |
| 可学习位置编码 | 直接初始化可学习参数向量 | 拟合能力强,效果好 | 无法外推超长序列 | ViT、BERT |
| 相对位置编码 | 编码 token 间的相对距离 | 符合视觉 / 语言直觉,泛化性好 | 实现稍复杂 | Swin Transformer |
| RoPE 旋转位置编码 | 对 Q/K 施加旋转矩阵注入位置信息 | 保留相对位置,支持长度外推 | 需修改注意力计算 | LLaMA、大模型主流 |
3. Pre-LN vs Post-LN
- Post-LN:原生 Transformer 结构,顺序为「Attention/FFN → 残差相加 → LayerNorm」。
- 问题:训练初期底层梯度大、顶层梯度小,深层网络训练极不稳定,必须配合学习率 Warmup。
- Pre-LN:顺序为「LayerNorm → Attention/FFN → 残差相加」,ViT、GPT、大模型均采用此结构。
- 优点:每层输入都经过归一化,梯度尺度始终稳定,深层网络易训练,对 Warmup 依赖低。
- 缺点:最终输出无归一化,顶层特征表达力略有损失。
4. Transformer 深层梯度问题
- 为什么几十上百层的 Transformer 不会严重梯度消失?
- 残差连接:梯度可通过 shortcut 直接回传,从根本上缩短梯度传播路径。
- Pre-LN 归一化:保证每层输入尺度稳定,梯度不会指数级衰减。
- 自注意力全局连接:每个 token 直接与所有 token 交互,梯度传播路径短。
十五、自监督学习(SSL)八股
1. 自监督核心思想与价值
- 无需人工标注,从数据本身构造监督信号预训练,学习通用视觉表征,下游任务微调即可适配。
- 核心价值:可利用海量无标注数据;预训练得到的特征迁移性、泛化性更强;小样本、少样本场景下远优于监督预训练。
2. 对比学习核心原理
- 核心目标:让正样本对的特征距离拉近,负样本对的特征距离推远,学习具有判别性的表征。
- InfoNCE 损失: \\(L = -\\log \\frac{\\exp(\\text{sim}(z_i,z_j)/\\tau)}{\\sum_{k=1}^{2N} \\exp(\\text{sim}(z_i,z_k)/\\tau)}\\)
- 温度系数\\(\\tau\\)的作用:控制分布尖锐程度。\\(\\tau\\)越小,对难负样本的惩罚越强,区分度越高,但易过拟合;\\(\\tau\\)越大,分布越平滑,区分度弱。视觉任务常用 0.05~0.1。
3. 经典对比学习算法
- SimCLR:同一张图做两次不同增强得到两个视图,互为正样本,Batch 内其余所有样本为负样本。
- 核心结论:强数据增强是性能关键;大 Batch 提供充足负样本;MLP 投影头大幅提升表征质量。
- MoCo 系列:动量编码器 + 队列字典,维护一个大容量负样本队列,无需大 Batch 即可获得大量负样本,工程落地性更强。
- BYOL:无负样本对比学习,仅通过正样本一致性学习,依靠动量编码器 + 停止梯度避免模型崩塌(所有样本特征趋同)。
- DINO:自监督蒸馏方案,学生网络拟合动量教师的输出,无需负样本,在 ViT 上效果突出,注意力天然对应物体语义区域。
4. 掩码自编码器(MAE)
- 核心机制:随机掩码图像 75% 的 Patch,让模型重建被掩码区域的像素。编码器仅处理可见 Patch,解码器轻量负责重建。
- 与对比学习的差异:对比学习学习判别性表征,适配分类、检测;MAE 学习重建性表征,对图像结构、细节理解更深,适配分割、生成、低层次视觉任务。
十六、大模型与多模态核心八股
1. 大模型微调技术全对比
表格
| 全参微调 | 更新模型全部参数 | 100% | 极高 | 无额外开销 | 最好 |
| LoRA | 冻结原权重,训练低秩旁路矩阵 | 极低(秩 r 远小于原维度) | 低 | 可合并权重,无额外延迟 | 接近全参 |
| QLoRA | 基座模型量化到 4bit+LoRA 微调 | 极低 | 极低 | 有量化精度损失 | 接近全参 |
| Prefix Tuning | 仅优化前缀 Prompt 向量 | 极少 | 低 | 有额外序列长度开销 | 弱于 LoRA |
- LoRA 核心细节:通常仅微调注意力的 Q、V 矩阵。原因:注意力的查询与值交互是信息处理的核心,微调这两个矩阵效果足够好,同时参数量最小。
2. 视觉多模态核心模型
- CLIP
- 原理:海量图文对对比预训练,图像编码器与文本编码器分别编码,让匹配的图文特征拉近、不匹配的推远,实现跨模态对齐。
- 能力:零样本图像分类、跨模态检索、迁移性极强。
- 局限:细粒度分类能力弱、空间位置理解差、对训练数据分布敏感。
- BLIP 系列:在 CLIP 对比预训练基础上加入生成式预训练,支持图文检索、图像描述、视觉问答等多类任务,多模态理解能力更全面。
3. 大模型高频概念
- 涌现能力:模型规模达到特定阈值后,性能出现非线性跃升,小模型不具备的能力突然出现。
- 幻觉:模型输出看似合理但与事实不符的内容,多模态场景下表现为虚构物体、描述与图像内容不符。
- 对齐:通过指令微调、人类反馈强化学习等方式,让模型输出符合人类认知、价值观与事实标准。
十七、分布式训练与混合精度
1. 并行训练分类与选型
- 数据并行(DDP):每张卡复制完整模型,数据拆分到各卡,独立前向反向,同步梯度后统一更新。
- 适用:模型单卡可容纳,追求训练提速。工业界最常用方案,环式梯度同步效率高。
- 模型并行:模型拆分到多张卡,每张卡存储部分参数。
- 张量并行:按矩阵维度拆分单层,计算时跨卡通信,通信开销大。
- 流水线并行:按网络层拆分,流水线式执行,通信量小但存在流水线气泡。
- 3D 并行:数据并行 + 张量并行 + 流水线并行结合,适配超大模型预训练。
2. 混合精度训练
- 核心机制:权重、梯度主备份用 FP32 保证精度,前向反向计算用 FP16/BF16 提速、省显存。
- 提速原理:FP16 位宽减半,显存占用减半;GPU 张量核心对 FP16 的计算吞吐量是 FP32 的数倍。
- 损失缩放(Loss Scaling)
- 问题:FP16 动态范围小,小梯度会下溢为 0,导致梯度消失。
- 解决:损失乘以缩放因子,反向传播梯度同步放大,避免下溢;更新权重时还原缩放,不影响精度。
- BF16 vs FP16:BF16 动态范围与 FP32 一致,不会溢出,无需损失缩放;但尾数精度更低。现代深度学习训练优先选 BF16。
3. 梯度累积
- 原理:多个 Step 不更新参数,累积梯度后统一更新。
- 作用:显存不足时模拟大 Batch 效果。
- 注意:BN 的批次统计量按实际 Batch 计算,梯度累积不会改变 BN 的有效 Batch 大小,因此无法完全等价于真实大 Batch。
十八、训练调优实战排障八股
1. Loss 不收敛排查思路
按优先级从高到低排查:
2. Nan/Inf Loss 常见原因
3. Loss 震荡的原因
4. 验证集精度高于训练集的原因
5. Batch Size 的影响与选型
- 大 Batch:梯度估计准确,收敛平稳;训练并行效率高;但泛化性通常更差,易收敛到尖锐极小值;显存需求高。
- 小 Batch:梯度带噪声,具备隐式正则效果,泛化更好;但收敛震荡,迭代步数多;显存需求低。
- 大 Batch 泛化差的解决方案:学习率线性缩放、加长 Warmup、增强权重衰减与标签平滑。
十九、深度学习理论基础八股
1. 偏差 – 方差分解
- 泛化误差 = 偏差 ² + 方差 + 不可避免噪声。
- 偏差:模型期望预测与真实值的差距,衡量模型拟合能力。偏差大→欠拟合。
- 方差:模型在不同训练集上预测结果的波动,衡量稳定性。方差大→过拟合。
- 变化规律:模型复杂度提升,偏差持续减小,方差持续增大,总误差呈先降后升的 U 型。
2. 双下降现象
- 传统统计学习:参数量超过拟合阈值后,过拟合加剧,泛化误差上升(U 型曲线)。
- 深度学习:参数量超过某一阈值后,泛化误差会再次下降,形成 “双下降” 曲线。
- 核心原因:超参数化模型的解空间更大,梯度下降倾向于找到范数更小、更平坦的解,泛化能力反而提升;大模型自身的归纳偏置也更适配数据规律。
3. 为什么超参数模型不会严重过拟合
4. 局部最优与鞍点
高维参数空间中,真正的局部最优点数量很少,大量梯度为 0 的点是鞍点(部分方向是极大值、部分方向是极小值)。SGD 的噪声、动量机制可以有效跳出鞍点,因此深度学习中局部最优并非主要问题。
二十、补充高频手撕代码
1. BatchNorm 前向实现
python
运行
def batchnorm_forward(x, gamma, beta, eps=1e-5):
# x shape: [N, C, H, W]
mean = x.mean(dim=(0, 2, 3), keepdim=True)
var = x.var(dim=(0, 2, 3), keepdim=True, unbiased=False)
x_hat = (x – mean) / torch.sqrt(var + eps)
return gamma * x_hat + beta
2. 数值稳定的交叉熵损失
python
运行
def cross_entropy_loss(pred, target):
# pred: [N, C], target: [N]
pred_max = pred.max(dim=1, keepdim=True)[0]
exp_pred = torch.exp(pred – pred_max) # 减最大值防溢出
softmax = exp_pred / exp_pred.sum(dim=1, keepdim=True)
p = softmax[torch.arange(len(target)), target]
return -torch.log(p + 1e-8).mean()
3. 对比学习 InfoNCE 损失
python
运行
def info_nce_loss(feat1, feat2, temperature=0.07):
# feat1, feat2: [N, D] 两个增强视图的特征
features = torch.cat([feat1, feat2], dim=0)
batch_size = feat1.shape[0]
# 正样本标签:第i个对应第i+batch_size个
labels = torch.arange(2 * batch_size).to(features.device)
labels = (labels + batch_size) % (2 * batch_size)
sim_matrix = F.cosine_similarity(features.unsqueeze(1), features.unsqueeze(0), dim=-1)
sim_matrix = sim_matrix / temperature
return F.cross_entropy(sim_matrix, labels)
网硕互联帮助中心







评论前必须登录!
注册