《动手学深度学习》学习笔记 · 第 24~50 集合订复习版

覆盖范围:第 24 集(Softmax 回归)~ 第 50 集(Kaggle 房价实战)
总进度:50/191 ▊▊▊▊▊▏▏▏▏▏ 26.2%(突破四分之一 🎉)
进度轨迹:12.5% → 14.7% → 15.2% → 16.8% → 18.3% → 19.9% → 20.9% → 21.5% → 22.5% → 24.1% → 26.2%

🗺️ 总章节路线图

章集数主题状态
一、Softmax 回归24-29从回归跨入分类、交叉熵、手写/简洁实现、QA✅
二、GPU 番外 + 感知机30-32装 CUDA、租 AWS、XOR 困局✅
三、多层感知机 MLP33-35隐藏层 + 激活函数注入非线性✅
四、模型选择与过拟合36-40验证集生命线、K 折、欠/过拟合诊断与代码✅
五、权重衰退41-43L2 正则化(治过拟合第一剂药)✅
六、丢弃法 Dropout44-46训练随机丢、推理不丢✅
七、数值稳定性 + 初始化 + 房价实战47-50梯度消失/爆炸、Xavier/He、首次 Kaggle✅
下一站51-52课程竞赛:加州 2020 房价预测 + QA,之后进入模型构造篇⏭

📑 目录导航


第一章 Softmax 回归(第 24-29 集)

本章路线:24 Softmax 回归 ✅ → 25 损失函数 → 26 图片数据集 → 27 从零实现 → 28 简洁实现 → 29 QA,分类四件套(模型 / 损失 / 数据 / 训练)正式开跑 🚀

1.1 第24集:Softmax 回归(10:27)

一句话总结:从"回归"跨入"分类",Softmax 把网络输出归一化为类别概率。 📊

📌 知识卡:https://go.tabbit.site/projects/7Ks3mPwQrN

Markdown 版可视化(Unicode)

线性回归 ────────→ Softmax 回归
   │                    │
   ▼                    ▼
1个连续输出          n个输出(=类别数)
ŷ = wᵀx + b         o_i = wᵢᵀx + bᵢ
                        │ softmax 归一化
                        ▼
              ŷ_i = e^{o_i} / Σe^{o_j}
              概率和 = 1 ✅

线性回归 vs Softmax 回归

对比维度线性回归(19集)Softmax 回归(24集)
问题类型回归分类 ⭐
输出个数1 个n 个(类别数)
输出含义连续数值各类别概率
关键运算无softmax 归一化
损失函数均方误差交叉熵(下集讲)
标签形式实数独热编码 one-hot

详细总结

第24集(10:27)是分类问题的开篇理论课,李沐用"从回归到分类只差最后一步归一化"的思路切入。🎯

  1. 分类的本质:输出从"1个连续值"变成"n个离散类别概率"。标签用独热编码(如猫=[1,0,0]、狗=[0,1,0]),模型任务从"猜数字"变为"猜比例"。
  2. 模型结构不变:依然是单层神经网络,只是输出层神经元从 1 个扩到 n 个,每个类别各配一组 (wᵢ, bᵢ),得到 n 个 logit。
  3. Softmax 的作用:logit 可正可负、和无约束,直接当概率不合法;通过 e{o_i}/Σe{o_j} 两步——先指数拉到全正、再除以总和归一化——输出就是合法概率分布,且最大 logit 对应最大概率(argmax 预测不受影响)。
  4. 数值稳定性预警:e¹⁰⁰ 上溢、e⁻¹⁰⁰ 下溢,引出第47集"数值稳定性"的伏笔,也是第25集交叉熵实现时要做 log-softmax 合并的原因。
  5. 承上启下:本集定模型,第25集定损失(交叉熵),第26集准备 Fashion-MNIST 数据,第27集手写完整实现。

学习进度:基础篇 ▊▊▊▊▊▊▊▊▊▊▉▏▏▏▏▏▏▏▏▏ 12.5%(24/191)

📺 原视频:https://www.bilibili.com/video/BV1daQAYuEYm/?p=24

1.2 第25-26集:损失函数 + 图片分类数据集

一句话总结:第25集讲分类专属损失"交叉熵"(06:25),第26集备好数据集 Fashion-MNIST(09:26),分类四件套凑齐一半。 🧩

📌 知识卡:https://go.tabbit.site/projects/Jxuo26kNQv

Markdown 版可视化(Unicode)

第25集:交叉熵的推导链
最大似然 ─→ 取负对数 ─→ l = −log ŷ_y ─→ 梯度 = softmax(o) − y
            ▊▊▊▊▊ 极简,一行反传

第26集:数据加载流
FashionMNIST ─→ ToTensor ─→ DataLoader ─→ batch 迭代
 6万+1万        归一化       batch_size      开训 ✅

两集对比

维度第25集 损失函数第26集 图片数据集
性质理论推导实操准备
核心交叉熵 = −log ŷ_yFashion-MNIST 规格
关键点梯度=预测−标签784维输入 / 10类
重要度▊▊▊▊▊▊▊▊▍

详细总结

两集连看正好是"分类任务的最后两块拼图"。🧩

第25集《损失函数》(06:25):为什么分类不能用均方误差?因为输出是概率分布,需要"对数"来衡量。交叉熵 l = −log ŷ_y 只看真实类的预测概率——概率越接近 1,损失越接近 0。它来自最大似然估计,且梯度形式 softmax(o) − y 极简,这是 Softmax+交叉熵成为分类标配的根本原因。

第26集《图片分类数据集》(09:26):Fashion-MNIST——10类服饰、28×28灰度图、6万训练+1万测试。不用经典 MNIST 是因为它太简单(随便 98%+),区分不出模型优劣。代码上用 torchvision.datasets 下载 + DataLoader 批量迭代,顺便讲了读取速度计时(num_workers 多进程加速)。

📺 原视频:

  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=25
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=26

1.3 第27-28集:Softmax 从零实现 + 简洁实现

一句话总结:第27集手写完整分类训练(18:44),第28集 nn API 三行搞定(04:10),分类四件套收官。 ✅

📌 知识卡:https://go.tabbit.site/projects/eirywAubUo

Markdown 版可视化(Unicode)

第27集:从零组装流水线
展平784 ─→ X@W+b ─→ softmax ─→ 交叉熵 ─→ backward ─→ SGD ─→ 84% ✅
            ▲ 先减max防爆   ▲ gather取真实类

第28集:API 压缩
nn.Flatten ─→ nn.Linear ─→ CrossEntropyLoss ─→ 训练循环照旧
                          softmax 藏这里 ⭐

手写 vs API 对比

组件27集手写28集 API
模型X@W+bnn.Linear(784,10)
softmax手写归一化藏在 CrossEntropyLoss ⭐
损失gather+lognn.CrossEntropyLoss
代码量▊▊▊▊▊ 约100行▏ 约10行

详细总结

第27集(18:44):全课第一个"从零手写分类器",把 24-26 集的理论全部落成代码:图片展平成 784 维 → 手写 softmax(先减最大值防溢出)→ gather 取真实类算交叉熵 → 训练循环跑 10 个 epoch 达 ≈84% 准确率,还顺手封装了 Accumulator 精度评估器和动画可视化。🛠️

第28集(04:10):框架版示范——nn.Flatten + nn.Linear + CrossEntropyLoss 十行收工。⚠️ 最易踩的坑:CrossEntropyLoss 内部已含 softmax,千万不要在输出层再手动加一层。弹幕也笑称"从16分钟变4分钟",框架威力尽显。

核心代码速查

1)手写 softmax:先减最大值防溢出,再指数归一化

def softmax(X):
    X_exp = torch.exp(X - X.max(dim=1, keepdim=True).values)  # 减 max 防上溢
    return X_exp / X_exp.sum(dim=1, keepdim=True)             # 归一化为概率

2)交叉熵:gather 取真实类概率,再取负对数

def cross_entropy(y_hat, y):
    return -torch.log(y_hat.gather(1, y.view(-1, 1))).mean()  # 只看真实类

3)第28集 nn.Sequential 简洁实现:展平 + 线性层,CrossEntropyLoss 内部已含 softmax

# 模型:不要再手动加 softmax
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))

# 训练:损失函数直接选交叉熵,SGD 优化器照旧,训练循环与手写版一致
loss = nn.CrossEntropyLoss()
trainer = torch.optim.SGD(net.parameters(), lr=0.1)

学习进度:▊▊▊▊▊▊▊▍▏▏ 14.7%(28/191)

📺 原视频:

  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=27
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=28

1.4 第29集:Softmax 回归 QA(31:00)

一句话总结:分类章节 31 分钟大答疑,收尾线性模型时代。 💬

📌 知识卡:https://go.tabbit.site/projects/sRYYe27YGz

Markdown 版可视化(Unicode)

高频答疑热度:
交叉熵 vs MSE      ▊▊▊▊▊ 最核心,"错得越狠学得越猛"
准确率不能当损失    ▊▊▊▍  不可导,只能做评估
学习率/批量调参     ▊▊▊   一次只动一个
sigmoid 关系       ▊▍    二分类特例
类别不平衡         ▊▍    加权损失 / F1

章节里程碑:
预备+数学 ✅ ─→ 线性回归 ✅ ─→ Softmax ✅ 🎉 ─→ MLP(32集起)⏭

高频问答速查

问题一句话答案
为何用交叉熵?梯度=预测−标签,错得越离谱学得越猛 ✅
准确率当损失?❌ 不可导无梯度,只能做评估指标
sigmoid 关系?softmax 在2类上的特例
调参顺序?先学习率(影响最大),再批量,一次一个

详细总结

第29集(31:00)是 Softmax 章节的收官大答疑,也是全课程前半段的"理论半场"终点。核心金句:分类任务"错得越离谱,梯度越猛"(交叉熵),以及准确率不能当损失函数(不可导、无梯度)。李沐还强调调参纪律:先动学习率、一次只调一个变量 🎯

里程碑:线性模型时代(1-29集)全部完结 🎉 中间插入第30-31集 GPU 环境番外(装 CUDA、AWS 租卡),第32集《感知机》正式开启神经网络时代 🚀

学习进度:▊▊▊▊▊▊▊▊▏▏ 15.2%(29/191)

📺 原视频:https://www.bilibili.com/video/BV1daQAYuEYm/?p=29


第二章 GPU 番外 ×2 + 感知机(第 30-32 集)

一句话总结:第30集装 CUDA、第31集租 AWS 卡搞定硬件,第32集感知机登场揭开神经网络时代(13:53)。 🚀

📌 知识卡:https://go.tabbit.site/projects/RvjShSPyg1

Markdown 版可视化(Unicode)

三集路线:
30 Windows装CUDA ─→ 31 AWS租GPU ─→ 32 感知机开篇
  nvidia-smi         spot竞价        神经网络老祖宗
  torch.cuda=True    用完释放💸       XOR困局 ⭐
集数主题关键点重要度
30装 CUDA版本对应 + is_available() 验证▊▊▍
31AWS GPU竞价实例省钱,学完即释放▊▊
32感知机XOR 单层无解 → 催生多层网络▊▊▊▊▊
XOR 困局(32集核心):
0,0→0  ●        ● 1,0→1
             一条直线切不开 ● 和 ★
0,1→1  ★        ● 1,1→0
→ 必须多层 + 非线性激活

详细总结

第30集(07:54):Windows GPU 环境三步走——nvidia-smi 确认显卡、官网装对应版本 CUDA Toolkit、torch.cuda.is_available()=True 验证成功。没 N 卡直接 CPU 跑课,前 50 集完全够用。

第31集(08:16):没有卡就租——AWS g 系列竞价实例最省钱,SSH 登录配好环境即用,核心纪律是用完立刻释放避免账单刺客;国内可用 AutoDL 等平台替代。

第32集(13:53):神经网络时代开篇 🎬 感知机是"加了阈值的线性模型",但它有个致命死穴——XOR 异或问题一条直线永远切不开(1969 年 Minsky 因此把 AI 打入寒冬)。破局靠两件武器:多层隐藏层(XOR=AND+OR 组合)+ 激活函数(ReLU 最常用)注入非线性,这正是下一集《多层感知机》的全部动机。

学习进度:▊▊▊▊▊▊▍▏▏ 16.8%(32/191)

📺 原视频:

  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=30
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=31
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=32

第三章 多层感知机 MLP(第 33-35 集)

一句话总结:第33集讲 MLP 理论(22:40),第34集代码实现(08:27),第35集 QA 答疑(26:49),隐藏层 + 激活函数注入非线性,分类精度从 84% 跃升到 88%。 🚀

📌 知识卡:https://go.tabbit.site/projects/wM8xA3Z3G6

Markdown 版可视化(Unicode)

MLP 三部曲路线:
33 MLP理论 ─→ 34 代码实现 ─→ 35 QA答疑
隐藏层+σ      Sequential     调参心法
万能逼近⭐    784→256→10     学习率元凶
集数主题关键点重要度
33MLP 理论线性套线性仍线性 → σ 注入非线性▊▊▊▊▊
34代码实现nn.Sequential 搭 784-256-10▊▊▊▊
35QA隐藏层取 2 的幂;不收敛先查学习率▊▊▊
激活函数对比:
sigmoid  (0,1)   易饱和、非零中心  ▓▓░░░
tanh    (−1,1)   零中心仍饱和      ▓▓▓░░
ReLU   [0,∞)    最快无饱和 ⭐     ▓▓▓▓▓

效果跃迁:
Softmax ≈84%  ▊▊▊▊▊▊▊▊▏
MLP     ≈88%  ▊▊▊▊▊▊▊▊▊  (+4个点)

详细总结

第33集(22:40):MLP 理论核心一页讲透——线性模型套多少层都是线性,永远画不出 XOR 的分界线;解决办法是隐藏层 + 激活函数 σ:h = σ(W₁x+b₁),有了非线性才能逼近任意函数。三大激活函数登场:sigmoid 易梯度消失、tanh 零中心仍饱和、ReLU 无饱和区计算最快是默认首选 ⭐。

第34集(08:27):nn.Sequential(Flatten → Linear(784,256) → ReLU → Linear(256,10)) 十行搭完,隐藏单元取 256(2 的幂,GPU 友好)。最妙的是训练流程完全复用——交叉熵 + SGD 原封不动只换模型,框架解耦的价值体现。Fashion-MNIST 10 epoch 准确率 ≈88%,比纯 Softmax 的 84% 直接涨 4 个点。

第35集(26:49):QA 实战心法精选——隐藏层宽度是超参数(过大过拟合、过小欠拟合);深度换宽度表达力相近但更深训练更难;损失函数非凸没关系,SGD 实践中总能找到足够好的局部解;不收敛先查学习率(最常见元凶),再查归一化和初始化。

学习进度:▊▊▊▊▊▊▊▏▏ 18.3%(35/191)

📺 原视频:

  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=33
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=34
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=35

第四章 模型选择与过拟合(第 36-40 集)

4.1 第36-38集:模板思维 / 模型选择 / 过拟合诊断

一句话总结:第36集讲模板思维(03:20),第37集讲模型选择(18:37),第38集讲过拟合诊断(16:47),训练误差 ≠ 泛化误差,测试集只许碰一次。 🎯

📌 知识卡:https://go.tabbit.site/projects/J2WXU66jrM

Markdown 版可视化(Unicode)

方法论三连路线:
36 模板思想 ─→ 37 模型选择 ─→ 38 过拟合诊断
复用训练流程   验证集生命线    容量vs数据博弈
换任务只改模型 K折交叉验证⭐  诊断表开药方💊
集数主题关键点重要度
36模板思维训练流程模板化,效率跃升▊▊▊
37模型选择测试集只许碰一次!▊▊▊▊▊
38过拟合容量与数据复杂度要匹配▊▊▊▊▊
模型容量光谱:
欠拟合 ◄─▓▓▓░░░░░░░─► 过拟合
容量太小          刚刚好⭐         容量太大
训练误差高        双低🎯           训练误差低
泛化误差高                         泛化误差高

诊断处方速查:
欠拟合 → 加容量/训久点/换模型 💊
过拟合 → 更多数据/正则化/减容量 💊

详细总结

第36集(03:20):短小精悍的实战宣言——李沐强调训练/评估流程要模板化:一次写好,换任务只改模型定义,这是高效实验的核心。同时揭示现实:数据科学家大部分时间花在调参实验上,剩下才用来提那几个点。

第37集(18:37):本章最重要的概念集——训练误差 ≠ 泛化误差,机器学习的目标是后者。三大数据集铁律:训练集学参数、验证集选模型和调超参(间接影响训练,用完即弃)、测试集只许碰一次!数据不够时上 K 折交叉验证(K 常取 5 或 10),代价是要训练 K 次。

第38集(16:47):诊断学核心——模型容量 vs 数据复杂度的匹配艺术。欠拟合(训练误差和泛化误差都高):加容量、训久点、换模型;过拟合(训练误差低但泛化误差高):更多数据、正则化、减容量。容量由参数个数和参数取值范围共同决定——这个定义是后续权重衰退的理论地基 🧱

过拟合 vs 欠拟合 快速诊断表

症状诊断结论处方
训练误差高 + 泛化误差高欠拟合(容量太小)加数据 / 增大模型容量 / 训久一点 / 换更强模型
训练误差低 + 泛化误差高过拟合(容量太大)加数据 / 正则化(L2、Dropout)/ 减小模型容量
训练误差低 + 泛化误差低刚刚好 🎯保持现状,别再动容量

用多项式阶数 d 控制模型容量,一行代码即可在欠拟合与过拟合之间切换:

# d 是多项式阶数:d=1 欠拟合(直线),d=3 刚好,d=10 过拟合
# 输入 d 个多项式特征,输出 1 个预测值
net = nn.Sequential(nn.Linear(d, 1))

学习进度:▊▊▊▊▊▊▊▏▏ 19.9%(38/191)

📺 原视频:

  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=36
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=37
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=38

4.2 第39-40集:代码实现 + QA(45:00)

一句话总结:第39集把 36-38 集方法论落成代码(多项式回归演示过拟合),第40集 45 分钟大答疑收尾模型选择章节。 💻

📌 知识卡:https://go.tabbit.site/projects/J2WXU66jrM

Markdown 版可视化(Unicode)

第39集:多项式回归演示过拟合
阶数 d=1 ─→ d=3 ─→ d=10
欠拟合     刚刚好⭐  过拟合
误差都高   训练/泛化双低🎯  训练低、泛化高

第40集:QA 高频答疑
验证集 vs 测试集  ▊▊▊▊▊ 测试集只许碰一次!
K 折怎么选 K      ▊▊▊▍  5 或 10,数据少用大 K
过拟合怎么办      ▊▊▊▊  数据/正则/减容量
集数主题关键点重要度
39代码实现多项式阶数 d 控制容量,直观演示欠/过拟合▊▊▊▊
40QA 答疑验证集选模型、测试集只碰一次、K 折选 K▊▊▊▊▊
多项式阶数光谱:
d=1 ─▓░░░░─► d=3 ─▓▓▓▓▓─► d=10
欠拟合        刚刚好⭐       过拟合
直线太简单    双低🎯         曲线太复杂

详细总结

第39集(代码):把 36-38 集的方法论落成可运行代码,用多项式回归直观演示模型容量对拟合效果的影响。核心是控制多项式阶数 d:d=1 是直线(欠拟合,训练和泛化误差都高)、d=3 恰到好处(双低 🎯)、d=10 曲线剧烈摆动(过拟合,训练误差低但泛化误差高)。

  • 核心代码逻辑:通过 nn.Sequential 动态拼接不同阶数的特征变换——先用 nn.Linear 把原始输入映射到多项式特征空间(如 d 阶对应 d 个特征),再接入线性输出层。这样只需改一个参数 d,就能在欠拟合、刚好、过拟合三种状态间自由切换,完美演示「容量 vs 数据复杂度」的博弈。
  • 可视化验证:训练/验证误差曲线是本节的关键——d=1 时两条曲线都居高不下(欠拟合);d=3 时训练误差和验证误差同时降到最低(双低 🎯);d=10 时训练误差继续走低但验证误差反而飙升(过拟合),一眼看清「训练误差低 ≠ 泛化误差低」的铁律。

第40集(QA,45 分钟):模型选择章节的收官大答疑,也是全课最长的 QA 之一。核心纪律反复强调:测试集只许碰一次,选模型和调超参一律在验证集上进行;数据不够时用 K 折交叉验证(K 常取 5 或 10,数据越少 K 越大),代价是训练 K 次。还澄清了验证集「用完即弃」的定位——它间接影响训练(选超参),但绝不能拿测试集反复试。

  • 验证集 vs 测试集:验证集用于选模型、调超参,可以反复使用但「用完即弃」——它间接影响训练(选超参);测试集只许碰一次,用来最终评估泛化能力,绝不能拿它反复试模型,否则就「污染」了测试集,评估结果不再可信。
  • K 折交叉验证选 K:把训练集分成 K 份,轮流拿 1 份当验证集、其余 K-1 份训练,取 K 次平均误差。K 常取 5 或 10:数据越少 K 越大(充分利用数据),但代价是要训练 K 次,计算成本线性上升。
  • 过拟合应对策略:诊断清楚后对症下药——更多数据(最直接)、正则化(权重衰退 L2、丢弃法 Dropout)、减小模型容量(降阶数 d、减隐藏单元)。核心心法:容量与数据复杂度要匹配,欠拟合加容量、过拟合减容量。

学习进度:▊▊▊▊▊▊▊▊▏ 20.9%(40/191)

📺 原视频:

  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=39
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=40

第五章 权重衰退(第 41-43 集)

一句话总结:第41集——治过拟合第一剂药,L2 正则化给权重"缩水",限制参数取值范围而非个数(13:03)。 💊

📌 知识卡(第41-43集三合集):https://go.tabbit.site/projects/ypnG8yxJs7

Markdown 版可视化(Unicode)

权重衰退三部曲:
41 L2理论 ─→ 42 代码实现 ─→ 43 QA调参
加惩罚项     weight_decay    λ对数尺度扫描
w逐次"衰退"⭐ 一行框架版      可与dropout叠加

第41集:L2 正则化核心
损失函数加惩罚项:ℓ + λ/2·‖w‖²
  ├─ 别名:岭回归 / Tikhonov 正则
  ├─ 思路:限制参数取值范围,不砍参数个数
  ▼
SGD 更新式推导:
普通: w ← w − lr·∂ℓ/∂w
衰退: w ← (1 − lr·λ)·w − lr·∂ℓ/∂w
                       ↑ 每次先"缩水"一点点
  ▼
λ 越大 → w 越小 → 函数越平滑 → 泛化越好

与第38集「模型容量」的承接关系

维度第38集 模型容量第41集 权重衰退
核心定义容量 = 参数个数 + 参数取值范围限制取值范围 → 缩小容量
手段诊断过拟合的标尺损失函数加 L2 惩罚项
效果容量太大 → 过拟合w 变小 → 函数更平滑
关系理论地基 🧱地基上的第一剂药 💊
集数主题关键点重要度
41L2 理论λ/2·‖w‖²,限值域不砍参数个数▊▊▊▊▊
42代码实现框架一行 weight_decay=wd▊▊▊▊
43QAλ 验证集上扫;b 不该被惩罚▊▊▊
λ 效果光谱:
λ=0 ─▓░░░░─► λ越大 ─▓▓▓▓▓─► λ→∞
过拟合         w变小            w≈0
原模型         函数更平滑⭐      只剩 bias(欠拟合)

SGD 更新对比:
普通: w ← w − lr·∂ℓ/∂w
衰退: w ← (1 − lr·λ)·w − lr·∂ℓ/∂w
                       ↑ 每次先"缩水"一点点

详细总结

第41集(13:03):权重衰退(L2 正则)是治过拟合第一剂药,直接承接第38集「容量由参数个数和参数取值范围共同决定」的定义——既然容量太大导致过拟合,那就不砍参数个数,而是限制参数取值范围:在损失函数上加上 λ/2·‖w‖² 惩罚项(别名岭回归 / Tikhonov 正则)。推导出 SGD 更新式后发现玄机:w ← (1−lr·λ)·w − lr·∇ℓ,每次更新前权重先乘衰减因子、逐次"衰退"——名字就是这么来的。λ 越大 → w 越小 → 函数越平滑,且 bias b 通常不参与衰减。

第42集(12:35)代码实现要点:

  • 从零实现只需手动给 loss 加惩罚项:loss = loss + λ/2 * (w**2).sum();
  • 框架版更简单:SGD(weight_decay=wd) 一行搞定;
  • 实验印证理论:λ=0 明显过拟合,λ=3 时训练误差略升但验证误差大降 ✅;
  • ⚠️ 框架小坑:默认会连 b 一起惩罚(严格说不该)。

第43集(11:36)QA 实战心得:

  • λ 在验证集上按 1e-4 → 10 对数尺度扫描,通用量级 1e-2 起步;
  • λ 可分层设置(输出层可弱化);
  • 与 dropout 不冲突,可叠加组合拳;
  • 惩罚为何有效?w 小 → 输入扰动对输出影响小 → 函数对噪声不敏感。

学习进度:第41集 ▊▊▊▊▊▏▏▏▏▏ 21.5%(41/191) → 第43集 22.5%(43/191)

📺 原视频:

  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=41
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=42
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=43

第六章 丢弃法 Dropout(第 44-46 集)

一句话总结:另一种正则化登场——训练时随机丢弃神经元、推理时全体保留,与权重衰退可打组合拳。 🎲

📌 知识卡(第44-46集三合集):https://go.tabbit.site/projects/kEYnQW91vf

Markdown 版可视化(Unicode)

丢弃法三部曲:
44 理论 ─→ 45 代码实现 ─→ 46 QA调参
训练丢/推理不丢  mask×X一行   p 率怎么选
期望不变技巧⭐   eval()自动关  可与L2叠加
集数主题关键点重要度
44Dropout 理论训练随机丢 p,存活值 ÷(1−p)▊▊▊▊▊
45代码实现nn.Dropout§ 一行搞定▊▊▊▊
46QAp 取 0.2~0.5;输入层不用▊▊▊
训练 vs 推理:
训练 🔨 输入 →[随机丢p]→ 层间噪声注入 ─→ 学鲁棒特征
推理 🚀 输入 →[全神经元]→ 稳定输出   ─→ 无需丢弃

正则化工具箱(第4章已集齐两件):
权重衰退 L2  ─→ 惩罚在损失函数 💊        ▊▊▊▊▊
丢弃法 Drop  ─→ 噪声注入在层间 🎲        ▊▊▊▊▊
两者可叠加 = 组合拳 🥊

详细总结

第44集(12:00):丢弃法核心规则——只在训练时丢,推理时永远不丢。每个神经元以概率 p 被丢弃,存活的值除以 (1−p) 保证期望不变(inverted dropout 的精髓)。为什么有效?标准解释:模型不能把鸡蛋放一个篮子,每个特征都可能消失,权重自然摊开学习更鲁棒的特征;李沐还给了更深的集成视角——每个 batch 相当于随机采样子网络训练,近似廉价的模型集成 🧩

第45集(12:17):从零实现就三行——mask = (rand > p).float() / (1−p) 然后 mask * X;框架版 nn.Dropout§ 更省事,训练态自动生效、eval() 自动关闭。实验:MLP 两个隐藏层分别接 p=0.2、p=0.5,结果训练误差升高(学习变难)但验证精度更稳——正则化生效的典型信号 ✅

第46集(24:53):QA 实战细节——p 常取 0.2~0.5(隐藏层),输入层一般不用;p=1 全灭学不到东西、p=0 等价没加;除以 (1−p) 就是为了推理时无需任何改动;与权重衰退不冲突可叠加,先 L2 后 dropout 是常见组合拳 🥊

学习进度:▊▊▊▊▏▏▏▏▏▏ 24.1%(46/191)

📺 原视频:

  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=44
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=45
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=46

第七章 数值稳定性 + 模型初始化 + 房价实战(第 47-50 集)

一句话总结:梯度消失/爆炸专题 + Xavier/He 初始化配方,第50集首次 Kaggle 实战把前 29 集全家桶全部落地。 🏆

📌 知识卡(第47-50集四合集):https://go.tabbit.site/projects/qoDT8rqpPb

Markdown 版可视化(Unicode)

四集路线:
47 梯度消失/爆炸 ─→ 48 初始化+激活函数 ─→ 49 QA ─→ 50 Kaggle房价🏁
链式连乘乘法灾难    Xavier/He 配方       诊断+裁剪  知识全家桶
集数主题关键点重要度
47数值稳定性连乘 <1 消失、>1 爆炸▊▊▊▊▊
48初始化Xavier 配 tanh,He 配 ReLU▊▊▊▊▊
49QA梯度裁剪治爆炸;残差+BN 治消失▊▊▊
50房价实战log 域 RMSE + K 折选参▊▊▊▊
初始化配套表:
tanh/sigmoid ── Xavier:Var = 2/(n_in+n_out) ⭐
ReLU        ── He:     Var = 2/n_in
目标:每层输出均值≈0、方差稳定 ─→ 前向不变形、反向不爆炸

房价五步流程:
读数据 → 标准化+填0 → one-hot → 线性回归+weight_decay → K折选参提交

详细总结

第47集(15:22):MLP 时代两大暗病现形——链式法则让梯度层层连乘:系数 <1 就梯度消失(底层学不动),>1 就梯度爆炸(数值溢出)。典型元凶是 sigmoid 饱和区。治疗目标:让每层的梯度和输出都保持合理范围 🎯

第48集(24:04):数值稳定的核心配方——随机初始化 + 合适的激活函数。Xavier 初始化(方差 = 2/(n_in+n_out))配 tanh/sigmoid;He 初始化(方差 = 2/n_in)配 ReLU。设计思想:让每层输出均值≈0、方差稳定,前向传播不变形、反向梯度不爆炸——初始化与激活函数必须配套选 🔄

第49集(22:30):QA 实战诊断——打印各层梯度范数(变 0 = 消失、NaN/巨大 = 爆炸);爆炸用梯度裁剪(RNN 常用);消失换 ReLU + Xavier/He,更深网络用残差连接 + BatchNorm(CNN 章节伏笔📌);batch 越大梯度越稳但泛化可能略降。

第50集(14:31):里程碑时刻——首次 Kaggle 实战!用前 29 集全家桶打房价预测:数值标准化、缺失值填 0、离散特征 one-hot、线性回归 + weight_decay 治过拟合、K 折交叉验证选超参,评估用 log 域 RMSE。理论全部落地 🏆

学习进度:▊▊▊▊▊▏▏▏▏▏ 26.2%(50/191)🎉 突破四分之一!

📺 原视频:

  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=47
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=48
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=49
  • https://www.bilibili.com/video/BV1daQAYuEYm/?p=50

🏁 阶段收官与下一站

至此,第 4 章 MLP 完整章节正式收官 🎉 从 Softmax 分类入门,到 MLP、模型选择、两件正则化武器(权重衰退 / Dropout),再到数值稳定性与首次 Kaggle 实战,线性模型与浅层网络的知识全家桶已全部打通。

下一站:第 51-52 集《课程竞赛:加州 2020 房价预测 + QA》,之后正式进入模型构造篇 ⏭

更多推荐