很多人一开始学深度学习,最先感受到的不是“难”,而是“乱”。

一会儿看到 CNNTransformerResNet,一会儿看到 训练集验证集测试集,一会儿又冒出 lossmAP量化部署。问题不在于这些词太多,而在于它们根本不在同一个层面,但初学者往往会在同一时间接触到它们,于是脑子里没有结构,只有名词。

所以我的这篇文章不打算把所有的细节一次性讲完,而是先做一件更重要的事:给你一张地图。

这张地图只有一条主线,讲清楚深度学习究竟是个什么玩意:

任务 -> 数据 -> 模型 -> 训练 -> 评测 -> 部署

看完这篇文章,你至少应该建立三个判断:

  1. 一个完整的深度学习项目,到底会经过哪些环节。
  2. 常见术语分别属于哪一层,不该混着理解。
  3. 后面继续学习时,应该按什么顺序补知识。

先看整张图

在这里插入图片描述

先不要急着进公式,也不要急着背模型名字。站在工程视角,一个深度学习项目通常会这样展开:

业务问题
  ↓
任务定义
  分类 / 检测 / 分割 / 生成 / 检索
  ↓
数据准备
  采集 / 标注 / 清洗 / 划分 / 增强
  ↓
模型设计
  网络结构 / backbone / head / 参数
  ↓
训练优化
  loss / optimizer / learning rate / batch / epoch / 反向传播
  ↓
评测验证
  accuracy / precision / recall / F1 / mAP / IoU
  ↓
部署上线
  推理速度 / 显存占用 / 量化 / 压缩 / API / 边缘端
  ↓
线上反馈与迭代
  数据回流 / 误差分析 / 模型更新

如果你只想记住一件事,那就记住这条线。因为后面你接触到的绝大多数概念,其实都能放回这 6 个环节中的某一个位置。

为了让这条主线更具体,下面我用一个最常见的例子来串联全文:猫狗分类

假设我们现在要做一个模型,输入一张图片,输出“猫”或“狗”。这个例子足够简单,但它已经具备了完整深度学习流程的所有核心环节。

1. 任务:先说清楚,你到底要解决什么问题

深度学习不是目标,任务 才是目标。

很多初学者一上来就问:“我该学 CNN 还是 Transformer?”但在真正开始之前,更应该先问的是:我要让模型做什么?

常见任务大致可以分成几类:

  • 分类:判断图片属于哪一类,比如猫还是狗。
  • 目标检测:不仅要知道图里有什么,还要框出目标的位置。
  • 图像分割:不仅要框出目标,还要把每个像素归到对应的类别。
  • 生成:让模型生成图像、文本、音频、视频等内容。
  • 检索/匹配:给定一个输入,从数据库里寻找找最相似的结果。

这些任务的差别,不只是名字不同,而是 输入输出标签形式评价指标 都有可能不同。

以猫狗分类为例,这个任务的定义非常明确:

  • 输入:一张图片
  • 输出:猫或狗
  • 标签:每张图一个类别标签
  • 目标:让模型尽可能正确地区分两类

你会发现,一旦任务定义清楚了,后面的很多事情其实已经被约束住了。比如你该收集什么数据、该怎么标注、该用什么指标、部署时更看重什么,都会围绕任务展开。

所以任务这一层解决的是:我们到底要让模型完成什么工作。

2. 数据:模型能学到什么,很大程度上由数据决定

如果说任务定义了方向,那么数据决定了模型能不能走到那个方向上。

在深度学习里,模型不是凭空变聪明的,它是从数据中学习规律。你给它什么样的数据,它就学什么样的模式;你漏掉什么样的情况,它就很可能在那种情况上出错。

一个完整的数据环节,通常至少包含这几件事:

  • 采集:数据从哪里来,是否覆盖真实场景。
  • 标注:标签是否准确,标注规则是否统一。
  • 清洗:是否存在脏数据、重复数据、错误标签。
  • 划分:训练集、验证集、测试集如何拆分。
  • 增强:是否通过旋转、裁剪、翻转等方式提升泛化能力。

还是以猫狗分类为例。你可能会收集几万张猫和狗的图片,然后给每张图标上 catdog。但这还不够,你还要继续问几个问题:

  • 图片是不是只来自一种拍摄角度?
  • 猫和狗的数量是否严重不平衡?
  • 有没有模糊图、重复图、错标图?
  • 训练集和测试集之间有没有“长得几乎一样”的图片?

这些问题会直接影响最终效果。很多时候,模型性能上不去,不是因为网络不够复杂,而是因为数据本身有问题。

这里顺带说几个最基础但非常重要的概念:

  • 训练集:用来更新模型参数。
  • 验证集:用来调参、选模型、观察是否过拟合。
  • 测试集:只在最后用来做一次相对客观的评估。

这三者不能混。尤其测试集,不能一边看测试结果一边改模型,否则你的“最终成绩”就不再客观了。

所以数据这一层解决的是:模型到底靠什么学习,以及这些学习材料是否可靠。

3. 模型:你准备用什么结构去表达规律

有了任务,也有了数据,接下来才轮到很多人最熟悉的一层:模型

模型可以简单理解为一个带参数的函数。它接收输入,经过一系列计算,输出结果。深度学习之所以叫“深度”,本质上是因为这个函数由很多层可学习结构堆叠而成,能够表达复杂模式。

不同模型的核心区别,在于它们用什么结构去提取和组织信息。

比如:

  • CNN 擅长处理局部空间结构,长期是视觉任务中的主力。
  • Transformer 更擅长建模全局关系,如今在视觉和自然语言中都非常常见。
  • ResNetViTUNet 这些名字,本质上都是不同任务背景下的具体网络结构方案。

在这一层,你经常会看到一些术语:

  • backbone:负责提取基础特征的主干网络。
  • head:接在后面完成具体任务输出的部分。
  • encoder/decoder:常见于表征压缩与重建、序列建模等结构。
  • 参数:模型中需要通过训练学习得到的数值。

以猫狗分类为例,我们完全可以选一个经典的小型模型,比如 ResNet18。这意味着模型会把输入图片逐层变换,提取边缘、纹理、局部形状,再逐渐组合成更抽象的类别特征,最后输出“猫”和“狗”的概率。

很多新手容易犯一个错误:把模型当成深度学习的全部。

但实际上,模型只是整个链路中的一个环节。模型选得再好,如果任务没定义清楚、数据质量很差、训练过程有问题、评测方法不合理,结果依然可能很差。

所以模型这一层解决的是:我们准备用怎样的网络结构去学习输入和输出之间的映射关系。

4. 训练:让模型参数朝正确方向一点点更新

模型搭好了,不等于模型已经会做题。它还需要经过 训练

训练的本质,可以理解为一个反复试错和修正参数的过程:

  1. 模型先根据当前参数做一次预测。
  2. 把预测结果和真实标签进行比较。
  3. 计算出“错了多少”,这就是 loss
  4. 再根据这个误差去调整参数。
  5. 重复很多轮,直到模型表现逐渐变好。

在这个过程中,几个高频词一定会不断出现:

  • loss:衡量模型当前预测有多差。
  • optimizer:决定参数怎么更新,比如 SGDAdam
  • learning rate:每次更新迈多大步子。
  • batch:一次送入模型的样本数。
  • epoch:整个训练集被完整学习一轮。
  • 反向传播:把误差信号传回各层,用来更新参数。

如果把模型比作一个学生,那么训练就是不断做题、对答案、改错的过程。loss 像是扣分规则,optimizer 像是改错策略,learning rate 像是每次纠错的幅度。

还是用猫狗分类这个例子。模型一开始几乎是“瞎猜”的,输出很不稳定。随着一轮轮训练,它会逐渐学会哪些纹理、轮廓和组合模式更像猫,哪些更像狗。

但训练也不是时间越长越好。一个常见问题叫 过拟合:模型在训练集上越来越好,但在没见过的数据上反而变差。表面看是模型“学会了”,实际上它可能只是把训练集记住了。

所以训练这一层解决的是:如何让模型从数据里真正学到可泛化的规律,而不是只把答案背下来。

5. 评测:不是看模型会不会做题,而是看它能不能稳定做对

训练完之后,下一步不是立刻庆祝,而是进入 评测

评测的目的不是给模型“打个分”这么简单,而是判断它到底有没有学会、学得是否可靠、能不能泛化到新数据。

不同任务,评测指标也不同:

  • 分类 常见指标有 accuracyprecisionrecallF1
  • 检测 常见指标有 mAP
  • 分割 常见指标有 IoUDice

为什么不能只看一个数字?因为不同指标回答的问题不同。

举个例子,如果你的猫狗数据里 90% 都是猫,模型哪怕永远预测“猫”,accuracy 也可能不低。但这显然不是一个真正有用的模型。这个时候你就需要结合 precisionrecall、混淆矩阵等信息,看看它到底错在什么地方。

评测这一层至少要回答三个问题:

  1. 模型在验证集和测试集上的表现怎么样。
  2. 它是普遍稳定,还是只在某些样本上表现好。
  3. 它的错误是否符合业务场景可以接受的范围。

还是猫狗分类。如果模型总体准确率有 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”也不是一类概念。一个是任务,一个是模型;一个是数据概念,一个是训练方法。层级一混,理解就会乱。

结语:先有地图,再进入细节

如果你刚开始接触深度学习,这篇文章最想帮你建立的,不是某个局部知识点,而是一个整体坐标系。

请先记住这条最核心的主线:

任务 -> 数据 -> 模型 -> 训练 -> 评测 -> 部署

后面你再去学卷积、注意力机制、损失函数、优化器、评价指标、模型压缩,就不会觉得它们是零散的知识点,而会知道它们分别落在这张地图的哪个位置。

这也是系统学习深度学习时最重要的一步:先有地图,再学路线。

下一篇文章,我会继续顺着这张地图往下拆,专门讲清一个高频问题:

为什么初学者总会把深度学习学乱?

更多推荐