跳到主要内容

深度学习基础

核对日期:2026-05-13。

1. 阶段目标

本阶段目标是理解神经网络如何从数据中学习表示,并能用 PyTorch 完成一个可复现的小型训练实验。

学完本阶段,你应该能做到:

  • 用自己的话解释前向传播、损失函数、反向传播和优化器。
  • 理解 tensor、shape、batch、epoch、learning rate 等训练基础概念。
  • 能写出 PyTorch 基础训练循环。
  • 能识别过拟合、欠拟合、梯度问题和数据问题。
  • 能记录实验参数、指标曲线和错误样例。
  • 知道 CNN、RNN、Attention 分别解决过什么问题,以及为什么 Transformer 会成为后续重点。

本阶段的核心产出是:

  • 一个 PyTorch 训练实验。
  • 一份训练曲线和错误样例分析。
  • 一份深度学习实验记录模板。

2. 学习前置条件

建议已完成:

  • 线性代数、概率和优化最小基础。
  • 机器学习基础。
  • Python、NumPy、pandas 基础。

不要求:

  • 手推复杂反向传播。
  • 训练大模型。
  • 了解 Transformer 细节。

3. 核心知识地图

4. 详细讲义

4.1 深度学习和传统机器学习的差异

传统机器学习通常依赖人工特征工程;深度学习更强调通过神经网络从原始或半原始数据中学习表示。

维度传统机器学习深度学习
特征人工设计较多模型自动学习较多
数据需求中小数据也可用通常需要更多数据
计算需求相对低相对高
可解释性通常更好通常更弱
典型场景表格数据图像、语音、文本、代码

工程判断:表格数据不要默认上深度学习;图像、语音、自然语言等复杂数据通常更适合深度学习。

4.2 Tensor 和 shape

Tensor 是多维数组,是深度学习计算的基本对象。

常见 shape:

数据常见 shape含义
表格 batch[batch_size, features]多条样本和特征
图片 batch[batch_size, channels, height, width]多张图片
文本 token[batch_size, seq_len]多条文本 token 序列
隐藏状态[batch_size, seq_len, hidden_dim]每个 token 的表示

很多深度学习 bug 不是算法错,而是 shape 理解错。训练时要习惯打印中间 tensor shape。

4.3 神经网络层

神经网络由层组成。每层把输入变换为输出。

常见层:

  • Linear:线性变换。
  • ReLU / GELU:激活函数,引入非线性。
  • Conv2d:图像局部特征提取。
  • Embedding:把离散 ID 映射为向量。
  • Dropout:训练时随机丢弃部分激活,防止过拟合。
  • LayerNorm / BatchNorm:稳定训练。

4.4 前向传播

前向传播是模型从输入计算输出的过程:

input -> layer1 -> activation -> layer2 -> logits -> prediction

输出可能是:

  • 分类 logits。
  • 回归数值。
  • 序列中每个 token 的概率分布。

4.5 损失函数

损失函数衡量模型输出和真实标签的差距。

任务常见损失说明
回归MSE / MAE预测数值误差
二分类Binary Cross Entropy是否属于正类
多分类Cross Entropy多类别分类
语言模型Token-level Cross Entropy下一个 token 预测

损失函数是训练目标,但不一定等于业务指标。例如分类任务训练用交叉熵,但业务更关心召回率或误报率。

4.6 反向传播和优化器

反向传播负责计算每个参数对损失的影响,优化器负责根据梯度更新参数。

训练循环:

for batch in dataloader:
optimizer.zero_grad()
outputs = model(batch["x"])
loss = loss_fn(outputs, batch["y"])
loss.backward()
optimizer.step()

你不需要手写复杂反向传播,但必须理解:

  • loss.backward() 计算梯度。
  • optimizer.step() 更新参数。
  • zero_grad() 防止梯度累积污染下一步。

4.7 Batch、epoch 和 learning rate

概念含义风险
Batch一次训练使用的一小批样本太小不稳定,太大占内存
Epoch完整看完训练集一次太多可能过拟合
Learning rate参数更新步长太大震荡,太小收敛慢
Scheduler动态调整学习率配置错误可能训练变差

4.8 过拟合和正则化

深度学习模型容量强,容易记住训练集。

常见防护:

  • 更多数据。
  • 数据增强。
  • Dropout。
  • Weight decay。
  • Early stopping。
  • 降低模型复杂度。

判断过拟合:

训练 loss 持续下降,验证 loss 开始上升

4.9 CNN、RNN、Attention 的直觉

架构核心思想典型场景局限
CNN局部感受野和权重共享图像长距离依赖弱
RNN按顺序处理序列早期 NLP、时间序列难并行、长依赖困难
Attention动态关注上下文相关位置NLP、代码、多模态计算成本随序列增长

理解 Attention 是进入 Transformer 的前置。Transformer 可以看作把 Attention 作为核心计算模式的深层网络。

4.10 PyTorch 项目基本结构

建议结构:

dl-experiment/
├── data/
├── notebooks/
├── src/
│ ├── dataset.py
│ ├── model.py
│ ├── train.py
│ └── evaluate.py
├── outputs/
│ ├── checkpoints/
│ ├── metrics.json
│ └── errors.csv
└── README.md

训练实验必须记录:

  • 数据集版本。
  • 模型结构。
  • 超参数。
  • 随机种子。
  • 训练/验证指标。
  • 最佳 checkpoint。
  • 错误样例。

5. 关键概念表

概念含义工程意义常见问题
Tensor多维数组模型计算统一格式shape 错误
Dataset数据读取逻辑控制样本和标签标签错位
DataLoader批量加载数据batch、shuffle、并行训练/验证混用
ModulePyTorch 模型单元封装网络结构forward 不清晰
Autograd自动求梯度训练基础误用 no_grad
Loss优化目标指导训练和业务指标不一致
Optimizer参数更新决定收敛学习率不合适
Checkpoint模型保存可恢复和复现只保存最后一次

6. 工程案例

6.1 MNIST 手写数字分类

目标:输入图片,输出数字类别。

学习点:

  • 图像 tensor shape。
  • 分类损失。
  • 训练/验证循环。
  • 混淆矩阵。
  • 错误样例可视化。

6.2 简单文本分类

目标:输入评论,判断情感正负。

学习点:

  • 文本 tokenization。
  • Embedding 层。
  • 序列长度 padding/truncation。
  • 类别不平衡处理。

6.3 图像迁移学习

目标:用预训练模型做小数据集分类。

学习点:

  • 预训练表示复用。
  • 冻结 backbone。
  • 微调最后几层。
  • 小数据过拟合风险。

6.4 训练日志分析

目标:通过曲线判断训练是否正常。

典型现象:

曲线表现可能问题
loss 不下降学习率、数据、标签或模型错误
训练好验证差过拟合
指标剧烈波动batch 太小、学习率太大
验证集异常好数据泄漏

7. 常见误区与反模式

反模式表现后果修正
只加层数模型越来越深过拟合、训练慢先分析数据和错误
不记录实验改了参数没记录无法复现最好结果固定实验日志
只看训练集训练准确率很高线上失败看验证和测试
不看错误样例只报平均指标不知道模型错在哪保存并分类错误
shape 靠猜维度错误频繁训练 bug 多打印 shape 和断言
盲目用大模型小任务直接上复杂模型成本高、调试难从小模型 baseline 开始

8. 阶段练习

8.1 Tensor 练习

  1. 创建 [32, 10] 的随机 tensor,表示 32 条样本和 10 个特征。
  2. 创建 [16, 3, 224, 224] 的图片 batch,说明每个维度含义。
  3. 对一个 batch 计算均值和标准差。
  4. 打印一个简单模型每层输出 shape。

8.2 PyTorch 训练练习

  1. torch.nn.Linear 写一个二分类模型。
  2. 写完整训练循环。
  3. 加入验证循环。
  4. 保存验证集最优 checkpoint。

8.3 调参练习

比较以下配置:

  • 学习率 1e-11e-31e-5
  • batch size 1664256
  • 有无 dropout。

记录 loss 曲线和结论。

8.4 错误样例练习

从验证集里找 10 个模型预测错误样例,按原因分类:

  • 标签可能错误。
  • 输入质量差。
  • 类别边界模糊。
  • 模型能力不足。
  • 数据分布少见。

9. 项目任务

9.1 项目要求

完成一个 PyTorch 训练实验:

  • 选择一个小数据集,例如 MNIST、Fashion-MNIST、IMDb 子集或自定义小数据集。
  • 实现 Dataset / DataLoader。
  • 实现模型、训练、验证和测试。
  • 记录训练曲线。
  • 输出混淆矩阵或错误样例表。
  • 写出改进计划。

9.2 实验报告模板

# 深度学习实验报告

## 1. 任务和数据集

## 2. 数据预处理

## 3. 模型结构

## 4. 训练配置

## 5. 指标结果

## 6. 训练曲线

## 7. 错误样例分析

## 8. 复现实验步骤

## 9. 改进计划

9.3 评分标准

维度分值标准
数据管道20Dataset/DataLoader 正确,训练验证分离
模型实现20模型结构清晰,forward 可读
训练循环25包含 train/eval、loss、optimizer、checkpoint
实验记录20有参数、曲线、指标和错误样例
分析质量15能解释失败原因和改进方向

10. 验收题

  1. 前向传播和反向传播分别做什么?
  2. 为什么需要激活函数?
  3. loss.backward()optimizer.step() 分别做什么?
  4. 为什么训练前要 optimizer.zero_grad()
  5. 学习率过大和过小分别有什么表现?
  6. 如何识别过拟合?
  7. Dropout 和 weight decay 分别有什么作用?
  8. CNN、RNN、Attention 的核心差异是什么?
  9. 为什么验证集不能参与训练?
  10. 为什么深度学习实验必须记录随机种子和超参数?

11. 延伸阅读

官方与课程

进阶理解

12. 本阶段总结

深度学习的关键不是“堆更多层”,而是理解数据、表示、损失、优化和泛化之间的关系。你应该能从训练曲线、验证指标和错误样例判断模型为什么成功或失败。

下一阶段会进入 Transformer 与大模型原理。Transformer 可以看作深度学习在序列建模和上下文建模上的一次关键架构跃迁,也是现代 LLM、RAG 和 Agent 能力的底座。