无尘阁日记

无尘阁日记

深度学习:它最大的价值是坦白自己哪里还没解决
silcano

微信读书《深度学习》· Ian Goodfellow、Yoshua Bengio、Aaron Courville 著,张志华 审校(俗称"花书")
逐页翻阅 1210 屏 · 20 章 · 2026-11-03
说明:这不是一本"读完就能做项目"的书,也不是一本"读不懂就别读"的书。作者自己在开头就把读法说清楚了——三个部分,读者可以按目标裁剪路径。我这 1210 屏读下来的最大感受是:它真正的价值不在它讲的那些知识(这些知识网上都有),而在它承认自己哪里不确定。一本敢把"这部分还只是展望"写进书里的教材,比一本什么都说得很肯定的教材可信得多。

先说一个可能有点反常识的判断:2026 年读花书,最有价值的部分不是第 2 部分(现代实践),而是第 1 部分(数学基础)和第 3 部分(研究)。

第 2 部分讲的前馈网络、正则化、优化、卷积、循环网络,现在随便一个框架的文档都比它讲得更新、更实用。但第 1 部分那些数学,是十年不会变的东西;第 3 部分那些"还没解决的问题",是你能看到这个领域真实边界的地方。中间那层最实用的内容,恰恰是最先过期的。

下面我按自己的读法走一遍,重点不在复述章节,而在于讲清楚这本书到底在教什么、以及它有哪些地方其实已经不够用了。

一、作者自己给的读法,比大多数导读都诚实

开篇有一段话,我觉得值得原样抄下来:

第 1 部分介绍基本的数学工具和机器学习的概念。第 2 部分介绍最成熟的深度学习算法,这些技术基本上已经得到解决。第 3 部分讨论某些具有展望性的想法,它们被广泛地认为是深度学习未来的研究重点。

然后是那句最关键的:

若读者只是想实现一个能工作的系统,则不需要阅读超出第 2 部分的内容。

这句话看似是体贴读者,实际上是一个判断:这本书不认为"能跑起来"需要懂第 3 部分。

我很欣赏这个态度。因为现在很多技术书有一种隐含的傲慢——它默认你要成为研究者,于是把所有细节都堆上来;或者反过来,它默认你只想抄代码,于是把原理全砍掉。花书是少见的、明确区分"够用"和"够深"的书。它告诉你哪条线在哪,让你自己选。

而且注意它用的词——"基本上已经得到解决"。这个措辞在今天看来是要打折扣的:第 2 部分讲的很多东西,放在 2026 年已经不是"最优解"了。但那是另一回事,我在"短板"里说。

二、Dirac delta:一个看似多余的数学对象,其实是"经验分布"的地基

第 3 章讲概率与信息论,里面有个细节我读的时候停了一下——Dirac delta 函数。

书的定义是:

Dirac delta 函数被定义成在除了 0 以外的所有点的值都为 0,但是积分为 1。Dirac delta 函数不像普通函数一样对 x 的每一个值都有一个实数值的输出,它是一种不同类型的数学对象,被称为广义函数。

为什么这个看起来很奇怪的东西值得专门讲?因为它解决了一个非常实际的问题:你怎么用数学语言描述"我手上有一堆样本"这件事?

书的答案是这样:把每个样本点当成一个"无限窄、无限高"的峰,峰的面积是 1。所有峰加起来,就得到了"经验分布":

经验分布将概率密度赋给 m 个点 x(1), …, x(m) 中的每一个,这些点是给定的数据集或者采样的集合。只有在定义连续型随机变量的经验分布时,Dirac delta 函数才是必要的。

最后那句话是重点——"只有在连续型随机变量的经验分布时"。离散情形更简单,直接数频次就行(多项式分布)。连续情形才麻烦:一个精确的点,在连续空间里出现的概率是 0,你没法说"这个点的概率是 1/m"。Dirac delta 就是用来"作弊"的:它把"一个点"变成"一块面积",让概率密度这个框架能容纳离散的观测。

我为什么觉得这个细节重要?因为它体现了一种很典型的数学思维:当现有工具描述不了你的直觉时,就造一个新的数学对象。Dirac delta 在工程里被用滥了(信号处理里到处都是),但真正理解它"不是函数"这件事的人不多。大多数人把它当成"一个特别尖的尖峰"来用,勉强能算对,但一旦要做严格的推导就会出错。

这本书在这里花篇幅讲清楚它的性质,其实是在帮你避坑。这种"看似多余、实则关键"的段落,是花书最值得读的地方。

三、XOR:一个 1969 年的失败,定义了后面五十年的主线

第 6 章讲深度前馈网络,用的切入点是 XOR 问题。我觉得这个选择非常聪明。

书的推理过程是这样的:先用线性模型去拟合 XOR,用 MSE 作代价函数,然后解正规方程。结果是——两个权重都变成 0,模型在任何输入下都输出 0.5。

书里的原话很克制:

线性模型仅仅是在任意一点都输出 0.5。为什么会发生这种事?解决这个问题的一种方法是使用一个模型来学习一个不同的特征空间,在这个空间上线性模型能够表示这个解。

这一段其实是整本书的隐喻。XOR 的问题是"线性不可分",而解决它的方法不是"用更复杂的分类器",而是"换一个空间"。——先学一个特征变换 h,把数据映射到 h 空间,在那里线性可分。

这个思路一旦点破,后面所有的东西就都串起来了:深度网络就是"多层特征变换的堆叠",卷积是"利用空间结构的特征变换",循环网络是"利用时间结构的特征变换",自编码器是"学一个能还原的特征变换"。整本书讲的,其实都是"怎么学到一个好的特征空间"。

而书里顺手埋了一句更重要的话,在讲代价函数的时候:

在应用领域,对二进制数据建模时,MSE 通常并不是一个合适的代价函数。

这句话杀伤力很大。因为绝大多数入门教程都是从"用 MSE 做回归"开始的,于是很多人的默认心智是"MSE 是通用的损失函数"。但在分类任务里,MSE 会导致梯度消失、收敛慢、对异常值敏感。正确选择是交叉熵。这个知识点本身不难,难的是在学的时候就知道"默认选项可能是错的"。

我读到这里最大的感想是:这本书真正教的不是"某个算法怎么推导",而是"为什么某个选择在某个场景下是错的"。前者可以查,后者只能靠经验或好书。

四、AdaGrad:一个"看起来很简单"的优化器,藏着对"重要性"的判断

第 8 章讲优化,AdaGrad 的算法框我看了两遍。

它的核心就三步:累积历史梯度的平方(r ← r + g ⊙ g),计算更新量(用全局学习率除以 √r),应用更新。书里对那个小常数 δ 的解释很实在:

小常数 δ,为了数值稳定大约设为 10⁻⁷。

为什么需要它?因为如果 r 是 0,除零会炸。这个细节很多教程会跳过,但它恰恰是"能跑"和"跑崩"的分界线。

而 AdaGrad 的设计思想,比算法本身更有意思:它给每个参数一个"自适应"的学习率,历史上梯度一直很大的参数,步子自动变小;历史上梯度一直很小的参数,步子相对大一些。

这个设计的直觉是:梯度大说明这个方向很"陡",容易走过头,所以要小心;梯度小说明这个方向很"平",可以大胆走。听起来很合理,但它有个明显的缺陷——累积平方梯度只增不减,所以学习率会单调递减,训练久了会几乎停下来。这也是为什么后来有了 RMSProp、Adam 这些改进版。

书里对这些后续发展讲得不多(毕竟成书于 2016 年)。这构成了一个具体的"过期点":如果你照着书里的优化器清单去选,你会选到一个 2026 年基本没人用的算法。但这不影响它讲清楚"为什么要自适应"这件事——理解了动机,你去看 Adam 的论文会快很多。

五、配分函数:第 3 部分真正的"反派"

第 3 部分读起来明显比前两部分吃力,原因不是数学更难,而是它面对的问题本身就没有干净的解。而这些问题几乎都指向同一个东西:配分函数。

书里在讲基于能量的模型时,把这件事说得很直接:许多对概率模型进行操作的算法不需要计算 p_model(x),而只需要计算它的(未归一化的)形式。但一旦要归一化,就得算那个求和/积分——而它通常算不出来。

为了绕开这个死结,书里给了一系列工具:蒙特卡罗方法(采样近似)、直面配分函数(用近似方法估它)、近似推断(不精确算,只求够用)、深度生成模型(设计成不需要算它)。

这四章连起来看,其实是在讲一件事:当精确解不存在时,工程上怎么退而求其次。而这个"退",是有讲究的——不是随便近似,而是要知道近似的误差在哪、什么时候会崩。

书里讲稀疏编码那一节,把这个"退"讲得很具体。它说,如果用 Laplace 先验逼稀疏,那么"使用最大似然的方法来训练稀疏编码模型是不可行的"。怎么办?

相反,为了在给定编码的情况下更好地重构数据,训练过程在编码数据和训练解码器之间交替进行。稍后在第 19.3 节中,这种方法将被进一步证明为解决最大似然问题的一种通用的近似方法。

"交替进行"——这四个字在工程里出现的频率极高。因为很多问题没法一步解出来,只能"固定 A 优化 B,再固定 B 优化 A",来回迭代。这个方法在数学上不优雅,在实践中极其有效(EM 算法、GAN 训练、甚至很多现代的对齐方法,内核都是这个套路)。

我觉得第 3 部分的价值就在这:它不给你答案,它给你"当答案不存在时该怎么办"的方法论。而这个方法论,比任何具体算法都活得久。

六、d-分离:图模型里最容易被跳过、也最该掌握的一节

第 16 章讲结构化概率模型,其中 16.2.5 节讲"分离和 d-分离"。这一节篇幅不大,但我觉得它是整本书里"投入产出比"最高的内容之一。

书里的问题设定很清楚:

图模型中的边告诉我们哪些变量直接相互作用。我们经常需要知道哪些变量间接相互作用。某些间接相互作用可以通过观察其他变量来启用或禁用。更正式地,我们想知道在给定其他变量子集的值时,哪些变量子集彼此条件独立。

"通过观察其他变量来启用或禁用"——这句话是 d-分离的精髓,也是它反直觉的地方。

在因果推断里,这件事有一个更出名的说法:对撞因子(collider)。两个本来独立的变量,如果你去"控制"它们的共同结果,它们反而会变得相关。这是很多数据分析里翻车的根源——你以为控制了更多变量就更准确,实际上你引入了一个虚假的关联。

花书在这里讲的是纯数学版本的表述,没有展开因果推断的那一层(毕竟它是一本深度学习书)。但我认为,任何做数据分析的人,都应该认真读这一节。因为"控制变量"这件事被滥用得太厉害了,而 d-分离给了你一个严格的判断工具:什么时候该控制,什么时候控制反而会害了你。

这也是我觉得花书被低估的一个方面。大家把它当成"神经网络教材",但它前几部分讲的概率图模型、条件独立、结构化建模,其实是更通用的数据分析素养。只不过这些内容被"深度学习"的书名盖住了。

七、它的短板

花书是经典,但"经典"不等于"现在读还够用"。我说几个我认为必须提醒的问题,尤其是给准备花时间读它的人。

第一,也是最致命的:它的"现代"已经不现代了。这本书成书于 2016 年。第 2 部分讲的"现代实践",在今天看来很多已经是历史——批量归一化的地位变了、优化器换了几代、正则化的手段多了不少、卷积网络的统治地位被 Transformer 大幅侵蚀。更关键的是,整本书几乎没有讲 Transformer(注意力机制只在第 12 章的应用部分被简单提及,没有展开)。而在 2026 年,不懂注意力机制基本等于不懂深度学习。这不是作者的错,是时代跑得太快,但读者必须知道这一点。

第二,它的数学门槛被严重低估了。很多人推荐这本书时说"数学要求不高,会点线代和微积分就行"。这是误导。第 3 部分大量使用测度论味道的表述、变分推断、蒙特卡罗方法,没有扎实的概率论和统计基础,读起来会非常痛苦——不是"看不懂每个字",而是"看懂了每个字但不知道在说什么"。这本书不是入门书,它是"有基础之后回头补齐体系"的书。把它当第一本深度学习书读,大概率会在第 3 章卡住。

第三,它几乎没有工程内容。1210 屏里,讲"怎么训练一个真正能用的模型"的内容非常少。超参数怎么调、数据怎么清洗、训练不收敛怎么排查、分布式怎么部署、显存不够怎么办——这些在真实工作里占 80% 时间的问题,书里基本没有。它有第 11 章"实践方法论",但那一章的建议偏原则性(比如"选择合适的算法"、"决定是否收集更多数据"),不够具体。这本书教你"为什么",不教你"怎么办"。

第四,它的案例太"古典"了。书里的例子绝大多数是 MNIST、CIFAR、IMDB 影评这类标准数据集。这些例子干净、规整、规模小,非常适合讲原理,但和真实业务数据的差距很大。你读完会觉得自己懂了,一上手真实数据就会发现:脏数据、类别不平衡、标注噪声、长尾分布——这些书里都没怎么讲。

第五,翻译质量参差。中文版由多位译者合作完成,术语不统一的情况不少。有些地方"配分函数""归一化常数"混用,有些地方数学表述被译得模糊,需要回头对英文原版。这不是致命问题,但确实增加了阅读成本。(顺带一提,书里不少公式在电子版里显示不完整,这是排版层面的问题。)

说完这些,我还是认为它值得读——但要换个读法。

不要从头读到尾。正确的读法是:把它当成一本字典。你在做项目时遇到"为什么这个损失函数不收敛",回来查第 8 章;遇到"为什么加了 BN 效果变好",回来查第 8 章的正则化部分;遇到"条件独立怎么判断",回来查第 16 章。带着问题回查,比线性通读有效十倍。

而如果你是做研究的,那第 3 部分值得精读——不是因为它的结论还对,而是因为它示范了"面对一个没有干净解的问题,一个严肃的研究者是怎么组织思路的"。这个能力,比任何具体知识都保值。

深度学习 花书 核心知识图谱
核心知识图谱:数学地基 → 成熟算法 → 前沿研究 → 怎么读它

一句话总结:花书的价值不在于它讲对了多少,而在于它坦白了哪些还没解决——一本敢说"这部分只是展望"的教材,比一本什么都很确定的教材,更能帮你建立真正的判断力。


阅读记录:《深度学习》,Ian Goodfellow、Yoshua Bengio、Aaron Courville 著,张志华 审校,微信读书逐页翻阅 1210 屏,二十章读完,从线性代数、概率论读到深度生成模型与近似推断。2026-11-03。