第15章:模型的好与坏——过拟合、欠拟合与验证
前面三章我们聊了三个经典的机器学习模型。线性回归画一条直线穿过数据。逻辑回归在直线外面套一层Sigmoid壳输出概率。支持向量机修一条最宽的马路来分开两类。决策树则是一路问问题把数据切成越来越小的块。这些模型各有各的脾气但它们共享同一个问题——你怎么知道你训练出来的那个模型是真的学会了东西还是只是背下来了这个问题在机器学习里是根本性的它几乎定义了这个领域的全部方法论。你接下来在深度学习部分看到的每一个技术——正则化、Dropout、批归一化、早停法——本质上都是在回答这个问题的一个侧面。这一章我们就专门聊聊这个问题。死记硬背 vs 真正理解我们从一个生活场景开始。高三最后一个月班上有两种学生。一种人把课本和练习册上的题目全部背了下来——看到一道题脑子里搜索这道题是不是在XX页上出现过然后默写答案。另一种人把课本上的公式推导了一遍理解了它为什么长那样——不管题目怎么变他都能顺着推。考试结果通常是这样前一种人模拟考分数很高因为他背的题都是从模拟卷里抽的。但一到高考——题目是新出的没见过——他懵了分数掉得厉害。后一种人模拟考和高考成绩差不多因为他学的是规律不是个例。在机器学习里前一种人叫过拟合后一种人叫泛化好。过拟合的意思就是模型记住了训练数据里的每一条细节——包括噪声和异常——但在新数据上表现很差。因为它背的不是规律而是答案。那反过来如果模型连训练数据都没学好呢比如你让它拟合房价它只画了一条水平线连面积和价格的正相关关系都没抓住。这叫欠拟合——模型太简单了连数据的基本趋势都没学会。你怎么知道它是不是在背答案你现在有个模型。你拿训练数据喂它它学完了。然后你拿同一批数据让它预测——准确率98%。这时候你别急着高兴。这个98%可能是个陷阱。它可能只是在回答它刚背过的题。真正的检验方式是找一批它从来没见过的数据来考它。如果它在没见过的数据上也能达到90%以上说明它真的学会了一些规律。如果它在没见过数据上掉到70%说明它很大程度是在背答案。所以整个机器学习的实验流程从一开始就是分裂的你不能用同一批数据既做练习又做考试。你把所有数据分成三份。第一份叫训练集。这是用来训练模型的数据。模型就是靠这批数据来调整自己的参数。第二份叫验证集。你在训练过程中会不断产生候选模型——比如在决策树里尝试不同的深度在SVM里尝试不同的核函数参数。你用验证集来比较这些候选模型选出最好的那个。验证集相当于模拟考。第三份叫测试集。这是唯一一份模型在整个训练过程中绝对看不到的数据。等模型的全部设计和参数调整都完成了你用测试集来给它打分。测试集上的准确率才是模型真实泛化能力的最终依据。这个分割为什么必须严格你可能觉得这么分是不是太严苛了我少分一点行不行答案是不行。因为验证集和测试集的作用是防作弊。如果你让模型在训练过程中接触到了测试集它就相当于事先知道了考题——你最后拿到的那个最终评分就没有任何说服力了。在实际的机器学习竞赛中这种数据泄露是最严重的违规。有时候甚至不是故意的——比如你在预处理数据时不小心用了整个数据集的信息来归一化特征而测试集的信息已经通过归一化偷偷进入了训练过程。这也会导致分数虚高。交叉验证是另一种评估方法尤其适合数据量不太够的情况。它的做法是不固定留出20%做验证而是把训练集分成k份轮流拿一份做验证、其余k-1份做训练做k次最后取平均值。这样每一份数据都被当作过验证集模型评估更稳定也能缓解单次随机划分导致的偏差。偏差-方差一个帮你理解全局的框架过拟合和欠拟合背后有一个更根本的权衡叫偏差-方差权衡。先给一个你记一辈子的比喻。想象你在打靶。偏差是你所有射击点的平均位置离靶心有多远。如果偏差大说明你整体上偏左或偏右了——你的瞄准系统有系统性的误差。在模型里偏差大意味着模型本身的假设就错了——比如数据根本不是线性的你却硬画一条直线去拟合。方差是你射击点的离散程度。如果方差大说明你每次射出去的位置都很不一样——枪不稳定或者你手一直在抖。在模型里方差大意味着模型对训练数据太敏感——换一批数据模型的形状就大变样。线性回归的偏差大方差小。它坚定地认为数据是一条直线——哪怕数据确实弯了它也硬着头皮画直线。它的方差确实低因为无论如何调整数据直线都差不多。深度神经网络反过来。它的偏差低——它能拟合任何复杂的曲线——但它的方差极高。稍微换一批训练数据网络里的几百万个权重就会跑偏模型输出可能面目全非。所有的机器学习模型都在这两个极端之间走钢丝。你希望降低偏差模型能捕捉数据中的规律但降低偏差的同时方差往往会升高模型变得对训练数据敏感。你希望降低方差模型对新数据稳定但降低方差的同时偏差往往又会升高模型变得太死板。这个权衡没有完美的平衡点。你只能根据你的数据量和问题的复杂度来做出取舍。从本章到下一站第15章之后经典机器学习部分全部结束。你手里现在有函数、向量、矩阵、导数——看懂任何模型结构所需的语言。概率和熵——处理不确定性。线性回归、逻辑回归、SVM、决策树和随机森林——四种不同脾气的经典模型。过拟合、欠拟合、验证集、偏差-方差——评估一切模型的底层框架。这些足够你走进下一段故事了。下一站多层感知机和反向传播——那是整个深度学习的出发站。参考文献Hastie, T., Tibshirani, R., Friedman, J. (2009).The Elements of Statistical Learning(2nd ed.). Springer. 第7章Model Assessment and Selection。推荐理由这一章专门讲模型的评估和选择——从训练/验证/测试集的划分到交叉验证、偏差-方差分解覆盖了本篇的全部核心内容。ESL的写作风格偏严谨但第7章的图示和案例选择非常精准适合在读完本篇后翻看前几页跟三种数据集和靶图的直觉对照。Kohavi, R. (1995). A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection.Proceedings of the 14th International Joint Conference on Artificial Intelligence, 1137–1143.推荐理由这是一篇关于交叉验证的经典实证研究。Kohavi系统地比较了不同验证方法留出法、k折交叉验证、自助法在各种数据集上的表现差异。如果想理解验证集和交叉验证到底谁更靠谱这篇论文是绕不开的文献原点。StatQuest with Josh Starmer. (2017). Machine Learning Fundamentals: Bias and Variance. YouTube. https://www.youtube.com/watch?vEuBBz3bI-aA推荐理由StatQuest是YouTube上最受欢迎的机器学习科普频道之一主讲人Josh Starmer用独特的动画和通俗幽默的语言把复杂概念讲得极其透彻。这期视频专门用可视化的方式讲解偏差-方差权衡与正文打靶四宫格的直觉高度吻合——看完你会对为什么越复杂的模型越容易过拟合有一个身体级别的感受。