深度学习-线性模型与 MLP-23-50
《动手学深度学习》学习笔记 · 第 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 困局 | ✅ |
| 三、多层感知机 MLP | 33-35 | 隐藏层 + 激活函数注入非线性 | ✅ |
| 四、模型选择与过拟合 | 36-40 | 验证集生命线、K 折、欠/过拟合诊断与代码 | ✅ |
| 五、权重衰退 | 41-43 | L2 正则化(治过拟合第一剂药) | ✅ |
| 六、丢弃法 Dropout | 44-46 | 训练随机丢、推理不丢 | ✅ |
| 七、数值稳定性 + 初始化 + 房价实战 | 47-50 | 梯度消失/爆炸、Xavier/He、首次 Kaggle | ✅ |
| 下一站 | 51-52 | 课程竞赛:加州 2020 房价预测 + QA,之后进入模型构造篇 | ⏭ |
📑 目录导航
- 第一章 Softmax 回归(第24-29集)
- 第二章 GPU 番外 ×2 + 感知机(第30-32集)
- 第三章 多层感知机(第33-35集)
- 第四章 模型选择与过拟合(第36-40集)
- 第五章 权重衰退(第41-43集)
- 第六章 丢弃法 Dropout(第44-46集)
- 第七章 数值稳定性 + 模型初始化 + 房价实战(第47-50集)
第一章 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个连续值"变成"n个离散类别概率"。标签用独热编码(如猫=[1,0,0]、狗=[0,1,0]),模型任务从"猜数字"变为"猜比例"。
- 模型结构不变:依然是单层神经网络,只是输出层神经元从 1 个扩到 n 个,每个类别各配一组 (wᵢ, bᵢ),得到 n 个 logit。
- Softmax 的作用:logit 可正可负、和无约束,直接当概率不合法;通过 e{o_i}/Σe{o_j} 两步——先指数拉到全正、再除以总和归一化——输出就是合法概率分布,且最大 logit 对应最大概率(argmax 预测不受影响)。
- 数值稳定性预警:e¹⁰⁰ 上溢、e⁻¹⁰⁰ 下溢,引出第47集"数值稳定性"的伏笔,也是第25集交叉熵实现时要做 log-softmax 合并的原因。
- 承上启下:本集定模型,第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 ŷ_y | Fashion-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+b | nn.Linear(784,10) |
| softmax | 手写归一化 | 藏在 CrossEntropyLoss ⭐ |
| 损失 | gather+log | nn.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() 验证 | ▊▊▍ |
| 31 | AWS 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 学习率元凶
| 集数 | 主题 | 关键点 | 重要度 |
|---|---|---|---|
| 33 | MLP 理论 | 线性套线性仍线性 → σ 注入非线性 | ▊▊▊▊▊ |
| 34 | 代码实现 | nn.Sequential 搭 784-256-10 | ▊▊▊▊ |
| 35 | QA | 隐藏层取 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 控制容量,直观演示欠/过拟合 | ▊▊▊▊ |
| 40 | QA 答疑 | 验证集选模型、测试集只碰一次、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 变小 → 函数更平滑 |
| 关系 | 理论地基 🧱 | 地基上的第一剂药 💊 |
| 集数 | 主题 | 关键点 | 重要度 |
|---|---|---|---|
| 41 | L2 理论 | λ/2·‖w‖²,限值域不砍参数个数 | ▊▊▊▊▊ |
| 42 | 代码实现 | 框架一行 weight_decay=wd | ▊▊▊▊ |
| 43 | QA | λ 验证集上扫;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叠加
| 集数 | 主题 | 关键点 | 重要度 |
|---|---|---|---|
| 44 | Dropout 理论 | 训练随机丢 p,存活值 ÷(1−p) | ▊▊▊▊▊ |
| 45 | 代码实现 | nn.Dropout§ 一行搞定 | ▊▊▊▊ |
| 46 | QA | p 取 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 | ▊▊▊▊▊ |
| 49 | QA | 梯度裁剪治爆炸;残差+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》,之后正式进入模型构造篇 ⏭
更多推荐

所有评论(0)