← 全部章节

P16 · 第 16 讲

机器学习任务攻略

51:24

本章目录(11 节)
  1. 1. 本节要解决什么问题
  2. 2. 先固定框架:三步 + 两个数据集
  3. 3. 诊断地图(本节的主干)
  4. 4. Training loss 大:先分清"没有针"还是"找不到针"
  5. 5. Training loss 小、Testing loss 大:overfitting
  6. 6. 偏差—复杂度权衡与模型选择
  7. 7. Mismatch:分布不同,不是过拟合
  8. 8. 讲义原例汇总
  9. 9. 易错对照
  10. 10. 自测
  11. 11. 30 秒速记

分P:P16 · BV1ou411N7X3?p=16 · 时长 51:24 · cid 1250615438 官方源:【機器學習2021】機器學習任務攻略(YouTube WeHM2xpYQpw,2021-03-05,3083 s) 课程版本:2021 Spring(中文班),与 P1/P2 同一套课 讲义:overfit-v6.pdf,29 页;页码均指 PDF 物理页 依据与边界:无字幕、未下载视频、未看画面,内容由讲义重建。manifest 在 P16 下同时列了 small-gradient-v7.pdf,但那份是下一讲(P17「当梯度很小」)的讲义,讲 Hessian、鞍点、batch、momentum,和本节标题对不上;本文只在末尾作衔接提示,不当作 P16 内容。


1. 本节要解决什么问题

前面讲了模型怎么定、loss 怎么定、梯度怎么算。但做作业时第一个问题不是"用哪个算法",而是:

我的模型在训练集上 loss 很大 / 在测试集上 loss 很大,到底该改哪里?

这一讲给的就是这张诊断地图:把 "training loss 大不大" 与 "testing loss 大不大" 两两组合,分别指向四种病因和四类处方。它不教你新模型,教的是归因。


2. 先固定框架:三步 + 两个数据集

讲义 p2–p3 把任何 ML 任务压成三步:

$$\text{Step 1: } y=f_\theta(x);\qquad \text{Step 2: } L(\theta);\qquad \text{Step 3: } \theta^*=\arg\min_\theta L .$$

训练集 \((\mathbf{x}^1,\hat y^1),\dots,(\mathbf{x}^N,\hat y^N)\) 用来定 \(\theta^*\);测试集 \(\mathbf{x}^{N+1},\dots,\mathbf{x}^{N+M}\) 只在前向时用。关键点:两个 loss 是独立读数,必须分开看;只看一个,结论都是猜的。


3. 诊断地图(本节的主干)

讲义 p4 的那张图值得默画:

testing loss 小 testing loss 大
training loss 小 理想 overfitting 或 mismatch
training loss 大 (几乎不会出现) model bias 或 optimization issue

四条边对应四种动作:

下面逐格拆。


4. Training loss 大:先分清"没有针"还是"找不到针"

讲义 p5–p8 用了同一个比喻的两半:

(a)Model bias(模型偏差)。模型太简单,函数集里根本没有能拟合数据的函数。p5 的三行例子很直观:

$$y=b+w x_1 \quad\longrightarrow\quad y=b+\sum_{j=1}^{56}w_jx_j \quad\longrightarrow\quad y=b+\sum_i c_i\,\sigma\Bigl(b_i+\sum_j w_{ij}x_j\Bigr).$$

从 1 个特征到 56 个特征再到单层网络,函数集一步步变大。p5 的原话逻辑是:"海量参数里找一根针……但根本没有针"——容量不足。

(b)Optimization issue(优化问题)。函数集里有好函数,梯度下降没找到。p7 画了 loss 曲线:\(\theta^*\) 是能取到的最小值,但你停在 \(L(\theta)\) 很大的地方;p8 并列两种情形——"针在草堆里,只是找不到" vs "根本没有针"。光看 training loss 数值,这两者无法区分。

(c)怎么区分:拿一个更弱/更浅的模型做对照。讲义 p9–p10 给的是 ResNet 论文里的那张图:

层数 1 2 3 4 5
2017–2020 训练 loss(k) 0.28 0.18 0.14 0.10 0.34

5 层比 4 层还差。如果加深是"扩大函数集",最优解不可能变差(4 层能表示的,5 层把多余层学成恒等也能表示)。所以 5 层更差只能是优化没做到,不是容量不够。p10 把方法写成一句可操作的规则:

从浅模型起步;如果更深的模型在训练集上反而没有更小的 loss,就是 optimization issue,解法是更强的优化技术(下一讲)。

注意对照的两个前提:① 比的是 training loss,不是 testing;② 要保证深模型包含浅模型的解(残差连接就是为此)。

(d)这一格绝不能开错药。training loss 大时:

讲义 p18 把 regularization / dropout / early stopping 明确列在 Overfitting 那一节之下,而不是 "training loss 大" 之下——这就是"正则不是用来救高 training loss"的原文依据。


5. Training loss 小、Testing loss 大:overfitting

定义(p13):训练 loss 很小、测试 loss 很大。

极端例子(p13,讲义原文函数):

$$f(x)=\begin{cases}\hat y_i, & \exists x_i=x\\ \text{random}, & \text{otherwise}\end{cases}$$

这个函数训练 loss 严格为 0——它就是把答案背下来了——但测试时全是随机输出,p13 的评价是 "Less than useless"。这说明:训练 loss 小本身不构成任何优点,它只说明"记住了"。

为什么会发生(p14):真实分布不可见,训练点只是采样。模型足够灵活时,它会穿过每一个训练点并在点与点之间剧烈振荡;测试点落进振荡区,误差就大。p14 画的就是这条"穿过所有点但形状疯狂"的曲线。

处方(p15–p19):

  1. 更多训练数据(p15)——最直接,但往往拿不到;
  2. 数据增强(p15)——在作业里可以做;
  3. 约束模型(p16–p18):更少特征、early stopping、regularization、dropout、更少参数/参数共享、CNN(利用先验)。
  4. 注意别约束过头(p19):把模型压到 \(y=a+bx\) 这种程度,又会回到 model bias——p19 明确写 "Back to model bias …"。

所以 overfitting 的解法和 model bias 的解法是相反方向的两组旋钮,这就是为什么必须先诊断再动手。


6. 偏差—复杂度权衡与模型选择

p20 画了经典的两条曲线:横轴是模型复杂度,training loss 单调下降,testing loss 先降后升,最优点在中间——"select this one"。

但"选中间"不能靠 testing loss 来选,否则你是在用考试题调参。讲义 p21–p24 用 Kaggle 的场景把这件事讲透了:

N-fold cross validation(p24):把训练集切成 N 份,轮流留一份做 validation,取 N 次结果的平均:

模型 三折 MSE 平均
1 0.4 / 0.5 / 0.3 0.4
2 0.4 / 0.5 / 0.6 0.5
3 0.2 / 0.4 / 0.3 0.3

(平均值为 Python 复算,讲义 p24 印的就是 0.4 / 0.5 / 0.3。)选模型 3。N 折的代价是训练 N 次,好处是每个样本都当过且只当过一次验证集,方差比单次切分小。


7. Mismatch:分布不同,不是过拟合

p28 单独列了第四种病:训练集与测试集分布不同。

讲义注明多数作业没有这个问题(HW11 除外)。


8. 讲义原例汇总

例子 页码 用途 性质
1 特征 → 56 特征 → 单层网络 p5 展示函数集扩张 讲义原例
ResNet 1–5 层训练 loss 0.28/0.18/0.14/0.10/0.34 p10 深模型更差 ⇒ 优化问题 讲义原例(引自 He et al.)
"背答案"函数 p13 训练零 loss 无意义 讲义原例
三折交叉验证 0.4/0.5/0.3 p23–p24 模型选择 讲义原例
2/26 观看人数预测(0.43k/0.39k/0.38k/0.44k) p26 2021 年实测:4 层反而更差 讲义原例
public/private 排行榜陷阱 p21–p22 选择偏差 讲义原例

【补充】p26 的 2021 数字与 p10 的 2017–2020 方向一致(4 层 0.44k 差于 3 层 0.38k),但属同一实验的两次年度复现,别当两份独立证据。


9. 易错对照

常见误区 正确说法
training loss 大就是过拟合 过拟合的定义是 training loss 小、testing 大
training loss 大就加正则/dropout 方向反了;正则只会让训练 loss 更大。该扩容量或改优化
深模型一定不比浅模型差 只在"能表示浅模型解 + 优化到位"时成立;p10 的 5 层就是反例
用 public testing set 调参没关系 会把 public 调得比 private 好,是选择偏差(p21–p23)
交叉验证能提升模型本身 它只提升模型选择的可靠性,不改变被选模型的训练
testing loss 大就是过拟合 也可能是 mismatch;判据是"加数据是否有效"
训练 loss 降到 0 说明学得好 背答案函数也能到 0(p13)
模型越复杂越好 p19–p20:复杂度过头回到 bias,testing loss 反弹

10. 自测

Q1. 训练 loss 0.02、validation loss 0.35。先做什么,不该做什么?

参考答案

这是 training 小 / testing 大的格子:过拟合(或 mismatch)。先确认 validation 与测试同分布;若同分布,则加数据/数据增强、约束模型(少特征、正则、dropout、early stopping)、或做模型选择。不该加层加参数——那会加重过拟合。

Q2. 5 层网络训练 loss 比 4 层高,一定是模型容量不够吗?

参考答案

不一定,通常相反。5 层函数集包含 4 层的解(多余层可学恒等),容量不可能更小;训练 loss 更高说明优化没找到好解,属 optimization issue。解法是更强优化(Adam、更好的初始化、残差连接、调学习率),而不是加宽模型。

Q3. 为什么不能用 public leaderboard 反复挑模型?N 折交叉验证如何缓解?

参考答案

反复看 public 分数再选模型,等于把 public 当训练集,模型对 public 过拟合,private 上会回落(p21–p23)。N 折CV 只在训练集内部轮换验证,public/private 完全不参与选择,因此估计更无偏;代价是训练 N 次。

Q4. 训练 loss 高的时候加 L2 正则,会发生什么?为什么讲义把正则放在 overfitting 一节?

参考答案

training loss 会更高。L2 把参数往 0 拉,缩小可行函数集,是"约束"手段,只对"训练已经很好、测试不行"的过拟合有效。p18 把 regularization 列在 Overfitting → constrained model 之下,正是这个定位。

Q5. testing loss 大,加了一倍训练数据完全没改善,最可能是什么问题?

参考答案

mismatch(分布不同),而不是过拟合。过拟合加数据通常会改善;mismatch 下新数据仍来自错误分布,所以无效(p28)。应先查数据生成过程,让训练分布贴近测试分布。


11. 30 秒速记

两个读数、四种病:train 大 → model bias(没针)或 optimization(找不到针),只能靠"更浅模型对照 training loss"区分;train 小 test 大 → overfitting(背答案、振荡)或 mismatch(分布不同,加数据没用)。处方方向相反:bias/optimization 要放宽或换优化,overfitting 要收紧或加数据。选模型只准用 validation / N 折,不许拿 public 反复挑。正则治过拟合,不治高训练 loss。

与其他 P 的关系:P1/P2 建立三步框架,本节是它的"故障排查"版;p10 提到的"更强优化"就是 P17(small-gradient)与 P18/P19(optimizer);P20 的分类、P29 的 CNN 分别是本节 "constrained model" 里的具体先验;P24/P25 的优化器选择可回头补本节"optimization issue"那一格。

来源与说明

基于对应官方讲义整理,未取到完整视频字幕;不冒充逐字稿。