学习深度学习时,很多人一上来就会被一堆名词淹没:神经网络、反向传播、CNN、RNN、Transformer、Embedding、优化器、损失函数、过拟合、预训练、微调……

这些概念当然重要,但如果一开始没有一张地图,就很容易出现一种感觉:每个词好像都看过,但不知道它们之间到底是什么关系。

所以这篇文章不急着推公式,也不急着写复杂代码,而是先回答几个更基础的问题:

  • 深度学习到底在学什么?
  • 神经网络为什么可以拟合复杂关系?
  • 一个模型是如何被训练出来的?
  • 入门之后应该按什么顺序继续学?

一句话概括:

深度学习就是用多层神经网络从数据中自动学习特征表示,再用这些表示完成分类、回归、生成、推荐、预测等任务。

深度学习知识地图

1. 深度学习是什么

在传统机器学习中,我们经常需要手动设计特征。

比如要判断一封邮件是不是垃圾邮件,可能会人工提取这些特征:

  • 是否包含“免费”“中奖”“限时”等关键词。
  • 邮件长度是多少。
  • 是否包含很多链接。
  • 发件人是否陌生。

这些特征再送入逻辑回归、决策树、随机森林、GBDT 等模型中进行预测。

深度学习的思路稍微不一样。它希望模型自己从原始数据中逐层学习特征。

以图片分类为例:

  • 浅层可能学到边缘、颜色、纹理。
  • 中间层可能学到局部形状,比如眼睛、轮子、耳朵。
  • 深层可能学到更抽象的概念,比如人脸、车辆、动物。

这就是“深度”的含义:不是说模型一定神秘,而是说它有很多层,每一层都在对上一层的表示继续加工。

2. 深度学习和机器学习的关系

可以把它们的关系理解成:

人工智能
  └── 机器学习
        └── 深度学习

机器学习强调从数据中学习规律。深度学习是机器学习中的一个分支,它主要使用多层神经网络来学习复杂规律。

传统机器学习并没有过时。对于表格数据、样本量不大、可解释性要求高的任务,逻辑回归、决策树、随机森林、GBDT 依然非常常用。

深度学习更擅长处理这些数据:

  • 图像:图片分类、目标检测、图像分割。
  • 文本:文本分类、机器翻译、问答系统。
  • 语音:语音识别、语音合成。
  • 图结构:社交网络、分子结构、推荐系统。
  • 大规模复杂数据:多模态模型、大语言模型、生成模型。

所以可以先记住一个判断标准:

如果任务需要模型从复杂原始数据中自动提取高层特征,深度学习通常更有优势。

3. 神经网络的最小单位:神经元

神经网络听起来很复杂,但最基本的计算单元其实很简单。

一个神经元通常做两件事:

  1. 对输入做加权求和。
  2. 把结果送入激活函数。

公式可以写成:

$$
z = w_1x_1+w_2x_2+\cdots+w_nx_n+b
$$

$$
a = \sigma(z)
$$

其中:

  • $x_1,x_2,\cdots,x_n$ 是输入特征。
  • $w_1,w_2,\cdots,w_n$ 是权重。
  • $b$ 是偏置。
  • $\sigma$ 是激活函数。
  • $a$ 是这个神经元的输出。

单个神经元的计算过程

如果把很多神经元排成一层,就得到一个神经网络层。
如果把很多层堆起来,就得到一个多层神经网络。

4. 为什么要有激活函数

如果没有激活函数,神经网络再深,本质上仍然只是线性变换的叠加。

例如两层线性变换:

$$
h = xW_1+b_1
$$

$$
y = hW_2+b_2
$$

代入以后:

$$
y = (xW_1+b_1)W_2+b_2
$$

整理之后仍然是:

$$
y = xW+b
$$

也就是说,多层线性层叠在一起,仍然等价于一层线性层。

激活函数的作用就是引入非线性,让神经网络能够拟合更复杂的关系。

常见激活函数包括:

激活函数 公式或特点 常见用途
Sigmoid 输出在 0 到 1 之间 二分类输出层、概率解释
Tanh 输出在 -1 到 1 之间 早期 RNN 中常见
ReLU $\max(0,x)$ 最常用的隐藏层激活函数之一
Leaky ReLU 负数区域保留一个小斜率 缓解 ReLU 神经元死亡问题
GELU 更平滑的非线性函数 Transformer 中常见

入门阶段最重要的是先理解 ReLU:

$$
\text{ReLU}(x)=\max(0,x)
$$

它做的事情非常朴素:小于 0 的值变成 0,大于 0 的值保持不变。
但就是这样一个简单函数,让网络获得了表达非线性边界的能力。

5. 神经网络如何完成预测

假设我们要判断一张图片是猫还是狗。

模型的预测流程大致是:

图片像素
  -> 神经网络第 1 层
  -> 神经网络第 2 层
  -> ...
  -> 最后一层输出分类分数
  -> 选择分数最高的类别

如果最后输出两个数:

猫:2.8
狗:0.7

那么模型更倾向于认为这张图片是猫。

这里的 2.8 和 0.7 通常称为 logits,它们还不是严格意义上的概率。
如果想变成概率,可以使用 softmax:

$$
p_i = \frac{e^{z_i}}{\sum_j e^{z_j}}
$$

softmax 会把多个分数转换成总和为 1 的概率分布。

6. 模型是怎么“学会”的

深度学习模型一开始并不会做任务。

它的参数通常是随机初始化的,所以一开始预测往往很差。
训练的目标就是不断调整这些参数,让模型预测越来越接近真实标签。

训练过程可以概括成 5 步:

  1. 把一批数据输入模型。
  2. 模型前向传播,得到预测结果。
  3. 用损失函数衡量预测和真实标签之间的差距。
  4. 反向传播计算每个参数对损失的影响。
  5. 优化器根据梯度更新参数。

深度学习训练闭环

如果用 PyTorch 写,核心训练循环通常长这样:

for x, y in dataloader:
    pred = model(x)              # 1. 前向传播
    loss = loss_fn(pred, y)      # 2. 计算损失

    optimizer.zero_grad()        # 3. 清空上一轮梯度
    loss.backward()              # 4. 反向传播
    optimizer.step()             # 5. 更新参数

这几行代码几乎就是深度学习训练的骨架。

7. 损失函数是什么

损失函数用来衡量“模型错得有多离谱”。

不同任务会使用不同损失函数。

回归任务

如果要预测房价、温度、销量这类连续数值,常用均方误差:

$$
L = \frac{1}{n}\sum_{i=1}^{n}(\hat{y}_i-y_i)^2
$$

预测值和真实值差得越远,损失越大。

分类任务

如果要做图片分类、文本分类这类任务,常用交叉熵损失。

直观理解:

如果真实类别是猫,但模型却给狗很高概率,那么损失就会很大。

在 PyTorch 中,多分类通常使用:

loss_fn = torch.nn.CrossEntropyLoss()

二分类也常见:

loss_fn = torch.nn.BCEWithLogitsLoss()

入门时不必急着死记所有损失函数,只要先抓住核心:

损失函数给模型一个明确的优化目标,告诉模型现在的预测离正确答案还有多远。

8. 反向传播和梯度下降

损失函数告诉我们“错了多少”,但还需要知道“参数应该怎么改”。

这就需要反向传播。

反向传播会根据链式法则,从损失函数一路往前计算每个参数的梯度。

梯度可以理解为:

如果这个参数稍微变大一点,损失会变大还是变小,变化速度有多快。

有了梯度以后,优化器就可以更新参数。

最基础的梯度下降更新公式是:

$$
W = W - \eta \frac{\partial L}{\partial W}
$$

其中:

  • $W$ 是参数。
  • $L$ 是损失。
  • $\eta$ 是学习率。
  • $\frac{\partial L}{\partial W}$ 是参数的梯度。

如果梯度为正,说明参数增大会让损失增大,所以要把参数减小。
如果梯度为负,说明参数增大会让损失减小,所以要把参数增大。

这就是“沿着让损失下降的方向走”。

9. 一个极简例子:模型如何学习一条直线

假设真实关系是:

$$
y = 2x + 1
$$

但模型一开始不知道这个关系,只知道自己可以写成:

$$
\hat{y}=wx+b
$$

刚开始可能随机得到:

$$
w=0.3,\quad b=-0.2
$$

当输入 $x=3$ 时:

$$
y = 2 \times 3 + 1 = 7
$$

模型预测:

$$
\hat{y}=0.3 \times 3 - 0.2 = 0.7
$$

误差非常大。

训练会不断调整 $w$ 和 $b$,让预测值靠近真实值。
经过很多轮更新后,模型可能学到:

$$
w \approx 2,\quad b \approx 1
$$

这时模型就“学会”了这条直线。

更复杂的神经网络也是同样的思想,只不过参数更多、层数更深、函数形状更复杂。

10. 深度学习常见模型

入门时可以先知道每类模型大致解决什么问题,不必一开始就钻到所有细节里。

模型 核心思想 常见任务
MLP 全连接层堆叠 表格数据、基础分类回归
CNN 利用局部感受野和卷积核提取空间特征 图像分类、目标检测
RNN 按时间顺序处理序列 时间序列、早期文本任务
LSTM/GRU 改进 RNN 的长期依赖问题 序列预测、语音、文本
Transformer 用注意力机制建模全局依赖 NLP、大模型、多模态
AutoEncoder 学习压缩表示并重建输入 降维、异常检测、生成模型基础
GNN 在图结构上进行消息传递 社交网络、推荐、分子性质预测

可以把它们理解成不同数据形态上的神经网络变体:

  • 表格数据常用 MLP。
  • 图像数据常用 CNN 或 ViT。
  • 序列数据常用 RNN、LSTM、Transformer。
  • 图数据常用 GNN。
  • 生成任务常见 VAE、GAN、扩散模型、Transformer。

11. 入门阶段最应该掌握什么

深度学习内容很多,但入门阶段最重要的不是追热点,而是把基本训练逻辑打牢。

建议先掌握下面这些概念:

知识点 要理解到什么程度
Tensor 知道它是深度学习中的多维数组
线性层 知道本质是矩阵乘法加偏置
激活函数 知道它提供非线性表达能力
损失函数 知道它衡量预测与真实值的差距
梯度 知道它表示参数对损失的影响方向
反向传播 知道它用链式法则计算梯度
优化器 知道它根据梯度更新参数
训练集/验证集/测试集 知道它们分别用于训练、调参、最终评估
过拟合 知道模型在训练集好、在新数据差
正则化 知道它用于提升泛化能力

这些内容看似基础,但后面的 CNN、Transformer、GNN 都离不开它们。

12. 后续学习流程

如果刚入门深度学习,我建议按下面这个顺序学习。

深度学习后续学习流程

第 1 阶段:补齐数学和机器学习基础

先不用追求数学非常深入,但至少要能读懂模型训练里的基本符号。

重点学习:

  • 向量、矩阵、矩阵乘法。
  • 导数、偏导数、链式法则。
  • 概率、条件概率、期望。
  • 训练集、验证集、测试集。
  • 欠拟合、过拟合、泛化能力。
  • 梯度下降、学习率、局部最优。

建议配合已有机器学习文章学习:

  • 线性回归
  • 逻辑回归
  • 梯度下降
  • 正则化与过拟合
  • 交叉验证和网格搜索

这一阶段的目标不是变成数学专家,而是看到公式不慌,知道每个符号大概在表达什么。

第 2 阶段:学会 MLP 和训练流程

MLP 是深度学习最基础的网络。

这一阶段要重点理解:

  • 输入层、隐藏层、输出层。
  • 权重、偏置、激活函数。
  • 前向传播。
  • 损失函数。
  • 反向传播。
  • 优化器更新参数。

建议至少手写一个小例子:

import torch
import torch.nn as nn

model = nn.Sequential(
    nn.Linear(2, 8),
    nn.ReLU(),
    nn.Linear(8, 1)
)

x = torch.tensor([[0.0, 1.0]])
out = model(x)
print(out)

先不追求复杂,能清楚说出每一层输入输出形状就很好。

第 3 阶段:熟悉 PyTorch

PyTorch 是深度学习实践中非常常用的框架。

这一阶段重点掌握:

  • torch.Tensor
  • nn.Module
  • nn.Linear
  • nn.ReLU
  • nn.Sequential
  • loss.backward()
  • torch.optim.SGD
  • torch.optim.Adam
  • Dataset
  • DataLoader
  • model.train()
  • model.eval()
  • torch.no_grad()

建议完成一个完整训练脚本,而不是只看零散代码。

例如:

读取数据 -> 定义模型 -> 定义损失函数 -> 定义优化器
       -> 训练循环 -> 验证模型 -> 保存模型

只要把这个流程写顺,后面换 CNN、RNN、Transformer 时就不会迷路。

第 4 阶段:学习 CNN

CNN 适合处理图像数据。

重点理解:

  • 卷积核是什么。
  • 感受野是什么。
  • padding 和 stride 有什么作用。
  • 池化层为什么能降维。
  • 通道数如何变化。

推荐项目:

  • MNIST 手写数字分类。
  • CIFAR-10 图片分类。
  • 简单的猫狗分类。

这一阶段要特别重视张量形状变化。

例如图片张量常见格式是:

batch_size x channels x height x width

如果能说清楚每一层之后尺寸如何变化,CNN 就已经入门了一大半。

第 5 阶段:学习序列模型

序列模型主要处理文本、时间序列、语音等数据。

可以按这个顺序:

  1. RNN
  2. LSTM / GRU
  3. Attention
  4. Transformer

RNN 的核心是“把上一步的信息传给下一步”。
Transformer 的核心是“用注意力机制让每个位置看到其他位置”。

推荐项目:

  • 文本情感分类。
  • 股票或温度时间序列预测。
  • 简单机器翻译。
  • 使用 Transformer 做文本分类。

第 6 阶段:学习 Transformer 和大模型基础

现在很多深度学习应用都绕不开 Transformer。

重点理解:

  • Token 和 Embedding。
  • Self-Attention。
  • Query、Key、Value。
  • Multi-Head Attention。
  • Position Encoding。
  • Encoder 和 Decoder。
  • 预训练和微调。

入门阶段不建议一开始就直接读大模型源码。
更好的方式是先实现一个小型 Transformer,用小数据跑通,再去看 BERT、GPT、ViT 等模型。

第 7 阶段:按兴趣选择方向

基础打好后,可以根据兴趣选择方向。

方向 推荐继续学习
计算机视觉 CNN、ResNet、ViT、目标检测、图像分割
自然语言处理 Transformer、BERT、GPT、文本生成、RAG
推荐系统 Embedding、双塔模型、召回排序、序列推荐
图学习 GCN、GraphSAGE、GAT、图分类
生成模型 AutoEncoder、VAE、GAN、扩散模型
强化学习 MDP、Q-Learning、Policy Gradient、PPO
模型部署 ONNX、TensorRT、量化、推理服务

不要同时开太多方向。
比较好的节奏是:先选一个方向做 2 到 3 个项目,再横向扩展。

13. 推荐的实践路线

深度学习不是只靠看文章学会的,一定要动手。

可以按下面这个小项目顺序推进:

顺序 项目 主要练习
1 用 MLP 拟合 XOR 前向传播、激活函数、损失下降
2 用 MLP 做鸢尾花分类 表格分类、交叉熵
3 用 CNN 做 MNIST 分类 卷积、池化、图像张量
4 用 CNN 做 CIFAR-10 分类 更复杂图像分类、过拟合处理
5 用 RNN/LSTM 做文本分类 序列建模、Embedding
6 用 Transformer 做文本分类 注意力机制、位置编码
7 复现一个小论文模型 阅读论文、复现实验、调参
8 部署一个模型接口 推理、保存加载、服务化

每个项目都建议写一份记录:

  • 数据是什么。
  • 输入输出形状是什么。
  • 模型结构是什么。
  • 损失函数是什么。
  • 训练曲线如何变化。
  • 遇到了什么问题。
  • 最后效果如何。

这样学到的东西会更扎实。

14. 初学者常见误区

误区 1:一开始就追最新模型

新模型当然很吸引人,但如果 MLP、损失函数、反向传播、优化器都没理解,直接看大模型会非常吃力。

更推荐的顺序是:

MLP -> CNN/RNN -> Attention -> Transformer -> 大模型

误区 2:只看代码,不看张量形状

深度学习代码里最常见的问题之一就是 shape 不匹配。

看到每一层时都应该问:

输入形状是什么?
输出形状是什么?
batch 维在哪里?
特征维在哪里?

误区 3:只关注训练集准确率

训练集准确率高,不代表模型真的好。
如果验证集和测试集表现很差,很可能是过拟合。

所以训练时至少要关注:

  • 训练集损失。
  • 验证集损失。
  • 训练集准确率。
  • 验证集准确率。

误区 4:把框架 API 当成黑盒

PyTorch 很方便,但不能完全把它当魔法。

至少要知道:

  • model(x) 是前向传播。
  • loss.backward() 是计算梯度。
  • optimizer.step() 是更新参数。
  • optimizer.zero_grad() 是清空旧梯度。

理解这几件事后,很多训练代码都会变得清楚。

15. 总结

深度学习入门可以先抓住四句话:

  • 神经网络由很多层组成,每层都在变换数据表示。
  • 激活函数让神经网络具备非线性表达能力。
  • 损失函数告诉模型预测错了多少。
  • 反向传播和优化器负责让参数朝着损失变小的方向更新。

后续学习不要急着追复杂模型。
比较稳的路线是:

数学与机器学习基础
  -> MLP 和训练流程
  -> PyTorch 实战
  -> CNN / RNN / Transformer / GNN
  -> 项目实践
  -> 论文复现和模型部署

只要把“数据如何进入模型、模型如何输出预测、损失如何计算、参数如何更新”这条主线想清楚,后面再学任何深度学习模型,都会更容易找到位置。