一张图讲清深度学习:从任务、数据到模型训练与部署
很多人一开始学深度学习,最先感受到的不是“难”,而是“乱”。
一会儿看到 CNN、Transformer、ResNet,一会儿看到 训练集、验证集、测试集,一会儿又冒出 loss、mAP、量化部署。问题不在于这些词太多,而在于它们根本不在同一个层面,但初学者往往会在同一时间接触到它们,于是脑子里没有结构,只有名词。
所以我的这篇文章不打算把所有的细节一次性讲完,而是先做一件更重要的事:给你一张地图。
这张地图只有一条主线,讲清楚深度学习究竟是个什么玩意:
任务 -> 数据 -> 模型 -> 训练 -> 评测 -> 部署
看完这篇文章,你至少应该建立三个判断:
- 一个完整的深度学习项目,到底会经过哪些环节。
- 常见术语分别属于哪一层,不该混着理解。
- 后面继续学习时,应该按什么顺序补知识。
先看整张图

先不要急着进公式,也不要急着背模型名字。站在工程视角,一个深度学习项目通常会这样展开:
业务问题
↓
任务定义
分类 / 检测 / 分割 / 生成 / 检索
↓
数据准备
采集 / 标注 / 清洗 / 划分 / 增强
↓
模型设计
网络结构 / backbone / head / 参数
↓
训练优化
loss / optimizer / learning rate / batch / epoch / 反向传播
↓
评测验证
accuracy / precision / recall / F1 / mAP / IoU
↓
部署上线
推理速度 / 显存占用 / 量化 / 压缩 / API / 边缘端
↓
线上反馈与迭代
数据回流 / 误差分析 / 模型更新
如果你只想记住一件事,那就记住这条线。因为后面你接触到的绝大多数概念,其实都能放回这 6 个环节中的某一个位置。
为了让这条主线更具体,下面我用一个最常见的例子来串联全文:猫狗分类。
假设我们现在要做一个模型,输入一张图片,输出“猫”或“狗”。这个例子足够简单,但它已经具备了完整深度学习流程的所有核心环节。
1. 任务:先说清楚,你到底要解决什么问题
深度学习不是目标,任务 才是目标。
很多初学者一上来就问:“我该学 CNN 还是 Transformer?”但在真正开始之前,更应该先问的是:我要让模型做什么?
常见任务大致可以分成几类:
分类:判断图片属于哪一类,比如猫还是狗。目标检测:不仅要知道图里有什么,还要框出目标的位置。图像分割:不仅要框出目标,还要把每个像素归到对应的类别。生成:让模型生成图像、文本、音频、视频等内容。检索/匹配:给定一个输入,从数据库里寻找找最相似的结果。
这些任务的差别,不只是名字不同,而是 输入、输出、标签形式、评价指标 都有可能不同。
以猫狗分类为例,这个任务的定义非常明确:
- 输入:一张图片
- 输出:猫或狗
- 标签:每张图一个类别标签
- 目标:让模型尽可能正确地区分两类
你会发现,一旦任务定义清楚了,后面的很多事情其实已经被约束住了。比如你该收集什么数据、该怎么标注、该用什么指标、部署时更看重什么,都会围绕任务展开。
所以任务这一层解决的是:我们到底要让模型完成什么工作。
2. 数据:模型能学到什么,很大程度上由数据决定
如果说任务定义了方向,那么数据决定了模型能不能走到那个方向上。
在深度学习里,模型不是凭空变聪明的,它是从数据中学习规律。你给它什么样的数据,它就学什么样的模式;你漏掉什么样的情况,它就很可能在那种情况上出错。
一个完整的数据环节,通常至少包含这几件事:
采集:数据从哪里来,是否覆盖真实场景。标注:标签是否准确,标注规则是否统一。清洗:是否存在脏数据、重复数据、错误标签。划分:训练集、验证集、测试集如何拆分。增强:是否通过旋转、裁剪、翻转等方式提升泛化能力。
还是以猫狗分类为例。你可能会收集几万张猫和狗的图片,然后给每张图标上 cat 或 dog。但这还不够,你还要继续问几个问题:
- 图片是不是只来自一种拍摄角度?
- 猫和狗的数量是否严重不平衡?
- 有没有模糊图、重复图、错标图?
- 训练集和测试集之间有没有“长得几乎一样”的图片?
这些问题会直接影响最终效果。很多时候,模型性能上不去,不是因为网络不够复杂,而是因为数据本身有问题。
这里顺带说几个最基础但非常重要的概念:
训练集:用来更新模型参数。验证集:用来调参、选模型、观察是否过拟合。测试集:只在最后用来做一次相对客观的评估。
这三者不能混。尤其测试集,不能一边看测试结果一边改模型,否则你的“最终成绩”就不再客观了。
所以数据这一层解决的是:模型到底靠什么学习,以及这些学习材料是否可靠。
3. 模型:你准备用什么结构去表达规律
有了任务,也有了数据,接下来才轮到很多人最熟悉的一层:模型。
模型可以简单理解为一个带参数的函数。它接收输入,经过一系列计算,输出结果。深度学习之所以叫“深度”,本质上是因为这个函数由很多层可学习结构堆叠而成,能够表达复杂模式。
不同模型的核心区别,在于它们用什么结构去提取和组织信息。
比如:
CNN擅长处理局部空间结构,长期是视觉任务中的主力。Transformer更擅长建模全局关系,如今在视觉和自然语言中都非常常见。ResNet、ViT、UNet这些名字,本质上都是不同任务背景下的具体网络结构方案。
在这一层,你经常会看到一些术语:
backbone:负责提取基础特征的主干网络。head:接在后面完成具体任务输出的部分。encoder/decoder:常见于表征压缩与重建、序列建模等结构。参数:模型中需要通过训练学习得到的数值。
以猫狗分类为例,我们完全可以选一个经典的小型模型,比如 ResNet18。这意味着模型会把输入图片逐层变换,提取边缘、纹理、局部形状,再逐渐组合成更抽象的类别特征,最后输出“猫”和“狗”的概率。
很多新手容易犯一个错误:把模型当成深度学习的全部。
但实际上,模型只是整个链路中的一个环节。模型选得再好,如果任务没定义清楚、数据质量很差、训练过程有问题、评测方法不合理,结果依然可能很差。
所以模型这一层解决的是:我们准备用怎样的网络结构去学习输入和输出之间的映射关系。
4. 训练:让模型参数朝正确方向一点点更新
模型搭好了,不等于模型已经会做题。它还需要经过 训练。
训练的本质,可以理解为一个反复试错和修正参数的过程:
- 模型先根据当前参数做一次预测。
- 把预测结果和真实标签进行比较。
- 计算出“错了多少”,这就是
loss。 - 再根据这个误差去调整参数。
- 重复很多轮,直到模型表现逐渐变好。
在这个过程中,几个高频词一定会不断出现:
loss:衡量模型当前预测有多差。optimizer:决定参数怎么更新,比如SGD、Adam。learning rate:每次更新迈多大步子。batch:一次送入模型的样本数。epoch:整个训练集被完整学习一轮。反向传播:把误差信号传回各层,用来更新参数。
如果把模型比作一个学生,那么训练就是不断做题、对答案、改错的过程。loss 像是扣分规则,optimizer 像是改错策略,learning rate 像是每次纠错的幅度。
还是用猫狗分类这个例子。模型一开始几乎是“瞎猜”的,输出很不稳定。随着一轮轮训练,它会逐渐学会哪些纹理、轮廓和组合模式更像猫,哪些更像狗。
但训练也不是时间越长越好。一个常见问题叫 过拟合:模型在训练集上越来越好,但在没见过的数据上反而变差。表面看是模型“学会了”,实际上它可能只是把训练集记住了。
所以训练这一层解决的是:如何让模型从数据里真正学到可泛化的规律,而不是只把答案背下来。
5. 评测:不是看模型会不会做题,而是看它能不能稳定做对
训练完之后,下一步不是立刻庆祝,而是进入 评测。
评测的目的不是给模型“打个分”这么简单,而是判断它到底有没有学会、学得是否可靠、能不能泛化到新数据。
不同任务,评测指标也不同:
分类常见指标有accuracy、precision、recall、F1。检测常见指标有mAP。分割常见指标有IoU、Dice。
为什么不能只看一个数字?因为不同指标回答的问题不同。
举个例子,如果你的猫狗数据里 90% 都是猫,模型哪怕永远预测“猫”,accuracy 也可能不低。但这显然不是一个真正有用的模型。这个时候你就需要结合 precision、recall、混淆矩阵等信息,看看它到底错在什么地方。
评测这一层至少要回答三个问题:
- 模型在验证集和测试集上的表现怎么样。
- 它是普遍稳定,还是只在某些样本上表现好。
- 它的错误是否符合业务场景可以接受的范围。
还是猫狗分类。如果模型总体准确率有 95%,但它总是把幼猫误判成小型犬,那你接下来要做的就不是盲目换模型,而是回头分析数据分布、样本覆盖、错误类型。
这也是为什么成熟项目里,误差分析 非常重要。真正推动模型进步的,往往不是再多跑十个 epoch,而是看清楚模型究竟错在哪里。
所以评测这一层解决的是:模型到底好不好,好到什么程度,问题又出在什么地方。
6. 部署:把实验室里的模型,变成真实可用的系统
很多教程讲到训练和测试就结束了,但在实际项目里,部署 才是模型真正开始接受现实考验的地方。
一个离线实验效果不错的模型,并不自动等于“可以上线的模型”。
因为一旦进入部署阶段,你面对的问题就会变成:
- 推理够不够快?
- 显存或内存占用是否可接受?
- 模型文件是否太大?
- 是放在云端服务,还是跑在手机、摄像头、边缘设备上?
- 是否需要量化、剪枝、蒸馏等压缩手段?
这时你会接触到另一批术语:
推理:模型在部署场景下做前向预测。延迟:单次预测需要多久。吞吐:单位时间能处理多少输入。量化:用更低精度表示参数,以减少存储和计算开销。服务化:把模型封装成 API 或系统服务供外部调用。
还拿猫狗分类来说。如果你只是做一个本地 Demo,那么模型慢一点问题不大。但如果你要把它部署到移动端,或者接到实时摄像头流上,那么 200ms 和 20ms 的差别就很大了。
所以在部署阶段,模型不再只是拼精度,还要平衡:
- 效果
- 速度
- 成本
- 稳定性
- 可维护性
很多真实项目最后选中的,未必是“离线精度最高”的那个模型,而是“综合表现最合适”的那个模型。
所以部署这一层解决的是:如何把一个能跑通的模型,变成一个真正能落地的系统。
7. 为什么说这 6 个环节是一条链,而不是 6 个孤立模块
到这里,你可能已经发现了:深度学习不是几个知识点拼起来的集合,而是一条前后强关联的链路。
前面的选择,会不断影响后面的结果:
任务没定义清楚,后面做得再认真也可能方向错。数据质量不行,模型再强也学不到稳定规律。模型结构不合适,训练可能收敛很慢,甚至根本学不动。训练策略不合理,可能出现欠拟合或过拟合。评测方法不对,会让你误以为模型已经很好。部署条件变了,前面离线阶段的最优方案可能不再适用。
更重要的是,这条链不是单向的。部署后的线上表现,往往又会反过来推动前面的迭代:
- 发现某类样本错误率高,就要回去补数据。
- 发现速度达不到要求,就要回去换模型或做压缩。
- 发现指标看起来不错但用户体验差,就要重新审视任务定义和评测方式。
所以更准确地说,深度学习项目不是一条直线,而是一个不断闭环优化的过程。
8. 把常见术语放回它们各自的位置
初学者之所以容易乱,一个很重要的原因是术语混层了。下面这张表,可以帮你把常见概念先归位:
| 所属环节 | 常见术语 |
|---|---|
| 任务 | 分类、检测、分割、生成、检索 |
| 数据 | dataset、sample、label、annotation、train/val/test、augmentation、data leakage |
| 模型 | network、backbone、head、encoder、decoder、parameter |
| 训练 | loss、optimizer、learning rate、batch、epoch、forward、backpropagation、fine-tuning |
| 评测 | accuracy、precision、recall、F1、AUC、mAP、IoU、benchmark、baseline |
| 部署 | inference、latency、throughput、quantization、pruning、service、edge device |
你以后再看到一个新词,可以先别急着背定义,而是先问自己一句:
它属于哪一层?
一旦这个问题想清楚,很多概念之间的关系就会自然清晰起来。
9. 初学者最容易出现的 3 个误区
最后再补三个特别常见的误区,很多人都会在这里绕弯路。
误区 1:以为深度学习就是“换模型”
模型当然重要,但它从来不是全部。很多项目真正的瓶颈不在模型,而在任务定义不清、数据质量不足、评测方式不合理。
误区 2:只盯着训练过程,不关心评测和部署
训练损失下降,只能说明模型在当前训练目标上越来越会拟合,不代表它在新数据上就一定表现好,更不代表它能在线上稳定运行。
误区 3:把不同层级的概念混在一起理解
“分类”和“Transformer”不是一类概念,“训练集”和“Adam”也不是一类概念。一个是任务,一个是模型;一个是数据概念,一个是训练方法。层级一混,理解就会乱。
结语:先有地图,再进入细节
如果你刚开始接触深度学习,这篇文章最想帮你建立的,不是某个局部知识点,而是一个整体坐标系。
请先记住这条最核心的主线:
任务 -> 数据 -> 模型 -> 训练 -> 评测 -> 部署
后面你再去学卷积、注意力机制、损失函数、优化器、评价指标、模型压缩,就不会觉得它们是零散的知识点,而会知道它们分别落在这张地图的哪个位置。
这也是系统学习深度学习时最重要的一步:先有地图,再学路线。
下一篇文章,我会继续顺着这张地图往下拆,专门讲清一个高频问题:
为什么初学者总会把深度学习学乱?
更多推荐
所有评论(0)