跳到主要内容

阅读笔记 2 —— 通读全书后的四件事(主线 / 伏笔 / 切章 / 缺口)

reading-notes.md 记的是「书里说了什么」(逐章要点 + 可引短语行号,已逐条抽查核对,全部属实)。 这一份记的是读完全书才看得出来的东西:主线怎么走、哪一句是伏笔、章该怎么切、哪里缺书外来源。

写作时两份都要看:那份给素材,这份给结构。


一、全书主线:一条「容量阶梯」,顶点在第 13 章的「它不理解」

这本书表面是 TensorFlow.js 教程,实际结构是一条不断追问「模型还差什么」的阶梯。 每一章的存在理由都是「上一章的模型在某个地方不够用」。

第 1 章 人写规则认不出人脸 → 那就让机器从带标签的样例里自己找规则
↓ 找规则 = 找「更好的表示」(黑白点极坐标)
第 2 章 最小的模型:一条直线 → 梯度下降怎么把随机初值调对(反向传播单权重走查)
↓ 一条直线只有 13 个参数,拟合不了弯的关系
第 3 章 加隐藏层 + 非线性激活 → 容量从此可以往上加(701 → 3251 参数)
↓ 但输入一直是「一维数字数组」,图像的二维空间关系被扁平化毁掉了
第 4 章 卷积:局部性 + 参数共享 → 200 个参数干密集层 361 万个参数的活
↓ convnet 好,可从头训练要几十万张图,手里只有 50 张
第 5 章 迁移学习:复用别人训好的 → 截断 MobileNet 取嵌入,50 张图几秒训完
↓ 前五章的数据都是「洗干净直接能用」的,现实不是
第 6 章 数据管线:惰性流、乱序窗口 → 数据本身有偏斜/离群/缺失,先把这些查出来
↓ 数据和模型都看不见,出了问题不知道错在哪
第 7 章 可视化:画数据 + 画模型内部 → 能看见「层越深越抽象」了
↓ 看得见了,那两条曲线分叉(欠拟合/过拟合)到底怎么治
第 8 章 拟合光谱 + 通用流程 11 步 → 方法论收口。前七章的零碎技巧在这里成体系
↓ 至此所有模型对「顺序」完全无感:打乱输入顺序结果不变
第 9 章 RNN / 词嵌入 / 注意力 → 时间维度进来了
↓ 到这儿模型都只会「判断」,不会「造」
第 10 章 生成式:温度采样/VAE/GAN → 会造了
↓ 前面全靠有标签数据,可下棋没人给每一步贴标签
第 11 章 强化学习:只有奖励信号 → 标签这根拐杖也扔掉了
↓ 模型能力线到顶。剩下的是工程
第 12 章 测试 / 量化 / 部署 → 从「能跑」到「能上线」

第 13 章 ★ 真正的落点 ★
「它是向量空间之间的几何转换」——对抗样例、局部泛化、
费曼「它并不复杂,只是量大罢了」。前面十二章教你造的这个东西,
**本质上不理解任何事情**。

主线一句话: 从「人写不出规则」出发,一层层给模型加能力(非线性 → 空间 → 复用 → 时间 → 生成 → 无标签),每加一层都换一次代价(可解释性、算力、数据、训练稳定性); 加到头之后作者亲手把它拆掉,告诉你这套东西的边界在哪。

判断(我们的): 这本书的真正落点是第 13 章而不是第 12 章。第 12 章是工程收尾, 第 13 章才是「读完这本书你该信什么」。拆解的最后一章必须写第 13 章,并且要写足, 否则读者拿到的是「一本 TensorFlow.js 手册」而不是「一本讲深度学习是什么的书」。 如果错,会错在: 如果主人的用途是「查 TF.js API 怎么写」,那 12 章反而更重要 —— 但书卡 whyWeKeepIt 写的是「少数把深度学习放在 JS 生态里讲的书」,重点在「讲」不在「查」。


二、伏笔:第 N 章埋、第 M 章才揭晓(不通读根本看不出来)

这些是拆解里必须主动接上的线。原书作者自己在正文里点了一部分,另一部分他没点。

#埋在哪埋的是什么在哪揭晓书里点破了吗
101 §学习数据的表示(黑白点极坐标)「机器学习 = 搜索更好的表示」13 章「一切都是向量空间的几何转换」点了半句(13:49),没回指第 1 章
201:187「没有证据表明大脑靠梯度下降学习」别拿神经网络当大脑13 章「拟人化错误」+ 对抗样例没点破,拆解要接
301:189 脚注「第 4 章有个功能相似性的例子」感受野04 §maxPooling2d(感受野 5×5→11×11)点了(是原书少见的显式伏笔)
402 §2.1.5「欠拟合 / 过拟合」两个词只给了定义,没给判据08 章整章(两条曲线分叉才是判据)点了(02:223 说「本书会介绍」)
503 §3.1.2 超参数清单里的「正则化因子」「丢弃率」两个还没讲的武器04 §dropout、08 §L2 正则点了(3:205、3:207 直接写了章号)
603 §one-hot「第 9 章会讲它也适用于输入」one-hot 当输入09 §文本向量化(1 万词表 → 18 万个数)点了
704 §参数共享(空间平移不变性)「同一组权重扫过整个输入」这个想法09 §RNN 参数共享(时间平移不变性)点了(9:97 明确类比 conv2d)
804 §时频谱「用 convnet 处理音频」二维卷积能吃非图像09 §1D convnet 处理文本(0.91,比 LSTM 快 6 倍)没点破,是同一个想法的第三次出现
905 §嵌入(截断 MobileNet 出 1.25 万维)「取中间层当低维表示」09 §词嵌入(500×128=6.4 万 vs one-hot 500 万)点了半句(5:41 预告词嵌入)
1005 §自定义损失(形状标签 ×224 平衡两路误差)多任务损失要配平10 §VAE(重建损失 × originalDim + KL 散度)、信息栏 5-3(SSD 加权双损失)没点破,是同一个手法
1105 §KNN 信息栏非神经网络方法13 §局部泛化 vs 极限泛化没点破
1206 §加州房价按经度排序的事故「数据不独立」会毁掉训练08 §时序数据的验证集必须在训练集时段之后没点破,是同一个坑的两面
1307 §CAM 热图(类别概率对卷积层求梯度)「对输入求梯度」这个动作07 §梯度上升画过滤器、13 §对抗样例(大熊猫 + 长臂猿梯度)没点破 —— 这是全书最漂亮的一条暗线:同一个 tf.grad,一次用来解释模型,一次用来欺骗模型
1409 §注意力(2014—2015 的突破,GNMT 同架构)注意力机制书出版后 → Transformer / LLM(书里没有)书写于 2019 年 9 月,这是最大的时代缺口
1510 §温度采样(log 概率 / T 再采样)「温度」这个旋钮今天所有 LLM API 都有 temperature(书里没有)书里只说名字来自热力学
1602 §2.1.1「先获取数据 → 转张量 → 建模 → 训练 → 评估」这张流程图通用流程的雏形(5 步)08 §通用流程 8 步、13 §通用流程 11 步点了(说是「反复出现的通用模式」)

三、章该怎么切:现有大纲的问题,和我的修改建议

notes/01-outline.md 是上一会话写的,切成 16 章。我通读之后认为大方向对、有三处要改。

现有大纲的映射(原书 13 章 + 2 附录 → 16 章)

原书 1 → 01 原书 8 → 10
原书 2 → 02(2.1-2.2) + 03(2.3-2.4) 原书 9 → 11(9.1) + 12(9.2-9.3)
原书 3 → 04(3.1) + 05(3.2-3.3) 原书 10 → 13
原书 4 → 06 原书 11 → 14
原书 5 → 07 原书 12 → 15
原书 6 → 08 原书 13 → 16
原书 7 → 09 附录 A/B → 打散进 02/06/15

我认可的地方

  • 原书第 2、3、9 章各拆两章是对的,它们都是「一章塞了两件事」:
    • 第 2 章 = 单特征全流程 + 多特征工作流(标准化/基准/三件套),后者的新词密度高得多;
    • 第 3 章 = 非线性(容量) + 分类(度量与损失),前者讲「模型能表示什么」,后者讲「怎么算对错」,是两件事;
    • 第 9 章 = 序列(RNN 家族) + 文本(向量化/嵌入/注意力),第二半的新词密度是全书最高的。
  • 附录 B 不单独成章是对的 —— 它是 API 手册,拆开塞进用得到的地方才有用。
  • 第 13 章单独成一章(16) 是对的,理由见上面「主线」。

三处我建议改

改动一:第 06 章(convnet)太挤,建议把「Node.js 训练 + 模型存取」整节移出去。 现有 06 要装:NHWC → 卷积 → 池化 → 层次特征 → 训练对照实验 → tfjs-node 安装与 GPU → 加强版模型 → dropout → save/load → 时频谱 → 音频 convnet。十一个承重块,新词至少 15 个。 按标准「配额落在节上,节可以随便拆」,理论上拆节就行;但「装 CUDA」和「卷积核怎么滑」 是两个完全不同的心智模式,读者在这里会断线。 → 建议:06 只讲卷积本身 + MNIST + 音频(卷积这个想法能吃图也能吃声,是一条完整链); 把 tfjs-node / GPU / model.save-load 挪进 15(部署)那一章,那里本来就在讲运行环境。 原书把它放在第 4 章只是因为「这时候模型第一次训不动了」,不是因为它属于卷积。

改动二:第 09 章(可视化)应该往后挪,或者与 10 合并考虑。 原书第 7 章(可视化)夹在第 6 章(数据)和第 8 章(拟合)之间,位置其实很别扭: 它的前半(画数据的五种图)属于数据章的延续,后半(看模型内部激活、梯度上升、CAM) 需要读者已经懂 convnet + 梯度,而且它的真正用途要到 13 章的对抗样例才收口。 → 建议保留独立成章,但在拆解里把它明确定位成「打开黑箱的三把钥匙」, 并在章末显式写「第 16 章会用同一把钥匙(对输入求梯度)去骗模型」——把伏笔 #13 接上。

改动三:第 03 章(多特征工作流)与第 10 章(拟合与流程)有重叠,要划清界线。 03 讲「基准估计 + 训练/验证/测试三件套」,10 讲「通用流程 8 步 + 调参纪律」, 两者都在讲「怎么算模型好不好」。现有大纲的自查里提到了这一点但界线不够硬。 → 建议写死:03 讲「一次评估怎么做才不骗自己」(基准、三件套、MSE vs MAE 的选择), 10 讲「反复评估时怎么不骗自己」(曲线分叉的读法、正则化武器、对验证集过拟合、流程收口)。

切章的依据(新词密度,不是字数)

reading-notes.md 数下来,几处新词最密的地方正好是建议拆开的位置:

位置一口气涌入的新词
原书 2.3(多特征)标准化/z-score、广播、按轴归约、基准估计、MSE vs MAE、验证集、回调 —— 7 个
原书 3.2(二分类)sigmoid 输出层、TP/FP/TN/FN、混淆矩阵、准确率/精确率/召回率、ROC、FPR/TPR、AUC、阶跃函数零梯度、二元交叉熵 —— 11 个
原书 9.2-9.3(文本)one-hot/multi-hot、OOV、词嵌入、padSequences、conv1d、globalMaxPool、seq2seq、编码器-解码器、注意力、集束搜索 —— 10 个
原书 10(生成式)判别式/生成式、香农熵、温度、自编码器、本征空间、VAE、重参数化、KL 散度、GAN、leakyReLU、反卷积、ACGAN —— 12 个

第 10 章(生成式)一章挤了 12 个,是全书密度最高的一章。13-generative 那一章要按节狠拆 (文本生成 / VAE / GAN 三节各自独立,每节自带走查),不要三件事混着讲。


四、书没讲透的缺口:要补的外部来源清单

书写于 2019 年 9 月(前言落款,05-fm.txt:21),中文版 2021 年出版。 到今天(2026)差了七年,四类缺口:

A. 书里用了却没交代来历的

缺口书里怎么说的要补什么优先级
注意力机制09 §9.3 说「2014—2015 年的突破」,给了 GNMT 的引用,没提 Transformer2017 "Attention Is All You Need" —— 注意力从「RNN 的补丁」变成「整个架构」。这是全书最大的一处「差一步」最高
ImageNet 竞赛01 只说错误率 25%→5%AlexNet(2012)是转折点本身,书里连名字都没提
dropout04 只给了 Hinton 的银行柜员故事Srivastava et al. 2014 原论文
批标准化01:261 列了名字,08 表 8-1 列了 API,全书没讲机制Ioffe & Szegedy 2015
ReLU / Glorot 初始化 / Adam01:255-259 只列名字至少给 Adam 一个出处(Kingma & Ba 2014)
MobileNet05 只给了 v1 论文引用,当工具用深度可分离卷积是它省参数的原因,书里 13 章才提一句
贝尔曼方程11:422 脚注给了「贝尔曼 1957」够用,不必补

B. 书出版后被修正 / 被超越的说法

书里的说法今天的实情怎么标
09 §注意力是 seq2seq 的增强件Transformer 把 RNN 整个换掉了;今天没人用 LSTM 做机器翻译补充(不在书里)
10 §字符级 LSTM 生成文本,损失 1.4~1.5 逼近香农 1.3 位同一件事今天叫「语言模型」,规模差几个数量级;温度采样这个旋钮原封不动活到了今天的 LLM API补充(不在书里)
01 §浏览器推断模型上限约 100MBWebGPU 已经取代 WebGL 成为主力后端(书里完全没有 WebGPU)补充(不在书里),需要核
12 §权重量化 8/16 位今天 4 位甚至更低的量化是常规操作补充(不在书里)
13 §六个趋势预测(无监督/硬件/AutoML/模型复用/新领域/边缘)逐条对照 2026 年,这是拆解最后一章最有价值的一段补充(不在书里)
05 §迁移学习「复用特征提取层」今天更常见的是「拿一个基础模型 + 少量样例做提示/微调」,思路一脉相承但载体变了补充(不在书里)

C. 书里的推测,后来有了证据

书里的推测后来
13 §「无监督/半监督学习会是下一步」自监督预训练成了主流路线 —— 作者押对了
13 §「模型复用会像软件库一样」今天的模型中心/模型市场就是这件事
01 §「JS 生态会长起来」TF.js 至今仍在维护,但 JS 侧的重心从「训练」转向「推断 + 调用远端模型」

D. 书默认读者懂、我们的读者不懂的(补通用知识,不必上网)

微积分的导数/链式法则、矩阵乘法、标准差、自然对数、概率、傅里叶变换、 CSV、npm/yarn、Promise/async-await、WebGL、GPU 与 CPU 的区别。 这些不查外部来源,就地讲清即可,但要按「先定力气再选解释法」分档 —— 其中链式法则梯度是「读岔了整章就塌」那一档,要单开一节从现象讲起。

★ 已翻过书架:大部分缺口不必上网,同一个书架上就有 ★

这一步做完了,结论改变了上面的优先级。相关拆解全都在 ai-book-reference(就是本书架)上, 而且都是手写总纲、章数齐全的成品:

要补什么引哪一篇(同书架)章数
Transformer / 注意力(伏笔 #14,最大缺口)deep-learning-with-python-2e §11-text-transformer14 章全
注意力拆到可手算build-large-language-model §03-attention-core10 章全
注意力块的实现building-large-language-models-from-scratch §07-attention-block13 章全
Transformer 各部件cong-ling-gou-jian-da-mo-xing §01-transformer-parts12 章全
反向传播 / 泛化 / 优化deep-learning-with-python-2e §03-backpropagation§06-generalization
强化学习深究(贝尔曼、DQN)reinforcement-learning-sutton-bartoan-introduction-to-deep-reinforcement-learning16 / 14 章全
卷积、注意力的通用机制nndl-2e §13-convolution§20-attention38 章全

★ 最重要的一条:deep-learning-with-python-2e 是这本书的母本。★ 本书致谢原话:「本书整体结构得益于弗朗索瓦·肖莱所著的《Python深度学习》, 不同之处就是将后者中的代码用 JavaScript 语言进行重写」(08-fm.txt:5), 而肖莱本人就是本书第四作者。两本书的拆解必须分工,不能各讲一遍同样的东西。 分工表已写进书卡 aiRef/sources/deep-learning-with-javascript.md 的「为什么收它」一节。

同书架互引的写法(照现成例子,不自创):

[^N]: 补充(不在书里,依据我们的 ai-book-reference 书架):<说法>。
依据: book=deep-learning-with-python-2e §11-text-transformer 事实=<一句话>。

(另一种等价写法是 shelf=ai-book-reference/<id>#<章文件名>,两种 book-verify 都认。 现成例子见 docs/learn-mcp-typescript/08-sampling.md:231docs/an-introduction-to-deep-reinforcement-learning/12-physics-nns-and-architectures.md:222。)

真正还需要联网的,只剩三条

按「一次只抓一个、同一地址失败两次立刻换源」的规矩排队:

  1. WebGPU 在 TensorFlow.js 里的现状 —— 书里的浏览器后端只有 WebGL。影响第 01 章「免费用上用户的 GPU」和部署那一章的「今天还成立吗」。书架上查不到,必须外部核。
  2. 第 13 章六个预测的逐条现状(无监督/硬件/AutoML/模型复用/新领域/边缘)—— 最后一章的压轴。前四条可以靠书架内的书佐证,后两条要外部。
  3. AlexNet(2012)与 ImageNet 竞赛年表 —— 第 01 章三力框架的实证。可降级成通用知识,不值得为它冒挂死的风险。

其余(Adam、dropout、批标准化、MobileNet 的深度可分离卷积)全部走书架或降级成 「补充(不在书里,来自通用知识)」,不必联网


五、已写的第 01 章能不能用:能用,接着写;但要补三处

我逐字读过 01-revolution-and-javascript.md 并对着原书核过。结论是口径可用,不必重写。 判据是标准里那句「结构错了,改措辞救不回来」—— 它的结构没错,错的是深度,而深度是可以往上加的。

已经对的(照抄,不要动)

  • 先现象后原理 ✓ 开篇是「你在写一个网站,用户可以上传照片」,不是「神经网络通过反向传播……」;
  • 节序对得上原书,也对得上全书主线 ✓ 现象 → 词的关系 → 学的是表示 → 为什么是现在 → 为什么浏览器 → 工具家谱 → 可带走;
  • 判断块带「如果错,会错在」 ✓(第 4 节末尾);
  • 利益相关写明了 ✓ 第 5 节开头点出作者就是 TensorFlow.js 开发者;
  • 出处纪律 ✓ 62 处出处,book-verify 现在全绿(我修了一处行号漂移:199→201);
  • ASCII 图配图说 ✓ 三张图都有「图说:」行;
  • 数字带参照物 ✓「GPU 是 CPU 的上百倍」「25% 降到 5%」「每帧 150KB / 500ms」都有对照。

必须补的三处(按轻重排)

① 缺一条带真数的主走查 —— 这是最重的一处。 第 1 节末尾写着「这张『人脸照片』的走查是本章的主线」,但它只是一条叙述线索,不是走查。 标准里红线二加强的判据写死了:「每一步旁边有具体的数、字串或状态」,只描述步骤不算数。 现在的文本从头到尾没有一个中间结果。 → 怎么补:拿一张具体的照片走完 像素 → 层 → 权重 → 输出概率 这一条,每步给出形状和数 (例如 [224,224,3] → 第一层输出 → …… → 0.93),并当场标明「这些数是为演示编的,不是书里的」。 原书第 1 章本身不给数,所以这条走查必须我们自己造,并且必须标清楚是造的。

② 第 2 节末尾一段塞了五个新词,一个都没解释。 原文:「朴素贝叶斯、逻辑回归、决策树、随机森林、梯度提升机这些都是不用神经网络的机器学习技术」 (01:86)。段级配额上限是 1 个,这里 5 个;而且五个都没解释,直接撞红线三。 → 怎么补:不是删掉它们(它们出门会撞见,必须留名),而是拆成表格,每个给一句「它是干什么的」。 原书信息栏 1-1 本来就给了每个一段解释(11-ch01-1-javascript.txt:201-209),照着改写即可 —— 素材现成。

③ 两处把承重词推给了「后面会讲」。

  • 01:67-68「大脑并不靠梯度下降学习(梯度下降是什么,第 02 章会从头讲)」—— 这句话拿梯度下降下了一个实质判断,读者却不知道它是什么,判断就跟不上;
  • 01:140-141「批标准化、残差连接等技巧……这些词你现在不用记」+ ReLU / Glorot / RMSProp / ADAM 一串名字。

标准写死了「不许推给后面会讲」。 → 怎么补:梯度下降在本章给一句能顶用的话(「看答案差多远,再把每个数朝差得少一点的方向挪一丁点」), 正式机制仍留给第 02 章;那一串算法名改成表格,每个一句「它解决了什么」,不要求读者记。

顺带

  • 第 01 章没提这本书是《Python深度学习》的 JS 重写。这是影响读者怎么读这本书的背景(标准说「影响就留」), 建议补进第 6 节的家谱里 —— 素材在 08-fm.txt:504-fm.txt:11

六、检查器现在报的东西,哪些是误报(原样报上,没有动脚本、没有动豁免账)

book-jargon:报 39 处,我判断约 15 处是硬误报、9 处是软误报、约 15 处是真的

硬误报 15 处 —— 全部落在 index.md,而 index.mdbook-build 生成的壳,不是我们写的正文。 它们无一例外来自那张自动生成的「结构(29 段)」表格,表格里是原书的章节标题:

报的词实际那一行是什么
神经网络 index.md:77| 16 | 第 5 章 迁移学习:复用预训练的神经网络 | — | 45.4k |
过拟合 / 欠拟合 index.md:81| 20 | 第 8 章 欠拟合、过拟合,以及机器学习的通用流程 | …
强化学习 index.md:84| 23 | 第 11 章 深度强化学习的基本原理 | …
生成式 index.md:83| 22 | 第 10 章 生成式深度学习 | …
索引 / 元数据 index.md:32(还没写。拆解是这本书对我们的真正产出——底下的元数据只是索引。)

要求原书章名里的词「首次出现时附近有解释」是不成立的 —— 那是书的目录,不是我们的散文。 这 15 处会在总纲改成 handwritten: true 的手写版之后自动消失,不需要为它们改任何东西

软误报 9 处 —— 中文没有词边界,检查器切出了子串;或者命中的是日常义。

报的词实际文本为什么是误报
对数 01:72「别把『深』解读成对数据的深刻理解」「对数据」里切出「对数」
01:140「2014–2016 年又有标准化」「批标准化」里切出「批」
GPU 01:127「这种活恰好是显卡(GPU)的看家本领」同句就写着「显卡」,已经解释了
参数 01:27「一堆『随意的逻辑和站不住脚的参数』」引原书的话,是日常义(调参),不是神经网络的权重参数
单元 01:128「几千个小计算单元同时开工」日常义(硬件单元),不是密集层的 units

另有 服务器 / 客户端 / 开源 / 接口 几个,是通用计算机词而非本行术语,属于边界模糊、可争议, 不算硬误报 —— 真讲给零基础的人时给一句也不亏。

真的约 15 处:梯度下降、反向传播、贝叶斯、逻辑回归、决策树、梯度提升、残差、序列化、 API、并行、算力、延迟、带宽、指标 —— 处理办法见上一节第 ②③ 条。

book-dodged:报 67 个「躲词」—— 现阶段整份都是误报

它报的是「原书反复讲、我们一次没提」的词:损失(414 次)、维度(219)、卷积(178)、 RNN(160)、量化(146)、嵌入(126)、智能体(125)、超参数(96)…… 这些词属于第 02~16 章,而现在只写了第 01 章。 这个检查器拿「整本书的拆解」当分母,分子却只有 1/16,报出来的是进度,不是缺陷。 → 等 16 章写完再跑这一项才有意义。 现在不必也不该为它做任何事。

book-jargon --quota:段级超额 10 处、节级超额 3 处

这一项是真的,而且和上一节第 ② 条指的是同一批地方(第 2 节的五个算法名、第 4 节的一串算法名)。 补完那两处,段级超额会掉掉大半。

book-health / book-verify

  • book-health:✓ OK,500k 字,无「可疑」无「坏」 —— 抽查过十余处正文,清洗质量很好,可以放心写。
  • book-verify:原本 1 处对不上(text/11-ch01-1-javascript.txt:199 → 实际在 :201), 我已跑 --fix 修好,现在 62 处出处 0 处对不上。

一条给写作者的提醒

标准里那句「那是改尺子不是改书」在这本书上尤其要守住: book-dodged 报的 67 个词里有 损失 / 卷积 / 嵌入 / 智能体 这种全书承重词, 它们的正确归宿是被真正讲透,不是被写进豁免账。 等后面 15 章写完,这个数应该自己降下去; 如果那时还剩很多,说明是真躲了,不是误报。