跳到主要内容

01-outline:d2l 全书拆解大纲(20 章)

每行一节:「进来时以为…… → 出去时知道……」。自查:任意两行的「出去时知道」不得是同一件事。 章对着原书结构走:原书 168 节 → 20 章。读者设定:会写 Python,没学过机器学习。

01 从写死的规则到会学习的程序(原书 Preface + Introduction)

  • §1 进来时以为「程序就是人把规则一条条写死」→ 出去时知道「有一类问题规则写不出来(唤醒词每秒 44000 个采样),只能让程序自己从数据里学」
  • §2 进来时以为「训练是个神秘过程」→ 出去时知道训练就是四步循环:随机初始化 → 取数据 → 拧参数让表现更好 → 重复,以及参数/模型/模型族/学习算法的确切含义
  • §3 进来时以为「机器学习是一种技术」→ 出去时知道它由四个组件构成(数据/模型/目标函数/优化算法),缺一个就转不起来
  • §4 进来时以为「预测就是预测,还分什么」→ 出去时知道任务的全景:回归/分类/标注/搜索/推荐/序列/无监督/自监督/强化,各自回答什么问题
  • §5 进来时以为「深度学习是新发明」→ 出去时知道它的根(高斯最小二乘、Hebb、感知机),1995-2005 为什么凉,2012 前后为什么回来(数据+GPU)
  • §6 进来时以为「端到端是个流行词」→ 出去时知道它具体取代了谁:手工特征工程(Canny/SIFT),以及代价(解释性、需要数据)
  • §7 进来时以为「AI 的风险是机器觉醒」→ 出去时知道作者的立场:更远的是就业与偏见,以及为什么「没有自我改进的工具」

02 深度学习只要这几样数学(原书 Preliminaries 5-11 节)

  • §1 进来时以为「数据进模型就行」→ 出去时知道一切先变张量,以及张量比 NumPy 多的两个杀手特性(自动微分、GPU)
  • §2 进来时以为「矩阵乘法是学校里的老古董」→ 出去时知道点积、矩阵-向量积、矩阵乘法各自算什么,以及神经网络每层就是一次矩阵-向量积
  • §3 进来时以为「范数是个符号」→ 出去时知道它是「大小」的度量,ℓ1/ℓ2/Frobenius 分别量什么,损失里的「距离」全是范数
  • §4 进来时以为「导数跟我没关系」→ 出去时知道导数=变化率,梯度=所有偏导拼成的向量,链式法则是全书所有训练的总发动机
  • §5 进来时以为「算梯度得手推」→ 出去时知道自动微分在建计算图,反向走图就是反向传播,以及为什么控制流也能微分
  • §6 进来时以为「概率就是抛硬币」→ 出去时知道概率 vs 统计量、贝叶斯定理,HIV 两次检测从 13% 到 83% 的完整走查
  • §7 进来时以为「不确定性就是不准」→ 出去时知道 aleatoric/epistemic 之分,以及期望、方差、中心极限定理的 1/√n 意味着什么

03 第一个完整的训练循环(原书 Linear Networks for Regression 12-16 节)

  • §1 进来时以为「线性回归是中学知识」→ 出去时知道它的确切假设:条件均值是特征的加权和,外加高斯噪声
  • §2 进来时以为「损失随便定一个」→ 出去时知道平方误差的来历(最大似然+高斯噪声),以及二次形式的双刃剑
  • §3 进来时以为「优化就是解方程」→ 出去时知道解析解 w*=(XᵀX)⁻¹Xᵀy 存在但不可依赖,以及为什么深度学习不能指望它
  • §4 进来时以为「梯度下降就是全数据算一遍」→ 出去时知道全量慢、单样本抖,minibatch SGD 是计算与统计的折中,学习率和批大小是超参数
  • §5 进来时以为「代码只是实现细节」→ 出去时知道训练循环的每一行在干什么(初始化→取批→算损失→反传→更新),以及向量化为什么快一个量级
  • §6 进来时以为「线性回归和神经网络是两家」→ 出去时知道线性回归就是单层全连接网络,以及 McCulloch-Pitts 神经元的生物学出处与「飞机与鸟」的提醒

04 泛化:机器学习的根本问题(原书 17-18 节)

  • §1 进来时以为「训练误差低=学得好」→ 出去时知道背题的 Ellie 与抓规律的 Irene 之别,泛化才是根本问题
  • §2 进来时以为「误差就是误差」→ 出去时知道训练误差(统计量)与泛化误差(期望)的区别,IID 假设缺了它就「dead in the water」
  • §3 进来时以为「模型越复杂越好」→ 出去时知道能拟合任意标签的模型什么都证明不了(Popper),但深网照样泛化——理论在此失声,只能靠 holdout
  • §4 进来时以为「过拟合是绝对的坏事」→ 出去时知道欠拟合/过拟合的判据,以及「最终只关心泛化误差本身」
  • §5 进来时以为「测试集想用就用」→ 出去时知道模型选择、验证集、K 折交叉验证,以及用测试集选模型会污染它
  • §6 进来时以为「防过拟合只能减特征」→ 出去时知道 weight decay:不砍参数个数,限制参数取值,L+λ/2‖w‖²,更新式里每一步先把 w 往零缩

05 分类与现实的冲撞(原书 Linear Classification 19-25 节)

  • §1 进来时以为「分类就是把回归的输出取整」→ 出去时知道 one-hot 编码与为什么直接拿线性输出当概率会出毛病(和不为 1、可为负)
  • §2 进来时以为「softmax 是个黑话」→ 出去时知道 exp 再归一化的来由(保序、非负、和为 1),以及它借自统计物理
  • §3 进来时以为「交叉熵是个名字」→ 出去时知道它=负对数似然=期望惊讶,softmax+交叉熵的梯度就是「预测概率−真实标签」
  • §4 进来时以为「测试集有几千条就够」→ 出去时知道 O(1/√n):±0.01 要上万条,以及测试集复用的多重检验与 adaptive overfitting
  • §5 进来时以为「模型部署后世界静止」→ 出去时知道分布偏移三种(协变量/标签/概念),以及模型自己改变世界(Oxford 鞋)
  • §6 进来时以为「偏移了就没救」→ 出去时知道重要性加权与混淆矩阵纠正法,以及它们的硬前提

06 深度由此开始:多层感知机(原书 MLP 26-32 节)

  • §1 进来时以为「加一层就深一度」→ 出去时知道不加非线性的两层全连接塌缩回一层,激活函数才是深度的开关
  • §2 进来时以为「激活函数随便选」→ 出去时知道 ReLU/sigmoid/tanh 各自的形状、导数与死活,sigmoid 饱和区是梯度消失的头号嫌犯
  • §3 进来时以为「万能逼近=可以为所欲为」→ 出去时知道「能表示」与「能学到」是两回事(C 语言比喻)
  • §4 进来时以为「反向传播是框架按钮」→ 出去时知道它的五条链式法则(单隐层 MLP+weight decay 全程),以及训练内存为什么远大于预测
  • §5 进来时以为「初始化随便给个小随机数」→ 出去时知道消失/爆炸梯度的矩阵连乘机制、对称性必须打破、Xavier 初始化的推导
  • §6 进来时以为「深网泛化有理论解释」→ 出去时知道现状:double descent、VC 维失灵、NTK,以及实践者的工具箱(early stopping、dropout)
  • §7 进来时以为「dropout 是玄学」→ 出去时知道无偏噪声注入 h'=0 或 h/(1−p),与 Bishop 输入加噪=Tikhonov 正则的谱系

07 构建者指南:层、参数与 GPU(原书 33-39 节)

  • §1 进来时以为「网络就是一层层叠」→ 出去时知道 module 抽象:层/块/整个模型同构,递归组合(ResNet-152 的层组)
  • §2 进来时以为「参数是框架替我管的」→ 出去时知道参数访问/初始化/共享/延迟初始化各是什么
  • §3 进来时以为「GPU 就是快」→ 出去时知道设备模型:运算双方必须同设备,跨设备复制远慢于计算,框架故意报错
  • §4 进来时以为「打日志没成本」→ 出去时知道每个 minibatch 把 loss 搬回 CPU 会触发 GIL 停住所有 GPU

08 卷积:从第一性原理推出来(原书 CNN 40-45 节)

  • §1 进来时以为「卷积是个既定的层」→ 出去时知道它从两条原则推出:平移不变+局部性,参数从 10^12 砍到 4Δ²
  • §2 进来时以为「卷积核是手工设计的」→ 出去时知道互相关运算的逐步走查(3×3×2×2=19),以及核可以学出来([1,−1] 边缘检测)
  • §3 进来时以为「通道就是 RGB」→ 出去时知道输入/输出通道、feature map、1×1 卷积=逐位置全连接
  • §4 进来时以为「padding/stride 是细节」→ 出去时知道它们怎么定输出尺寸,以及 pooling 的双重目的(降采样+平移容忍)
  • §5 进来时以为「CNN 生来就这么强」→ 出去时知道 LeNet 的完整结构(两卷积+三全连接),以及它 1989 年就证明反向传播能训 CNN,ATM 至今在跑

09 现代卷积网络:2012 与之后(原书 Modern CNN 46-53 节)

  • §1 进来时以为「AlexNet 是算法突破」→ 出去时知道它更是数据(ImageNet)与硬件(两块 GTX 580)的突破,以及缺的那两味料此前卡了二十年
  • §2 进来时以为「VGG/NiN/GoogLeNet 是三个名字」→ 出去时知道各自的一个核心想法:块、1×1+全局平均池化、多分支 Inception
  • §3 进来时以为「batch norm 就是标准化」→ 出去时知道 minibatch 统计量的三重作用(预处理/数值稳定/噪声正则),训练与预测模式之别,以及 layer norm
  • §4 进来时以为「网络越深越好是常识」→ 出去时知道函数类嵌套问题:加层必须能学成恒等,残差连接把「简单=f(x)=0」改成「简单=f(x)=x」
  • §5 进来时以为「ResNeXt/DenseNet 是变体」→ 出去时知道分组卷积的成本账与拼接 vs 加法
  • §6 进来时以为「架构是天才的灵感」→ 出去时知道设计空间(AnyNet/RegNet):优化一族网络的分布,而不是赌单个网络

10 序列与循环神经网络(原书 RNN 54-60 节)

  • §1 进来时以为「序列就是排好队的数据」→ 出去时知道自回归问题 P(x_t|历史) 的两条路:τ 窗口与隐状态
  • §2 进来时以为「语言模型是新产品」→ 出去时知道 n-gram 计数与它的四个死穴,Laplace 平滑,以及 perplexity=下一步有几个真实选择
  • §3 进来时以为「RNN 是种层」→ 出去时知道隐状态 H_t=φ(X_tW+H_{t-1}W+b) 的递归,参数共享不随长度增长
  • §4 进来时以为「BPTT 只是反传的别名」→ 出去时知道矩阵连乘的爆炸/消失机制、三种截断策略,以及为什么规则截断反而是想要的正则
  • §5 进来时以为「梯度裁剪是保险丝」→ 出去时知道它只管爆炸不管消失,为下一章埋钩子

11 门控、编码器-解码器与翻译(原书 Modern RNN 61-68 节)

  • §1 进来时以为「LSTM 是三倍复杂的 RNN」→ 出去时知道 memory cell 的自环边(权重 1)与三个 sigmoid 门各管什么
  • §2 进来时以为「GRU 是简化版 LSTM」→ 出去时知道 reset/update 两门如何取舍记忆
  • §3 进来时以为「翻译就是逐词对应」→ 出去时知道 encoder-decoder:变长→定长状态→变长,以及定长 context 的瓶颈
  • §4 进来时以为「训练翻译模型直接喂预测」→ 出去时知道 teacher forcing:训练喂真实前缀,测试喂自己的预测
  • §5 进来时以为「每步挑最优词=最优序列」→ 出去时知道贪心反例(0.048<0.054)与 beam search 的折中

12 注意力:可微分的数据库查询(原书 Attention 69-74 节)

  • §1 进来时以为「注意力是拟人修辞」→ 出去时知道它是 Σα(q,k_i)v_i:数据库类比、四种特例、softmax 归一化
  • §2 进来时以为「注意力权重是手工核」→ 出去时知道 Nadaraya-Watson 核回归演示了手工打分的极限
  • §3 进来时以为「点积就能当分数」→ 出去时知道为什么要除以 √d(方差论证),以及加性注意力
  • §4 进来时以为「seq2seq 瓶颈无解」→ 出去时知道 Bahdanau:解码每步重算 context,定长瓶颈被打开
  • §5 进来时以为「一个注意力够用」→ 出去时知道多头=多组表示子空间并行,各自学不同范围的依赖
  • §6 进来时以为「自注意力天然懂顺序」→ 出去时知道它不懂,位置编码 sin/cos 的设计与「线性投影得相对位置」的性质

13 Transformer 与预训练时代(原书 75-77 节)

  • §1 进来时以为「Transformer 是一个层」→ 出去时知道完整架构:encoder 两子层、decoder 三子层、残差+layer norm、masked attention
  • §2 进来时以为「FFN 是配角」→ 出去时知道 positionwise FFN 与自注意力的分工(混合内容 vs 变换内容)
  • §3 进来时以为「CNN/RNN/注意力差不多」→ 出去时知道三家的复杂度、顺序操作、最长路径对比表,平方成本是注意力的阿喀琉斯之踵
  • §4 进来时以为「预训练是攒数据」→ 出去时知道三种模式:encoder-only(BERT)/encoder-decoder(T5)/decoder-only(GPT),各自怎么预训练与微调
  • §5 进来时以为「大就是一切」→ 出去时知道 scaling law 幂律、Chinchilla 的「模型与数据一起配平」,以及 in-context learning 不更新参数也能做任务
  • §6 进来时以为「现在的 LLM 是全新物种」→ 出去时知道从 GPT 到 ChatGPT 的一整条线(RLHF/指令微调/CoT),全是这套零件的组装

14 优化:下山的一百种走法(原书 Optimization 78-88 节)

  • §1 进来时以为「优化=把训练损失降到最小」→ 出去时知道优化目标与泛化目标不同,局部极小/鞍点/消失梯度三大障碍
  • §2 进来时以为「凸性是纯数学」→ 出去时知道凸函数局部极小=全局极小,以及深度学习大多非凸但局部近似凸
  • §3 进来时以为「梯度下降总是下山」→ 出去时知道学习率决定收敛/发散,Newton 法的诱惑与代价
  • §4 进来时以为「SGD 的噪声是缺陷」→ 出去时知道无偏估计、噪声能震出局部极小,以及为什么必须衰减学习率
  • §5 进来时以为「momentum 是加速魔法」→ 出去时知道 leaky average 的机制:同号方向累积、振荡方向相消,有效步长 η/(1−β)
  • §6 进来时以为「Adam 是终极答案」→ 出去时知道 Adagrad→RMSProp→Adam 的零件拼装,以及 Adam 会发散的边角(Yogi 修复)
  • §7 进来时以为「学习率设完就忘」→ 出去时知道调度策略:warmup、分段常数、多项式、cosine,以及它们对过拟合的影响

15 性能:硬件、并行与分布式(原书 Computational Performance 89-95 节)

  • §1 进来时以为「慢是模型的事」→ 出去时知道命令式 vs 符号式执行,解释器开销与混合编程
  • §2 进来时以为「调用即执行」→ 出去时知道异步:入队即返回,以及自动并行从计算图读依赖
  • §3 进来时以为「硬件是黑箱」→ 出去时知道延迟表、内存首次读贵 500 倍、SSD 按块擦写、CPU 与 GPU 的分工
  • §4 进来时以为「多 GPU 就是加卡」→ 出去时知道数据并行的 allreduce 流程,以及通信如何吃掉收益
  • §5 进来时以为「参数服务器是一台机器」→ 出去时知道 push/pull 语义与多 server 分片的扩展账

16 计算机视觉应用(原书 CV 96-109 节)

  • §1 进来时以为「增强是锦上添花」→ 出去时知道它减少模型对位置/颜色的依赖,且 AlexNet 当年离不开它
  • §2 进来时以为「小数据集没救」→ 出去时知道微调四步:预训练→换输出层→小学习率微调+大学习率学新层
  • §3 进来时以为「检测就是分类加框」→ 出去时知道锚框/IoU/NMS 与 SSD 的多尺度设计
  • §4 进来时以为「分割是高配分类」→ 出去时知道转置卷积与 FCN 怎么把分辨率还回来
  • §5 进来时以为「风格迁移是滤镜」→ 出去时知道被优化的是图像本身,三种损失(content/style/total variation)

17 词向量与 BERT:预训练改变 NLP(原书 NLP Pretraining 110-119 节)

  • §1 进来时以为「one-hot 够用」→ 出去时知道任意两词余弦=0 的死穴,词向量要让相似词靠近
  • §2 进来时以为「word2vec 是两种模型」→ 出去时知道 skip-gram/CBOW 的互逆,以及全词表 softmax 的成本与负采样
  • §3 进来时以为「GloVe 是另一个 trick」→ 出去时知道 count-based 与 prediction-based 两条路线在此汇合
  • §4 进来时以为「词是最小单位」→ 出去时知道子词(fastText)让未登录词也能拼出向量
  • §5 进来时以为「BERT 是个大词向量」→ 出去时知道 ELMo→GPT→BERT 的演进:双向+任务无关,MLM 的 80/10/10 与 NSP

18 NLP 应用:情感、推断与微调(原书 NLP Applications 120-126 节)

  • §1 进来时以为「情感分析是分类题」→ 出去时知道 RNN 取末状态与 textCNN 的两种打法
  • §2 进来时以为「理解句子对是玄学」→ 出去时知道 NLI 任务与 decomposable attention 的三步(attend/compare/aggregate)
  • §3 进来时以为「微调 BERT 要改架构」→ 出去时知道单文本/文本对/逐 token 三类任务只换输出层, 表示接分类层

19 强化学习、高斯过程与超参优化(原书 RL/GP/HPO 127-137 节)

  • §1 进来时以为「RL 是监督学习的变体」→ 出去时知道 MDP 四元组、奖励由人设计、折扣因子防无穷回报
  • §2 进来时以为「值函数是个分数」→ 出去时知道 Bellman 两阶段分解是全部 RL 算法的根
  • §3 进来时以为「探索是浪费」→ 出去时知道 ε-greedy 与 Q-learning 的自纠正性:「不只收集数据,还收集对的数据」
  • §4 进来时以为「建模就是估参数」→ 出去时知道 GP 在函数空间直接指定先验,后验闭式解,epistemic 不确定性随数据收缩
  • §5 进来时以为「调参靠手感」→ 出去时知道超参不能用训练损失调,随机搜索>网格,ASHA 的异步晋级

20 生成与推荐:两个应用宇宙(原书 GAN 138-139 + Recommender 140-149 + 附录)

  • §1 进来时以为「生成模型是判别模型的倒影」→ 出去时知道 GAN 的 minimax 博弈:two-sample test 当训练信号
  • §2 进来时以为「GAN 训练是常规训练」→ 出去时知道生成器为什么改用 −log D(G(z)),DCGAN 的配方
  • §3 进来时以为「推荐是评分预测」→ 出去时知道矩阵分解 R≈PQᵀ+偏置,Netflix Prize 的江湖地位
  • §4 进来时以为「神经化就是换网络」→ 出去时知道 NeuMF 双通路、FM 的二阶交互线性化,以及隐式反馈与排序损失
  • §5 进来时以为「附录是杂物间」→ 出去时知道数学附录(信息论/统计)与工具附录各在什么时候回来查

自查记录(2026-08-29)

  • 逐行核「出去时知道」无重复:03§3 解析解 ≠ 14§3 Newton;05§4 测试集统计 ≠ 04§5 模型选择(前者问「多大」,后者问「怎么用」);09§3 batch norm ≠ 13§1 layer norm(后者只对比);12§6 位置编码 ≠ 13§1 架构。
  • 20 章对 168 节映射全覆盖:01=ch1-4;02=5-11;03=12-16;04=17-18;05=19-25;06=26-32;07=33-39;08=40-45;09=46-53;10=54-60;11=61-68;12=69-74;13=75-77;14=78-88;15=89-95;16=96-109;17=110-119;18=120-126;19=127-137;20=138-149(+150-168 附录在 20§5 交代)。