云计算百科
云计算领域专业知识百科平台

深度学习八股,(图像)

一、深度学习基础核心概念

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)

    核心原理

    基于链式求导法则,从输出层向输入层逐层计算损失函数对每个参数的梯度,再通过优化器更新参数,最小化损失。

    计算步骤
  • 前向传播计算各层输出与最终损失
  • 计算输出层损失对输出的梯度
  • 从后往前逐层计算:损失对当前层权重W、偏置b的梯度,以及损失对上一层激活值的梯度
  • 优化器根据梯度更新所有参数
  • 计算图(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 卷积的作用

  • 升维 / 降维:通过调整输出通道数,改变特征维度,减少计算量
  • 增加非线性:引入激活函数,提升网络表达能力
  • 跨通道信息交互:融合不同通道的特征
  • 是 Inception、ResNet 等网络的核心组件
  • 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

    表格

    维度LSTMGRU
    门数量 3 个(遗忘、输入、输出) 2 个(更新、重置)
    状态 细胞状态 + 隐藏状态 仅隐藏状态
    参数量
    训练速度
    长序列效果 通常更稳定 相近,小数据更优

    5. RNN 系列为什么会梯度消失?和 CNN 的梯度消失有何不同?

    • RNN:同一权重矩阵在不同时刻反复相乘,长序列下指数级衰减,是时间维度的梯度消失。
    • CNN:不同层权重矩阵相乘,是深度维度的梯度消失。
    • 解决思路:RNN 靠门控机制,CNN 靠残差连接 + ReLU。

    六、Transformer 与注意力机制(面试高频重点)

    1. 自注意力机制(Self-Attention)

    核心思想

    计算序列中每个位置与所有位置的相关性权重,加权求和得到当前位置的特征,一步捕捉长距离依赖。

    Q、K、V 含义
    • Query(查询):当前位置的特征向量,用于 “查询” 其他位置
    • Key(键):其他位置的特征向量,用于被查询匹配
    • Value(值):其他位置的特征向量,用于加权求和
    • 三者均由输入特征乘不同的可学习矩阵得到。
    计算步骤
  • 输入向量分别与\\(W_Q, W_K, W_V\\)相乘,得到\\(Q, K, V\\)
  • 计算Q与K的点积,除以\\(\\sqrt{d_k}\\)(缩放因子,防止点积过大导致 softmax 梯度消失)
  • 经过 softmax 得到注意力权重
  • 权重与V加权求和,得到最终输出
  • 公式

    \\(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

    表格

    维度LayerNormBatchNorm
    归一化维度 对每个样本的所有特征做归一化 对一个批次内同一维度的特征做归一化
    依赖批次 不依赖,单样本即可计算 依赖批次大小,小批次效果差
    适用场景 NLP、Transformer、变长序列 CNN、固定维度输入
    训练 / 测试差异 无差异,推理直接用 训练用批次均值方差,测试用移动平均
    维度位置 通常在注意力 / FFN 之前(Pre-Norm) 通常在卷积 / 激活之后

    6. Transformer 为什么用 LayerNorm 而不是 BatchNorm?

  • 序列长度不固定,不同样本长度不同,BN 在序列维度归一化无意义
  • NLP 批次通常较小,BN 统计量不稳定
  • LN 对每个样本独立归一化,不受批次和序列长度影响,更稳定
  • 7. 残差连接(Residual Connection)

    • 公式:\\(x + F(x)\\)
    • 作用:
    • 缓解梯度消失,梯度可通过恒等路径直接回传
    • 让深层网络更容易训练
    • 保留原始信息,促进特征复用

    8. Transformer 相比 RNN 的优势

  • 并行计算:自注意力可一步计算所有位置,RNN 必须串行
  • 长距离依赖:自注意力一步捕捉全局依赖,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 正则化

    表格

    维度L1 正则(Lasso)L2 正则(Ridge)
    形式 权重绝对值之和 权重平方和
    效果 产生稀疏解,可用于特征选择 权重整体变小,更稳定
    导数 不可导(次梯度) 处处可导
    抗异常值 较强 较弱
    场景 特征选择、稀疏化 通用权重衰减

    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

    表格

    维度PyTorchTensorFlow
    编程范式 动态图,命令式,调试方便 早期静态图,现在也支持动态图
    易用性 简单直观,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),将输入分布拉到激活函数非饱和区,加速收敛、降低初始化敏感度。

    表格

    方法归一化维度依赖 Batch Size核心特点适用场景
    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. 正则化与过拟合

    过拟合本质:模型学习到训练集的噪声而非通用规律,训练误差远小于测试误差。

    解决方案

  • 数据层面:数据增强、扩充数据集、数据清洗去噪。
  • 模型层面:降低模型复杂度、加入正则项、Dropout、BN。
  • 训练层面:早停(Early Stopping)、权重衰减、学习率调优。
  • 集成层面:多模型融合、投票平均。
  • 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 卷积)
    深度可分离卷积

    分为两步:

  • 深度卷积:每个输入通道独立卷积,通道数不变
  • 逐点卷积: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 流程:

  • 按分类得分降序排列
  • 取最高分框,删除 IoU 大于阈值的其余框
  • 重复直至所有框处理完毕
  • 变体

    • 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. 上采样技术

  • 插值法:最近邻、双线性、双三次。无参数、速度快,但不可学习,细节恢复差。
  • 转置卷积:可学习上采样,参数多,易出现棋盘效应。
  • 像素洗牌(Pixel Shuffle):通道维度重排到空间维度,无棋盘效应,超分辨率常用。
  • 反池化:利用池化索引恢复位置,无参数但信息丢失多。
  • 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)))]\\)

    训练难点

  • 模式崩溃:生成器只产出少数模式,多样性不足。
  • 训练不稳定:G 与 D 难以平衡,判别器过强导致生成器梯度消失。
  • 经典变体

    • DCGAN:深度卷积 GAN,用转置卷积 + 步长卷积 + BN,大幅提升稳定性。
    • WGAN:用推土机距离替代 JS 散度,分布不重叠时仍有梯度,解决训练不稳定与模式崩溃;权重裁剪约束 Lipschitz 条件。
    • WGAN-GP:用梯度惩罚替代权重裁剪,效果更稳定、生成质量更高。
    • CycleGAN:无配对图像风格迁移,循环一致性损失保证内容不变。
    • StyleGAN:风格解耦,可精准控制生成图像的属性与风格。

    2. 扩散模型

    核心原理:前向逐步加噪,反向逐步去噪生成图像。

  • 前向扩散:T 步逐步向图像加入高斯噪声,最终变为纯噪声,可直接计算任意时刻的噪声图。
  • 反向去噪:神经网络预测每一步的噪声,从纯噪声逐步还原清晰图像。
  • 训练目标:最小化预测噪声与真实噪声的 MSE。
  • 代表工作: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 边缘检测(工业标准)

    步骤:

  • 高斯模糊去噪
  • Sobel 算子计算梯度幅值与方向
  • 非极大值抑制:沿梯度方向保留局部最大值,细化边缘
  • 双阈值检测:强边缘直接保留,弱边缘仅与强边缘相连时保留
  • 边缘连接
  • 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 不收敛排查思路

    按优先级从高到低排查:

  • 数据层:标签错误、预处理归一化异常、数据集本身不可分、类别极度不均衡。
  • 代码层:损失函数计算错误、梯度未回传、模型参数被冻结、归一化层训练 / 推理模式混淆、数据加载 Bug。
  • 超参层:学习率过大导致 Loss 爆炸、学习率过小导致 Loss 停滞、正则强度过高、优化器选型不当。
  • 模型层:网络结构错误导致梯度传播中断、模型容量不足以拟合任务。
  • 2. Nan/Inf Loss 常见原因

  • 学习率过大,梯度爆炸,参数更新幅度超出数值范围。
  • 损失计算异常:除零错误、log (0)、交叉熵中预测概率为 0。
  • 输入数据本身包含 Nan 值。
  • BN 层方差为 0,出现除零错误。
  • 混合精度下数值上溢 / 下溢,损失缩放参数不当。
  • 3. Loss 震荡的原因

  • 学习率过高,参数在最优点附近来回跳动。
  • Batch Size 过小,批次噪声大,梯度方向波动剧烈。
  • 数据本身噪声大、标注质量差。
  • 正则强度不足,模型在样本间反复拟合。
  • 学习率调度不合理,训练后期未及时衰减。
  • 4. 验证集精度高于训练集的原因

  • 最常见原因:Dropout、BN 等正则化层训练时引入噪声 / 扰动,推理时关闭,模型表现更稳定。
  • 验证集数据分布更简单、难度低于训练集。
  • 评估时机问题:训练集评估时模型处于训练中途,验证集在一轮训练结束后评估。
  • 5. Batch Size 的影响与选型

    • 大 Batch:梯度估计准确,收敛平稳;训练并行效率高;但泛化性通常更差,易收敛到尖锐极小值;显存需求高。
    • 小 Batch:梯度带噪声,具备隐式正则效果,泛化更好;但收敛震荡,迭代步数多;显存需求低。
    • 大 Batch 泛化差的解决方案:学习率线性缩放、加长 Warmup、增强权重衰减与标签平滑。

    十九、深度学习理论基础八股

    1. 偏差 – 方差分解

    • 泛化误差 = 偏差 ² + 方差 + 不可避免噪声。
    • 偏差:模型期望预测与真实值的差距,衡量模型拟合能力。偏差大→欠拟合。
    • 方差:模型在不同训练集上预测结果的波动,衡量稳定性。方差大→过拟合。
    • 变化规律:模型复杂度提升,偏差持续减小,方差持续增大,总误差呈先降后升的 U 型。

    2. 双下降现象

    • 传统统计学习:参数量超过拟合阈值后,过拟合加剧,泛化误差上升(U 型曲线)。
    • 深度学习:参数量超过某一阈值后,泛化误差会再次下降,形成 “双下降” 曲线。
    • 核心原因:超参数化模型的解空间更大,梯度下降倾向于找到范数更小、更平坦的解,泛化能力反而提升;大模型自身的归纳偏置也更适配数据规律。

    3. 为什么超参数模型不会严重过拟合

  • 隐式正则:SGD 的梯度噪声、BN 的批次噪声、权重衰减等都有正则效果。
  • 数据约束:海量训练数据对模型形成强约束,限制了过拟合空间。
  • 归纳偏置:CNN 的局部性、平移不变性,Transformer 的全局建模能力,都符合真实数据的内在规律。
  • 优化偏好:梯度下降隐式倾向于找到范数小、平滑度高的解,这类解泛化性更好。
  • 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)

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 深度学习八股,(图像)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!