Appearance
为什么需要 PyTorch
本篇是教程的开篇。我们不急着写代码,先回答一个更重要的问题:市面上框架这么多,为什么偏偏学 PyTorch?它到底解决什么问题,又不解决什么问题?
一个真实的痛点场景
假设你是一名后端工程师,老板某天把你叫进办公室:
"我们用爬虫收集了 50 万条用户评论,你做个功能,把差评自动挑出来。规则我不管,明天要 demo。"
你的第一反应可能是写正则表达式。两天后你发现:"这个商家一般般,不推荐" 这句话里全是负面词,但整体其实是中性偏负;"这手机烂得像板砖,太能摔了" 居然是好评。规则写不完。
这时你想起深度学习:把评论喂给一个网络,让它自己从数据里学规律。但你立刻遇到三个现实问题:
- 矩阵运算太慢。一个最简单的两层网络,一次前向传播就是几百万次乘加,用 NumPy 在 CPU 上跑,训练一轮要几分钟。你需要 GPU 加速,但没人想手写 CUDA 核函数。
- 梯度推导太痛苦。反向传播(Backpropagation)要求每个参数的梯度。手推两层网络的公式还行,换成十几层、带 Dropout 和残差连接的网络,推导量指数级增长,还极易算错。
- 实验迭代太频繁。今天想换激活函数,明天想加一层,每个想法都要重走一遍"改公式 → 改代码 → 调试"的流程。
PyTorch 就是把这三件事全部包办的工具:它帮你把矩阵运算自动搬到 GPU 上、自动算梯度、并且让"改网络结构"只意味着改几行 Python 代码。
PyTorch 解决什么、不解决什么
先说清楚边界,避免学了之后发现"不对啊,这跟我预期不一样"。
✅ 它解决的
| 问题 | PyTorch 的答案 |
|---|---|
| GPU 并行计算 | 张量(Tensor)一行代码 .to("cuda") 即可搬到 GPU |
| 梯度自动计算 | 自动求导引擎(Autograd)记录运算图,.backward() 一键求梯度 |
| 网络搭建 | nn.Module 像拼积木一样组合层 |
| 数据喂送 | Dataset / DataLoader 处理批量、打乱、多进程加载 |
| 科研级灵活性 | 动态计算图,训练循环就是普通 Python for 循环,随便加 if/else |
| 工业部署 | TorchScript / torch.export / ONNX 导出,服务端推理(TorchServe、torch.compile) |
❌ 它不解决的
- 它不是"开箱即用的 AI 服务"。PyTorch 不会直接给你一个能用的翻译模型——它给你的是"造模型的原材料"。想要成品,要用 Hugging Face Transformers 这类构建在 PyTorch 之上的库。
- 它不管数据质量。Garbage in, garbage out,数据清洗仍然是你的工作。
- 它不是机器学习的全部。传统的随机森林、XGBoost 等场景,用 sklearn 更合适,不需要动用深度学习。
- 它不替你理解原理。框架把数学变成了 API,但为什么学习率要调、为什么会过拟合,仍然是需要自己理解的知识。
与同类框架的对比
深度学习框架不少,最常见的对比对象是 TensorFlow 和 scikit-learn(虽然定位不同,很多新手三者一起纠结)。
| 维度 | PyTorch | TensorFlow 2.x | scikit-learn |
|---|---|---|---|
| 定位 | 研究 + 工业通用的深度学习框架 | 偏工业部署的深度学习框架 | 传统机器学习库 |
| 计算图 | 动态图(Python 怎么写就怎么跑) | 图层 API 动态 + tf.function 静态编译 | 无(不是深度学习框架) |
| 调试体验 | ✅ 直接用 print / pdb,像调普通 Python | 早期版本调试困难,2.x 已改善 | 普通 Python 体验 |
| GPU 支持 | ✅ 一等公民 | ✅ 一等公民 | ⚠️ 有限 |
| 学习曲线 | 平缓,概念少 | 概念较多(Graph/Session/keras 历史包袱) | 非常平缓 |
| 生态(论文/开源模型) | ✅ 主流论文首选,新品几乎默认 PyTorch 实现 | 较多存量工业项目 | 传统 ML 事实标准 |
| 移动端/嵌入式 | ExecuTorch / ONNX 导出 | TFLite 成熟 | 不适用 |
| 招聘市场 | 算法岗事实标准 | 存量工业岗 | 数据岗常见 |
一句话选型建议:
- 想做深度学习(图像、NLP、大模型相关),或者想读懂开源 AI 项目源码 → PyTorch,没有悬念,2023 年之后大模型时代新发布的开源项目(LLaMA、Stable Diffusion、各类 RLHF 框架)几乎清一色 PyTorch 实现。
- 维护老的 TensorFlow 工业项目 → 继续 TF,不值得为框架切换重写。
- 结构化数据(表格预测)→ 先用 scikit-learn / XGBoost,深度学习往往不是最优解。
本教程的学习路线
本教程基于 PyTorch 2.x(写作时为 2.5+,命令在 2.1~2.x 均可用),假设你会基础 Python(函数、类、pip),不要求任何数学和机器学习背景。
后续章节安排:
- 核心概念与心智模型 —— 用类比建立正确的直觉
- 环境搭建 —— 从零装好可训练的环境
- 实战项目 —— 手写数字识别,从零到一,中途还会带你故意踩两个新手必踩的坑
- 进阶与最佳实践 —— 从"能跑"到"跑得快、跑得稳"
- 排错与 FAQ —— 遇到报错先来这里查
提示:不要因为"概念篇看起来简单"就跳过。很多新手实战时一头雾水,根源恰恰是张量形状和计算图的心智模型没建立起来。
小结
- PyTorch 解决三件事:GPU 加速、自动求梯度、灵活搭网络。
- 它是"造模型的原材料",不是"开箱即用的 AI"。
- 深度学习 / 大模型方向,PyTorch 是当前事实标准,学了不亏。