过拟合:模型的复杂度#
上一节介绍过下面这个模型,它在测试集上把很多树都分错了。
可以看到,上面那个模型里塞满了各种复杂形状。那如果换成一个更简单的模型,会不会有更好的表现?假设你把复杂模型换成一个简单到极点的模型——一条直线。
在新数据上,简单模型比复杂模型泛化得更好。也就是说,在测试集上,简单模型的预测比复杂模型更准。
简单战胜复杂,这件事已经延续了很久。其实对简单的偏好,可以追溯到古希腊。几个世纪之后,十四世纪一位名叫威廉·奥卡姆(William of Occam)的修士,把这种对简单的偏好总结成了一门哲学,就是奥卡姆剃刀。这门哲学至今仍是许多学科(包括机器学习)的基本原则之一。
注意: 复杂模型在训练集上通常优于简单模型;但在测试集上(这才是更重要的那一项),简单模型通常优于复杂模型。
练习:检验你的理解#
第1题: 你在推导一个物理公式。下面哪个公式更符合奥卡姆剃刀?
A. 一个含3个变量的公式
B. 一个含12个变量的公式
第2题: 你刚启动一个全新的机器学习项目,正要挑选第1批特征。你应该选多少个特征?
A. 挑 1–3 个看起来预测能力很强的特征
B. 挑 4–6 个看起来预测能力很强的特征
C. 尽可能多地挑,好早点看出哪些特征预测能力最强
正则化#
机器学习模型必须同时满足两个互相冲突的目标:
把数据拟合好。
尽可能简单地把数据拟合好。
让模型保持简单的一种做法,是给复杂模型施加惩罚;也就是说,在训练过程中强迫模型变得更简单。而给复杂模型施加惩罚,正是 正则化(regularization) 的一种形式。
一个正则化的类比: 假设阶梯教室里的每个学生都带着一个小蜂鸣器,蜂鸣器发出的声音让教授很烦。学生们会在教授讲得太复杂时按下蜂鸣器。教授被吵烦了,只好把课讲得简单些。教授会抱怨:「我一简化,就不够精确了。」学生们则会说:「唯一的目标就是讲得足够简单,让我能听懂。」慢慢地,蜂鸣器就把教授「训练」成了会讲出恰当简单程度的课——即便那个更简单的讲法没那么精确。
损失与复杂度#
到目前为止,本课程一直在暗示,训练的唯一目标就是最小化损失,也就是:
$$\text{minimize(loss)}$$前面已经看到,一心只想着最小化损失的模型很容易过拟合。更好的训练优化算法,会最小化损失与复杂度的某种组合:
$$\text{minimize(loss + complexity)}$$可惜的是,损失与复杂度通常是反着走的。复杂度一增加,损失就下降;复杂度一降低,损失就上升。你应该去找一个合理的中间地带,让模型在训练数据和真实数据上都能做出好的预测。也就是说,你的模型要在损失与复杂度之间,找到一个合理的折中。
什么是复杂度#
你已经看过好几种量化损失的方式了。那复杂度该怎么量化?先从下面这道练习找找感觉。
练习:检验你的直觉#
第3题: 到目前为止,我们对复杂度到底是什么一直说得很含糊。下面这几个想法,你觉得哪些算是合理的复杂度度量?
A. 复杂度是模型权重的函数
B. 复杂度是模型权重平方的函数
C. 复杂度是模型中所有特征偏置的函数
MLWM: 关于 $L_1$ 与 $L_2$ 正则化背后的权重衰减机制,可以参见「4.4 L1与L2正则化原理:权重衰减与过拟合抑制」;过拟合的成因与常见应对手段,参见「4.3 过拟合处理方法:常见原因、表现与正则化实战」。
关键术语:
- $L_1$ 正则化
- $L_2$ 正则化
- 正则化