欠拟合、过拟合与正则化

来源知乎

一.训练误差与泛化误差

训练机器学习模型的目的不仅仅是可以描述已有的数据,而且是对未知的新数据也可以做出较好的推测,这种推广到新数据的能力称作泛化(generalization)。

我们称在训练集上的误差为训练误差(training error),而在新的数据上的误差的期望称为泛化误差(generalization error)或测试误差(test error)。通常我们用测试集上的数据对模型进行测试,将其结果近似为泛化误差。

为什么我们只观测了训练集却可以影响测试集上的效果呢?

如果他们是完全随机的无关的分布我们是无法做出这样的推测的,我们通常需要做出对于训练集和测试集的采样过程的假设。训练集和测试集是由某种数据生成分布产生的,通常我们假设其满足独立同分布(independent and identically distributed, 简称i.i.d),即每个数据是相互独立的,而训练集和测试集是又从同一个概率分布中取样出来的。

假设参数固定,那么我们的训练误差和测试误差就应相同。但是实际上,在机器学习模型中,我们的参数不是事先固定的,而是我们通过采样训练集选取了一个仅优化训练集的参数,然后再对测试集采样,所以测试误差常常会大于训练误差。

二.模型容量,欠拟合,过拟合

我们的机器学习模型因此有两个主要目的:

  • 尽量减小训练误差。
  • 尽量减小训练误差和测试误差间的间距。

这两点对应着机器学习模型的两个挑战:欠拟合(underfitting)和过拟合(overfitting)。

欠拟合就是指模型的训练误差过大,过拟合就是指训练误差和测试误差间距过大。

模型是欠拟合还是过拟合是由模型的容量(capacity)决定的。

低容量由于对训练集描述不足造成欠拟合,高容量由于记忆过多训练集信息而不一定对于测试集适用导致过拟合。比如对于线性回归,它仅适合数据都在一条直线附近的情形,容量较小,为提高容量,我们可以引入多次项,比如二次项,可以描述二次曲线,容量较一次多项式要高。对如下图的数据点,一次式容量偏小造成欠拟合,二次式容量适中拟合较好,而九次式容量偏大造成过拟合。

训练误差,测试误差和模型容量的关系可以由下图表示,在容量较小时我们处在欠拟合区,训练误差和测试误差均较大,随着容量增大,训练误差会逐渐减小,但测试误差与训练误差的间距也会逐渐加大,当模型容量超过最适容量后,测试误差不降反增,进入过拟合区:

三.正则化方法

为了减小测试误差与训练误差的差距过大防止过拟合,我们需要正则化方法(regularization),这一方法的主要目的是给模型进行一些修改使其倾向于减小测试误差。

还是以多次回归问题作为例子。假如我们引入一项对权重参数矢量w的正则项使得损失函数变为 :

J(w)=MSE_{(train)}+\lambda w^{T}w。 

\lambda等于零时它和原来的损失函数相同,当 \lambda 越大时第二项造成的影响越大,为了使误差函数更小,则需要使w更小,如使每一个w坐标更小或使w更集中在某些特征上而其他特征上趋于零,我们需要通过调节 \lambda 大小来找到过拟合与欠拟合间合适的平衡点。

例如对于九次多项式拟合,如下图所示,在最左图中当 \lambda 过大时,每一个多次项的w都趋于零,曲线是一条近似直线,造成欠拟合,在最右图中,当 \lambda 趋于零时正则项约为零,对多项式没有造成任何限制,造成过拟合。只有如中间图中选取一个适中的 \lambda 才可使某些项的权重减小,进行比较合适的曲线拟合。

四.超参数与验证集

初学者可能对参数与超参数(hyperparameter)的区别不是很清晰。

用多次项拟合例子来说,参数就是指其中每项的权重w的值,合适的w是通过机器学习得到的,而超参数是我们选取用几次多项式来描述,也可以看做模型容量超参数,另外还有正则项系数 \lambda 取什么值,这些通常是人为设定的。

有些超参数是无法用训练集习得的,例如模型容量超参数,如果仅对训练集来说总会选取更大的模型容量,使得训练误差减小,但会造成过拟合,同样的,对于正则项,仅对训练集学习会使得正则项为零而使训练误差更小,也造成过拟合。

为了解决这个问题,我们需要一个区别于训练集的验证集(validation set)。我们可以将训练集分成两部分,一部分对于固定的超参数得到合适的参数w,而另一部分作为验证集来测试该模型的泛化误差,然后对超参数进行适宜的调整。简单概括就是训练集是为了选取合适的参数,而验证集是为了选取合适的超参数。

五.衡量模型泛化的统计工具

那么我们如何用统计知识来衡量模型的泛化效果,它究竟是欠拟合还是过拟合呢?

我们首先引入点估计(point estimator)的概念,其目的是为了寻找最合适的模型参数,假设我们的真实的模型参数用向量 \theta 表示,我们通常用 \hat{\theta } 表示其点估计。

假设\left \{ x^{(1)} ,x^{(2)} ...,x^{(m)} \right \}是满足独立同分布的m个数据点,定义\hat{\theta }_{m}=g( x^{(1)} ,x^{(2)} ...,x^{(m)}),我们可以定义偏差(bias),bias(\hat{\theta }_{m})=E(\hat{\theta }_{m})-\theta,它代表了对于我们选取的参数与真实参数间的偏差的期望。

假如bias(\hat{\theta }_{m})为0,即E(\hat{\theta }_{m})=\theta,我们就说该点估计是无偏差的。

例如对于高斯分布:

我们通常用数据集上的平均值来作为其真实平均值的点估计,即:

通过如下推导:

我们可知该点估计是无偏差的。

而假如我们对其均方差的点估计采用如下样本方差形式:

由于:

所以 bias(\hat{\sigma}_{m}^{2})=E(\hat{\sigma}_{m}^{2})-{\sigma}^{2}=-\frac{​{\sigma}^{2}}{m},其点估计是有偏差的。

如果我们我们对其均方差的点估计用如下无偏差样本方差形式:

则由于:

除了偏差外我们还可以定义点估计的方差 Var(\hat{\theta }_{m}) ,代表了当我们重新从数据生成分布中取样时点估计期望值的改变大小。这个方差是对于我们采样量有限的情况下,我们对真实值的估计随不同的采样会发生改变的一种度量。直观上讲,对于大多数种类的分布,假如采样量越多,那么我们知道的信息越多,对真实值的估计越准确,其点估计方差越小。例如对于伯努利分布:

其点估计的方差为:

可以看出随采样量m的增大,点估计方差是变小的。

通常我们希望点估计偏差和方差都较小,我们可以获得对真实值的比较好的估计。但如果他们的走向不一样,我们如何选择呢?一种常用做法是利用点估计的均方差:

可以看出MSE结合了偏差和方差两者,为了减小MSE,我们需要找到偏差与方差项的平衡点。当我们用MSE来代表泛化误差时,通常增大模型容量会增大方差而减小偏差,欠拟合、过拟合与模型容量的关系又可以通过点估计偏差和方差用下图表示:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值