第 1 讲 · 勘误与补注
本页记录三类内容:与母本讲义的差异(母本讲到什么程度、本教程补齐了什么)、术语与译法的统一、录播年代之后发生的默认实践变化,最后是本教程自身的更正记录。 使用方式:读到某节觉得「母本没这么讲」或「书里和论文对不上」时,先查本页;查不到再标「需核实」并记入本页第四节。
一、对照母本讲义的补注
母本 MIT 6.S191 · Lecture 1(Introduction to Deep Learning) 在一节课里从感知机讲到反向传播,定位是建立直觉:推导、初始化细节、归一化层、优化器内部机制大多留给学生自己补。本教程沿用它的骨架与术语,逐节补齐被省略的中间步骤。
读母本时容易出现三种落差,先在这里说清:
- 「课堂上说显然」的步骤,考试与面试会要求写出来——本教程把每一步都写进
proof折叠框,第一遍可以跳过,第二遍必须能自己复现。 - 「课堂上没提」的工程默认,真实项目里天天遇到——AdamW、RMSNorm、SwiGLU、大批量训练的缩放规则,本教程把它们归位到相应小节并标明是「工程惯例」还是「本教程的推理」。
- 「课堂上讲错的细节」——母本对早期的流行解释(如把 BatchNorm 的收益完全归于「内部协变量偏移」)未作辨析,本教程在 1.7.4 的延伸阅读里给出后续研究的修正。
下表逐条给出「母本省略了什么 / 本教程补在哪里」。
| 节 | 母本的处理 | 本教程的补齐(位置) |
|---|---|---|
| 1.1 | 给出神经元形式与直觉;XOR 作为「为什么需要多层」的经典例子被提及 | 收敛定理的证明骨架(定理 1.1.1 后紧跟 proof),以及 XOR 的完整不等式论证(例 1.1.1)——母本只指出不可分,不给四式相加的矛盾推导 |
| 1.2 | 给 MLP 前向公式与一张结构图;通用逼近一句话结论 | 逐层形状推演模板与参数计数表(方法 1.2.1、例 1.2.1);形状错误的编译期 / 运行期分类学(方法 1.2.3);通用逼近的三条边界与分段线性视角下的区域计数(1.2.3、命题 1.2.1) |
| 1.3 | 列出 Sigmoid / tanh / ReLU 并给启发式选择建议 | 饱和的定量上界 及其链式法则推导(定理 1.3.1);死亡 ReLU 的自我强化机制与五档缓解手段(1.3.4);门控家族与宽幅缩放的算术(例 1.3.2) |
| 1.4 | 给交叉熵与 MSE 的形式与适用场景 | 从最大似然统一推出两类损失(定理 1.4.1);softmax + 交叉熵梯度的完整两步推导(定理 1.4.2);交叉熵与 KL 分解(定理 1.4.3);类别不均衡与标签平滑的取舍表 |
| 1.5 | 给反向传播递推式与一张示意图 | 计算图 / 雅可比 / VJP 的形式化(定义 1.5.2);前向模式与反向模式的代价对比(定理 1.5.2);含批维形状核对的完整递推(定理 1.5.3)与梯度检查实操(方法 1.5.1、方法 1.5.2) |
| 1.6 | 提到 SGD、Momentum、Adam 三条线索 | Adam 偏差修正的推导(定义 1.6.4);AdamW 与 Adam + L2 的不等价性(定理 1.6.1);学习率调度、梯度裁剪与累积(1.6.6);线性缩放规则与其失效条件(定理 1.6.2) |
| 1.7 | 以 Dropout 与早停为主讲正则 | 偏置-方差分解与近似 / 估计 / 优化三类误差的分解(定理 1.7.1、推论 1.7.1);BN / LN / RMSNorm 的统计量覆盖维度对比(定义 1.7.3、定理 1.7.2);双下降(定理 1.7.3)与数据泄漏六形态清单(1.7.6 的数据泄漏清单) |
一句话总结差异:母本给「是什么」与「为什么重要」,本教程补「怎么算出来」与「算错时长什么样」。凡属后者,正文都配了可执行的判据(形状断言、相对误差阈值、曲线形状表)。
补注的边界(避免把本教程读成「母本的升级版」):
- 本教程不改变母本的结论方向,只补中间步骤与判据;凡与本教程不一致处,一律以可复现的实验与原文文献为准。
- 本教程新增的「工程惯例」条目(AdamW、RMSNorm、SwiGLU、双下降等)不是定理,而是截至 2025 年的社区默认做法;它们的收益幅度需要在你自己配置上验证。
- 母本配套的 Lab 与作业仍是最好的动手材料;本教程的 Lab 1 与之对应,但把「前向 → 损失 → 反向 → 更新」的四步对照关系显式写了出来。
二、术语与常见译误
这一节的用法:当你在「同一个词指向两件事」上卡住时来查。以下七条都是本讲内部就构成实际困惑的对比,不是泛泛的词汇表。
| 术语 | 常见误用/误译 | 正确理解 |
|---|---|---|
| 预激活(pre-activation)vs 激活(activation) | 把「激活」同时用来指 和 ,导致反向传播里说不清是谁对谁求导;也常把 Pre-LN / Post-LN 的「Pre」误当成这个词 | 是预激活, 才是激活(定义 1.1.1)。反向传播里的误差信号 定义在预激活上(定义 1.5.3),这一区分决定了递推式里 乘在哪一步 |
| L2 正则 vs 权重衰减(weight decay) | 当成同义词互换使用。在 SGD 下二者确实等价,但在 Adam 类优化器下不等价 | L2 是「往损失里加 」,权重衰减是「更新后把参数乘回 」。前者的梯度会被自适应缩放逐元素改写(定理 1.6.1);PyTorch 里 Adam(weight_decay=λ) 实现的是前者,要后者必须用 AdamW |
| 嵌入(embedding)vs 嵌入层(embedding layer) | 把「嵌入」当成一个网络层、或反过来把 nn.Embedding 当成一种矩阵分解技巧 | 「嵌入」指的是把离散符号映射到连续向量的这个动作及其结果;nn.Embedding 只是实现它的查表结构(等价于 one-hot 乘一个矩阵)。1.6 节说的「稀疏特征需要各自步长」指的正是嵌入矩阵的行很少被激活这件事 |
| 欠拟合(underfitting)vs 过拟合(overfitting) | 只看测试误差高低就下结论,或把「验证损失上升」一律叫过拟合 | 判据是训练误差与验证误差的组合:两者都高且贴近 = 欠拟合(加容量);训练低、验证高且间隙扩大 = 过拟合(加正则)(定理 1.7.1)。另有「训练不稳定」「两边都好但线上差」两种形态,处置方向完全不同 |
| 部分导数 / 偏导(partial derivative)vs 梯度(gradient) | 口语里说「对 求导」时不说清是对张量的各个分量求偏导,还是对整个张量求方向导数,导致形状对不上 | 梯度是偏导数按同形状排成的张量:,与 同形(定理 1.5.3)。注意框架内部存的是它的转置(「输出 × 输入」约定),核对形状是排查转置错误的最快手段 |
| 交叉熵(cross-entropy)vs KL 散度 | 认为「最小化 KL」与「最小化交叉熵」是两件不同的事,或跨数据集直接比较交叉熵数值 | ;目标分布固定时 是常数,故训练中两者优化等价(定理 1.4.3)。但跨数据集比较时 不同,绝对值不可比 |
| 泛化误差(generalization error)vs 经验误差(empirical error) | 把「泛化误差」当成「测试集上的那个数字」,忽略它是对分布的期望 | 经验误差是训练集上的平均损失,泛化误差是对数据分布的期望;工程上用验证 / 测试集估计它,且测试集只应用一次(定义 1.7.1) |
三、时效补注
母本录播年代与当前工程默认之间存在若干处「已经换了默认答案」的差异。以下按「主题 / 母本年代的做法 / 截至 2025 年的工程默认 / 本教程的处理」列出;涉及具体版本与比例的条目均标注为社区惯例,采用前应结合你自己的配置验证。
| 主题 | 母本年代(约 2018–2020 录播口径) | 当前工程默认(截至 2025) | 本教程的写法 |
|---|---|---|---|
| 隐藏层激活 | 在 Sigmoid / tanh / ReLU 之间选,倾向讲 tanh 的零均值优势 | ReLU 族仍是视觉与通用任务的默认;语言模型前馈层默认 SwiGLU 类门控 | 1.3 按「饱和 / 分段线性 / 平滑 / 门控」四族讲,把门控定位为含参数的层而非激活函数 |
| 优化器 | SGD + Momentum 为主,Adam「更快但泛化有时略差」 | AdamW 是多数任务的默认( 起步,配 warmup + 余弦) | 1.6 以 AdamW 为主线,同时保留「追求极致泛化且有人力调参时用 SGD + Momentum」的决策清单 |
| 权重衰减写法 | 常在损失里加 L2 项 | 用解耦权重衰减(AdamW),且对偏置 / 归一化参数不施加 | 定理 1.6.1 明确两者不等价;定理 1.6.1 给四条实践说明 |
| 归一化层 | BatchNorm 为主,LayerNorm 用于 RNN / Transformer | Transformer 一律用 LN 类;大模型普遍换成 RMSNorm | 1.7.4 以「统计量覆盖哪些维度」为统一视角给出 BN / LN / RMSNorm 三方对比 |
| 初始化 | Xavier 常被当作通用答案 | 激活与初始化必须配对:Sigmoid / tanh 配 Xavier,ReLU 族配 Kaiming | 方法 1.2.2 与 推论 1.3.1 各给一次配对规则与错配症状 |
| 大批量训练 | 批大小受单卡显存与数据并行限制 | 多卡下批可达数万,配线性缩放规则与 warmup,必要时用 LARS / LAMB | 定理 1.6.2 给线性缩放的形式、失效条件与平方根缩放等替代 |
| 泛化图景 | 「容量越大越容易过拟合」的 U 形曲线 | 深度学习里观察到双下降;参数量本身不是过拟合的充分或必要条件 | 1.7.5 把双下降作为经典图景的边界陈述,并注明其在大规模真实任务上仍有争议 |
| 混合精度 | fp16 + loss scaling 为主 | BF16 为默认(动态范围大、通常无需 loss scaling);FP8 在部分硬件上可用但需 scaling | 本讲只在 1.5.2 的「内存换速度」 与 1.6 提到它对显存与 的影响,完整处理放在第九讲 |
| 数据规模与算力 | 课程 Lab 用几 KB 到几 MB 的小数据 | 教学仍建议从小数据起步;但「模型越大越好」的直觉需要缩放律来校正 | 1.2.3 明确通用逼近的边界,1.7 讨论容量与数据的匹配 |
一条通用提醒:本讲涉及的所有具体数字(如 的前馈宽度比、 的常见量级、)都来自特定配置。正文对不确定处已标注「需核实」;引用到自己的项目前,请以你所使用的框架版本与模型公开配置为准。
为什么这些默认会变:它们大多不是数学结论,而是「在当时的硬件、数据规模与框架能力下,性价比最高的选择」。硬件(BF16 / FP8)、训练规模(上万卡、数万亿 token)与框架(融合算子、分布式归一化)任一项变化,默认答案就可能改写。因此本页的价值在于记录「变化发生过」,而不是把 2025 年的默认当成永久正确。
四、本教程更正记录
| 位置 | 原表述 | 更正 | 说明 |
|---|---|---|---|
sec11.md(第 1 讲 · 1.1 节) | 曾出现 2 个 ::: 语义盒未闭合:::: ex 例 1.1.1 内嵌的 ::: proof 解 之后只写了一个收尾 :::,随后紧跟的 method / errata 区块也被吞进未闭合的盒子里 | 已修正:按「先关内层、再关外层」的顺序补齐收尾 :::,使 ex → proof → ex 三层各自平铺闭合;节末的 method / errata / note 回到顶层 | 未闭合的盒子会让 mdBook 把后续整段内容渲染进折叠块,表现为「点击例 1.1.1 展开后出现整节内容」。自查命令(见《写作规范》中的「讲末六页规范」第七节)现已输出「全部配平」 |
旧 lec01.md(单文件版第 1 讲) | 节号沿用 1.x 的单文件编号(如 1.2、1.3),与「先修工具箱」「附录 C」的编号空间混在同一序列里,交叉引用无法判断指的是讲次还是全局章节 | 已统一为「讲号.节号」体系:第 1 讲的节一律写作 1.1–1.7,节页文件名为 sec11.md–sec17.md;盒子编号同步为「1.节.序号」(如 定理 1.5.3) | 重构后每个盒子的编号在全书内唯一,锚点 {#def-1.2.1} 形如「类型-讲.节.序」;旧文件的扁平编号(如 1.x)在新的多文件结构下不再使用。重定向与旧链接的迁移由 SUMMARY.md 统一承担,本页只记录口径变化 |
sec12.md–sec17.md(共 11 处节标题) | 这些节页内部的交叉引用形如 [1.5.4](#sec-1.5.4),但对应标题上没有声明 {#sec-…} 锚点,链接指向不存在的锚点 | 已补齐 11 个节锚点:sec12.md 补 {#sec-1.2.2};sec15.md 补 {#sec-1.5.2}、{#sec-1.5.4};sec16.md 补 {#sec-1.6.2}、{#sec-1.6.4}、{#sec-1.6.5}、{#sec-1.6.7};sec17.md 补 {#sec-1.7.1}、{#sec-1.7.3}、{#sec-1.7.6}、{#sec-1.7.7}({#sec-1.2.3}、{#sec-1.3.5}、{#sec-1.7.4}、{#sec-1.7.5} 原有) | 只改标题行、不改任何正文措辞与编号,因此不破坏既有锚点;补齐后节页内部链接与本讲六页的引用均可稳定解析(原先只依赖构建期自动生成的中文 slug 才能命中) |
待核实的开放条目(发现新差异时追加到本表,不要就地改动正文):