机器学习(让机器从数据里自己学出规律)基础 — 过拟合与三件正则化武器
这一章讲三件事: 机器学习任务怎么分、项目流程长什么样; 「训练误差低」为什么可能是坏消息(过拟合);以及三件正则化武器各自怎么拆这个问题。 读完本章,你就有了判断「这个模型到底行不行」的标尺——第 06 章起每个实验都用它量。
1. 顶层全景:从任务到标尺
任务四类:监督(有标签) · 无监督(无标签) · 半监督(少量标签) · 强化(试错反馈)
│
▼
流程六步:明确目标 → 收集数据 → 探索与预处理 → 选模型与损失 → 训练 → 评估与优化
│ (预处理占项目大部分时间)
▼
评估出来的数字怎么读?
训练误差 ↓ 测试误差 ↓ 健康学习
训练误差 ↓ 测试误差 ↑ 过拟合 —— 本章的主题
四类任务的分界线是「有没有标签」。分类、回归属于监督学习(有标准答案的学习)。
没有答案的归无监督:比如聚类(自动分堆)。
降维(压低维度)也算无监督。
半监督(大量不带答案的数据加少量答案)让两者搭着用,书里把「自己当老师」的自编码、语言模型都归在这里。
强化学习靠环境反馈而非教师信号,第 13 章展开1。
流程里有一条最容易被低估的事实:数据预处理常占整个机器学习过程的大部分时间2——第 03 章那三级流水线(加载/批量/增强)就是为这段时间修的路。
模型选择还有一条「元知识」:不存在对任何情况都表现很好的算法(解题的一套固定步骤),书里引了行话「没有免费的午餐」——所以实际做法是几个方法都试,选最好的3。评估方法按数据量选:数据多就三分(训练/验证/测试),数据少就 K 折交叉验证(把数据分 K 份,轮流拿一份当测试)4。
2. 过拟合长什么样
过拟合有个明确的仪表特征,不是感觉:随着训练继续,训练误差还在降,测试误差却不降反升——曲线出现分叉5。
机制一句话:模型把训练数据里无关紧要甚至错误的模式也背了下来。训练集里「背答案」能涨分,换一套题立刻现形。书里给的解决手段统称正则化(regularization,一切显式用来压低测试误差的策略的总称),目标是降泛化误差而不是训练误差6。下面三节是三件武器。
3. 主走查:给损失函数加一记重罚
这是本章的主走查,也是最透明的一次「看懂正则化」。 场景:用房屋面积预测房价。真实规律是 2 次多项式(一条抛物线),但训练数据里混了噪声,模型拟成了一条4 次多项式——曲线扭了两下,把噪声也拟合了进去7。
修补思路:让 x³、x⁴ 那两项的系数 θ3、θ4 自己缩到接近 0,4 次多项式就退化回 2 次。做法是在损失函数后面直接加罚项8:
原损失:L = 均方误差(预测 − 真实)
新损失:L' = L + 10000·θ3² + 10000·θ4²
优化器现在的处境:
把 θ3 留在大值 → 罚项贡献 10000·θ3²,损失暴涨
把 θ3 压到 0 → 罚项消失,只剩普通误差
⟹ 只要普通误差涨得不多,优化器一定选择把 θ3、θ4 压向 0
⟹ 曲线从「扭两下的 4 次」回到「平滑的 2 次」,测试误差下降
(这里的 10000 只是「一个大数」的代表;真实训练里这个系数就是优化器的 weight_decay 参数,L2 正则在神经网络里的名字叫权重衰减——每步把所有权重按比例缩小一点,效果等同给每个权重挂了罚项9。)
两条边界:罚项是「一刀切」的,它压的是所有权重,不只压坏项——罚太重,连有用的权重也被压扁,模型变成欠拟合(学不动,连训练数据都学不好);以及它只对「模型太复杂」这类过拟合有效,数据本身有错标时压参数救不了。
4. Dropout:训练时随机失明
第二件武器不从损失函数下手,从网络结构下手:dropout(随机丢弃——训练时按设定比例随机屏蔽一部分神经元;论文里常大写为 Dropout)——被屏蔽的神经元本次前向不贡献、本次反向不更新10。
它为什么有效?书里给了一个值得记住的机制名:复杂的协同适应(co-adaptation)——神经元之间会互相配合、互相依赖某个邻居的特定输出,这种「拉帮结派」让网络对训练数据过拟合、变得脆弱11。随机失明强迫每个神经元不依赖任何特定队友:既然队友随时可能消失,任何单个输入都拿不到太大权重,网络只能学更稳的、冗余的模式12。
还有一个视角:每轮屏蔽不同的神经元,等于同时训练一大批「瘦身版子网络」,测试时再合并——4 个单元(节点)的小网络就有 16 种子集组合13。所以 Dropout 的效果与 L2 相近(两者都收缩权重),但路径不同14。
使用纪律,书里给得很具体:丢弃率 20%50% 起步(太低没用、太高学不动);网络越大越有效;配合把学习率放大 10100 倍、动量调到 0.9~0.99;测试时把输出按丢弃比例缩小,补偿训练时的「缺员」15。