| 项 | 内容 |
|---|---|
| 课程版本 | 李宏毅 2016 秋季《Machine Learning》Lecture 1:Regression - Case Study |
| 视频分 P | https://www.bilibili.com/video/BV1ou411N7X3?p=13 (1:18:36;搬运合集) |
| 官方讲义 | Regression (v6).pdf,37 页 |
| 材料说明 | 对应官方讲义整理+必要补充,非视频逐字稿 |
页码为 PDF 物理页(封面第 1 页)。本讲用宝可梦进化前的数值预测进化后的 CP(Combat Power),数据是讲义自带的 10 只训练样本;下文所有数据数字都出自讲义,标「复习补充」的算术才是自编。
一、本节的问题与直观理解
输入是一只宝可梦进化前的属性(当前 CP、HP、体重、身高、物种),输出是进化后的 CP。这是一个输出标量的回归问题,讲义第 3 页把它写成 \(f=\text{CP after evolution}\),第 4 页给出线性模型
并列出三个具体候选:\(f_1:y=10.0+9.0x_{cp}\)、\(f_2:y=9.8+9.2x_{cp}\)、\(f_3:y=-0.8-1.2x_{cp}\)。这三条线的作用是提醒:模型不是一条线,而是一整族线,\(b,w\) 取遍实数得到的才是「模型」,训练是在这一族里挑一条。
直观上,进化后 CP 主要由进化前 CP 决定,所以先画一条过原点的粗略直线;但同样的 CP,不同物种的成长率不同,残差里剩下的是「物种」这个没被写进特征的因素。整讲的叙事就是:加特征 → 训练误差降 → 测试误差先降后爆 → 回头找隐藏因素 → 加正则化。
二、核心知识:三步与两个梯度
第一步,模型。 第 4 页:\(y=b+w\cdot x_{cp}\),\(b\) 是 bias、\(w\) 是 weight、\(x_{cp}\) 是 feature。第 6 页说明训练数据只有 10 只宝可梦,是真实数据(来源 openintro),记作 \((x^n_{cp},\hat y^n)\),\(n=1,\dots,10\)。
第二步,损失。 第 7 页:
注意这里没有除以 10,和 P1 的 \(L=\frac1N\sum e_n\) 差一个常数因子。它不改变最优解,但会让梯度的量级大 10 倍,学习率要相应调小。第 8 页把每个 \((w,b)\) 对应的 \(L\) 画成等高线,颜色越深损失越小,并标出「每个点是一个函数」。
第三步,梯度下降。 第 10–12 页先讲单参数:随机取 \(w^0\),算 \(\left.dL/dw\right|_{w=w^0}\),若为正就减小 \(w\)、为负就增大 \(w\),写成
\(\eta\) 是 learning rate。第 13 页推广到两个参数,梯度是向量 \(\nabla L=(\partial L/\partial w,\partial L/\partial b)\),两个分量同时更新。第 15 页给出一句很重要的结论:线性回归的损失是凸的,没有 local optimal,所以「梯度下降卡在局部最小」在这类问题上不成立。
解析梯度。 第 16–17 页把链式法则走完:
两个式子只差一个乘数:对 \(w\) 乘 \(-x\),对 \(b\) 乘 \(-1\)。这就是「偏置的输入恒为 1」的直接结果,和 P12 的 \(\partial z/\partial w=\) 输入 是同一句话。
三、关键推导:为什么这个损失是凸的(复习补充)
讲义第 15 页只写了结论,这里补一句理由。把 10 个样本堆成向量 \(\hat{\mathbf{y}}\in\mathbb{R}^{10}\)、\(\mathbf{1}\in\mathbb{R}^{10}\)、\(\mathbf{x}\in\mathbb{R}^{10}\),令 \(\boldsymbol{\beta}=(b,w)^\top\)、设计矩阵 \(A=[\mathbf{1},\mathbf{x}]\in\mathbb{R}^{10\times2}\),则
二次项矩阵 \(A^{\top}A\) 对任意 \(\mathbf{v}\) 满足 \(\mathbf{v}^{\top}A^{\top}A\mathbf{v}=\lVert A\mathbf{v}\rVert^{2}\ge0\),所以半正定,\(L\) 是凸函数;只要两列线性无关(样本里的 \(x_{cp}\) 不全相同),它还是正定的,最优解唯一:
也就是说这 10 个点的最小二乘解可以直接算出来,梯度下降只是另一种到达方式。复习补充:自编 5 个点的数值对照(非讲义数据):取 \(x=(600,700,800,900,1000)\)、\(y=(1200,1500,1700,2100,2300)\),闭式解是 \(b=-480\)、\(w=2.8\),训练 MAE \(=32.0\);从 \(b=w=0\) 出发、把 \(x\) 标准化后用 \(\eta=0.1\) 迭代 3000 步,收敛到 \(b=1760\)、\(w=560\)(标准化坐标),换回原坐标正是 \(y=2.8x-480\),MAE 同样 32.0。这个对照说明:在凸问题里,GD 和闭式解到同一点,差别只在路径与步数;如果两者差很多,先怀疑学习率或迭代次数,而不是「模型没救」。
四、原讲义结果:一条先降后爆的曲线
一次模型。 第 19 页:\(b=-188.4\)、\(w=2.7\),训练平均误差 \(31.9\);第 20 页换成另外 10 只做测试,平均误差 \(35.0\)。测试比训练差,但还可用。
二次、三次模型。 第 21 页:\(y=b+w_1x_{cp}+w_2x_{cp}^2\),\(b=-10.3\)、\(w_1=1.0\)、\(w_2=2.7\times10^{-3}\),训练 \(15.4\)、测试 \(18.4\)。第 22 页加三次项:\(b=6.4\)、\(w_1=0.66\)、\(w_2=4.3\times10^{-3}\)、\(w_3=-1.8\times10^{-6}\),训练 \(15.3\)、测试 \(18.1\),只比二次好一点点。
四次、五次模型。 第 23 页四次:训练 \(14.9\)、测试 \(28.8\);第 24 页五次:训练 \(12.8\)、测试 \(232.1\)。训练误差一路降,测试误差先降后爆,第 26 页把五个模型排成表并写下 Overfitting:
| 模型 | 训练误差 | 测试误差 |
|---|---|---|
| 一次 | 31.9 | 35.0 |
| 二次 | 15.4 | 18.4 |
| 三次 | 15.3 | 18.1 |
| 四次 | 14.9 | 28.8(第 26 页表格写作 28.2) |
| 五次 | 12.8 | 232.1 |
讲义第 23 页正文写 28.8、第 26 页汇总表写 28.2,两处不一致,引用时说明来源页即可,不必强行统一。
回头找隐藏因素。 第 27–30 页:同样的 CP,不同物种的曲线不同。引入物种指示变量 \(\delta(x_s=\text{Pidgey})\)(是则 1、否则 0),模型写成
它对参数仍然是线性的,所以还是线性模型,只是每个物种有自己的截距与斜率。第 31 页:训练 \(14.3\)、测试 \(3.8\)——测试误差比训练还低,说明物种确实是主要隐藏因素。
加太多特征又会爆。 第 33 页把 HP、身高、体重及其平方项全加进去,训练 \(1.9\)、测试 \(102.3\)。参数越多越容易把训练集的噪声也拟合进去。
正则化。 第 34 页在损失上加 \(\lambda\sum_i w_i^2\):
注意偏置 \(b\) 不在惩罚项里——惩罚 \(b\) 只会把整条曲线往下拽,没有平滑作用。第 34 页给的直觉是:若测试时输入被噪声扰动 \(x_i+\Delta x_i\),输出会多出 \(w_i\Delta x_i\),\(w_i\) 越小越不敏感,所以「平滑的函数更稳」。第 35 页的 \(\lambda\) 扫描:
| \(\lambda\) | 训练 | 测试 |
|---|---|---|
| 0 | 1.9 | 102.3 |
| 1 | 2.3 | 68.7 |
| 10 | 3.5 | 25.7 |
| 100 | 4.1 | 11.1 |
| 1000 | 5.6 | 12.8 |
| 10000 | 6.3 | 18.7 |
| 100000 | 8.5 | 26.8 |
\(\lambda\) 从 0 加到 100,测试误差从 102.3 掉到 11.1;再往上加,训练误差继续升、测试也回升,属于「平滑过头」。第 36 页的结论是最终测试误差 11.1,并留下两个问题:换一批新数据会高估还是低估?——留给验证集那一讲。
五、易错点
- 训练误差单调下降不代表模型变好。 五次模型训练 12.8 是所有模型里最好的,测试 232.1 是最差的;模型选择必须看没参与训练的数据。
- 拿测试集反复挑模型会污染测试集。 讲义用同一批测试数据比较了五个模型又一次次加特征,最后选出的 11.1 已经带选择偏差;正确做法是留验证集,这也是第 36 页指向的下一讲。
- 正则化不罚 \(b\)。 只罚 \(w\);把 \(b\) 写进 \(\sum w_i^2\) 是常见笔误。
- \(\lambda\) 不是越大越好。 第 35 页 \(\lambda=10^5\) 时测试 26.8,比 \(\lambda=100\) 的 11.1 差,属于欠拟合。
- 物种要 one-hot,不能编码成 1、2、3、4。 第 30 页用的是指示函数 \(\delta(\cdot)\);把物种当连续数会强行引入「Pidgey < Weedle」这种无意义的顺序。
- 第 23 与第 26 页的 28.8/28.2 不一致。 这是讲义自身的笔误或版本差异,写笔记时保留出处,不要悄悄改成一个数。
- 线性模型加平方项就不再是「对特征线性」。 \(y=b+w_1x+w_2x^2\) 对 \(x\) 是二次,但对 \((w_1,w_2)\) 仍是线性,所以仍是线性回归、仍可用闭式解;「线性」指的是对参数线性。
六、自测
Q1. 为什么第 15 页敢说线性回归没有局部最优?
参考答案
损失是参数的二次型 \(\lVert\hat y-A\beta\rVert^2\),二次项 \(A^\top A\) 半正定,函数是凸的;凸函数上任何局部最小都是全局最小。若 \(A\) 列满秩,还是严格凸,最优解唯一,可由 \((A^\top A)^{-1}A^\top\hat y\) 给出。
Q2. 五次模型训练误差 12.8、测试 232.1,说明优化失败了吗?
参考答案
不是。训练误差已经很低,说明优化在训练集上成功了;测试爆炸是过拟合——模型把 10 个点的噪声也拟合进去,换一批数据就崩。要处理它应该减复杂度、加数据或加正则化。
Q3. 为什么正则化项里通常不包含偏置 \(b\)?
参考答案
\(b\) 只整体平移输出,不改变函数的「陡峭程度」;惩罚它只会把预测整体拉向 0,不能抑制对输入扰动的敏感度。平滑性由权重 \(w_i\) 控制,所以只罚 \(w\)。
Q4. 第 30 页的物种模型对参数还是线性的吗?为什么?
参考答案
是。\(\delta(x_s=k)\) 是已知的 0/1 特征(由数据算出来,不是待学参数),模型对 \(b_k,w_k\) 仍是线性组合,所以仍属于线性回归,可以用同样的梯度下降或闭式解。
Q5. \(\lambda\) 从 100 加到 1000,训练误差 4.1→5.6、测试 11.1→12.8,怎么解释?
参考答案
正则化变强,模型被压得更平滑,拟合训练集的能力下降(训练误差升),同时偏差增大到开始损害测试表现(测试也升)。最优点在 \(\lambda\approx100\) 附近,说明正则化强度本身是要用验证集选的超参数。
七、30 秒速记
三步:\(y=b+\sum w_ix_i\) → \(L=\sum(\hat y-y)^2\) → 梯度下降。\(b=-188.4,w=2.7\) 得 31.9/35.0;二次 15.4/18.4;三次 15.3/18.1;四次 14.9/28.8;五次 12.8/232.1 = 过拟合。加物种 one-hot → 14.3/3.8;加太多特征 → 1.9/102.3;加 \(\lambda\sum w_i^2\)(不罚 \(b\))→ 最优 11.1。核心结论:复杂度与测试误差不是单调关系。
八、和其他 P 的关系
- P1 是 2021 版对同一套三步的另一种讲法,任务换成预测频道观看人数,模型从线性推进到 sigmoid 叠加。P1 的 0.48k/0.58k 与本文的 31.9/35.0 是同一件事的两个量纲:训练误差低、测试误差高。
- P2 把本文的过拟合现象放大到多层网络(4 层训练 0.10、测试 0.44),并补上 batch、ReLU 等工程细节;本文则是这个现象最干净的二维版本。
- P11 / P12 提供「模型变复杂」的另一条路:不是加幂次,而是堆神经元与层,并用反向传播算梯度。本文只有两个参数,梯度可以手写;网络一深就必须用 P12 的递推。
- P14 把输出从标量换成类别,用同一批宝可梦的属性预测「属性类型」,从回归转入分类与生成式模型。