过拟合

引言

什么是过拟合呢?所谓的过拟合实际上就是分类器或者函数过度的拟合了训练数据,在训练数据上表现良好,但是在其他的数据上泛化能力非常差。如下图所示:

过拟合

(plus:其实从这张图中也可以得出一个不严谨的结论,函数越简单,其拟合能力可能越好。这里面其实也蕴含了一些哲学道理与生活哲理,极简生活哲学,扯远了。。。。)

我们试图学习分开红点和蓝点的一个分类器(本质上就是学习一个函数),可以看到绿色的函数能够100%的将蓝点和红点分开,黑色的函数也能很好的将蓝点和红点分开,但是也存在着少量误分类的情况,那么实际上哪个函数更好一些呢?如果这里的数据就是所有的数据,那么毫无疑问绿色最好,但是如果这里只是部分数据,还有更多的数据没有展示在这里,那么毫无疑问黑色的线泛化能力更好。这里绿色的分类函数实际上就是过拟合了。

在机器学习算法中,我们实际上拿到的数据本质上讲都是训练数据,机器学习本质上就是利用给定的训练数据,设计出一个算法模型,让这个模型能够在未知的数据上依旧表现好。既然只有训练数据,那么不可避免的我们的算法或多或少都会遇到过拟合的问题,下面我们就来实际分析一下,看有哪些方法能够减轻过拟合问题。

减轻过拟合的方法

增加训练数据

增加训练数据也是可以减轻过拟合的一种方法,因为实际上训练数据越多,我们的模型能够学到的就越多,那么在分类的时候久能越准确。但是训练数据的获取是有成本的,虽然这是最有效的方法,但是条件限制,这不是一个优秀的解决方案。

规范化

所谓的规范化,就是在在代价函数上增加有一个惩罚项。如下所示在二次代价函数上增加一个权重的惩罚项:

或者简写为:

其中 被称为规范化参数

如果将规范化引入到梯度下降算法中,权重的更新算法就可以修改为:

为什么规范化能够减轻过拟合

我们重新观察一下权重的更新公式:

相对比于最初的公式

我们的权重 增加了一个惩罚项 ,这也就意味着当我们每次根据训练数据去更新权重时(这个时候其实学习到的权重是去拟合训练数据的),惩罚项都会对权重有一定值的衰减,因此也就能够一定程度的避免权重的过拟合。

弃权

另外一种减轻过拟合的技术就是弃权。这种技术都应用于神经网络中。

神经网络

对于一个神经网络,正常的训练过程是给定特征输入和标签 通过前向传播一直到输出层,然后利用反向传播算法逐步反向更新权重。

所谓的弃权,就是给定神经网络后,随机删除一定的隐藏神经元,然后将给定特征输入和标签 通过前向传播一直到输出层,然后同样在这个删除了部分神经元的网络上利用反向传播算法逐步反向更新权重。针对每个训练样本,每次随机删除神经元,如下如所示:

神经网络

这样就保证了针对不同的训练样本,实际对其生效的隐藏层的神经元是不一样的。

弃权实际上是通过对不同的训练样本,保证了部分神经元的权重不更新(就是那些被删除的神经元),以增加了网络的鲁棒性。部分神经元的权重不更新,也就避免了整个网络的所有的权重都去拟合训练数据,增强了对未知数据的拟合能力。

显示 Gitment 评论