过拟合和欠拟合

Posted by RAIS on 2020-04-01
  • 本文首发自公众号:RAIS,点击直接关注。

​前言

本系列文章为 《Deep Learning》 读书笔记,可以参看原书一起阅读,效果更佳。

构建复杂的机器学习算法

上一篇文章中我们介绍了什么叫做机器学习算法极其具体的定义和所关心的问题,比较简单,接下来的文章我们将介绍一些设计学习算法的基本准则。

误差

  • 泛化:机器学习的目的是在新的输入上具有良好的表现,而不是已有的数据,这很好理解,在新的数据上表现良好的能力叫做 泛化

在机器学习中,总是存在误差的,百分之百的确定的事件已经不是机器学习研究的范围了。既然如此,就一定存在误差,训练过程在训练集上误差称作 训练误差,泛化后的在新的输入上的误差称为 泛化误差测试误差。我们都希望误差尽可能的小,并且相比较而言泛化误差减小更重要(毕竟解决问题才是最重要的)。

这里会遇到一个问题就是我们往往只能得到训练数据集,没有什么好的办法提前获取模型交付生产环境后所新输入的数据,针对这样的问题,我们往往在收集统计训练数据时,尽量接近实际生产环境,并且假设数据之间是 独立同分布 的,称为 数据生成分布,基于这样的原因,我们会假设训练误差和测试误差两者的期望是一样的。因此我们针对数据集,具体的做法就会是先尽可能的减小 训练误差,让模型在已有的数据上表现良好,然后再尽可能减小 测试误差 与训练误差之间的差距,这样就会得到一个测试误差较低的模型。

欠拟合和过拟合

上面描述的过程中,会遇到两个问题,过拟合和欠拟合。

针对训练集,如果训练出的模型类似于将每一个训练集的数据映射到其结果上,训练误差几乎为 0,但是这样的网络关注了训练集中的每一个数据的每一个细节,甚至极其特殊的细节,本应该被忽略,却由于过度追求训练误差而被放大了,这是不可取的,这样训练出的网络处于过拟合状态,对新的输入,尤其是包含特殊细节的输入,会导致其结果不够准确,会导致过拟合。

另外一种情况是训练出的网络针对训练集中的特征点训练不充分,没有抓住尽可能多的特点,也会导致网络训练的不够,处于欠拟合状态。

容量

网络中模型节点的参数多少,代表着拟合各种函数的能力,称作 容量,节点越多,所关注的网络的特征就越多,过多会导致过拟合,过少会导致欠拟合,因此控制网络的容量就很重要。

一种控制容量的算法是选择 假设空间,具体的实现就是选择解决方案的函数集。比如线性回归算法将关于其输入的所有线性函数作为假设空间,广义线性回归的假设空间包含多项式函数,而不仅仅是线性函数。在实际的情况中,找到最合适的拟合函数容量比较难,往往是找到一个大致的容量。

image

  • 表示容量:我们可以从哪些函数族中选择拟合函数;
  • 有效容量:有可能小于表示容量,基本达到最初的目标,只找到了一个效果还不错但并非完全完美的拟合函数。

一些概念

  • 奥卡姆剃刀:在同样能够解释已知观测的现象中,应该挑选最简单一个(像不像物理上追求大一统的理论)。
  • VC 维:Vapnic-Chervonenkis Dimension,用来度量容量。如二维假设空间,如果平面上有两个点,分成两类,可能有四种情况;三个点有八种情况;四个点有十四种情况,这样整个平面就分为了相应的部分,无穷的假设点分为了有限的部分。
  • 非参数模型:参数模型学习的函数在观测到新数据前,参数向量的分量个数是有限且固定的,非参数模型没有这些限制。

最近临近回归

线性回归的做法是训练出固定长度的向量作为权重,最近临近算法则不同,而是存储了所有的训练集中的数据,所需要测量的测试点分别与训练集中的点计算距离,认为距离最近的点就和测试点所在同一个类别中,返回同一个回归目标。

训练误差和泛化误差

贝叶斯误差

也称 贝叶斯错误率,应用贝叶斯分类规则分类器的错误率,贝叶斯分类规则在最小分类错误率上是最优的,因此在所有分类问题中,贝叶斯误差是一个分类器对某个类别所能达到的最低的分类错误率。

没有免费午餐定理

在所有可能的数据生成分布上平均后,每个分类算法在未事先观测的点上都有相同的错误率;换一句话说,没有任何一种机器学习算法是适用于所有情况的;再换一句话说,在某些问题上算法 A 比算法 B 更好,则一定有另外一些问题,算法 B 比算法 A 更好。这告诉我们不要去试图找到一个大一统的算法理论,而应该根据实际问题去寻找相应的最优的算法。

正则化

这个问题真的是太复杂了,在本书这种级别的书,在后面有一整章来讨论这个问题,非常重,因此很幸运在这里可以简单的先进行简单了解,在后面的文章中详细介绍。

在上面的过拟合的图中,也在本篇文章的第一个图,通过过拟合的曲线,我们可以想一下究竟是什么样的函数能是这样的曲线,一定是这个函数好多项,其中变量的次数非常高,例如这样子的,当然这是随便一个例子,并不一定完全是这个图的图像:

$$
y(x)=a_1x_1+a_2x_2^2+a_3x_3^3+a_4x_4^4+a_5x_5^5+a_6x_6^6
$$

对于这个还算简单的问题,用这么复杂的函数去拟合,有点过于追求拟合程度了,过犹不及,这不好。怎么办呢,假设后面四项的系数 a 接近于 0,是不是可以后面这些项对于整个函数来说贡献的值就微乎其微了,则这个函数退化为二次函数,这是我们认为拟合程度最好的情况,这就是一种正则化的方法。在后续的文章中还会介绍大量正则化的形式。

总结

欠拟合和过拟合是常见机器学习中的拟合不好的情况,上面介绍了相关内容。