深度学习模型分类全解析:从CNN到Transformer的选型地图
最近在梳理团队内部的模型资产时我把主流深度学习模型按类别重新过了一遍。起因很简单手里项目多了以后每个人都在提“模型”但这里的“模型”可能是CNN、Transformer、扩散模型甚至还有人把LightGBM也归进深度学习沟通成本越来越高。于是就有了这篇“主流深度学习模型类别调研报告上”。报告的目的不是罗列SOTA榜单而是建立一张“模型地图”每一类模型的思路本质是什么、适合处理什么数据、典型代表有哪些、工程落地时要注意什么。适合正在做技术选型的开发者和刚入门深度学习想搭知识体系的朋友。先说好这期先覆盖五类核心模型卷积神经网络、序列模型、Transformer家族、生成式模型和图神经网络GNN放在下期展开。1. 为什么要做模型分类先搞清楚这张“地图”1.1 调研的起点从“会跑模型”到“懂模型”我先把话说在前面刚入行那会儿我也属于“会跑模型但不会选模型”的人。项目里遇到图像任务就找ResNet遇到文本任务就找BERT以为把官方仓库里的预训练权重下载下来、改一下分类头、fine-tune几个epoch就算接入了深度学习。直到有一次做工业瑕疵检测现场数据的图像分辨率和光照条件跟预训练分布差得很远我用ResNet50怎么调都过拟合而团队里另一位同事用了一个结构很简单的浅层CNN配合针对性数据增强反而效果稳定。那次之后我才真正意识到“模型类别”这四个字不是学术名词它决定了你在一类问题上的上限。所以这次调研我把重心放在“分类认知”上。在做调研之前我给自己定了三个问题第一当前主流深度学习模型在结构上到底分成几大家族第二每个家族的核心归纳偏置是什么第三当手里拿到一个实际任务时应该怎么快速定位到某个家族这三个问题看起来基础但真要在一次会议里讲清楚大多数人其实说不周全。这篇报告就是用我自己的方式把答案整理下来。1.2 分类维度的选择按结构、按任务还是按范式模型分类可以按很多维度切。最常用的三个维度是结构、任务和范式。按结构分是最符合直觉的方式CNN擅长处理网格结构数据RNN/LSTM/GRU和TCN擅长处理序列Transformer基于注意力机制GNN处理图结构数据GAN和扩散模型负责生成。按任务分则包括分类、回归、目标检测、分割、生成、检索、强化学习控制等。按范式分有监督学习、无监督学习、自监督学习、半监督学习和强化学习。我在这份报告里选择“结构为主线、任务和范式为辅”原因是结构决定了模型能捕捉什么模式而任务只是这些模式的应用出口。一个BERT模型既可以做文本分类也可以做文本匹配按结构归入Transformer家族比按任务归入“文本分类模型”更稳定因为你在调研新论文时首先看到的也是“某模型属于什么结构”。另外不少工作是跨任务的比如用CNN做时间序列分类、用Transformer做图像分类如果按任务分类这些模型就会被分到不同地方很难建立一个统一的知识框架。同时要澄清一个经常混淆的问题“模型”这个词在不同语境里指代不同。深度学习领域的“模型”通常指网络结构加参数工业软件里的“模型”可能是一套训练好的功能模块而“环境配置”“Ollama下载模型”里的“模型”又变成了可加载的权重文件。这些都是“模型”但在调研时混在一起就会乱。所以我建议看模型类别时只看网络结构的本质不要被包装词带偏。2. 卷积神经网络老牌劲旅的演进与落地2.1 从LeNet到ResNetCNN的骨架演变CNN的核心思路可以概括成一句话用卷积核在输入上滑动提取局部特征然后在空间上逐步抽象。它之所以在图像领域如此成功是因为图像的天然特性是局部相关和平移不变——一个猫耳朵不管出现在图片左上角还是右下角它还是猫耳朵。卷积层的参数共享机制保证了同一套特征检测器可以在整张图的所有位置复用这就是CNN的归纳偏置。在项目调研里我会按时间线去梳理CNN的进化这样能理解每个关键改进到底在解决什么问题。LeNet-51998是开山之作用于手写数字识别结构很简单卷积、池化、全连接。AlexNet2012让深度学习在ImageNet上夺冠引入了ReLU、Dropout、数据增强还验证了GPU并行训练的效果。VGG2014证明了“小卷积核堆叠”比“大卷积核一步到位”更好用连续的3x3卷积替代5x5和7x7在增加深度的同时控制了参数量。GoogLeNet/Inception2014从宽度上做文章用Inception模块在不同尺度上并行卷积。ResNet2015是一个分水岭它提出了残差连接把“目标映射”变成“学习残差”让百层级网络变得可训练。这里我想多说一句ResNet在ResNet之前深层网络并非“过拟合”而是“退化”。也就是说网络加深之后训练误差反而更高这很不符合直觉。残差结构让每一层只需要学习输入和输出之间的差值等价于给梯度开了一条高速公路反向传播时梯度可以更容易地流回到浅层。实际操作中我习惯用“能从自定义残差块里稳定训练到低loss”来判断一个CNN实现是否靠谱如果连ResNet18都训练不稳定那问题多半出在数据预处理或学习率上而不是网络结构本身。参数量的估算在工程里很有用。一个普通卷积层的参数量公式是输出通道数 × 输入通道数 × 卷积核高 × 卷积核宽 输出通道数偏置我算过最常见的例子Conv2d(3, 64, kernel_size7, stride2, padding3)参数量是3×64×7×7649472。这个数字不大但如果输入分辨率是224×224中间特征图的激活值会很大这也是低显存环境下CNN并非永远“省显存”的原因——显存不仅要装参数还要装中间激活值。图像size越大activation开销越夸张。2.2 工程落地轻量化模型与CNN识别恶意软件案例要落地到实际项目时很少有人直接用几百层的ResNet。工业场景通常对延迟和显存都敏感所以轻量化CNN反而是主力。MobileNet系列用深度可分离卷积把标准卷积拆成两个步骤逐通道卷积depthwise conv和逐点卷积pointwise conv。直观感受是同样做3通道输入、64通道输出的卷积标准卷积参数量是3×64×3×31728深度可分离卷积大约是3×3×3 3×64×1 27192219参数少了将近一个数量级。代价是精度会有轻微下降但大多数任务可以用增加宽度或分辨率来弥补。还有一个我实际做过的案例特别能体现CNN的通用性用CNN识别恶意软件。思路很简单很多恶意代码的二进制字节流可以被组织成二维矩阵“伪装”成灰度图然后用图像分类的思路去做。一个常见流程是先把PE文件解析出来取其原始字节再把字节流按固定宽度比如256或者512重排成矩阵缺失部分补零最后把矩阵归一化后送入ResNet或浅层CNN做二分类/多分类。这个案例最有意思的点在于CNN并不是只认识“自然图像”它认识的是局部结构。恶意代码在字节层面往往有重复的模式比如某些恶意家族会使用相同的花指令序列、跳转片段或加密壳特征这些局部模式在重排后的图像里就表现为纹理特征。CNN的卷积操作天然擅长捕捉这种局部纹理所以做恶意软件家族分类时效果往往不错。我试过用浅层CNN配合少量数据增强在公开数据集上能跑出一个可以接受的基线比纯手工特征要省事得多。当然这里有几个工程上的坑要提前说。第一样本长度不一样重排成矩阵时尺寸不一致我一般会统一截断或补零到一个固定长度比如1MB以内按1MB处理超过就截断第二恶意软件数据集类别不平衡非常严重常见的家族样本量可能差几十倍这种情况下光用准确率会被带偏要看混淆矩阵和F1第三训练集和测试集不要按文件随机划分要按恶意软件家族划分否则同家族的变种会被拆到两边导致验证结果虚高。这个教训我踩过当时测试准确率高达98%换到真实流量样本上直接掉到70%多后来才发现是数据划分出了问题。2.3 CNN的边界哪些场景不该硬上CNN不是万能的。它的归纳偏置是“局部相关性”但很多问题的关键恰恰在全局依赖上。比如一个句子中主语和谓语可能隔着几十个词两个像素虽然距离很远但语义上关联很强这些场景下标准CNN的感受野覆盖不足哪怕堆了很深的层全局信息的传递效率也不高。另外CNN对旋转和尺度变化不是天生鲁棒。你可以通过随机旋转、随机缩放等数据增强让它学得更稳但本质上是“用数据量换不变性”。如果换一个任务比如医学影像中病灶可能以非常不同的角度和大小出现数据量又有限CNN这套方案的成本就会非常高。相比之下BERT这样的Transformer结构因为使用全局注意力天然能捕捉长距离依赖这也是为什么跨领域迁移时很多人优先选Transformer。所以我的建议是图像分类、目标检测、视频理解这类局部纹理和空间结构重要的任务CNN或者CNNTransformer的混合结构是首选而长文本、长序列、全局关系建模任务直接用Transformer家族会更省心。如果显存有限又不确定选什么可以先拿ResNet18当基线跑通了再往复杂结构上迁移。3. 序列模型与时间序列建模RNN/LSTM/GRU和TCN3.1 RNN家族的共性思路与“记忆”瓶颈RNN家族的核心是一个带“记忆”的循环结构。在时间步t时模型接收当前输入x_t和上一步的隐藏状态h_{t-1}通过公式 h_t activation(W_h h_{t-1} W_x x_t b) 更新隐藏状态。这个隐藏状态理论上记住了之前所有输入的信息所以RNN天然适合处理序列比如语音、文本、传感器时间序列。但RNN有个很经典的问题长序列时梯度容易消失或爆炸。因为在反向传播时误差信号要沿着时间步连乘回去每一步乘以一个小于1的矩阵范数乘多了梯度就趋近于0模型根本无法学习到远处信息。LSTM通过引入细胞状态和三个门——遗忘门、输入门、输出门——来解决这个问题。细胞状态像一条“传送带”门控机制决定哪些信息写入、保留或输出让梯度能够沿着这条传送带相对无损地反向流动。GRU是LSTM的简化版把门从三个减到两个重置门和更新门参数更少训练更快在很多中小规模任务上效果与LSTM接近。从工程角度看训练RNN/LSTM有几个常规操作。第一个是梯度裁剪把梯度的L2范数限制在一个范围比如1.0防止梯度爆炸第二个是合理的初始化LSTM的遗忘门偏置经常被初始化为接近1的值让模型在训练早期倾向于“记住”这个技巧在很多框架里默认实现了第三个是注意序列长度因为LSTM串行执行时间步序列越长训练越慢显存占用也越高。我实测过在长序列上LSTM比TCN慢不少因为TCN可以在时间维度上并行卷积。3.2 TCN用卷积做序列建模的另类路线TCN是我在时间序列项目里用得很顺手的结构。它全称Temporal Convolutional Network思想很直接用一维卷积来处理序列。为了让输出只依赖当前和过去的信息TCN使用因果卷积卷积核在时间上只向前看不会“偷看”未来。为了保证建模长距离依赖TCN使用空洞卷积dilated convolution也就是在卷积核的元素之间插入间隔。间隔按1、2、4、8这样指数增长从第一层到第n层感受野可以指数级扩大。TCN的感受野有一个比较常用的计算方式。假设每层卷积核大小为k空洞系数分别为d_1, d_2, ..., d_n那么最终感受野R约等于1 sum_{i1}^{n} ((k-1) * d_i)。举个实际例子kernel_size3空洞系数分别是1、2、4那么三层后的感受野就是1 21 22 2*4 15。这意味着模型能看到的输入窗口长度大约15个时间步。想要更大的感受野要么加深网络要么增大kernel_size或者dilation的倍数三者在调参时需要结合实际序列长度做权衡。TCN的优势非常明显训练可以高度并行卷积本身就是并行操作梯度传播路径比LSTM短很少遇到梯度过快消失的问题感受野可以通过空洞卷积灵活控制。缺点也不是没有调参需要一点经验尤其是dilation倍数和层数的组合另外如果做在线推理因果卷积对每个时间步仍然需要保存足够的历史状态或使用带缓存的实现和RNN推理方式不是一回事。我这边的经验是对于中长序列比如几百到几千个时间步的分类和回归任务TCN往往能打得过LSTM训练还更快。如果你的序列长度超过上万TCN的感受野和内存开销会变大这时要么改用Transformer的变体比如Informer要么考虑结合下采样。3.3 滑窗滤波、特征拼接与序列模型预处理实测提到时间序列建模绕不开“滑动窗口滤波模型”这个话题。很多刚接触的人会把滑窗本身当成模型类别其实它不是模型结构而是一种预处理方式。具体做法是用固定长度的窗口在序列上滑动每滑动一步窗口内的数据就当作一条样本预测目标可以是窗口之后下一时刻的值单步预测也可以是窗口内这段数据的标签序列分类。窗口长度怎么选是我被问过最多的问题。没有一个万能值但我有一个已经验证过多次的经验先用简单统计方法估计序列的主周期。比如对传感器数据做自相关分析看看滞后多少个时间步相关性最高那个滞后数基本就是主周期。然后窗口长度建议取主周期的1到2倍。如果没有任何周期线索就从一个小窗口比如32开始每轮训练记录验证集loss调大一倍再试直到验证集loss开始恶化就说明窗口太长、噪声太多了。这种做法比盲目拍一个值要靠谱得多。另外在把窗口数据送入模型之前我强烈建议拼上一些手工统计特征。比如窗口内的均值、方差、最大值、最小值、一阶差分均值、以及窗口首尾值的差。这些特征本身就能提供很强的判别信息模型可以先用这些特征“作弊”一把降低训练难度。我在气象数据预测项目里实测过同样的LSTM加上这些统计特征后验证集误差下降了大约10%15%。原因也好理解模型不需要完全从原始波形中推断出“最近波动大不大”这类信息统计特征已经告诉它了。时间序列预处理还有一个特别容易踩的坑归一化时使用了未来信息。举个例子如果整个时间序列的均值和标准差是用全部数据算的那么在划分训练集、验证集和测试集后验证集和测试集就提前“看过”了自己分布的信息叫look-ahead bias。正确做法是只用训练集的历史窗口统计量做归一化然后把同一组参数应用到后续所有数据集。做滑窗时也要注意不要让相邻窗口的数据在训练集和测试集之间重叠否则相当于测试集见过训练内容指标会虚高。这个问题我在多家公司的项目里都见到过属于典型低级但杀伤力很大的坑。4. 注意力机制与Transformer家族当前的主战场4.1 Transformer核心机制拆解QKV、自注意力和位置编码从2020年前后开始Transformer逐渐成了深度学习的主战场。它的核心是自注意力机制Self-Attention。我尽量用最简单的方式解释对于输入序列中的每个位置模型生成三个向量——Query查询、Key键和Value值。Query可以理解为“我想在序列里找什么”Key表示“序列里的每个位置能提供什么”Value就是“被找到后实际要取出的内容”。注意力分数通过 Query 与 Key 的点积计算除以 sqrt(d_k) 做缩放再经过 softmax 变成权重最后加权求和所有的 Value。为什么点积之后要除以 sqrt(d_k)因为当向量维度 d_k 很大时点积的方差也会变大导致 softmax 的输入落在两端区域梯度变得非常小。除以维度开方之后点积的尺度被压回一个合理的范围训练初期的稳定性会好很多。我做过对照实验不除以sqrt(d_k)的时候Transformer训练初期loss常常疯狂抖动除以之后就顺了从工程角度这个细节是不能省的。多头注意力则是在“不同子空间”上下功夫。把特征维度切成h个头每个头独立计算自注意力最后再拼起来。这样可以让模型同时捕捉多种关系——有的头负责邻近词依赖有的头负责长距离主题依赖。代码实现里常见的坑是维度变换很多人直接在最后一维split再reshape结果把头的维度和序列维度搞混。我习惯用 (batch_size, num_heads, seq_len, head_dim) 的中间形状这样后续计算注意力矩阵时逻辑更清晰。Transformer本身没有顺序概念所以需要位置编码。最早的方法是正弦/余弦绝对位置编码也就是把位置信息加到词向量上它不需要训练参数但对长度外推不友好。后来的RoPE旋转位置编码把位置信息通过旋转矩阵注入Query和Key相对位置关系直接被编码在注意力计算里目前被大量LLM采用ALiBi则直接在注意力分数上加上一个基于距离的线性偏置也能实现相对位置感知且外推能力不错。选模型时不妨多看一眼它用的位置编码方式这会影响模型对长上下文的处理能力。4.2 从BERT到DeBERTa编码器结构的演进BERT是我认为理解“编码器类Transformer”最好的切入点。它由多层双向Transformer Encoder堆叠而成预训练任务包括掩码语言模型MLM和下一句预测NSP。[MASK] 随机遮住一部分词让模型根据左右上下文预测被遮住的词这种双向建模能力让BERT在下游理解任务上表现远超同时代的单向语言模型。不过这里要说明BERT从严格意义上说不是百分百“双向”其实核心就是双向上下文编码。把“双向”两个字理解成“能同时利用左右两侧信息”就够了别陷入争议。RoBERTa是一个很关键的工程改进版它去掉了NSP任务让模型更专注在MLM上动态化生成掩码而不是每次预训练都用同一个掩码用更大的batch和更多数据来训练。这类“伯仲”之间的对比在调研时很容易被忽略但工程上影响很大——微调RoBERTa通常比微调原始BERT更稳特别是长文本理解任务。DeBERTa则是我在语义理解任务里比较常用到的模型。它的核心创新是解耦注意力机制Disentangled Attention和增强式相对位置编码。简单说它不再把单词内容和位置信息混在一个向量里而是分成两路内容向量负责“这个词是什么”位置向量负责“词和词之间的距离是多少”。注意力的计算也因此变成内容-内容、内容-位置、位置-内容三种分数的组合。这样模型在理解“苹果”和“水果”这种语义关联时既能利用内容语义也能感知它们之间的相对距离。实验上DeBERTa在一系列NLU基准上超过了同尺寸的BERT/RoBERTa。从结构图角度看DeBERTa的输入层由词向量加上相对位置编码组成后面是多次重复的解耦注意力Encoder层最后根据任务接不同的输出头。现在用HuggingFace加载DeBERTa模型很方便但有几个小细节要提醒它的输入tokenizer和BERT差不多很多预训练权重默认是base/v3版本直接微调时如果显存不够建议用LoRA低秩适配而不是全量微调。因为DeBERTa-v3-base的参数量在一亿级别全量微调在16GB显存下虽然能跑但batch size会被压得很低。4.3 LLM到底算不算深度学习一个容易被追问的问题这个问题的频率非常高我在做调研时反复被问“LLM属于深度学习吗”答案非常明确属于。而且LLM是目前深度学习中最具代表性的产品形态之一。LLM是“Large Language Model”的缩写它的底层结构几乎都是Transformer的Decoder或Encoder-Decoder变体。从训练范式来看它使用自监督预训练加指令微调、人类反馈强化学习等步骤但核心优化方式仍然是基于梯度下降的深度学习训练。从机器学习层次结构来看可以整理成这样一条线机器学习包括深度学习深度学习包括基于深度神经网络的各类模型而Transformer家族则是当前大模型的主流实现框架。所以“LLM是否属于深度学习”背后的疑问其实是在问“预训练大模型是不是传统意义上的神经网络”。答案是它就是深度神经网络只是层数更多、参数更庞大、数据规模更大、训练集群更复杂。模型再大也没有跳出“神经网络 梯度下降 表征学习”这个基本盘。如果从Transformer结构角度看LLM和传统深度学习模型的一个显著区别在于“涌现能力”——当参数量和训练数据规模跨过某个阈值后模型会表现出小模型没有的能力比如上下文学习in-context learning、思维链推理等。这并不意味着它变成了另一个物种而只是规模效应带来了质变。所以在调研报告里我不建议把LLM单独列成一个“模型类别”更合理的做法是把它归入“Transformer家族 大规模预训练范式”这个复合标签。4.4 工程部署显存估算与低显存运行Transformer虽强工程部署却是硬骨头。先估算一下模型的显存占用。推理时模型参数占用的显存大约等于参数量乘以每参数字节数FP32是4字节FP16是2字节INT8是1字节。以7B模型为例FP16推理仅参数部分就需要14GB再加上激活值、KV Cache和CUDA上下文实际占用很容易超过20GB。如果手里只有8GB显存直接加载7B原模型是不现实的。低显存运行模型的方案有很多我比较常用的是这几种。第一是量化把模型从FP16压到INT8甚至INT4参数显存能降到原来的1/4甚至1/8很多本地推理工具比如Ollama、llama.cpp的GGUF格式都支持这个能力。第二是KV Cache优化比如使用PagedAttention或滑窗注意力降低长上下文推理时的缓存开销。第三是参数高效微调用LoRA/QLoRA而不是全量微调因为全量微调的优化器状态Adam的动量和方差在训练时非常吃显存QLoRA把基座模型冻结成NF4格式只需要给LoRA适配器分配训练显存能让单卡跑大模型的微调成为可能。这里必须提醒一句量化不是白给的。模型量化之后有时会出现输出质量下降尤其是英文拼写、代码生成这类对精确度要求高的任务。我的习惯是先跑几个关键case对比量化前后的输出如果差异不大再用量化部署如果差异明显就要考虑混合精度关键层保持FP16次要层量化。所谓“低显存运行”从来不是只看显存数字还要看任务质量是否达标。5. 生成式模型与自监督范式从GAN到扩散模型5.1 GAN、VAE与扩散模型三种生成路线的差异生成式模型是近年来热度上升最快的类别热词里的“照片修复模型”“扩散模型”都在这个范畴。要理解生成模型的差异可以把它们看成三条不同的“造假”路线。GAN由生成器和判别器组成。生成器负责把随机噪声变成看起来逼真的样本判别器负责判断输入是真实样本还是生成的假样本。两者互相博弈最终生成器能学会欺骗判别器。优点是生成图像细节清晰缺点是训练极不稳定容易出现模式崩塌——生成器只学会了生成少数几种“安全”样本多样性变差。VAE走的是“压缩还原”的路线。编码器把输入压缩到一个低维隐变量解码器再从隐变量还原数据。训练目标是让隐变量服从一个先验分布同时让重建误差尽量小。优点是非常稳定隐空间有良好的连续性适合做数据压缩、异常检测和可控生成缺点是因为使用了均值和方差的采样机制生成图像往往有些模糊细节不够锐利。扩散模型是当前生成质量最高的路线Stable Diffusion、Midjourney、DALL·E这些产品背后基本都靠它。它的思路可以用一个类比讲明白先把一张清晰照片不断加噪直到变成完全随机的噪声图模型学会做逆过程从噪声里一步步“去噪”还原出清晰图像。它的优点是生成质量和多样性同时在线不容易模式崩塌缺点是推理时通常需要几十步迭代计算量不小。不过DDIM等采样器可以把步数压缩到2050步配合Latent Diffusion在低维空间里操作实际生成一张512×512图像在消费级显卡上已经可以接受。5.2 照片修复、Embedding与生成模型的实际用法“照片修复模型”是我在实际推荐给朋友时用得最多的扩散落地场景之一。老照片修复一般会拆成几个子任务去噪、去划痕、超分、人脸修复和上色。现在的开源模型往往集成了这几个能力但直接丢一张老照片进去效果往往不理想。我的经验是分两步走先用传统图像处理手段做预清理比如用中值滤波去掉孤立的脉冲噪声手动标注并修复大的撕裂区域再把预清理后的图像交给深度学习生成模型做增强修复。原因是扩散模型会把图像中所有细节都当成自己需要重建的对象如果原图有一块很大的划痕它会自由发挥填补结果可能偏离历史事实预清理能把这种“自由发挥”的范围限制住。还有人会把照片修复任务里的模型输出用固定随机种子跑多遍。扩散模型的输出有随机性同一张图同一prompt两次生成可能差很多。修复场景下我建议固定seed并生成48个候选再人工挑一张最自然、最符合原始人脸轮廓的结果。所谓“最符合原始人脸轮廓”通常需要你在原图上先把关键点标出来对比否则模型生成的脸可能很好看但不是照片里那个人。另外要区分一个概念生成模型里的Embedding和搜索/检索领域的Embedding模型不是一回事。Stable Diffusion里的“文本Embedding”是文本编码器比如CLIP Text Encoder输出的高维语义向量用来作为生成的条件而热词里“embedding模型排行”里的Embedding模型通常指BGE、E5、GTE这类文本向量化模型主要用于相似度检索、语义匹配和RAG。两者都叫Embedding但一个是中间表示一个是独立的产品化模型调研和选型时千万不要混用。5.3 训练稳定性陷阱与低显存环境下的妥协方案生成模型最大的问题在训练稳定性。GAN尤其明显生成器和判别器就像两个对手如果一方太强另一方就直接学不动。我刚开始调GAN时最喜欢把判别器训得很准结果生成器的梯度消失loss曲线看起来很低但生成出来的全是噪声。后来的经验是不要让判别器收敛太快可以给它用更小的学习率或者每训练一次生成器再训练一次判别器保持两者的节奏接近。与此同时监控不仅仅是loss还要定期人工查看生成样本因为GAN的loss本身并不可靠。扩散模型训练则不像GAN那样不稳定但它贵。每一步去噪都相当于训练一个U-Net或DiT数据量大时训练成本很高。我个人的妥协方案是先在小分辨率上做完整链路验证比如64×64等验证集效果和训练稳定性都满意了再换到256×256或更高分辨率。因为大部分超参数——学习率、batch size、EMA衰减——在小分辨率上调出来的规律大分辨率下大体仍然适用但直接在大分辨率上反复试错时间和电费都扛不住。低显存环境下跑生成模型我通常用几种组合拳使用Gradient Checkpointing减少激活值显存、用混合精度训练、把batch size调到刚好能放进显存再配合梯度累积模拟大batch如果还要更低就用Latent Diffusion这类在潜空间里做生成的方案因为它的U-Net处理的是压缩后的潜在特征图分辨率压力会小很多。不管哪种方案都要先看清楚显存瓶颈到底在参数、激活值还是优化器状态不要一上来就无脑把模型量化量化有时候会加剧生成质量下降。6. 调研总结与选型实操模型类别怎么转化为方案6.1 一张速查表不同任务优先看哪类模型到了调研的最后阶段我想把内容落成一张速查表这也是我平时选型时实际会用到的参考。下表只针对“主流任务优先看哪类模型”不涉及具体的排行榜和SOTA对比因为SOTA迭代太快而类别认知相对稳定。任务类型优先考虑的模型类别代表模型/思路图像分类CNN / TransformerResNet、EfficientNet、ViT目标检测CNN / TransformerYOLO系列、DETR、DINO图像分割CNN / TransformerU-Net、SegFormer、Mask2Former文本分类/匹配Transformer EncoderBERT、RoBERTa、DeBERTa文本生成Transformer DecoderGPT系列、LLaMA、Qwen语音识别CNNRNN / TransformerConformer、Whisper通用序列预测RNN / TCN / TransformerLSTM、TCN、Informer图像生成扩散模型 / GANStable Diffusion、DDIM、StyleGAN检索/重排/RAGEmbedding模型(Transformer)BGE、E5、GTE图结构任务GNNGCN、GAT、GraphSAGE表格里的“优先考虑”不等于“非它不可”。比如目标检测用纯CNN的YOLO系列依然是最稳的工程选择DETR的Transformer路线虽然端到端更简洁但收敛速度慢对训练技巧要求更高。实际项目中要把数据规模、显存预算、时延要求、团队熟悉度都放进来再做最终决定。这份表格只是帮你把“第一候选”缩短到23个模型类别。6.2 常见问题调研中最容易踩的几个概念坑这次调研踩了不少概念坑我挑几个印象最深的分享。第一模型、算法、框架三个词不要混用。模型是数学结构比如“Transformer编码器”算法是具体求解方法比如“AdamW优化器”“梯度裁剪”框架是工程工具比如“PyTorch”“HuggingFace Transformers”。很多人说“我用Bert模型”其实指的是“我用HuggingFace加载了Bert预训练权重并用PyTorch做微调”这三层信息混在一句话里沟通时极易产生误解。第二不要把“模型类别”和“模型名称”对立起来。同一个类别里模型的差异往往没有跨类别的差异大。比如BERT和DeBERTa都属于Transformer Encoder家族它们在很多任务上的行为高度相似而BERT与LSTM虽然都能做文本分类但归纳偏置完全不同。理解类别比背SOTA名字更能指导选型。第三不要被“万物皆Transformer”的潮流带着走。CNN在图像局部特征提取上的效率和低延迟优势还在TCN在中等长度时间序列上的效果经常不输Transformer而且训练成本低很多。选模型不是追星要回到数据形状和任务约束本身。第四像“LightGBM回归模型”这类梯度提升树模型从技术上不是深度学习模型。它是机器学习范畴里的集成模型虽然在某些表格数据任务上效果可能比深度学习还好但算法原理与我们这份报告里讨论的所有模型都不一样。如果调研报告把LightGBM混进深度学习模型类别读者对“深度学习”边界反而会变得模糊。6.3 下一步调研方向预告这篇是“主流深度学习模型类别调研报告上”按计划还有下篇要写。我会在下篇里重点覆盖几个方向图神经网络GNN包括GCN、GAT、GraphSAGE它们的应用场景从社交网络分析到分子性质预测都有深度强化学习模型包括DQN、PPO、SAC等它们与监督式深度学习的核心区别在于通过与环境交互学习策略模型压缩与量化包括蒸馏、剪枝、量化感知训练这是我在工程部署里最常用的手段。另外我也会把两个在调研中被反复提到的点展开一个是通过Ollama等工具做本地化大模型部署的常见做法另一个是模型安全问题比如模型中毒攻击数据投毒的威胁模型和防御思路。这些内容都属于当前深度学习的实际应用边界一旦你手里的模型真正进入生产环境它们往往比某些SOTA结构更重要。最后说点个人感受。这轮调研做下来我自己最大的收获不是记住了多少新模型而是把散落在各个项目里的“点”串成了“线”。以前看到一个陌生模型我会急着去搜它的论文和代码现在我会先问一句它属于哪个类别它改变了哪个归纳偏置它适合我的数据形态吗这三个问题想清楚再去读论文方向感会强很多。建议你也可以按这个思路整理一份自己的模型类别地图不一定非要从头写调研报告只要能在团队里把“模型”这个词聊清楚就值回时间了。