引言:从理论到代码#
还记得 LeNet-5架构详解 中那 61,706 个参数吗?我们分析了每一层的维度、计算了参数量、讨论了为什么 CNN 比全连接更高效。
但有一个问题:这些数字是怎么存到电脑里的?那些矩阵乘法是怎么算的?反向传播到底怎么实现?
本章将回答这些问题。我们会用 PyTorch 把 神经网络基础:从理论到架构 中的理论全部实现出来,让你真正理解从数学公式到可运行代码的转化过程。
为什么要用框架?#
想象你要手写一个 LeNet#
如果没有框架,你需要自己实现:
张量存储:如何存 32 个 5×5 卷积核?用 Python 列表?效率太低
卷积运算:嵌套循环实现滑动窗口?代码复杂还容易错
反向传播:手动推导每一层的梯度?LeNet 有 8 层,每层梯度公式都不一样
GPU 加速:想让计算快 10 倍?你得学 CUDA 编程
手动实现的痛苦
全连接神经网络 中那个 3 层全连接网络,手写反向传播就需要:
推导每一层的梯度公式
小心矩阵维度匹配
调试数值稳定性问题
花了半天,最后发现是某个下标写错了
这还只是 3 层!想象一下 ResNet-152 的 152 层…
框架做了什么?#
PyTorch 把上面这些痛苦都解决了:
问题 |
手写实现 |
PyTorch 方案 |
|---|---|---|
数据存储 |
Python 列表/NumPy 数组 |
|
卷积运算 |
嵌套循环 |
|
反向传播 |
手动推导梯度 |
|
GPU 加速 |
写 CUDA 代码 |
|
核心洞察:PyTorch 不是新技术,而是 计算图、反向传播与梯度下降:深度学习核心数学基础 中理论的工程封装——每个 API 都对应一个数学概念。
PyTorch 与前面章节的对应#
让我们建立一个"理论→代码"的映射表:
PyTorch 实现 |
||
|---|---|---|
|
数据如何在网络中流动 |
|
|
梯度如何回传更新参数 |
|
|
参数如何一步步优化 |
|
|
引入非线性 |
|
|
衡量预测好坏 |
学习策略:每学一个 PyTorch API,问自己"这对应哪个理论概念?"
PyTorch 的设计哲学#
动态计算图:调试友好#
PyTorch 采用动态计算图(define-by-run):每次前向传播时实时构建计算图。
动态 vs 静态
静态计算图(TensorFlow 1.x):
先定义完整的计算图
然后在一个独立的 session 中运行
调试痛苦:出错时不知道是哪一行
动态计算图(PyTorch):
代码按顺序执行
计算图在运行时构建
调试友好:可以用
print()随时查看中间结果
这对学习很重要——你可以随时停下来检查张量的形状和内容,就像调试普通 Python 代码一样。
Pythonic:符合直觉#
PyTorch 的 API 设计遵循 Python 的习惯:
# NumPy 风格的操作
import torch
x = torch.tensor([1.0, 2.0, 3.0])
y = x * 2 + 1 # 就像普通的 Python 运算
# 查看形状、设备、是否需要梯度
print(x.shape, x.device, x.requires_grad)
没有魔法:你看到的就是实际发生的。没有隐藏的图构建过程,没有复杂的 session 管理。
本章学习路线图#
我们将按照"数据→模型→训练"的自然顺序学习:
与 神经网络基础:从理论到架构 的对应:
从 NumPy 到 PyTorch:张量的本质:理解
torch.Tensor如何对应 计算图 中的节点张量操作:数据在网络中的流动:数据如何在网络中流动(reshape、transpose 对应维度变换)
神经网络模块:搭建计算图:用
nn.Module实现 fc-layer-basics 和 cnn-basics 中的架构自动微分:PyTorch 的核心魔法:
.backward()就是 反向传播算法 的自动化优化器:用梯度更新参数:
optimizer.step()实现 梯度下降与优化算法 的各种变体完整训练流程:把 neural-training-basics 中的流程代码化
核心认知:API 即理论#
记住这个公式:
例子:nn.Conv2d 的背后
数学:卷积运算 \(Y[i,j] = \sum_{u,v} X[i+u, j+v] \cdot K[u,v]\)
工程:CuDNN 优化的 GPU 实现,比手写快 100 倍
你的任务是理解数学概念,工程优化 PyTorch 已经帮你做了。
开始之前#
本章的学习心法
带着理论学代码:每看到一个 API,问"这对应哪个数学概念?"
动手实验:修改参数看结果变化,比看书更有效
善用帮助:
help(torch.nn.Conv2d)会告诉你数学公式和参数说明连接前后:随时回顾 计算图、反向传播与梯度下降:深度学习核心数学基础 和 神经网络基础:从理论到架构 的对应内容
一句话总结:本章不是学新东西,而是用 PyTorch 重新表达你已经懂的理论。
准备好了吗?让我们从张量开始——这是 PyTorch 世界的"原子"。
贡献者与修订历史
查看详细修订记录
-
b20ef3e2026-04-28 - Heyan Zhu: docs: update pytorch practice section with detailed explanations and code examples -
dcecce42026-01-26 - Heyan Zhu: docs: enrich math fundamentals documentation with code captions and TikZ visualizations -
0c291d72025-12-10 - Heyan Zhu: docs: restructure course materials and add new content