Skip to main content

6 深度学习与 Transformer 基础

深度学习与 Transformer 主视觉

第 6 章只解决一件事:理解模型怎样通过损失、梯度和反复训练步骤学会东西。

先看训练闭环

深度学习训练闭环主图

先看图。大多数深度学习训练代码都是这个闭环:

batch 数据 -> 模型前向 -> 损失 -> 反向传播梯度 -> 优化器更新 -> 曲线

不要一开始追大模型。先让一个小模型跑起来,记录发生了什么,并解释它为什么变好或失败。

学习顺序与任务表

下面这一张表同时作为本章学习指南和任务清单。

页面跟着做留下的证据
6.1 神经网络基础理解神经元、激活函数、前向/反向传播、优化器、正则化和初始化一份手写训练闭环说明
6.2 PyTorch练习 tensor、autograd、nn.Module、Dataset、DataLoader 和最小训练循环一个可运行 PyTorch 脚本
6.3 CNN用图像分类理解数据形状、卷积、池化和迁移学习shape 记录和一次图像分类运行
6.4 RNN理解序列数据为什么需要记忆,以及 LSTM/GRU 在 Transformer 前解决了什么一条序列模型说明
6.5 Transformer学 Query、Key、Value、自注意力、位置编码和 Transformer block一张 attention 输入/输出图
6.1.8 可选深度学习历史学完主训练闭环后,再浏览 backprop、CNN、RNN、Attention、Transformer 为什么出现一条“这个架构为什么存在”的说明
6.6 生成模型6.7 训练技巧在训练闭环稳定后作为扩展学习一条调参或诊断记录
6.8 项目6.8.5 工作坊在图像、情感或生成项目之前,先做 PyTorch 证据包日志、曲线、checkpoint、shape trace、README

本章常见术语:

术语含义
tensorPyTorch 使用的多维数组
forward数据经过模型得到预测
loss衡量预测错误的数字
backward从损失计算梯度
optimizer使用梯度更新参数
epoch完整看完一遍训练数据
batch一次一起处理的一小组样本

第一个可运行闭环

如果还没有 PyTorch,请先用官方选择器安装。PyTorch 可用后,运行下面这个极小训练循环:

import torch
from torch import nn

torch.manual_seed(42)
x = torch.tensor([[0.0], [1.0], [2.0], [3.0]])
y = torch.tensor([[0.0], [2.0], [4.0], [6.0]])

model = nn.Linear(1, 1)
loss_fn = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

for epoch in range(20):
pred = model(x)
loss = loss_fn(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch in {0, 1, 5, 19}:
print(epoch, round(loss.item(), 4))

预期形态:

0 ...
1 ...
5 ...
19 ...

具体数字可能不同,但 loss 应该整体下降。只要下降,你就看到了训练闭环在工作。

常见失败

现象先检查什么常见修复
shape 不匹配输入形状、batch 维度、输出类别数在每层打印 tensor shape
loss 不下降学习率、标签、归一化、损失函数先尝试过拟合一个小 batch
训练好、验证差过拟合或数据划分问题加验证曲线、数据增强、正则化、early stopping
显存不足batch 大小、图像尺寸、模型规模降低 batch/分辨率,或用更小模型
Transformer 抽象Q/K/V 和序列长度写代码前先画一张 attention 表

通关检查

能回答下面五个问题,就可以进入第 7 章:

  • forwardloss.backward()optimizer.step() 分别做什么?
  • Dataset 和 DataLoader 分别解决什么问题?
  • 训练曲线和验证曲线怎样暴露过拟合?
  • Attention 为什么能建模上下文?
  • Transformer 和后面的大模型有什么关系?

需要打印式清单时,打开 6.0 学习指南与任务单。后面的大模型、RAG 和多模态模型都会建立在这些表示学习概念上。