第 1 讲总结 · 深度学习导论
本页把 导览 与 1.1–1.7 压成一张可复习的骨架。用法:先只看表格的「核心问题」列做自问,答不全再读「关键结论」列,最后回到「典型陷阱」列做校核。
节一览
| 节 | 核心问题 | 关键结论 | 典型陷阱 |
|---|---|---|---|
| 1.1 从神经元到感知机 | 一个神经元的数学形式与能力边界是什么? | 神经元 = 加权求和 + 偏置 + 非线性(定义 1.1.1);单层的天花板是线性可分,XOR 是最小反例(例 1.1.1);可分且有界时至多 次更新收敛(定理 1.1.1) | 以为「换更光滑的激活」就能让单层变强——能力没变,变的只是可训练性 |
| 1.2 多层感知机与通用逼近 | 堆成层之后表达能力涨到哪、涨到什么程度? | 前向是「矩阵混 + 逐元素弯」交替 次(定义 1.2.1);去掉非线性则深度退化为一个仿射映射(定理 1.2.1);形状推演只需三条规则、参数量与批大小无关;通用逼近只保证存在(定理 1.2.2),初始化靠方差守恒:Xavier / Kaiming | 把通用逼近当成「随便建个大网络就能逼近任意函数」的工程保证 |
| 1.3 激活函数:非线性从哪来 | 为什么隐藏层不能用 Sigmoid?现代默认用什么? | 梯度要连乘每层导数;全 Sigmoid 网络跨 层的衰减有结构性上界 (定理 1.3.1);ReLU 不饱和但有不可自愈的死亡问题;平滑型与门控型(定义 1.3.2)是两条折中路线 | 输出层也用 ReLU 族;把 ReLU 的「稀疏」当普遍优点;以为 GELU / SiLU 一定优于 ReLU |
| 1.4 损失函数:把任务翻译成优化目标 | 损失从哪来?为什么分类不用 MSE? | 损失 = 负对数似然,配对数表(输出层值域 ↔ 概率模型)现场可推(定理 1.4.1);softmax + 交叉熵的梯度恰是 (定理 1.4.2);交叉熵 KL 常数熵(定理 1.4.3) | 网络里加了 Softmax 又用 CrossEntropyLoss(算两次);回归有离群点仍用 MSE |
| 1.5 梯度下降与反向传播 | 上百万参数的梯度怎么在有限时间里全算出来? | 步长有硬上限 (定理 1.5.1);反向传播 = 沿计算图逆序执行一串 VJP(定义 1.5.2);输入多输出少选反向模式(定理 1.5.2);误差信号一份两用(定理 1.5.3);梯度检查用中心差分 + 相对误差 | 把反向传播当成「另一种数学」;忘记清空梯度(累加);没做梯度检查就相信实现 |
| 1.6 优化器:从 SGD 到 AdamW | 为什么需要动量、自适应学习率和解耦权重衰减? | 优化器改的是方向与逐参数步长(定义 1.6.1);动量的有效步长放大 (命题 1.6.1);Adam 的更新量级约等于 (定义 1.6.4);L2 与权重衰减在自适应下不等价(定理 1.6.1);批 × ⇒ 学习率 ×(定理 1.6.2) | 以为换了 Adam 就不用调学习率;学习率与批大小只改一个;梯度没裁剪就开混合精度 |
| 1.7 泛化、正则化与归一化 | 训练集上对了,为什么测试集上错? | 泛化误差按近似 / 估计 / 优化三类拆开(推论 1.7.1),三类手段互不通用;正则化是能力预算的再分配(定义 1.7.2);归一化真正改的是曲率(定义 1.7.3);BN 需 running stats、LN 类训练推理一致(定理 1.7.2);深度时代还有双下降(定理 1.7.3) | 用验证集调参又用它报结果(数据泄漏);在变长序列或小批量上用 BatchNorm |
一条主线:因为单个线性单元的能力止于线性可分(1.1),所以必须分层把输入先变换再切分(1.2);因为层一多,唯一的非线性来源就成了能否训得动的开关(1.3),所以还要先回答「什么叫好」才能定义学习目标(1.4);有了目标,用一次前向 + 一次反向拿到全部梯度(1.5)才让「分层 + 目标」变得可计算;算出梯度之后,方向、逐参数步长与约束形式怎么选决定轨迹与最终解(1.6);而训练误差降下去还不等于任务完成,能不能带到没见过的数据上由数据、正则与评估方法共同决定(1.7)。
三句话带走
- 任何深度网络的训练都能拆成三件事:定义结构、定义损失、用梯度下降最小化损失。 反向传播只是链式法则在计算图上的高效实现,不是第四件事——它把求全部梯度的代价从 次前向降到 次前向加 次反向。
- 每一步出错都有固定症状。 结构错 → 形状报错或深层训不动;目标错 → 收敛慢、概率过自信、少数类被忽略;优化错 → 损失不降 / 发散 / 震荡;泛化错 → 训练好验证差、离线好线上差。按症状定位环节,比盲调超参快一个数量级。
- 能表示不等于能学会,能学会不等于带得走。 通用逼近只保证存在性(宽度不可寻、可训性无保证、样本效率无保证);而「泛化异常好」的第一嫌疑人常常不是模型,而是评估方法本身(先排除数据泄漏,再相信任何指标)。
值得记住的六个定量结论
| 结论 | 数值 / 形式 | 出处 |
|---|---|---|
| 感知机收敛步数 | ,与学习率无关 | 定理 1.1.1 |
| 全 Sigmoid 深层衰减 | 跨 层至少乘 : 约 | 定理 1.3.1 |
| softmax + 交叉熵梯度 | ,落在 附近 | 定理 1.4.2 |
| 动量有效步长 | 放大 : 约 倍 | 命题 1.6.1 |
| 线性缩放规则 | 批大小 × ⇒ 学习率 ×(配 warmup) | 定理 1.6.2 |
| 梯度检查实用阈值 | float64 + 中心差分:rel_err 通过, 基本可确定有 bug | 定义 1.5.4 |
症状 → 环节 → 去处
| 症状 | 出错环节 | 回去读 |
|---|---|---|
| 直接报形状不匹配 | 定义结构 | 方法 1.2.1、方法 1.2.3 |
| 不报错但精度上不去 | 定义结构(静默形状错误) | 1.2.7 |
| 深层网络损失长期不降 | 定义结构 / 优化(激活与初始化错配) | 推论 1.3.1、1.2.5 |
| 收敛慢、概率过自信 | 定义损失 | 1.4.10 |
| 损失突然跳到很大值或出现 NaN | 最小化损失(学习率 / 数值) | 1.4.9、1.6.9 |
| 手写算子怀疑出错 | 梯度实现 | 方法 1.5.1 |
| 训练好、验证差 | 带得走吗(估计误差) | 推论 1.7.1、1.7.8 |
| 验证指标异常地高 | 评估方法(先怀疑泄漏) | 1.7.6 的数据泄漏清单、方法 1.7.2 |
复习路线与验收
- 当天:合上书复述本页「一条主线」;写不出就回 导览 的「本讲地图」。
- 隔天:做 习题集 的 A 组(概念判断)与 B 组前两题;B 组必须手写推导,不许只看答案。
- 第 3 天:做 C 组(每组都有可运行的验收标准);把不通过的验收标准当成「哪一个环节没接上」的证据。
- 第 7 天:综合自测卷 闭卷计时一次;错题按文末漏点定位表回查,再用 回忆卡 补漏。
- 对账:学习目标自检表 十条全部「能」,才可以进入第 2 讲。
与后续的连接
- 第 2 讲 · 深度序列建模:本讲把一切网络归结为「结构 + 损失 + 梯度下降」,但 MLP 要求输入是固定长度向量、且对维度顺序不作任何假设。序列数据两条都不满足——第 2 讲从这里出发,先给出 RNN 与其梯度病态,再引出注意力与 Transformer。变的只是结构这一环,1.4–1.6 的损失、反传与优化器照旧搬用。
- Lab 1 · 深度学习入门与音乐生成:第一部分用一层网络把「前向 → 损失 → 反向 → 更新」跑通(对应 1.4 与 1.5 的两条盒子,并会亲手验证去掉激活后拟合退化,即 定理 1.2.1);第二部分的字符级 RNN 属于 第 2 讲 的主题,但训练循环完全沿用本讲的 1.6。
- 公式与推导的收口:附录 C.1 给矩阵形式的反向传播,附录 C.2 给梯度检查的原理,附录 C.15 给 Adam 偏差修正的另一种写法。
- 排错入口:训练不收敛 / 过拟合 / 指标异常时,先按 工程工具箱 的排查树走一遍,再回到本讲 定理 1.7.1、定理 1.7.2、定理 1.7.3、推论 1.7.1定位是容量问题、优化问题还是评估问题。
- 自检路径:习题集(A/B/C/D 四组)→ 回忆卡(当天 / 隔天 / 第 3 天 / 第 7 天)→ 综合自测卷(闭卷计时 100 分);学习目标自检表 用来逐条对账 K1.x / S1.x / A1.x。