大家好,今天我们学习【机器学习速成】之 正则化:降低模型的复杂度以减少过拟合。
我们 马上学三点 ,
- 泛化曲线,
- 降低模型的复杂度
- L2 正则化的损失函数
大家可以点击下面的“ 了解更多 ”,或搜索“ 马上学123 ”,在线观看PPT讲义。
泛化曲线
我们之前已经讨论过 如何让训练损失降至最低, 也就是获取正确的样本。
今天,我们要讨论的是正则化, 也就是不要过于信赖样本, 这是确保机器学习效果的一个关键因素。
如图泛化曲线, 该曲线显示的是训练集和验证集 相对于训练迭代次数的损失。
从图中可以看出, 随着迭代次数的增加, 蓝色的训练集损失逐渐减少, 最终会在某种程度上收敛于低端。 但红线的测试集损失开始上升。
事实上,红线才是我们真正要关注的, 尽管我们在对训练样本进行训练, 但我们想要泛化到新的样本, 也就是我们希望在测试集上的损失控制在较低的范围。
如何抑制测试集损失上升
那么如何抑制红线的测试集损失上升呢?
该图说明模型与训练集中的数据过拟合了。 我们可以通过正则化来避免过拟合,
正则化有很多不同的策略:
- 其中一种策略是早停法(Early Stopping), 也就是训练中计算模型在测试集上的表现, 当模型在测试集上的表现开始下降的时候, 停止训练,这样就能避免继续训练导致过拟合的问题。
- 这是一种常用策略, 尽量抵达红色测试集曲线的底端, 但实际操作起来可能有些困难。
其他正则化策略 包括尝试添加模型复杂度惩罚项, 这就是我们接下来要讲的。
降低模型的复杂度
目前,我们训练仅专注于一个重要方面, 也就是输入正确的训练样本, 最大程度地最小化损失, 也就是经验风险最小化为目标
现在我们要引入第二项以对模型复杂度进行惩罚。
我们以最小化损失和复杂度为目标,这称为结构风险最小化。
现在,我们的训练优化算法是一个由两项内容组成的函数:
- 一个是损失项,用于衡量模型与数据的拟合度,
- 另一个是正则化项,用于衡量模型复杂度。
如何衡量模型复杂度呢?
那么我们如何衡量模型复杂度呢?
我们可以采用多种方法, 一种常见的策略是尽量选择较小的权重, 也就是使参数小到几乎可以让我们忽略, 同时我们仍能获取正确的训练样本。
这里将重点探讨L2正则化, 模型复杂度= 权重的平方和, 在这种正则化策略中, 我们会对权重的平方和进行惩罚。
我们用L2 正则化公式来量化复杂度, 该公式将正则化项定义为所有特征权重的平方和。
在使用L2正则化时, 模型的确会关注训练数据, 但会尽量确保最后的权重不会超过所需的大小。
L2 正则化的损失函数
我们再以数学方式总结一下:
目前,我们在训练优化方面添加了两项:
- 第一项是训练损失。 我们希望获取正确的样本。 可以看出,L损失项取决于训练数据。
- 现在, 我们在模型复杂度方面引入了第二项。 您会注意到,第二项与数据无关, 它只是要简化模型。
您会发现这两项通过lambda实现了平衡。 这是一个系数, 代表我们对获取正确样本 与对简化模型的关注程度之比。
lambda的选择和平衡
lambda的选择其实取决于具体情况:
- 如果您有大量的训练数据, 训练数据和测试数据看起来一致, 并且统计情况呈现独立同分布, 那么您可能不需要进行多少正则化。
- 如果您的训练数据不多, 或者训练数据与测试数据有所不同, 那么您可能需要进行大量正则化。 您可能需要利用交叉验证, 或使用单独的测试集进行调整。
选择 lambda 值时, 目标是在简单化和训练数据拟合之间达到适当的平衡:
- 如果您的 lambda 值过高, 则模型会非常简单,但是您将面临数据欠拟合的风险。
- 如果您的 lambda 值过低, 则模型会比较复杂,并且您将面临数据过拟合的风险。
- 理想的 lambda 值生成的模型可以很好地泛化到以前未见过的新数据。
总结:
- 我们要获取正确的样本,让损失降至最低;也要进行正则化,不要过于信赖样本
- 经验风险最小化:旨在减少训练误差
- 结构风险最小化:旨在减少训练误差,同时平衡复杂度。
- L2 正则化的损失函数: 第一项用来训练损失 第二项用来简化模型
这里讲了三点,关键词有哪几个?
提问!除了L2可以衡量模型复杂度,还有其它方法吗?
欢迎回复评论