简介:《人工智能必备数学》(Essential Math for AI)是 Hala Nelson 所著、2023 年 O'Reilly 出版的 PDF 英文原版书,目标读者为人工智能工程师、数据科学家、数学工作者及科研人员。资源包共 1 个 PDF 文件,压缩包大小约 27.45MB,是可直接阅读的完整电子书。全书以实际应用为主线,系统讲解回归分析、神经网络、卷积技术、优化方法、概率论、马尔可夫过程、微分方程等 AI 核心数学主题,并展示如何把机器学习模型与自然语言处理模型统一到同一数学框架下,同时覆盖数据可视化、空间变换、降维、图像处理、图与网络数据处理等实用技能,帮助读者建立从数据处理、模型选择到算法实现的完整知识体系。已有 690 人学习下载,书中大量实际案例和应用示例,可显著缩短数学理论到 AI 项目落地之间的理解路径,无论用于日常建模、算法推导还是系统复习,都有较高参考价值。
1. 补数学不该从头啃定理,这本《Essential Math for AI》的 2023 版为什么值得排第一
如果有人告诉你“补数学只需要一本书”,那多半是安慰你;但如果你是个整天调参、看论文公式总是卡在第三行的工程师,我确实会把《Essential Math for AI》2023 版放在推荐列表最前面。它不是按“定义—定理—证明”的数学教材顺序写的,而是反过来,从机器学习任务里最常出现的数学动作出发,把线性代数、微积分、概率统计和优化里真正有用的那部分重新讲了一遍。PDF 版的最大价值在于可以缩放公式、全局搜索术语,还能边读边做标注,这对一本数百页的数学书来说,体验比纸质版更接近“工具书”。它适合谁?适合已经写过不少模型代码、但总感觉数学是黑匣子的从业者,也适合从数据分析转算法岗、想把公式和 API 调用对应起来的新手。
2. 这本书的数学版图:六大子领域如何长在今天的机器学习任务上
2.1 线性代数与微积分:从矩阵乘法到梯度更新,为什么这两个是基本盘
《Essential Math for AI》2023 版花了大量篇幅讲的第一个核心板块,就是线性代数。这里要澄清一件事:它不是为了让你通过线代考试,而是因为现代深度学习里的每一次 forward pass 都只是矩阵乘法的嵌套。你用 PyTorch 写的nn.Linear(128, 64),本质是一个形状为 (64, 128) 的权重矩阵和一个形状为 (batch, 128) 的输入矩阵相乘;你在 Transformer 里反复听到的 Attention 公式,第一项就是查询向量和键向量的内积,也是一个线性代数操作。如果对特征值分解、奇异值分解只有课本名词印象,在阅读后面涉及矩阵分解降维、推荐系统、图像压缩的案例时就会处处卡壳。
微积分放在第二个梯度板块,是因为训练的本质是“求一个函数的最小值”。从损失函数到参数更新的每一步,都需要导数;反向传播能跑起来,靠的就是链式法则一层层往回传递梯度。这本书没有把泰勒展开、极限、连续性当作先修课从零讲起,而是直接从“导数是什么、梯度怎么算、学习率为什么不能太大”切入,把一个完整的多层网络看成复合函数,让你能看到 loss 对某个权重求偏导时到底发生了什么。这种讲法对工程师非常友好,因为你不需要会证明中值定理,但必须能解释清楚“为什么 lr=0.1 的时候 loss 震荡而 lr=0.001 的时候收敛太慢”。
下面这张表是我阅读时习惯用的对照表,用来把数学子领域立刻对应到日常训练任务里,方便判断自己到底缺哪一块:
| 数学子领域 | 训练与推理里的出现位置 | 这本书里值得记住的结论 |
|---|---|---|
| 线性代数 | 神经网络前向传播、Embedding 查找、Attention 内积、权重矩阵分解 | 矩阵乘法复杂度、SVD 降维误差、范数与正则化 |
| 微积分 | 反向传播、梯度下降、学习率调度、参数更新 | 链式法则、梯度方向是 loss 上升最快的方向、二阶导数与曲率 |
| 概率统计 | 极大似然估计、损失函数设计、不确定性量化 | 交叉熵与 LogSoftmax、贝叶斯先验/后验、误差界 |
| 信息论 | KL 散度、熵、互信息、度量两个分布的距离 | 熵是下界、KL 不对称、互信息与相关性 |
| 优化 | SGD、Adam、学习率衰减、收敛判据 | 凸函数性质、梯度噪声、动量原理 |
| 线性回归的矩阵形式 | 最小二乘、岭回归、正规方程 | 解析解与迭代解的区别 |
2.2 概率、信息论与优化:交叉熵、KL 散度与收敛性的直觉
概率统计与信息论在很多工程导向的书里是被压缩的,但这本书把概率放在了和线性代数同等重要的位置,原因只有一个:损失函数本身就是一个概率视角。分类任务里你用的交叉熵损失,本质是极大似然估计的负对数形式;GAN 训练里的判别器,本质是在估计两个分布的密度比;强化学习里的策略梯度,本质是在求期望收益关于策略参数的梯度。你对这些理解得越深,调参的时候就越不容易靠玄学碰运气。比如当你在验证集上看到 loss 降不下去,懂行的人会先怀疑分布不匹配,而不是盲目把轮数加到 500。
优化是最后一个收口的板块,因为前面所有数学最终都要服务于“让目标函数收敛”这件事。这本书覆盖了梯度下降、随机梯度下降、动量法、自适应学习率方法,并专门讨论了学习率为什么是最难调的参数之一。常见做法是先用一段区间做学习率扫描预热,找到 loss 能明显下降的起点,再逐步衰减,这个操作背后的数学就是梯度方向在超参数空间里的光滑性。这本书不会替你调参,但它给了你判断“调参是否有意义”的数学框架;对熟手来说,第二到第四章的公式密度足够当手册查,要不要精读取决于你需要打通哪块短板。
提示:如果你目前只在用 API 训练模型,还没手动实现过反向传播,建议把微积分链式法则那一章放在最前面读,其余章节按需跳转即可。
3. 45 天阅读路线:先搭骨架、再补细节的 PDF 翻阅顺序
3.1 六周路线表:每周读什么、做什么、产出什么
很多人买 PDF 版数学书的第一个错误,是把它当成小说从头读到尾。这本《Essential Math for AI》2023 版确实有章节递进,但每个子领域相对独立,完全支持按需跳读。我一般会先给需要补数学的同事一张六周路线表,每天固定 45-60 分钟,周末用一小时做小结和串联,而不是逼自己在两周内把全书啃完。这样做的原因是数学知识需要“发酵”时间,当天看懂的推导睡一觉才能变成长期记忆,挤在一起的突击式阅读很难留下可迁移的印象。
| 周次 | 主题范围 | 必做动作 | 一周结束时的产出 |
|---|---|---|---|
| 第 1 周 | 线性代数核心(向量、矩阵、范数) | 把书里矩阵乘法手算一遍,再用 NumPy 验证 | 一张向量运算和矩阵运算的速查表 |
| 第 2 周 | 微积分核心(导数、链式法则、梯度) | 手动对一个小网络求梯度,逐行核对链式法则 | 能不看笔记推导出单层网络的梯度公式 |
| 第 3 周 | 概率统计核心(分布、似然、贝叶斯) | 画一遍不同参数下的高斯分布曲线 | 能解释交叉熵为什么等于负对数似然 |
| 第 4 周 | 信息论与 KL 散度 | 用一个小实验对比熵、交叉熵、KL 散度数值 | 能说清“损失数值变小”背后的概率含义 |
| 第 5 周 | 优化核心(SGD、动量、学习率) | 手动追踪三步梯度更新过程 | 能画出学习率过大和过小时的 loss 曲线差异 |
| 第 6 周 | 综合项目式回顾 | 挑一个熟悉的任务,把数学部分做成卡片 | 一份自己的“训练数学对照表” |
第 1 周做向量范数时,不要只盯公式,要把 L1 正则、L2 正则和高斯先验之间的关系想成一件事:拉格朗日乘数法把约束优化变成无约束优化的过程,其实和“加罚项”是同一个直觉。第 2 周手动推梯度时,建议先用小数字,例如一个 2 层网络、每层 2 个神经元,逐变量展开求偏导,再对照书里的矩阵形式,这时候你会发现矩阵表达只是把一堆标量链式法则打包了而已。
注意:如果中间有一周完全掉队,不要立刻从头重来。标记好断点,先进入下一周,等周末统一补课;很多推导卡住是因为前面的符号没记住,而不是思路本身有多难。
3.2 在 PDF 里建立可检索的数学笔记:三色标注与符号卡
PDF 版数学书有一个隐藏优势,它支持文本搜索,但也有一个天然缺陷——搜索对公式几乎无效,你输入\frac或者特殊符号很难命中真正想要的内容。因此我建议你在 PDF 阅读器里建立一套固定的高亮配色和标注体系,而不是靠事后翻页找内容。具体操作:用红色高亮标记“主公式”,即每章最后真正要记住的那个结果;用黄色标记“推理步骤”,即从一个式子到另一个式子的关键过程;用绿色标记“工程注记”,比如作者提到的数值稳定技巧、实现时的注意点。三色体系固定下来之后,每次翻回 PDF 只需要扫颜色就能定位章节核心。
在此基础上,建立一个独立的符号卡文件会极大缓解“符号遗忘”问题。数学书经常在同一章里交错使用x、X、w、W、θ、β,这本书的 2023 版已经注意到符号统一问题,但你仍然会遇到不同章节对同一概念的记号差异。常见做法是每读完一章,就用一段 Markdown 记录三类重点:这一章构造了哪些对象、这些对象的形状或维度是什么、它们之间的核心等式是什么。例如线性代数章里记录“权重矩阵形状为 (输出维度, 输入维度)”,微积分章里记录“梯度是损失函数对每个参数偏导组成的向量”。等到训练模型时遇到概念混淆,直接搜索自己的符号卡,比重新翻整本书快得多。
提示:PDF 的搜索框适合搜英文术语和作者定义的黑体词(比如 gradient descent、KL divergence),对希腊字母几乎无效,所以符号卡务必用纯文本拼音或英文名记录,不要用公式对象作为索引。
4. 把书里公式翻译成能跑的验证脚本:以注意力、梯度下降与 SVD 为例
4.1 三个最小实现:内积相似度、一维梯度下降、奇异值截断重构
看数学书最忌讳的事,是“眼睛看懂了,代码写不出来了”。为了验证自己是不是真的读懂,我习惯把书里每个核心公式变成一个最小可运行脚本,用随机数据跑通后再去读下一章。下面用 NumPy 实现书里三个最常出现的数学动作:注意力里的内积相似度、梯度下降的最小二乘拟合、奇异值分解的低秩近似。代码都不长,但每个都对应一个真实训练环节,能跑出数值结果才算理解到位。
import numpy as np # 目标一:内积相似度,对应 Attention 中的 QK^T 部分 np.random.seed(0) q = np.random.randn(8) # 查询向量 k = np.random.randn(8) # 键向量,dot 结果可理解为相似度 sim = np.dot(q, k) print(f"QK 内积相似度: {sim:.4f}") # 目标二:梯度下降拟合 y = 2x + 3,观察学习率对收敛的影响 x = np.linspace(-2, 2, 50) y = 2 * x + 3 + 0.1 * np.random.randn(50) # 真实参数 w=2, b=3,添加噪声 w, b = 0.0, 0.0 # 初始参数 lr = 0.1 # 学习率 for epoch in range(30): y_pred = w * x + b loss = np.mean((y_pred - y) ** 2) grad_w = np.mean(2 * (y_pred - y) * x) # 对 w 的偏导 grad_b = np.mean(2 * (y_pred - y)) # 对 b 的偏导 w -= lr * grad_w b -= lr * grad_b if epoch % 10 == 0: print(f"epoch {epoch:02d}: loss={loss:.4f}, w={w:.3f}, b={b:.3f}") # 目标三:SVD 低秩近似,对应推荐系统/图像压缩里的降维操作 A = np.random.randn(20, 10) U, S, Vt = np.linalg.svd(A, full_matrices=False) r = 3 # 只保留前 3 个奇异值 A_approx = U[:, :r] @ np.diag(S[:r]) @ Vt[:r, :] recon_err = np.mean((A - A_approx) ** 2) print(f"SVD rank-{r} 重构误差: {recon_err:.6f}")第一段代码的核心是理解“内积为什么能表示相似度”:当两个单位向量方向一致时内积最大,方向垂直时内积为 0,方向相反时内积为负,这和注意力打分的基本直觉一致。第二段代码是一次最简梯度下降,核心参数是学习率lr和迭代轮数epoch;当你把学习率改成 0.5,loss 会先下降后震荡,改成 0.001 则 30 轮还没拟合到位,这个简单的实验足以让你理解学习率为什么是最敏感的超参数。第三段代码的r是关键参数,保留奇异值数量越多,重构误差越小,但压缩率也越低,这也是所有低秩近似任务里必须权衡的核心矛盾。
4.2 把公式翻译成代码的通用四步:标 shape、写循环、再向量化、留档复现
很多从数学转代码的工程师都经历过一个坎:书里的下标符号看着清楚,一转化成张量操作就不知道谁在前谁在后。这里分享一个我常用的四步法,用来拆任何公式。第一步,把公式里出现的每个向量、矩阵标上形状,例如“x是 (batch, dim) 的矩阵”或“W是 (out_dim, in_dim) 的权重矩阵”,先在注释里写清楚,避免代码写一半忘记维度。第二步,用最朴素的 for 循环按公式逐元素实现一遍,跑通正确性,即使慢也没关系;第三步,再把循环替换成矩阵运算,用 NumPy 或框架 API 向量化提速,同时验证两版结果是否一致。第四步,把跑通的脚本存进自己的代码库,注明对应书里的章节和公式编号,方便以后回看。
这里强烈建议把一维梯度下降的学习率参数做成可配置变量,而不是写死在算式里。因为调参本质上是在“观察算法决策面”,学习率小了收敛慢,大了发散,只有亲身看到 loss 曲线随lr变化从平滑到震荡的过程,才能真正理解书里写的“梯度下降依赖于目标函数的光滑性”。如果你用的是某个深度学习框架,也可以把这段换成真实的小模型,但不要一上来就用大网络,因为大网络会把数学噪音和实现 bug 混在一起,很难分辨是梯度算错了还是数据预处理出了问题。先把书里公式在一个可复现的最小环境里跑通,再逐步加复杂度,这是最省时间的做法。
注意:SVD 的
full_matrices=False这个参数值得单独记下——它返回的 U 和 Vt 分别是 (m, k) 和 (k, n) 形状,如果你不加这个参数,默认返回的 U 会多出不少全零列,重构时特别容易出错。这类由 API 细节引发的“数学对但代码错”,属于最容易让新手误解书里公式的一类坑。
5. 读这本书的常规坑与排查:从 PDF 阅读到公式落代码的五个教训
5.1 读 PDF 阶段的三个坑:顺序通读、符号遗忘、版本混淆
现象:拿到 PDF 后从第 1 页看到第 400 页,看到后面忘了前面,第二个月回翻时像看一本新书。原因:数学书不是线性文本,它更像一张网;全书顺序阅读会让大脑默认按章节编号存储,但实际工程里遇到的公式往往横跨三四个章节。解决:放弃通读执念,改成问题驱动,先确定你手头要解决的具体任务(比如“把交叉熵梯度推明白”),再通过目录定位相关章节,只读必要部分并做笔记,读完后立刻用代码验证。
现象:前两周还能记住符号含义,第三周开始把a和α、λ和Λ混淆,看书时觉得顺畅,合上书写公式时下标全乱。原因:数学符号对新手来说本来就是高维记忆负担,不同章节引入多个相似符号却没有统一索引。解决:在第 3 章提到的符号卡里专门加一个“易混符号表”,记录中文含义、形状、首次出现的章节,每周末回看三分钟;当你能不看原书快速说出“λ 是拉格朗日乘数,Λ 是协方差矩阵”时,符号这一关就算是过了。
现象:用旧版的章末习题来练习 2023 版的内容,发现题目答案和网上讨论对不上,浪费时间也不少。原因:数学书的版本更新通常会调整章节结构、习题编号,甚至更换术语表达,旧资源虽然大部分内容仍适用,但定位时容易错位。解决:练习时以你手中 PDF 的章节编号和习题编号为准,不要迷信网上的“第几节第几题答案”;当发现别人讨论的版本和你不一样时,先核对术语定义而非急着对答案,通常问题出在符号习惯上而不是数学结论上。
5.2 从公式到代码之间的两个坑:跳过下标注解和只读题不做实验
现象:书里的梯度公式推得出来,但一写代码就慌,不知道该用.sum()还是.mean(),该乘在哪一项后面。原因:数学公式里省略了求和的边界条件,比如偏导符号前面的求和号到底对哪些维度生效,书里往往只写数学规范,不写张量形状。解决:回到 4.2 的第二步,先用循环实现,每算一个中间变量就把它的形状打印出来;你会发现,循环版本里你在哪个轴上累加,一看便知,不会像矩阵化版本那样无从下手。
现象:书看了大半,每一章习题都刷了,但过了两个月发现真正做项目该调参时还是凭感觉。原因:纯做题验证的是“对公式的短期记忆”,没验证“对参数变化的直觉”;数学书里的习题通常只问“求导、求最优解”,没有问“学习率从 0.1 到 0.5 会发生什么”。解决:把每个核心公式前面加一句“如果某个参数极端化,结果会怎样”的思考,再跑一个小的 Python 实验,比如手动把学习率设成 1.0,观察你的代码发散过程;这种“破坏性实验”才是把数学直觉迁移到工程里的关键一步。
提示:如果发现一个反复出现“看懂又忘”的内容,不要硬啃,先把它标记为“暂缓项”,去读后面更直观的应用章节,很多数学概念在被使用时反而更容易理解。这是把数学书当手册读和当教材读的最大区别。
6. 进阶用法:把《Essential Math for AI》变成你的运行时数学手册
读这本书的终点,不是“把书读完”,而是形成一套属于你自己的“数学速查卡”。我的习惯是每读完一章,用一小时做一张卡,每张卡片只记录五件事:概念的一句话直觉、核心公式、形状或适用条件、对应的代码片段、和书中关联章节的页码。这张卡不是读书笔记,而是你在训练模型时真正会去查的东西。下面是一个示例模板,你可以直接复制到自己的笔记工具里:
| 卡片字段 | 填写内容(以梯度下降为例) |
|---|---|
| 概念一句话 | 沿着 loss 对参数偏导的负方向更新参数,直到收敛 |
| 核心公式 | θ = θ - lr * ∇θ loss |
| 形状/适用条件 | 适用于可微目标函数;lr太大发散、太小缓慢 |
| 代码片段 | 一维示例见第 4 章脚本,重点观察lr从 0.1 改到 0.5 的变化 |
| 关联章节 | 微积分梯度部分、优化章 SGD 部分 |
我在第一次精读这本书时犯过的最典型错误,就是试图把整章推导都记进笔记,结果记完再也不看。后来改成“只记卡片”之后,数学书从“要通读的教材”变成了“遇到问题才翻的手册”,使用效率高了很多。现在每周末我固定花一小时,把本周用到的数学概念提炼成新卡片,并回看旧卡里那些已经熟练的内容,标记为可弃状态。这套流程不需要额外软件,一张 Markdown 表格就够。把这个习惯坚持两个月,你会发现自己调参不再靠玄学,开始能预测某个超参数改了之后大概率发生什么。希望帮到你。
本文还有配套的精品资源,点击获取