PyTorch 简介 #

什么是深度学习? #

在了解 PyTorch 之前,我们需要先理解深度学习的概念。深度学习是机器学习的一个分支,它使用多层神经网络来学习数据的表示。

text
┌─────────────────────────────────────────────────────────────┐
│                    深度学习在 AI 中的位置                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                    人工智能 (AI)                      │  │
│   │   ┌─────────────────────────────────────────────┐   │  │
│   │   │              机器学习 (ML)                    │   │  │
│   │   │   ┌─────────────────────────────────────┐   │   │  │
│   │   │   │          深度学习 (DL)               │   │   │  │
│   │   │   │                                     │   │   │  │
│   │   │   │  - 图像识别                          │   │   │  │
│   │   │   │  - 自然语言处理                      │   │   │  │
│   │   │   │  - 语音识别                          │   │   │  │
│   │   │   │  - 推荐系统                          │   │   │  │
│   │   │   └─────────────────────────────────────┘   │   │  │
│   │   └─────────────────────────────────────────────┘   │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

为什么需要深度学习框架? #

text
┌─────────────────────────────────────────────────────────────┐
│                    深度学习框架的作用                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  不使用框架:                                                │
│                                                             │
│  ❌ 手动实现反向传播                                         │
│  ❌ 手动管理 GPU 内存                                        │
│  ❌ 手动优化计算性能                                         │
│  ❌ 代码复杂难以维护                                         │
│                                                             │
│  使用框架:                                                  │
│                                                             │
│  ✅ 自动求导                                                │
│  ✅ 自动 GPU 加速                                           │
│  ✅ 高效的数值计算                                           │
│  ✅ 丰富的预训练模型                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

什么是 PyTorch? #

PyTorch 是一个开源的 Python 机器学习库,由 Facebook(现 Meta)的人工智能研究团队开发。它提供了两个核心功能:

  1. 张量计算:类似 NumPy 的 n 维数组,支持 GPU 加速
  2. 深度神经网络:基于自动求导系统的神经网络构建

核心定位 #

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