跳到主要内容

Deep Learning with PyTorch, Second Edition — 书籍拆解

1. 30 秒导读

这本书回答一个问题:用 PyTorch 做深度学习——让机器看大量例子、自己调整内部的数、直到能模仿例子里的规律的那类做法——从零到上线,每一步到底在干什么?

它的价值不在功能清单(官方文档做得更好),而在两件别处难找的东西:一是把「学习」这件事拆到最底——用一支刻度单位不明的测温表,让你亲手把「机器怎么调自己内部的数」的每个零件摸一遍;二是拿一个真实的肺癌检测项目,演示教科书不讲的那些:脏数据、会骗人的成绩数字、两类悬殊的样本、训完怎么变成别人能用的服务。四位作者里三位是 PyTorch 核心开发者——这是库维护者写的库教材,惯例和坑都是一手口径。

原书 17 个正文章,我们拆成 16 章。读完这份拆解,不必再看原书。

2. 这是谁在什么时候写的

2026 年出版的第二版(第一版 2020 年)。作者四人:Howard Huang(Meta PyTorch 团队,第二版新增的主笔)、Luca Antiga 与 Eli Stevens(第一版主笔,都是生物医学工程背景的连续创业者)、Thomas Viehmann(PyTorch 核心开发者,数学博士)。

利益相关:有,而且应该摊开说。 四人中至少三人是 PyTorch 的核心贡献者——书里对 PyTorch 的每个「设计得好」的夸奖,都是作者在夸自己的作品。这不妨碍它成为最好的 PyTorch 教材(谁比作者更懂库的脾性?),但涉及框架对比(第 01 章的生态史)时,记得这个立场。

第二版相对第一版的变化本身是一张时代地图:让机器生成文字和图像的两套新结构(第 10–11 章)从「新玩意」变成正章;肺癌项目的「让机器自己标出可疑位置」环节,从手写小网络换成「拿现成大模型造标签、再教一个小网络」;「多张显卡一起开工」和「把训好的东西交给别人用」各添了一整章。2016 到 2026 这十年深度学习干了什么,看目录就知道大半。

3. 全书一条主线

「智能」可以换成一个完全机械的流程:把问题变成数字,定义一个给错误打分的办法,再把每个数朝「分高一点」的方向挪一小步,重复到挪不动为止。

这条线分三段走,正好对上全书的三个部分。三段之间各有一次转折:第一次是「机器学会了,可它认不出挪了一格的同一个东西」,第二次是「这东西终于好使了,可真项目里出事的从来不是它」。

① 学习是怎么被机械化的(第 02–06 章)

第一步是数字。世界不是数字,所以前半本书都在做「装」的工作:图像、CT、表格、按时间排列的读数、文字,各有各的装法和陷阱(第 02–03 章)。装数字的容器有个名字,叫张量——一块连续排好的数,配一份「形状说明」;全书所有计算都在这上面做。

装进去之后,学习的机制朴素得出奇:先造一个带着一堆可以调的数的计算结构——这种东西就叫模型;再看它的答案离正确答案差多远,把每个数朝「差得少一点」的方向挪一丁点。

「朝哪个方向挪、挪多少」不是拍脑袋:每个数对错误的影响都能算出来,按算出来的方向小步挪,这套做法叫梯度下降。书里用 11 对测温表读数走完全程,重复 5000 遍之后,那几个数自己停在了华氏转摄氏的物理定律旁边——没有人告诉它定律,定律是试出来的副产品(第 04 章)。

这个「反复出题、反复挪」的完整过程,就叫训练——本书从头到尾都在说这两个字。

手工算「每个数对错误的影响」撑不起大结构,于是要自动化:让数字自己记住算过的每一步,一键反推出所有数该往哪挪(第 05 章)。

有了自动化,结构本身成了主战场。那台「可以调的计算结构」的通用形态,是一堆按层排开的简单计算,它叫神经网络(第 06 章)。

② 结构决定命运:图像与生成(第 07–11 章)

第一次转折在这里。最朴素的连法在图像上暴露出一个结构性残疾:同一架飞机往旁边挪一格,它就认不出来了。

这个残疾逼出一种把「只看局部」和「位置换了也一样」写进骨子里的连法:让同一小块权重(就是模型里那些可以调的数)滑过整张图,滑到哪儿就在哪儿做同一件事。

图案挪到哪儿,那一小块权重就在哪儿点亮——所以位置换了也照样认得出。这种连法叫卷积(第 07–08 章)。

之后是网络该多宽、多深,以及各种「别让它把训练数据背下来」的旋钮(第 09 章)——「背下来了、遇到新题就露馅」这件事,叫过拟合;它是本书后半段反复出现的那个敌人。

同一条「结构决定命运」的线,在生成侧再演两遍:让一段文字里的每个小块自己决定该回头看前面哪几个小块,解决了长文里前后照应的问题(第 10 章);把「生成图像」换成「学着把一团随机数一步步擦干净」这个可以训练的反问题,解决了图像没法一个一个往外吐的问题(第 11 章)。

③ 真项目里,模型是最省心的部分(第 12–16 章)

第二次转折,也是全书最反直觉的一句:后半本书换一个命题——真项目里,模型是最省心的部分。 肺癌检测那五章把它坐实。

第一关是数据:一张 CT 里 99.9999% 的小块跟答案无关,所以整件事被拆成「先找可疑点、再逐个判」的流水线;而两份官方给的答案文件,坐标彼此对不齐,得自己做模糊匹配缝上(第 12 章)。

然后是第一仗的败报:第一个训练周期报出 99.7% 的正确率——实际上模型把所有输入都判成了「没事」,136 个真结节一个没抓到(第 13 章)。

总正确率在两类样本数量悬殊时是个骗子,得换成两种分开的成绩才看得见真相。一种管漏:真结节里抓住了多少,这个比例叫召回率

另一种管冤:报警的里面有多少是真的,这个比例叫精确率

成绩数字换对了,病根才露出来:阴性样本比阳性多 400 倍,调整的力道几乎全被阴性那一边攥着。把两类样本掰均、再给训练样本做随机变形防止它背题,模型才真正学会(第 14 章)。

最后两步收口:那份「可疑点清单」本身也改由模型生成(第 15 章);模型走出笔记本——摊到多张显卡上训练,再变成别人能调用的服务(第 16 章)。

读完全书回看:前半本教的每个机制,都在这个项目里被真实地用坏过一次、又修好一次。

4. 章节地图

这张表不用记任何术语——每章名字后面,写的是「读完你能回答什么问题」。

读完你就能回答
01 范式转移:下载就能用的模型深度学习到底是什么?网上下载的模型为什么拿来就能认狗?
02 一切从张量开始数据在机器里到底怎么摆放?为什么转置一下不用复制数据?
03 把真实世界装进张量图像、表格、按时间排列的读数、文字,各自怎么变成能算的数?
04 学习的机制「训练」到底在干什么?为什么调过头会越学越差?
05 自动求导、更新策略与过拟合手工调数太累,怎么让机器自己算?怎么知道它是真会了还是背下来了?
06 神经网络登场一层一层的简单计算,凭什么能拟合任意曲线?
07 鸟与飞机分类问题的答案怎么变成概率(0 到 1 之间、可以当「有多大把握」读的数)?81% 的准确率为啥是背题?
08 卷积为什么飞机挪一格,全连接(每个输入都和每个中间节点连着的最朴素连法)就抓瞎,卷积不会?
09 设计空间网络加宽、加深、加约束,各自的代价是什么?
10 文本生成:让机器接着往下写机器是怎么学会「接着往下写」的?它怎么决定该回头看前面的哪些部分?
11 扩散模型图像不能一个个吐,怎么生成?为什么生成一张图那么慢?
12 肺癌项目(上)为什么不能一把梭?乱七八糟的原始数据怎么变成训练样本?
13 训练循环与 99.7% 的假象真实项目的训练代码长什么样?99.7% 的正确率怎么会是骗局?
14 精确率、召回率与增广总正确率骗人时换什么?样本悬殊 400:1 怎么救?
15 分割:让模型自己找候选请人一张张圈出答案太贵怎么办?怎么让模型自己找出可疑位置?
16 从一张卡到上线一张显卡装不下怎么办?训完的模型怎么变成服务?

推荐顺序: 基础线 01–09 按顺序读,别跳;只想看机器怎么生成文字和图像,读完 06 直接切 10–11;项目线 12–16 是一个连续故事,基础线读完再来。

5. 覆盖什么 / 不覆盖什么

覆盖(原书 17 个正文章全覆盖):

  • 从数字的摆放、到「学习」的机械化、再到图像与文本的专用结构,每个机制都有从零搭起来的完整走查;
  • 一个真实的肺癌 CT 检测项目,从脏数据到能用的筛查器,全程五章;
  • 多张显卡训练与上线部署的工程收尾。

不覆盖(别指望在这本里找):

缺什么说明
强化学习(从奖励反馈里学做法的另一大家族)原书一个字没提——「从反馈里学」的另一大家族不在本书
把大模型调成听话助手书止于基础结构,后来那套「让人打分再调」的做法不在
临床可用的医学影像作者明说教学项目,结果不能用于临床
部署生态的细节只给各条路的入口,不比较云厂商方案
原书练习题解答我们没拆

6. 我们的判断

判断(我们的,不是书里的): 这本书对入门者的最大贡献不是 PyTorch 教学,而是第 13–14 章那次「99.7% 假象」的完整现场——故意让读者先被骗、再拆穿。多数教材直接给正确的衡量办法,这本书给了「错误的衡量办法长什么样」的体感,这是看完忘不掉的那种教训。 如果错,会错在: 第二版新增的「生成文字和图像」与「多卡训练」章节可能才是多数读者买这版的理由,基础章的分量在我们(拆书人)眼里被放大了。

判断(我们的,不是书里的): 第 15 章「现成大模型造标签 + 教小模型」是全书最有时代感的一章——它示范的手法,比书里任何一个具体模型都更可能长期有用。 如果错,会错在: 现成大模型在医学影像上的水土不服可能让这个特定案例很快被原生三维方案取代,手法通用、案例短命。

判断(我们的,不是书里的): 作者立场(库维护者写库教材)对内容的影响是正向的:书中大量「为什么这么设计」的内情(默认初始化的缺陷、旧编译路线的失败史)在第三方教材里看不到;代价是框架选择的讨论偏弱,竞争框架只各给一段。 如果错,会错在: 我们没通读竞争框架的教材,「内情别处看不到」这一半无法严格坐实。

7. 许诺兑现表

正文里每一处往后指的话——「第 NN 章讲」「下一章」「后面会讲」「留到后面」——逐条记在这里,并逐行核过「那一章讲的是不是许诺的那件事」。往回指的话(「第 04 章我们手工推过」)不记:那是回顾,不是欠账。

第 3 节那三段里的「(第 NN 章)」不单列——它们是主线的路标,一一对应第 4 节章节地图的同一行。 这一栏「许诺了什么」一律用大白话写,因为它的用途就是让你不打开那一章也能判断「这句话到底兑现了没有」。

许诺在哪许诺了什么应兑现在哪
01 §2那台「逼近机器」内部到底长什么样01 说的第 06 章 → 06 §1–3
01 §3 主走查(上)「一串排成网格的小数」在机器里是怎么摆的02 §2
01 §3 主走查(下)一排分数怎么变成「加起来是 1」的把握度,算式长什么样07 §2([1,2,3] 变成 [0.090, 0.245, 0.665])
01 §3「往图里一点点加乱数、再学着倒过来擦掉」到底怎么做到11 §4–6
01 §3机器怎么做到「一次写一个字往下接」10 §1–2
01 §3「把词变成数」怎么变03 §5
01 §4机器怎么自己算出每个可调的数该往哪边挪05 §2
01 §4torch.compile 是什么、能快多少16 §7(快 20%–200%,偶尔更慢)
01 §6一只猫走进「鸟还是飞机」的镜头会怎样09 §7(它会自信地答「鸟」)
02 §2「改一份读法说明,原来那块数跟着变」什么时候反而是好事03 §1 走查第 ② 步(挪通道,一个数都不搬)
02 §2view 在哪儿真正派上用场03 §4(17520 行按天切成 730×24×17)
02 §3一个两个数的小公式怎么对一万条数据同时算04 §2–3
02 §5「模型和数据必须住在同一块设备上」那两行代码长什么样08 §6
03 §2不把数缩到同一量程会出什么事04 §4–5(步子大了直接飞掉;两个数的变化速度差 50 倍)
03 §2那个五维形状在真项目里怎么用12 §4(从一个坐标切出 32×48×48 的小方块)
03 §4「谁先谁后」这件事怎么告诉机器10 §5(给位置也学一份数)· §4(不许看后面)
03 §5「拿别人训好的接着训」在真项目里怎么做15 §3(原来那套数全留着,只换最后几层重训)
03 §7真实系统怎么把一串字切开、切出来什么10 §6(Impossible 被切成四段;在《奥德赛》全文上训一个切法)
03 §7「有先后的数据,先后怎么用」还欠着10 §4–5
03 §7医学影像那些工程细节12 §2(两套坐标、格子不是正方体)
04 §引言「靠回头看前文往下写」的那种结构内部长什么样10 §5(它由四个零件拼成)
04 §1「留一手数据不参与调整」怎么落地05 §4(80/20 切开,加一张四格诊断图)
04 §1「说不出为什么是这个数」这个代价有多大06 §2(单个可调的数没有含义,只在集体行动里才算数)
04 §3手推一页纸的求导怎么变成一句代码05 §2(loss.backward())
04 §7分类为什么不能用「差多少的平方」来打分07 §3(换成只奖励「把正确答案抬高」的那种打分)
04 §8「有唯一解、保证走得到」这个前提没了会怎样06 §2(错误面不再是一只碗)
04 §8Adam 是什么、比手写的那套强在哪05 §3(每个数各配一个会自动变的步长)
04 §8手工求导撑不住之后怎么办05 §1–2
05 §3「每次只喂一小撮」带来的抖动有什么用07 §4(抖动帮它跳出小坑)
05 §5那张四格诊断图在真项目里怎么用14 §5(84.6% 一路滑到 72.1% 的一升一降)
06 §3为什么第 0 维非留给「一次算一组」不可09 §4 走查第三步(有的层要拿这一组的平均数和波动来算)
06 §5「网络越大越好」错在哪09 §2 与 §5(加宽、加深各自的代价)
06 §6「模型、打分、更新策略三件套各自可换」这结构撑得到最后吗16 §4(多张卡的训练循环里还是它)
07 §4「把训练图随机改一改」具体怎么改、有没有用14 §5(五种改法,外加一条关于存盘顺序的死规矩)
07 §4有没有一种结构天生就认得挪了位置的同一个东西08 §2(同一小块数滑过整张图)
07 §6「鸟在图的哪个位置」怎么答15 §1(逐个像素给答案)
08 §引言这一章的东西在真项目里怎么用13 §2(换成三维版)· 15 §3(用来找位置)
08 §4「给信号留一条近路」的那种连法长什么样09 §5 走查第四步(8 个数原样加回去;求导时白得一个 +1)
08 §8卷积不解决的那件事是什么09 §7(没见过的东西照样自信乱答)
09 §4忘了切换模式会怎样、真项目里这行写在哪13 §3(跑验收那一段雷打不动的第一行)
09 §4「每轮都看到略不同的版本」这一招还会在哪出现14 §5(让模型想背也背不下)
09 §7「框出它在哪」谁来做15 §1
10 §8「摊到很多张卡上一起训」那一半16 §2–5
12 §1三步流水线的第 ② 步谁来做15 §3(先用大模型造答案,再教一个小模型)
12 §5「数据的活占大头」到底有多夸张13 §2(到这里才第一次动手设计模型)
12 §6只做平面切片要付什么代价15 §3(厚度不一被忽略;上下相邻的连续性整条丢掉)
13 §499.7% 为什么会塌成那样14 §4(400:1 的三笔账;平均过 15 组才轮到 1 个真结节)
13 §60.5 那条线本身能不能调14 §2(它是「别漏」和「别冤」的跷跷板)
13 §6跨机器怎么训16 §4(三张卡的一次完整来回)
13 §6作者早知道会失败,那他接着说什么14 §3(换一套成绩单重读同一份记录,A+ 当场变零分)