| 项 | 内容 |
|---|---|
| 课程版本 | 李宏毅《機器學習 2021 Spring》第 1 讲下半:預測本頻道觀看人數(下) |
| 视频分 P | https://www.bilibili.com/video/BV1ou411N7X3?p=2 (58:35;搬运合集) |
| 官方讲义 | regression (v16).pdf,61 页(与 P1 同一份) |
| 材料说明 | 对应官方讲义整理+必要补充,非视频逐字稿 |
页码为 PDF 物理页(封面第 1 页)。P1 已讲完「线性模型 → 损失 → 梯度下降 → sigmoid 叠加」,本文从「把参数收进一个向量」开始,讲到 ReLU、多层堆叠与过拟合;两篇按讲义主题切分,不重复推导同一件事。
一、本节的问题与直观理解
P1 结束时模型已经变成
它有无穷多个候选函数(\(K\)、\(D\) 一定时,参数连续取值)。P2 要回答的是两个问题:这么多参数怎么一起更新?把同样的结构叠很多层会怎样?
直观理解分两层。第一层是工程上的:参数从几个变成几万个之后,不能再对每个参数单独写更新式,得把 \(W,\mathbf{b},\mathbf{c}\) 摊平成一个长向量 \(\boldsymbol{\theta}\),梯度也摊平成同样长的向量,一次更新全部。第二层是概念上的:一层 sigmoid 已经在做「把输入空间切成若干段、每段给一个高度」,多层则是「上一层的输出当作下一层的输入」,于是第二层切的不再是原始特征,而是第一层加工出来的特征。讲义第 55 页把这叫 hidden layer,并说「很多层 = deep」,深度学习这个名字就是这么来的——它描述的是层数,不是参数量。
二、核心知识:参数向量、batch、ReLU、深度
参数向量与更新。 第 38 页把 \(W\) 的每一行、\(\mathbf{b}\)、\(\mathbf{c}\) 全部排进
\(\boldsymbol{\theta}\) 与 \(\mathbf{g}\) 必须同维;维数就是全部可学参数的个数。第 42–43 页强调:梯度是对当前参数算的,更新完要重算,不能拿旧梯度连走两步。
batch 与 epoch。 第 44 页把 \(N\) 个样本切成若干个 batch,每个 batch 算一次损失 \(L^1,L^2,\dots\) 并更新一次;「把所有 batch 看完一遍」叫一个 epoch。第 45 页给了两个算术例:\(N=10000\)、\(B=10\) 时一个 epoch 更新 \(10000/10=1000\) 次;\(N=1000\)、\(B=100\) 时更新 \(1000/100=10\) 次。所以 epoch 是数据遍数,iteration 是更新次数,二者只在 \(B=N\) 时相等。
ReLU 替换 sigmoid。 第 47–48 页把平滑的 S 形换成折线
下标写成 \(2i\) 不是笔误:一个 hard sigmoid 是「先上升、到顶后持平」,需要两个 ReLU 相减才能拼出来,所以 \(K\) 个折线要 \(2K\) 个 ReLU。第 48 页只问 “Which one is better?”,没有给理论答案,第 49 页直接上实验。
多层。 第 51 页把一层的输出接到下一层:
第 52 页的实验设定是:输入为过去 56 天的观看次数,每层 100 个 ReLU,比较 1–4 层。第 55–57 页给出「deep = many hidden layers」以及 AlexNet(8 层,16.4%)、VGG(19 层,7.3%)、GoogleNet(22 层,6.7%)、ResNet(152 层,3.57%)的 ImageNet 错误率,并在第 57 页追问 “Why we want ‘Deep’ network, not ‘Fat’ network?”——这个问题本讲没有回答。
三、关键推导一:把维度从头数一遍
用第 52 页的设定:输入 56 维,三个隐藏层各 100 个 ReLU,输出 1 维。记 \(\mathbf{x}\in\mathbb{R}^{56}\),则
参数个数逐层算是 \(100\times56+100=5700\)、\(100\times100+100=10100\)(两层)、\(100\times1+1=101\),合计 \(5700+10100+10100+101=26001\)。规则只有一条:第 \(l\) 层权重的形状是「本层神经元数 × 上层神经元数」,偏置长度等于本层神经元数。
批量版更容易错。若一个 batch 有 \(B\) 个样本,把输入写成 \(X\in\mathbb{R}^{B\times 56}\)(每行一个样本),则
偏置要靠广播加到每一行。很多人手写时把 \(XW^{1}\) 写成 \(W^{1}X\),维度立刻对不上——矩阵乘法不交换,形状就是最便宜的检查器。
四、关键推导二:线性层叠还是线性(复习补充)
这是本节最值得亲手验证的一句话。设两层都没有激活函数:
代入得
两个线性层严格等于一个线性层,层数没有增加任何表达能力。数值验证(复习补充,自编权重):取 \(W_1\in\mathbb{R}^{4\times3}\)、\(W_2\in\mathbb{R}^{1\times4}\)、5 个随机输入,分别算「两层串联」与「等效单层」,最大绝对差 \(6.66\times10^{-16}\),就是浮点舍入。参数却从 \(4\times3+4+1\times4+1=21\) 个变成等效的 \(1\times3+1=4\) 个——多出来的 17 个参数没有换来任何新函数。
反过来,只要中间夹一个非线性,等式立刻失效:\(\max(0,\cdot)\) 或 sigmoid 都不能被矩阵吸收。所以「深度有用」的前提是每层之间有非线性;把激活函数去掉做消融,网络会退化成线性回归,这是调试时常见的低级错误。
五、原讲义例子:三张表说明什么
激活函数(第 49 页)。 训练/测试损失:linear \(0.32/0.46\),10 个 ReLU \(0.32/0.45\),100 个 ReLU \(0.28/0.43\),1000 个 ReLU \(0.27/0.43\)(单位 k)。从线性换到 10 个 ReLU,训练损失几乎没动——参数明明变多了,拟合却没变好,说明光有非线性与少量神经元不一定有用;加到 100 个才明显下降,再往上收益递减。
层数(第 52 页)。 1 层 \(0.28/0.43\)、2 层 \(0.18/0.39\)、3 层 \(0.14/0.38\)、4 层 \(0.10/0.44\)。训练损失一路降到 0.10,测试损失却在第 4 层反弹到 0.44。第 59 页把这件事命名为 overfitting:训练集上更好,没看过的数据上更差。第 60 页说「要预测今天的人数该选哪个模型」,并把模型选择留到下一讲——这句话很关键,它承认「看测试集挑模型」本身是不合法的,正确做法是再切一份验证集。
深度(第 56–57 页)。 8 层 16.4%、19 层 7.3%、22 层 6.7%、152 层 3.57%,趋势是越深越准,但 ResNet 那一行还标了 “Special structure”——不是把层数堆上去就自动变好,残差连接是额外设计。讲义没有解释这个结构,本笔记也不展开。
六、易错点
- 线性层叠仍线性。 见上节推导;判断一个网络是否真的「深」,看层间有没有非线性,而不是数
Linear的个数。 - 训练损失下降不等于模型变好。 第 52 页 4 层模型训练最好、测试最差;调模型复杂度时,眼睛要盯验证集。
- epoch 与 iteration 混用。 一个 epoch 的更新次数是 \(\lceil N/B\rceil\),不是 1;说「训练了 100 步」和「训练了 100 轮」差一个 \(N/B\) 的因子。
- ReLU 的下标 \(2i\)。 一个折线要两个 ReLU 拼,写模型或数参数时漏掉一半,参数量会算错一倍。
- sigmoid 与 ReLU 不是「新旧替代」的简单关系。 第 47–48 页只做了替换并给了实验数字;ReLU 的梯度在正区间恒为 1,缓解了 sigmoid 两端饱和导致的梯度消失,但在 \(z<0\) 时梯度为 0,神经元可能「死掉」。
- 「深」不等于「胖」。 第 57 页的问题本讲未答,别把「深层更好」当成已证明的定理;后面的 CNN、ResNet 才逐步给出结构上的理由。
七、自测
Q1. 输入 56 维、两个隐藏层各 100 个 ReLU、输出 1 维,共有多少可学参数?
参考答案
第一层 \(100\times56+100=5700\),第二层 \(100\times100+100=10100\),输出层 \(1\times100+1=101\),合计 \(15901\)。若再加一层 100,则多 \(10100\),变成 \(26001\)(与正文三隐藏层的算法一致)。
Q2. 把两层 Linear 中间的 ReLU 删掉,模型表达能力会怎样变化?
参考答案
不变。两层线性复合仍是线性映射 \(W_2W_1\mathbf{x}+W_2\mathbf{b}_1+\mathbf{b}_2\),等价于一层;参数量变多但函数集合没变大,反而更难优化、更容易过拟合。
Q3. \(N=5000\)、batch size 为 50,训练 3 个 epoch 一共更新多少次?
参考答案
每个 epoch 更新 \(5000/50=100\) 次,3 个 epoch 共 300 次。注意这是「参数更新次数」,不是「看过的样本数」;看过的样本数是 \(3N=15000\)。
Q4. 第 52 页 4 层模型训练损失 0.10k 比 3 层的 0.14k 低,为什么反而说它不好?
参考答案
因为评价标准是没见过的数据。4 层测试损失 0.44k,比 3 层的 0.38k 差,训练集的优势没有迁移到测试集,属于过拟合;模型选择应看验证/测试表现,而不是训练损失。
八、30 秒速记
参数摊平成 \(\boldsymbol{\theta}\) → 梯度同维 → 每个 batch 更新一次、一个 epoch 看完所有 batch → ReLU \(=\max(0,z)\)、一个折线要两个 → 形状规则「本层神经元 × 上层神经元」→ 线性层叠仍线性(\(W_2W_1\) 可合并)→ 1/2/3/4 层测试 \(0.43/0.39/0.38/0.44\) → 第 4 层训练最好、测试最差 = 过拟合 → 模型选择要看验证集。
九、和其他 P 的关系
- P1 给出本文所有符号的来源:\(W,\mathbf{b},\mathbf{c}\)、sigmoid 叠加、误差曲面;本文只补「参数向量化 + 多层 + 过拟合」,不重复线性模型到 sigmoid 的那段推导。
- P11 是同一主题的 2016 版讲法,从「三步框架 + 全连接网络」讲起,例子换成手写数字;它第 29–30 页的「更深更好」与通用逼近定理,正好接上本文第 57 页留下的「Why deep not fat」。
- P12 解释本文第 42 页那个 \(\mathbf{g}=\nabla L(\boldsymbol{\theta})\) 到底怎么算:反向传播,逐层复用中间结果。
- P13 / P14 把本文的过拟合话题落到具体数据上:P13 用宝可梦 CP 展示「模型越复杂测试越差」的完整曲线与正则化,P14 换成分类型输出。