PyTorch 简介 #
什么是深度学习? #
在了解 PyTorch 之前,我们需要先理解深度学习的概念。深度学习是机器学习的一个分支,它使用多层神经网络来学习数据的表示。
text
┌─────────────────────────────────────────────────────────────┐
│ 深度学习在 AI 中的位置 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 人工智能 (AI) │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ 机器学习 (ML) │ │ │
│ │ │ ┌─────────────────────────────────────┐ │ │ │
│ │ │ │ 深度学习 (DL) │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ - 图像识别 │ │ │ │
│ │ │ │ - 自然语言处理 │ │ │ │
│ │ │ │ - 语音识别 │ │ │ │
│ │ │ │ - 推荐系统 │ │ │ │
│ │ │ └─────────────────────────────────────┘ │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
为什么需要深度学习框架? #
text
┌─────────────────────────────────────────────────────────────┐
│ 深度学习框架的作用 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 不使用框架: │
│ │
│ ❌ 手动实现反向传播 │
│ ❌ 手动管理 GPU 内存 │
│ ❌ 手动优化计算性能 │
│ ❌ 代码复杂难以维护 │
│ │
│ 使用框架: │
│ │
│ ✅ 自动求导 │
│ ✅ 自动 GPU 加速 │
│ ✅ 高效的数值计算 │
│ ✅ 丰富的预训练模型 │
│ │
└─────────────────────────────────────────────────────────────┘
什么是 PyTorch? #
PyTorch 是一个开源的 Python 机器学习库,由 Facebook(现 Meta)的人工智能研究团队开发。它提供了两个核心功能:
- 张量计算:类似 NumPy 的 n 维数组,支持 GPU 加速
- 深度神经网络:基于自动求导系统的神经网络构建
核心定位 #
text
┌─────────────────────────────────────────────────────────────┐
│ PyTorch │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 动态计算图 │ │ 自动求导 │ │ GPU 加速 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Python 优先 │ │ 研究友好 │ │ 生产就绪 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
PyTorch 的历史 #
发展历程 #
text
2002年 ─── Torch 项目启动
│
│ 基于 Lua 语言
│ 纽约大学开发
│
2016年 ─── PyTorch 项目启动
│
│ Facebook AI Research
│ Python 接口
│
2017年 ─── PyTorch 开源发布
│
│ 动态计算图
│ 研究社区热烈反响
│
2018年 ─── PyTorch 1.0
│
│ 生产级部署支持
│ TorchScript
│
2020年 ─── PyTorch 1.7
│
│ Windows 支持
│ 分布式训练增强
│
2022年 ─── PyTorch 2.0
│
│ 编译模式
│ 性能大幅提升
│
至今 ─── 行业标准
│
│ 研究领域首选
│ 超过 TensorFlow 使用率
里程碑版本 #
| 版本 | 时间 | 重要特性 |
|---|---|---|
| 0.1 | 2016 | 初始发布,动态计算图 |
| 0.4 | 2018 | Variable 与 Tensor 合并 |
| 1.0 | 2018 | TorchScript,生产部署 |
| 1.5 | 2020 | Windows 支持 |
| 1.8 | 2021 | 分布式训练增强 |
| 2.0 | 2022 | torch.compile,性能优化 |
| 2.1 | 2023 | SDPA,改进的编译器 |
为什么选择 PyTorch? #
传统框架的痛点 #
在 PyTorch 出现之前,TensorFlow 1.x 使用静态计算图:
python
import tensorflow as tf
x = tf.placeholder(tf.float32, shape=[None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
result = sess.run(y, feed_dict={x: data})
PyTorch 的解决方案 #
python
import torch
import torch.nn as nn
model = nn.Linear(784, 10)
x = torch.randn(32, 784)
y = model(x)
print(y)
PyTorch 的核心特点 #
1. 动态计算图(Eager Execution) #
text
┌─────────────────────────────────────────────────────────────┐
│ 动态计算图优势 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 静态图(TensorFlow 1.x): │
│ │
│ 1. 先定义图结构 │
│ 2. 编译图 │
│ 3. 运行图 │
│ ❌ 调试困难 │
│ ❌ 条件逻辑复杂 │
│ │
│ 动态图(PyTorch): │
│ │
│ 1. 代码即时执行 │
│ 2. 像 NumPy 一样自然 │
│ 3. Python 原生调试 │
│ ✅ 调试简单 │
│ ✅ 条件逻辑自然 │
│ │
└─────────────────────────────────────────────────────────────┘
python
import torch
x = torch.randn(3, 3)
if x[0, 0] > 0:
y = x * 2
else:
y = x / 2
print(y)
2. 自动求导(Autograd) #
text
┌─────────────────────────────────────────────────────────────┐
│ 自动求导机制 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 前向传播: │
│ │
│ x ──► f(x) ──► y ──► g(y) ──► z │
│ │
│ 反向传播: │
│ │
│ ∂z/∂x = ∂z/∂y × ∂y/∂x │
│ │
│ PyTorch 自动: │
│ - 记录计算历史 │
│ - 构建计算图 │
│ - 自动计算梯度 │
│ │
└─────────────────────────────────────────────────────────────┘
python
import torch
x = torch.tensor([2.0], requires_grad=True)
y = x ** 2
z = y + 3
z.backward()
print(f"dz/dx = {x.grad}")
3. GPU 加速 #
text
┌─────────────────────────────────────────────────────────────┐
│ GPU 加速原理 │
├─────────────────────────────────────────────────────────────┤
│ │
│ CPU:串行计算 │
│ ┌───┐ │
│ │ 1 │──►│ 2 │──►│ 3 │──►│ 4 │ │
│ └───┘ └───┘ └───┘ └───┘ │
│ │
│ GPU:并行计算 │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ 1 │ │ 2 │ │ 3 │ │ 4 │ │
│ └───┘ └───┘ └───┘ └───┘ │
│ │ │ │ │ │
│ └─────┴─────┴─────┘ │
│ ▼ │
│ 同时完成 │
│ │
│ 深度学习:大量矩阵运算,GPU 可并行处理 │
│ │
└─────────────────────────────────────────────────────────────┘
python
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = torch.randn(1000, 1000).to(device)
y = torch.randn(1000, 1000).to(device)
z = torch.matmul(x, y)
4. Python 优先 #
text
┌─────────────────────────────────────────────────────────────┐
│ Python 优先设计 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 特点: │
│ │
│ ✅ 原生 Python 语法 │
│ ✅ 支持所有 Python 调试工具 │
│ ✅ 与 NumPy 无缝集成 │
│ ✅ 面向对象设计 │
│ │
│ 示例: │
│ │
│ class MyModel(nn.Module): │
│ def __init__(self): │
│ super().__init__() │
│ self.fc = nn.Linear(10, 1) │
│ │
│ def forward(self, x): │
│ return self.fc(x) │
│ │
└─────────────────────────────────────────────────────────────┘
5. 丰富的生态系统 #
text
┌─────────────────────────────────────────────────────────────┐
│ PyTorch 生态系统 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 核心库: │
│ ├── torch 核心张量库 │
│ ├── torch.nn 神经网络模块 │
│ ├── torch.optim 优化器 │
│ ├── torch.autograd 自动求导 │
│ └── torch.utils 数据工具 │
│ │
│ 扩展库: │
│ ├── torchvision 计算机视觉 │
│ ├── torchtext 自然语言处理 │
│ ├── torchaudio 音频处理 │
│ ├── torchgeometric 图神经网络 │
│ └── pytorch-lightning 简化训练 │
│ │
│ 部署工具: │
│ ├── TorchScript 模型序列化 │
│ ├── TorchServe 模型服务 │
│ ├── ONNX 跨平台导出 │
│ └── TensorRT NVIDIA 优化 │
│ │
└─────────────────────────────────────────────────────────────┘
PyTorch 与其他框架对比 #
PyTorch vs TensorFlow #
| 特性 | PyTorch | TensorFlow |
|---|---|---|
| 计算图 | 动态图(默认) | 静态图/动态图 |
| 调试体验 | Python 原生 | 较复杂 |
| 学习曲线 | 平缓 | 较陡峭 |
| 研究友好 | ✅ 极佳 | ⚠️ 一般 |
| 生产部署 | TorchScript | TFServing |
| 社区活跃度 | 高 | 高 |
| 文档质量 | 优秀 | 优秀 |
PyTorch vs JAX #
| 特性 | PyTorch | JAX |
|---|---|---|
| 易用性 | 高 | 中 |
| 性能 | 优秀 | 极佳 |
| 自动向量化 | 有限 | 强大 |
| 函数式编程 | 支持 | 核心 |
| 生态系统 | 成熟 | 发展中 |
PyTorch 的应用场景 #
1. 计算机视觉 #
text
┌─────────────────────────────────────────────────────────────┐
│ 计算机视觉应用 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 应用领域: │
│ │
│ - 图像分类:识别图像中的物体 │
│ - 目标检测:定位图像中的多个物体 │
│ - 语义分割:像素级别的图像理解 │
│ - 图像生成:GAN、Diffusion 模型 │
│ - 人脸识别:身份验证、表情分析 │
│ │
│ 经典模型: │
│ │
│ - ResNet、VGG、EfficientNet │
│ - YOLO、Faster R-CNN │
│ - U-Net、DeepLab │
│ - StyleGAN、Stable Diffusion │
│ │
└─────────────────────────────────────────────────────────────┘
2. 自然语言处理 #
text
┌─────────────────────────────────────────────────────────────┐
│ 自然语言处理应用 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 应用领域: │
│ │
│ - 文本分类:情感分析、主题分类 │
│ - 机器翻译:语言之间的翻译 │
│ - 文本生成:对话系统、文章生成 │
│ - 命名实体识别:提取人名、地名等 │
│ - 问答系统:智能客服、知识库问答 │
│ │
│ 经典模型: │
│ │
│ - Transformer、BERT、GPT │
│ - LSTM、GRU │
│ - T5、BART │
│ │
└─────────────────────────────────────────────────────────────┘
3. 推荐系统 #
text
┌─────────────────────────────────────────────────────────────┐
│ 推荐系统应用 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 应用场景: │
│ │
│ - 电商推荐:商品推荐 │
│ - 内容推荐:视频、文章推荐 │
│ - 广告推荐:精准广告投放 │
│ - 音乐推荐:歌曲推荐 │
│ │
│ 经典模型: │
│ │
│ - 协同过滤 │
│ - Wide & Deep │
│ - DeepFM │
│ - DIN、DIEN │
│ │
└─────────────────────────────────────────────────────────────┘
4. 科学计算 #
text
┌─────────────────────────────────────────────────────────────┐
│ 科学计算应用 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 应用领域: │
│ │
│ - 药物发现:分子结构预测 │
│ - 气象预测:天气预报模型 │
│ - 物理模拟:粒子模拟 │
│ - 生物信息:基因序列分析 │
│ │
│ 优势: │
│ │
│ ✅ GPU 加速大规模计算 │
│ ✅ 自动求导支持优化问题 │
│ ✅ 与 SciPy 生态集成 │
│ │
└─────────────────────────────────────────────────────────────┘
PyTorch 的优势与局限 #
优势 #
text
✅ 动态计算图
- 即时执行
- 调试友好
- 条件逻辑自然
✅ Python 优先
- 原生 Python 体验
- 学习曲线平缓
- 丰富的 Python 工具
✅ 研究友好
- 快速原型开发
- 灵活的模型设计
- 学术界首选
✅ 强大的社区
- 活跃的开源社区
- 丰富的预训练模型
- 完善的文档教程
✅ 生产就绪
- TorchScript 部署
- ONNX 导出
- 多平台支持
局限性 #
text
⚠️ 生产部署复杂度
- 相比 TensorFlow Serving
- 需要额外配置
⚠️ 移动端支持
- 相比 TensorFlow Lite
- 生态不够成熟
⚠️ 分布式训练
- 配置相对复杂
- 需要更多学习
⚠️ 内存占用
- 动态图内存开销
- 需要手动优化
学习路径 #
text
入门阶段
├── PyTorch 简介(本文)
├── 安装与配置
├── 张量基础
└── 自动求导
进阶阶段
├── 神经网络模块
├── 优化器
├── 数据加载
└── CNN/RNN
高级阶段
├── 迁移学习
├── GPU 加速
├── 模型部署
└── 分布式训练
下一步 #
现在你已经了解了 PyTorch 的基本概念,接下来学习 安装与配置,开始搭建你的 PyTorch 开发环境!
最后更新:2026-03-29