林轩田《机器学习基石》(十三)—— Hazard of overfitting

上节课讲了如何解决非线性问题:通过特征变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行分类。我们说这样会增加额外的模型复杂度。今天我们说这个额外的复杂度会造成机器学习过拟合(overfitting)现象。今天讲困难怎么产生的以及如何解决它。

一、什么是过拟合?

先从一个例子出发,我们现在要做一个一维的回归分析,资料中有五个点,然后输出一个实数。

资料:林轩田《机器学习基石》(十三)—— Hazard of overfitting,N = 5

目标函数f:f是一个二次函数(图中为蓝色曲线)

label:林轩田《机器学习基石》(十三)—— Hazard of overfitting,由f产生再加一点点很小的噪音

解决方案1:4次多项式做回归分析,即用四次多项式把x空间中的点转换到z空间,再进行线性回归。

我们知道,四次多项式通过五个点,会有一个唯一解。所以林轩田《机器学习基石》(十三)—— Hazard of overfitting,图中为红色曲线。

林轩田《机器学习基石》(十三)—— Hazard of overfitting

我们发现红色曲线和真实的蓝色曲线一点都不像,实际上的林轩田《机器学习基石》(十三)—— Hazard of overfitting很大,因为除了那五个点,其他未知点的效果都不是很好。

所以林轩田《机器学习基石》(十三)—— Hazard of overfitting很小,而林轩田《机器学习基石》(十三)—— Hazard of overfitting很大,这是一种坏的泛化性。

我们回过头来看一下VC曲线:

林轩田《机器学习基石》(十三)—— Hazard of overfitting

就像上次说的,如果林轩田《机器学习基石》(十三)—— Hazard of overfitting,那么实际上的林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting差距越来越大(林轩田《机器学习基石》(十三)—— Hazard of overfitting很大,林轩田《机器学习基石》(十三)—— Hazard of overfitting很小)

可以看到随着vc维越来越大,林轩田《机器学习基石》(十三)—— Hazard of overfitting越来越小,in-sample error曲线一直下降,model complexity曲线就上升;

所以造成林轩田《机器学习基石》(十三)—— Hazard of overfitting先下后上。

从最好的vc维林轩田《机器学习基石》(十三)—— Hazard of overfitting往右看,林轩田《机器学习基石》(十三)—— Hazard of overfitting一直下降,林轩田《机器学习基石》(十三)—— Hazard of overfitting一直上升。我们看样子是把fitting做好了,但其实过头了(over)。所以林轩田《机器学习基石》(十三)—— Hazard of overfitting变小,林轩田《机器学习基石》(十三)—— Hazard of overfitting变高这个过程叫做overfitting,过拟合。(常见,不容易解决)

从最好的vc维林轩田《机器学习基石》(十三)—— Hazard of overfitting往左看,林轩田《机器学习基石》(十三)—— Hazard of overfitting处于高位,林轩田《机器学习基石》(十三)—— Hazard of overfitting也比较大,我们做的fitting不够好,所以导致林轩田《机器学习基石》(十三)—— Hazard of overfitting也不够好(under),所以叫做underfitting,欠拟合。

给出一个比喻来描述overfitting,把overfitting比作出了车祸,那么我们分析产生的原因:

  • 开太快,油门太重,即使用了太大的vc dimension。
  • 道路崎岖,也就是有太多noise。
  • 对路况不熟悉,在机器学习中就是资料太少。

二、noise与资料

我们从问题出发

资料:林轩田《机器学习基石》(十三)—— Hazard of overfitting(图中为黑色圆圈)

目标函数f:f是一个十次函数(图中为蓝色曲线)

label:林轩田《机器学习基石》(十三)—— Hazard of overfitting,由f产生再加一点点很小的噪音

可以看到由于加了噪音,数据并非全部落在蓝色曲线上

林轩田《机器学习基石》(十三)—— Hazard of overfitting

 

另一个问题:

资料:林轩田《机器学习基石》(十三)—— Hazard of overfitting(图中为黑色圆圈)

目标函数f:f是一个50次函数(图中为蓝色曲线)

label:林轩田《机器学习基石》(十三)—— Hazard of overfitting

此时,无噪音,数据全部落在蓝色曲线上

林轩田《机器学习基石》(十三)—— Hazard of overfitting

我们知道上面两个问题了,现在来看看我们选用的两个模型,一个是2阶多项式林轩田《机器学习基石》(十三)—— Hazard of overfitting,另一个是10阶多项式林轩田《机器学习基石》(十三)—— Hazard of overfitting,分别对上面两个问题进行建模。

对于第一个问题来说,(目标函数f是一个十次多项式)

林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting

首先要明确林轩田《机器学习基石》(十三)—— Hazard of overfitting是在已知样本上的err,是看线与圆圈的重合程度,重合越多,林轩田《机器学习基石》(十三)—— Hazard of overfitting越小。

林轩田《机器学习基石》(十三)—— Hazard of overfitting是在未知样本上的err,是看我们模型的线与真实的线是否相同,模型的线越接近蓝色线,林轩田《机器学习基石》(十三)—— Hazard of overfitting越小。

可以看到,线与圆圈的重合程度方面,红线赢了,在模型的线与真实的线是否相同方面,在图像的左端和右端,红线和蓝线十分的不接近。于是通过计算有:

林轩田《机器学习基石》(十三)—— Hazard of overfitting

虽然10阶模型的林轩田《机器学习基石》(十三)—— Hazard of overfitting比2阶的小,但是它的林轩田《机器学习基石》(十三)—— Hazard of overfitting要比2阶的大得多,而2阶的林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting相差不大,显然地,从二次切换到十次,发生了overfitting。

同样对于另一个高维问题:

林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting

可以看到,线与圆圈的重合程度方面,红线再一次赢了,也就是说10阶模型的林轩田《机器学习基石》(十三)—— Hazard of overfitting比2阶的小;在模型的线与真实的线是否相同方面,红线和蓝线十分的不接近。也就是说林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting非常糟糕。

林轩田《机器学习基石》(十三)—— Hazard of overfitting

但是我们想,比如目标函数是十次的情况,用二阶多项式林轩田《机器学习基石》(十三)—— Hazard of overfitting就是选择了放弃完美解(因为真实f是十次,只有选择十次多项式林轩田《机器学习基石》(十三)—— Hazard of overfitting有可能找到一模一样的或者几乎接近的线)。实际上却常常是“以退为进”,意思是就算你知道真正的f是十次多项式,你也选择一个看起来好的十次多项式作为g,那么最终结果也不一定好。

来看看为什么会这样?

从learning curve来分析一下具体的原因,learning curve描述的是林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting随着数据量N的变化趋势。下图中左边是2阶学习模型的learning curve,右边是10阶学习模型的learning curve。我们首先要认识一个事实:如果你选择我们已知的点靠近一点点,那么在已知err上会小一点点,就是林轩田《机器学习基石》(十三)—— Hazard of overfitting会小一点,在图中林轩田《机器学习基石》(十三)—— Hazard of overfitting的线会往下一点,但是在未知err会远离一点点(因为可能向noise靠近了一点点),林轩田《机器学习基石》(十三)—— Hazard of overfitting会大一点,在图中林轩田《机器学习基石》(十三)—— Hazard of overfitting的线会往上一点。之前讲过有noise的情况的公式,之前讲过d为多项式次数,所以可以发现10阶的偏移量更大(林轩田《机器学习基石》(十三)—— Hazard of overfitting受到noise的影响大)。

林轩田《机器学习基石》(十三)—— Hazard of overfitting

林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting

在左边区域,左右两张图比较,林轩田《机器学习基石》(十三)—— Hazard of overfitting一定是右边的比较低,林轩田《机器学习基石》(十三)—— Hazard of overfitting则是右边比较高,那么在左边区域(资料量不够多的时候),高阶的多项式表现都不会好,都会overfitting。所以资料量不够多的时候,千万不要选择过于复杂的多项式作为g。

上面讲了资料,下面就讲noise。

另一个例子中,目标函数是50阶多项式,且没有加入noise。这种情况下,我们发现仍然是2阶的模型拟合的效果更好一些,明明没有noise,为什么是这样的结果呢?

刚才我们说,对于f是50阶的情况,林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting都做不好,但林轩田《机器学习基石》(十三)—— Hazard of overfitting会稍微好一点。灵魂一问:真的没有noise吗?今天学的事情很复杂,无论林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting都做不好,这个复杂的行为就和noise一样。即复杂度造成了类似noise的影响。下一节会具体讲解这个问题。

三、什么时候要小心overfit可能发生?

我们把产生资料的过程分为两个步骤,一个是用目标函数f,林轩田《机器学习基石》(十三)—— Hazard of overfitting阶多项式,但要注意的是我们是产生真正的这么多阶的多项式,而不是伪装的林轩田《机器学习基石》(十三)—— Hazard of overfitting阶多项式;再加上noise,noise服从高斯分布。接下来我们讨论Gaussian分布的noise强度不一样的时候(林轩田《机器学习基石》(十三)—— Hazard of overfitting),对我们的overfitting的影响是什么?(资料数设置为N),我们现在有三个变数,林轩田《机器学习基石》(十三)—— Hazard of overfitting(影响noise强度)、N、林轩田《机器学习基石》(十三)—— Hazard of overfitting。于是我们研究这三个变数对overfit的影响。

还是之前的两个模型林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting

林轩田《机器学习基石》(十三)—— Hazard of overfitting

林轩田《机器学习基石》(十三)—— Hazard of overfitting林轩田《机器学习基石》(十三)—— Hazard of overfitting,  以及显然有林轩田《机器学习基石》(十三)—— Hazard of overfitting

我们用林轩田《机器学习基石》(十三)—— Hazard of overfitting来度量过拟合的程度。

  • 情况一

下面展示了在林轩田《机器学习基石》(十三)—— Hazard of overfitting固定为20时候,横坐标为样本数量N,纵坐标为噪声水平林轩田《机器学习基石》(十三)—— Hazard of overfitting的图像,图里的颜色代表有多么overfit,越靠近红色,过拟合程度越大,越靠近蓝色,则过拟合没有那么严重。可以发现,好的情况一般发生在N大,noise水平小的情况。

林轩田《机器学习基石》(十三)—— Hazard of overfitting

  • 情况二

下面展示了噪声水平林轩田《机器学习基石》(十三)—— Hazard of overfitting在固定为0.1时候,横坐标为样本数量N,纵坐标为阶数林轩田《机器学习基石》(十三)—— Hazard of overfitting的图像。图里的颜色代表有多么overfit,越靠近红色,过拟合程度越大,越靠近蓝色,则过拟合没有那么严重。大部分情况下,和上面的图比较接近,坏的情况都发生在左上角,好的情况都发生在右下角,也就是说目标越复杂。

林轩田《机器学习基石》(十三)—— Hazard of overfitting

我们把上面情况一中的noise叫做stochastic noise,随机噪声;第二节中我们说了,模型复杂度也是一种噪声,于是把情况二中的这种noise叫做deterministic noise,可以计算出来的噪声。

总之,在给出定以后,我们从上面两个情况来看看发生过拟合的时间点有:

  • 资料太少
  • stochastic noise太多
  • deterministic noise太多(目标函数f很复杂,目标函数一旦很复杂,那么它一定存在某个地方无法被任何一个h很完美的描述,这个地方也就产生了噪音,这些噪音如图中灰色的部分,在实际中也比较常见比如电脑生成伪随机。)
  • vc维太多

林轩田《机器学习基石》(十三)—— Hazard of overfitting

overfitting其实很容易发生。如果教一个小朋友数数字,我们不会从实数的完备性开始讲起,我们只会举一些简单例子。同样,在学hypothesis也不用学太复杂,这样deterministic noise会小一些。

四、如何避免overfitting呢?

之前把overfitting比作出了车祸,我们分析了产生的原因,现在给出解决方法:

  • 油门太重,即使用了太大的vc dimension。解决方法:开慢点,即从简单的模型开始学起。
  • 道路崎岖,也就是有太多noise。解决方法:把这些崎岖的地方搞清楚,即数据清洗。数据提纯(data cleaning/pruning)。
  • 对路况不熟悉,在机器学习中就是资料太少。解决方法:增加路况资料,即现有的资料或对这个问题的了解中产生新的、多的资料(data hinting)。
  • 开太快。解决方法:适时地踩刹车,即添加正则项。
  • 其他。解决方法:时时刻刻看看仪表板,即validation 验证/交叉验证。

本节课主要介绍简单的data cleaning/pruning和data hinting两种方法。

比如对于手写数字问题,如果有人字写得不好看,比如图中左上角,我们看不出它为什么是“5”.若是现在有一个方法,我们可以检测出它不是真的‘5’(比如是不是靠近不同的类,而与相同的类离得远;或者是这个点err很大),这样我们有理由相信这个点是noise,接下来怎么做?

data cleaning:把这个noise的label改过来。

data pruning:把这个noise丢掉。

这就是说如果知道那些点是noise,用上面两个方法做就行,难点是如何找到这个noise(现在还没有比较完美的找法)。

林轩田《机器学习基石》(十三)—— Hazard of overfitting

如果手写字稍微转了转角度,那么这些字也是属于同一个字的。比如现在我们一共就这么多资料,当我们没有更多的资料却想告诉电脑更多的知识,那么我们可以把手上的资料转一转角度,变成新资料,然后再学习。所以,data hinting是针对N不够大的情况,如果没有办法获得更多的训练集,那么data hinting就可以对已知的样本进行简单的处理、变换,从而获得更多的样本。但是加进来的这些资料要有道理,不要和原来的差太远,不然会偏离原来的资料的分布,导致学习效果不好。

总结:

林轩田《机器学习基石》(十三)—— Hazard of overfitting​​​​​​​