【AI】浅谈使用正则化防止过拟合(上)
前言
对于机器学习问题,我们最常遇到的一个问题便是过拟合。在对已知的数据集合进行学习的时候,我们选择适应度最好的模型最为最终的结果。虽然我们选择的模型能够很好的解释训练数据集合,但却不一定能够很好的解释测试数据或者其他数据,也就是说这个模型过于精细的刻画了训练数据,对于测试数据或者其他新的数据泛化能力不强。
因此,我们需要通过正则化的方法来防止过拟合,接下来跟博主一起来了解一下吧。
本篇将重点介绍什么是欠拟合与过拟合,是什么原因造成的,该如何解决?
什么是欠拟合与过拟合
先来看一组图片,这三张图片是线性回归模型,拟合的函数和训练集的关系
第一张图片拟合的函数和训练集误差较大,我们称这种情况为 欠拟合;
第二张图片拟合的函数和训练集误差较小,我们称这种情况为 合适拟合;
第三张图片拟合的函数完美的匹配训练集数据,我们称这种情况为 过拟合;
总结得出:
过拟合 (overfitting):为训练集而非测试集提供准确的结果,存在较高的方差;
欠拟合 (underfitting):提供的训练集和测试集结果都不太准确,存在较高的偏差;
如下图所示:
假设红色的靶心区域是学习算法完美的正确预测值,蓝色点为训练数据集所训练出的模型对样本的预测值,当我们从靶心逐渐往外移动时,预测效果逐渐变差。
从上面的图片中很容易可以看到,左边一列的蓝色点比较集中,右边一列的蓝色点比较分散,它们描述的是方差的两种情况。比较集中的属于方差比较小,比较分散的属于方差比较大的情况。
我们再从蓝色点与红色靶心区域的位置关系来看,靠近红色靶心的属于偏差较小的情况,远离靶心的属于偏差较大的情况。
通俗地讲,过拟合就是应试能力很强,实际应用能力很差,擅长背诵知识,却不懂得灵活利用知识;而欠拟合就是啥啥都不行;
如何解决欠拟合问题
欠拟合问题,根本的原因是特征维度过少,导致拟合的函数无法满足训练集,误差较大。
欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。但是如果真的还是存在的话,可以 增加网络复杂度 或者在模型中 增加特征,这些都是很好解决欠拟合的方法。
如何解决过拟合问题
过拟合问题,根本的原因则是特征维度过多,导致拟合的函数完美的经过训练集,但是对新数据的预测结果则较差。
具体来说造成原因的话,有以下几种:
训练数据集样本单一,样本不足。如果训练样本只有负样本,然后拿生成的模型去预测正样本,这肯定预测不准,所以训练样本要尽可能的全面,覆盖所有的数据类型。
训练数据中噪声干扰过大。噪声指训练数据中的干扰数据。过多的干扰会导致记录了很多噪声特征,忽略了真实输入和输出之间的关系。
模型过于复杂。 模型太复杂,已经能够 “死记硬背” 记下了训练数据的信息,但是遇到没有见过的数据的时候不能够变通,泛化能力太差。我们希望模型对不同的模型都有稳定的输出。模型太复杂是过拟合的重要因素 。
要想解决过拟合问题,就要显著减少测试误差而不过度增加训练误差,从而提高模型的泛化能力。我们可以使用正则化(Regularization)方法。那什么是正则化呢?正则化是指修改学习算法,使其降低泛化误差而非训练误差。
常用的正则化方法根据具体的使用策略不同可分为:
(1) 直接提供正则化约束的参数正则化方法,如 L1/L2 正则化;
(2) 通过工程上的技巧来实现更低泛化误差的方法,如提前终止 (Early stopping) 和 Dropout;
(3) 不直接提供约束的隐式正则化方法,如数据增强等。
那接下来讲讲什么是正则化;
正则化
让我们先回顾一下上述过拟合的例子: ;
从图中可以看出,解决这个过拟合问题可以通过消除特征 和 的影响, 我们称为对参数的惩罚, 也就是使得参数 , 接近于 0。
最简单的方法是对损失函数进行改造,例如:
这样在求解最小化损失函数的时候使得参数 , 接近于 0。
番外:这块如果不懂的话,可以看看博主之前写的文章:【AI】浅谈梯度下降算法(理论篇),里面有详细的算法推导过程;
正则化其实就是通过对参数 的惩罚来影响整个模型,在损失函数上加上正则项达到目的;
正则化 具体将在下一篇 【AI】浅谈使用正则化防止过拟合(下) 中进行介绍;
后记
以上就是 浅谈使用正则化防止过拟合(上) 的全部内容了,介绍了什么是欠拟合与过拟合,是什么原因造成的,该如何解决,通过图文结合,细致地讲述了要点,希望大家有所收获!
版权声明: 本文为 InfoQ 作者【sidiot】的原创文章。
原文链接:【http://xie.infoq.cn/article/f2012c0aaeec08f276ee228ac】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论