深度学习入门:从神经网络到学习路线
学习深度学习时,很多人一上来就会被一堆名词淹没:神经网络、反向传播、CNN、RNN、Transformer、Embedding、优化器、损失函数、过拟合、预训练、微调……
这些概念当然重要,但如果一开始没有一张地图,就很容易出现一种感觉:每个词好像都看过,但不知道它们之间到底是什么关系。
所以这篇文章不急着推公式,也不急着写复杂代码,而是先回答几个更基础的问题:
- 深度学习到底在学什么?
- 神经网络为什么可以拟合复杂关系?
- 一个模型是如何被训练出来的?
- 入门之后应该按什么顺序继续学?
一句话概括:
深度学习就是用多层神经网络从数据中自动学习特征表示,再用这些表示完成分类、回归、生成、推荐、预测等任务。
1. 深度学习是什么
在传统机器学习中,我们经常需要手动设计特征。
比如要判断一封邮件是不是垃圾邮件,可能会人工提取这些特征:
- 是否包含“免费”“中奖”“限时”等关键词。
- 邮件长度是多少。
- 是否包含很多链接。
- 发件人是否陌生。
这些特征再送入逻辑回归、决策树、随机森林、GBDT 等模型中进行预测。
深度学习的思路稍微不一样。它希望模型自己从原始数据中逐层学习特征。
以图片分类为例:
- 浅层可能学到边缘、颜色、纹理。
- 中间层可能学到局部形状,比如眼睛、轮子、耳朵。
- 深层可能学到更抽象的概念,比如人脸、车辆、动物。
这就是“深度”的含义:不是说模型一定神秘,而是说它有很多层,每一层都在对上一层的表示继续加工。
2. 深度学习和机器学习的关系
可以把它们的关系理解成:
人工智能
└── 机器学习
└── 深度学习
机器学习强调从数据中学习规律。深度学习是机器学习中的一个分支,它主要使用多层神经网络来学习复杂规律。
传统机器学习并没有过时。对于表格数据、样本量不大、可解释性要求高的任务,逻辑回归、决策树、随机森林、GBDT 依然非常常用。
深度学习更擅长处理这些数据:
- 图像:图片分类、目标检测、图像分割。
- 文本:文本分类、机器翻译、问答系统。
- 语音:语音识别、语音合成。
- 图结构:社交网络、分子结构、推荐系统。
- 大规模复杂数据:多模态模型、大语言模型、生成模型。
所以可以先记住一个判断标准:
如果任务需要模型从复杂原始数据中自动提取高层特征,深度学习通常更有优势。
3. 神经网络的最小单位:神经元
神经网络听起来很复杂,但最基本的计算单元其实很简单。
一个神经元通常做两件事:
- 对输入做加权求和。
- 把结果送入激活函数。
公式可以写成:
$$
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 步:
- 把一批数据输入模型。
- 模型前向传播,得到预测结果。
- 用损失函数衡量预测和真实标签之间的差距。
- 反向传播计算每个参数对损失的影响。
- 优化器根据梯度更新参数。
如果用 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.Tensornn.Modulenn.Linearnn.ReLUnn.Sequentialloss.backward()torch.optim.SGDtorch.optim.AdamDatasetDataLoadermodel.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 阶段:学习序列模型
序列模型主要处理文本、时间序列、语音等数据。
可以按这个顺序:
- RNN
- LSTM / GRU
- Attention
- 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
-> 项目实践
-> 论文复现和模型部署
只要把“数据如何进入模型、模型如何输出预测、损失如何计算、参数如何更新”这条主线想清楚,后面再学任何深度学习模型,都会更容易找到位置。
