📑 目录导航
- [第24集《Softmax 回归》](#第24集《Softmax 回归》)
- [第25-26集《损失函数 + 图片分类数据集》](#第25-26集《损失函数 + 图片分类数据集》)
- [第27-28集《Softmax 从零实现 + 简洁实现》](#第27-28集《Softmax 从零实现 + 简洁实现》)
- [第29集《Softmax 回归 QA》](#第29集《Softmax 回归 QA》)
- [第30-32集《CUDA安装 + AWS GPU + 感知机》](#第30-32集《CUDA安装 + AWS GPU + 感知机》)
- 第33-35集《多层感知机》
- 第36-38集《模型选择与过拟合》
- [第39-40集《模型选择与过拟合 代码+QA》](#第39-40集《模型选择与过拟合 代码+QA》)
- 第41-43集《权重衰退》
- 第44-46集《丢弃法》
- [第47-50集《数值稳定性 + 初始化 + 房价实战》](#第47-50集《数值稳定性 + 初始化 + 房价实战》)


一句话总结**《Softmax 回归》** ------ 第24集:从"回归"跨入"分类",Softmax 把网络输出归一化为类别概率(10:27)。 📊
📌 知识卡已发布
Markdown 版可视化(Unicode)
线性回归 ────────→ Softmax 回归
│ │
▼ ▼
1个连续输出 n个输出(=类别数)
ŷ = wᵀx + b o_i = wᵢᵀx + bᵢ
│
softmax 归一化
▼
ŷ_i = e^{o_i} / Σe^{o_j}
概率和 = 1 ✅
| 对比维度 | 线性回归(19集) | Softmax 回归(24集) |
|---|---|---|
| 问题类型 | 回归 | 分类 ⭐ |
| 输出个数 | 1 个 | n 个(类别数) |
| 输出含义 | 连续数值 | 各类别概率 |
| 关键运算 | 无 | softmax 归一化 |
| 损失函数 | 均方误差 | 交叉熵(下集讲) |
| 标签形式 | 实数 | 独热编码 one-hot |
学习进度:
基础篇 ▊▊▊▊▊▊▊▊▊▊▉▏▏▏▏▏▏▏▏▏ 12.5%(24/191)
分类章节:24 softmax回归 ✅ → 25 损失函数 → 26 图片数据集 → 27 从零实现 → 28 简洁实现
详细总结
第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集手写完整实现------分类四件套正式开跑 🚀
📺 原视频:B站视频页
下一集《损失函数》(06:25)讲交叉熵的推导与直觉,👉 回复"继续"进入下一章节
一句话总结**《损失函数 + 图片分类数据集》** ------ 第25集讲分类专属损失"交叉熵"(06:25),第26集备好数据集 Fashion-MNIST(09:26),分类四件套凑齐一半。 🧩
📌 知识卡已发布
🔗 在线链接
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=−logy^yl=−logy^y 只看真实类的预测概率------概率越接近 1,损失越接近 0。它来自最大似然估计,且梯度形式 softmax(o)−ysoftmax(o)−y 极简,这是 Softmax+交叉熵成为分类标配的根本原因。
第26集《图片分类数据集》(09:26) :Fashion-MNIST------10类服饰、28×28灰度图、6万训练+1万测试。不用经典 MNIST 是因为它太简单(随便 98%+),区分不出模型优劣。代码上用 torchvision.datasets 下载 + DataLoader 批量迭代,顺便讲了读取速度计时(num_workers 多进程加速)。
进度:分类四件套已完成模型(24)+ 损失(25)+ 数据(26),下一集《从零开始实现》(18:44)把它们组装成完整训练流程 🚀
一句话总结**《Softmax 从零实现 + 简洁实现》** ------ 第27集手写完整分类训练(18:44),第28集 nn API 三行搞定(04:10),分类四件套收官。 ✅
🔗 在线链接
第27-28集《Softmax 从零实现 + 简洁实现》代码卡
Markdown 版可视化(Unicode)
第27集:从零组装流水线
展平784 ─→ X@W+b ─→ softmax ─→ 交叉熵 ─→ backward ─→ SGD ─→ 84% ✅
▲ 先减max防爆 ▲ gather取真实类
第28集:API 压缩
nn.Flatten ─→ nn.Linear ─→ CrossEntropyLoss ─→ 训练循环照旧
softmax 藏这里 ⭐
| 组件 | 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分钟",框架威力尽显。
进度:▊▊▊▊▊▊▊▍▏▏ 14.7%(28/191)。下一集第29集 QA(31分钟,分类章节最长答疑),第32集正式开讲多层感知机。👉 回复"继续"进入下一章节
核心代码速查
第27集手写 softmax + 交叉熵的关键代码片段(含防溢出处理):
python
# 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() # 只看真实类
第28集 nn.Sequential 简洁实现的完整代码:
python
# 1. 模型:展平 + 线性层,CrossEntropyLoss 内部已含 softmax
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10)) # 不要再手动加 softmax
2. 训练:损失函数直接选交叉熵,SGD 优化器照旧
loss = nn.CrossEntropyLoss()
trainer = torch.optim.SGD(net.parameters(), lr=0.1) # 训练循环与手写版一致
一句话总结**《Softmax 回归 QA》** ------ 第29集:分类章节31分钟大答疑,收尾线性模型时代(31:00)。 💬
🔗 在线链接
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)
📺 原视频:p=29
👉 回复"继续"进入下一章节
一句话总结**《GPU番外×2 + 感知机》** ------ 第30集装 CUDA、第31集租 AWS 卡搞定硬件,第32集感知机登场揭开神经网络时代(13:53)。 🚀
🔗 在线链接
第30-32集《CUDA安装 + AWS GPU + 感知机》三合集
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)
一句话总结**《多层感知机》** ------ 第33集讲 MLP 理论(22:40),第34集代码实现(08:27),第35集 QA 答疑(26:49),隐藏层 + 激活函数注入非线性,分类精度从 84% 跃升到 88%。 🚀
🔗 在线链接
📌 知识卡已发布
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)
一句话总结**《模型选择与过拟合》** ------ 第36集讲模板思维(03:20),第37集讲模型选择(18:37),第38集讲过拟合诊断(16:47),训练误差 ≠ 泛化误差,测试集只许碰一次。 🎯
📌 知识卡已发布
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 数据复杂度的匹配艺术。欠拟合 (训练误差和泛化误差都高):加容量、训久点、换模型;过拟合 (训练误差低但泛化误差高):更多数据、正则化、减容量。容量由参数个数和参数取值范围共同决定------这个定义是后续权重衰退的理论地基 🧱
进度:▊▊▊▊▊▊▊▏▏ 19.9%(38/191)
下一站第 39 集《代码》+ 第 40 集《QA》(45 分钟干货答疑),继续发"继续"即可 ✨
MLP 章节完结 🎉 继续发"继续"进入第 36 集《10 行代码战胜 90% 数据科学家?》✨
过拟合 vs 欠拟合 快速诊断表
| 症状 | 诊断结论 | 处方 |
|---|---|---|
| 训练误差高 + 泛化误差高 | 欠拟合(容量太小) | 加数据 / 增大模型容量 / 训久一点 / 换更强模型 |
| 训练误差低 + 泛化误差高 | 过拟合(容量太大) | 加数据 / 正则化(L2、Dropout)/ 减小模型容量 |
| 训练误差低 + 泛化误差低 | 刚刚好 🎯 | 保持现状,别再动容量 |
用多项式阶数 d 控制模型容量,一行代码即可在欠拟合与过拟合之间切换:
python
# d 是多项式阶数:d=1 欠拟合(直线),d=3 刚好,d=10 过拟合
net = nn.Sequential(nn.Linear(d, 1)) # 输入 d 个多项式特征,输出 1 个预测值
一句话总结**《模型选择与过拟合 代码 + QA》** ------ 第39集把 36-38 集方法论落成代码(多项式回归演示过拟合),第40集 45 分钟大答疑收尾模型选择章节(45:00)。 💻
📌 知识卡已发布
🔗 在线链接
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 动态拼接不同阶数的特征变换,配合训练/验证误差曲线可视化,把「容量 vs 数据复杂度」的抽象概念变成一眼可见的曲线对比。
第40集(QA,45 分钟) :模型选择章节的收官大答疑,也是全课最长的 QA 之一。核心纪律反复强调:测试集只许碰一次 ,选模型和调超参一律在验证集上进行;数据不够时用 K 折交叉验证(K 常取 5 或 10,数据越少 K 越大),代价是训练 K 次。还澄清了验证集「用完即弃」的定位------它间接影响训练(选超参),但绝不能拿测试集反复试。
进度:▊▊▊▊▊▊▊▏▏ 20.9%(40/191)
第39集《模型选择与过拟合 代码》详细总结
第39集(代码) :把 36-38 集的方法论落成可运行代码,用多项式回归直观演示模型容量对拟合效果的影响。核心是控制多项式阶数 d:d=1 是直线(欠拟合,训练和泛化误差都高)、d=3 恰到好处(双低 🎯)、d=10 曲线剧烈摆动(过拟合,训练误差低但泛化误差高)。
核心代码逻辑 :通过 nn.Sequential 动态拼接不同阶数的特征变换------先用 nn.Linear 把原始输入映射到多项式特征空间(如 d 阶对应 d 个特征),再接入线性输出层。这样只需改一个参数 d,就能在欠拟合、刚好、过拟合三种状态间自由切换,完美演示「容量 vs 数据复杂度」的博弈。
可视化验证:训练/验证误差曲线是本节的关键------d=1 时两条曲线都居高不下(欠拟合);d=3 时训练误差和验证误差同时降到最低(双低 🎯);d=10 时训练误差继续走低但验证误差反而飙升(过拟合),一眼看清「训练误差低 ≠ 泛化误差低」的铁律。
进度:▊▊▊▊▊▊▊▊▏ 20.9%(40/191)
📺 原视频:p=39
第40集《模型选择与过拟合 QA》详细总结
第40集(QA,45 分钟) :模型选择章节的收官大答疑,也是全课最长的 QA 之一。核心纪律反复强调:测试集只许碰一次 ,选模型和调超参一律在验证集上进行;数据不够时用 K 折交叉验证(K 常取 5 或 10,数据越少 K 越大),代价是训练 K 次。还澄清了验证集「用完即弃」的定位------它间接影响训练(选超参),但绝不能拿测试集反复试。
验证集 vs 测试集:验证集用于选模型、调超参,可以反复使用但「用完即弃」------它间接影响训练(选超参);测试集只许碰一次,用来最终评估泛化能力,绝不能拿它反复试模型,否则就「污染」了测试集,评估结果不再可信。
K 折交叉验证选 K:数据不够时上 K 折交叉验证------把训练集分成 K 份,轮流拿 1 份当验证集、其余 K-1 份训练,取 K 次平均误差。K 常取 5 或 10:数据越少 K 越大(充分利用数据),但代价是要训练 K 次,计算成本线性上升。
过拟合应对策略:诊断清楚后对症下药------更多数据(最直接)、正则化(权重衰退 L2、丢弃法 Dropout)、减小模型容量(降阶数 d、减隐藏单元)。核心心法:容量与数据复杂度要匹配,欠拟合加容量、过拟合减容量。
进度:▊▊▊▊▊▊▊▊▏ 20.9%(40/191)
📺 原视频:p=40
下一站第 41-43 集《权重衰退》(治过拟合第一剂药),继续发"继续"即可 ✨
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 数据复杂度的匹配艺术。欠拟合 (训练误差和泛化误差都高):加容量、训久点、换模型;过拟合 (训练误差低但泛化误差高):更多数据、正则化、减容量。容量由参数个数和参数取值范围共同决定------这个定义是后续权重衰退的理论地基 🧱
进度:▊▊▊▊▊▊▊▏▏ 19.9%(38/191)
下一站第 39 集《代码》+ 第 40 集《QA》(45 分钟干货答疑),继续发"继续"即可 ✨
一句话总结**《权重衰退》** ------ 第41集:治过拟合第一剂药,L2 正则化给权重"缩水",限制参数取值范围而非个数(13:03)。 💊
📌 知识卡已发布
Markdown 版可视化(Unicode)
第41集:L2 正则化核心
损失函数加惩罚项:ℓ + λ/2·‖w‖²
│
├─ 别名:岭回归 / Tikhonov 正则
├─ 思路:限制参数取值范围,不砍参数个数
│
▼
SGD 更新式推导:
普通: w ← w − lr·∂ℓ/∂w
衰退: w ← (1 − lr·λ)·w − lr·∂ℓ/∂w
↑ 每次先"缩水"一点点
│
▼
λ 越大 → w 越小 → 函数越平滑 → 泛化越好
| 维度 | 第38集 模型容量 | 第41集 权重衰退 |
|---|---|---|
| 核心定义 | 容量 = 参数个数 + 参数取值范围 | 限制取值范围 → 缩小容量 |
| 手段 | 诊断过拟合的标尺 | 损失函数加 L2 惩罚项 |
| 效果 | 容量太大 → 过拟合 | w 变小 → 函数更平滑 |
| 关系 | 理论地基 🧱 | 地基上的第一剂药 💊 |
λ 效果光谱:
λ=0 ─▓░░░░─► λ越大 ─▓▓▓▓▓─► λ→∞
过拟合 w变小 w≈0
原模型 函数更平滑⭐ 只剩 bias(欠拟合)
详细总结
第41集(13:03) :权重衰退(L2 正则)是治过拟合第一剂药,直接承接第38集「容量由参数个数和参数取值范围共同决定」的定义------既然容量太大导致过拟合,那就不砍参数个数,而是限制参数取值范围 :在损失函数上加上 λ/2·‖w‖² 惩罚项(别名岭回归 / Tikhonov 正则)。推导出 SGD 更新式后发现玄机:w ← (1−lr·λ)·w − lr·∇ℓ,每次更新前权重先乘衰减因子、逐次"衰退"------名字就是这么来的。λ 越大 → w 越小 → 函数越平滑,且 bias b 通常不参与衰减。
代码实现要点 :从零实现只需手动给 loss 加惩罚项 loss = loss + λ/2 * (w**2).sum();框架版更简单,SGD(weight_decay=wd) 一行搞定。实验印证理论:λ=0 明显过拟合,λ=3 时训练误差略升但验证误差大降 ✅。注意框架小坑:默认会连 b 一起惩罚(严格说不该)。
进度:▊▊▊▊▊▏▏▏▏▏ 21.5%(41/191)
📺 原视频:p=41
下一集第42集《代码实现》(12:35)讲从零实现 + 框架一行版,👉 回复"继续"进入下一章节
🔗 在线链接第41-43集《权重衰退》三合集
Markdown 版可视化(Unicode)
权重衰退三部曲:
41 L2理论 ─→ 42 代码实现 ─→ 43 QA调参
加惩罚项 weight_decay λ对数尺度扫描
w逐次"衰退"⭐ 一行框架版 可与dropout叠加
| 集数 | 主题 | 关键点 | 重要度 |
|---|---|---|---|
| 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 正则)是治过拟合第一剂药------思路是不砍参数个数,而是限制参数取值范围 :损失函数加上 λ/2·‖w‖² 惩罚项(别名岭回归/Tikhonov 正则)。推导出更新式后发现玄机:w ← (1−lr·λ)·w − lr·∇ℓ,每次更新前权重先乘衰减因子、逐次"衰退"------名字就是这么来的。λ 越大 → w 越小 → 函数越平滑,且 bias b 通常不参与衰减。
第42集(12:35) :从零实现只需手动给 loss 加惩罚项;框架版更简单,SGD(weight_decay=wd) 一行搞定。实验印证理论:λ=0 明显过拟合,λ=3 时训练误差略升但验证误差大降 ✅。注意框架小坑:默认会连 b 一起惩罚(严格说不该)。
第43集(11:36) :QA 实战心得------λ 在验证集上按 1e-4→10 对数尺度扫描,通用量级 1e-2 起步;λ 可分层设置(输出层可弱化);与 dropout 不冲突,可叠加组合拳;惩罚为何有效?w 小 → 输入扰动对输出影响小 → 函数对噪声不敏感。
进度:▊▊▊▊▊▏▏▏▏▏ 22.5%(43/191)
下一站第 44-46 集《丢弃法》(Dropout 登场,另一种正则化),继续发"继续"即可 ✨
🔗 在线链接第44-46集《丢弃法》三合集
Markdown 版可视化(Unicode)
丢弃法三部曲:
44 理论 ─→ 45 代码实现 ─→ 46 QA调参
训练丢/推理不丢 mask×X一行 p 率怎么选
期望不变技巧⭐ eval()自动关 可与L2叠加
| 集数 | 主题 | 关键点 | 重要度 |
|---|---|---|---|
| 44 | Dropout 理论 | 训练随机丢 p,存活值 ÷(1−p) | ▊▊▊▊▊ |
| 45 | 代码实现 | nn.Dropout(p) 一行搞定 |
▊▊▊▊ |
| 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(p) 更省事,训练态自动生效、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)🎉
下一站第 47-49 集《数值稳定性 + 模型初始化和激活函数》(梯度消失/爆炸专题),继续发"继续"即可 ✨
🔗 在线链接第47-50集《数值稳定性 + 初始化 + 房价实战》四合集
第47-50集《数值稳定性 + 初始化 + 房价实战》四合集
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)🎉 突破四分之一!
📺 原视频:p=47 · p=48 · p=49 · p=50
第 4 章 MLP 完整章节正式收官 🎉 下一站第 51-52 集《课程竞赛:加州 2020 房价预测 + QA》,之后进入模型构造篇
全课程学习路线图
目前已覆盖第24集到第38集,进度汇总如下:
| 章节 | 集数 | 主题 | 进度 |
|---|---|---|---|
| Softmax 回归 | 第24集 | 从回归跨入分类 | ✅ 已完成 |
| 损失函数 + 图片分类数据集 | 第25-26集 | 交叉熵 + Fashion-MNIST | ✅ 已完成 |
| Softmax 从零实现 + 简洁实现 | 第27-28集 | 手写训练 + nn API | ✅ 已完成 |
| Softmax 回归 QA | 第29集 | 分类章节大答疑 | ✅ 已完成 |
| GPU 番外 + 感知机 | 第30-32集 | CUDA / AWS / 感知机 | ✅ 已完成 |
| 多层感知机 | 第33-35集 | MLP 理论 + 实现 + QA | ✅ 已完成 |
| 模型选择与过拟合 | 第36-38集 | 验证集 / K 折 / 过拟合诊断 | ✅ 已完成 |
| 权重衰退 | 第41-43集 | L2 正则化(下一章节) | ⏭ 即将开始 |
当前学习位置:第38集完成,进度约 19.9%(38/191)。下一章节为「权重衰退」(第41-43集),点击上方目录导航中的「第41-43集《权重衰退》」即可直达入口
航中的「第41-43集《权重衰退》」即可直达入口